Advertisement
Guest User

Untitled

a guest
Jan 11th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 83.87 KB | None | 0 0
  1. From 77f79b8722e1d6d570caba6eda99979392c99ba4 Mon Sep 17 00:00:00 2001
  2. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3. Date: Sat, 5 Jan 2019 02:35:53 +0000
  4. Subject: [PATCH 01/16] config/path: add THREAD_CONTROL directory
  5.  
  6. ---
  7. config/path | 2 ++
  8. 1 file changed, 2 insertions(+)
  9.  
  10. diff --git a/config/path b/config/path
  11. index 1f1080b..c5c116f 100644
  12. --- a/config/path
  13. +++ b/config/path
  14. @@ -29,6 +29,8 @@ if [ -n "$BUILD_SUFFIX" ]; then
  15. BUILD=$BUILD-$BUILD_SUFFIX
  16. fi
  17.  
  18. +THREAD_CONTROL=${BUILD}/.threads
  19. +
  20. TARGET_ADDONS="$TARGET_IMG/$ADDONS/$ADDON_PATH"
  21. ADDON_BUILD="$BUILD/$ADDONS/$1"
  22. STAMPS_NOARCH=.stamps
  23. --
  24. 2.14.1
  25.  
  26.  
  27. From b5296ffc21911eba5b936a4966e4edd4a9c125d1 Mon Sep 17 00:00:00 2001
  28. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  29. Date: Sun, 6 Jan 2019 04:55:48 +0000
  30. Subject: [PATCH 02/16] config/path: stop logging patch progress to stderr when
  31. stdout is fine
  32.  
  33. ---
  34. config/path | 2 +-
  35. 1 file changed, 1 insertion(+), 1 deletion(-)
  36.  
  37. diff --git a/config/path b/config/path
  38. index c5c116f..98b8e91 100644
  39. --- a/config/path
  40. +++ b/config/path
  41. @@ -91,7 +91,7 @@ if [ -z "${SILENT_OUT}" -a -z "${VERBOSE_OUT}" ]; then
  42.  
  43. if [ "$VERBOSE" = yes ]; then
  44. exec 3>&1
  45. - exec 4>&2
  46. + exec 4>&1
  47. else
  48. exec 3>&2
  49. exec 4>/dev/null
  50. --
  51. 2.14.1
  52.  
  53.  
  54. From 1f45470e2b536104e7f65e852453730ab4dd2838 Mon Sep 17 00:00:00 2001
  55. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  56. Date: Sun, 6 Jan 2019 05:43:26 +0000
  57. Subject: [PATCH 03/16] config/path: VERBOSE_OUT/SILENT_OUT - drop export, need
  58. to exec for every parallel process
  59.  
  60. ---
  61. config/path | 22 ++++++++++------------
  62. 1 file changed, 10 insertions(+), 12 deletions(-)
  63.  
  64. diff --git a/config/path b/config/path
  65. index 98b8e91..134f7ca 100644
  66. --- a/config/path
  67. +++ b/config/path
  68. @@ -84,18 +84,16 @@ fi
  69. VERSION_SUFFIX=$TARGET_ARCH
  70.  
  71. # redirect formatted output
  72. -if [ -z "${SILENT_OUT}" -a -z "${VERBOSE_OUT}" ]; then
  73. - export BUILD_INDENT_SIZE=4
  74. - export SILENT_OUT=3
  75. - export VERBOSE_OUT=4
  76. -
  77. - if [ "$VERBOSE" = yes ]; then
  78. - exec 3>&1
  79. - exec 4>&1
  80. - else
  81. - exec 3>&2
  82. - exec 4>/dev/null
  83. - fi
  84. +export BUILD_INDENT_SIZE=4
  85. +SILENT_OUT=3
  86. +VERBOSE_OUT=4
  87. +
  88. +if [ "$VERBOSE" = yes ]; then
  89. + exec 3>&1
  90. + exec 4>&1
  91. +else
  92. + exec 3>&2
  93. + exec 4>/dev/null
  94. fi
  95.  
  96. unset LD_LIBRARY_PATH
  97. --
  98. 2.14.1
  99.  
  100.  
  101. From 1ea843a942f8a675cb2477c2b541d629d4b207f3 Mon Sep 17 00:00:00 2001
  102. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  103. Date: Sat, 5 Jan 2019 02:31:32 +0000
  104. Subject: [PATCH 04/16] config/functions: allow package to be sourced using
  105. path
  106.  
  107. ---
  108. config/functions | 2 +-
  109. 1 file changed, 1 insertion(+), 1 deletion(-)
  110.  
  111. diff --git a/config/functions b/config/functions
  112. index d65763f..e9ef799 100644
  113. --- a/config/functions
  114. +++ b/config/functions
  115. @@ -845,7 +845,7 @@ source_package() {
  116. unset_functions
  117.  
  118. if [ -n "${1}" ]; then
  119. - PKG_DIR="$(get_pkg_directory ${1})"
  120. + [ -f "${1}" ] && PKG_DIR="$(dirname "${1}")" || PKG_DIR="$(get_pkg_directory "${1}")"
  121.  
  122. [ -n "$PKG_DIR" -a -r $PKG_DIR/package.mk ] || die "FAILURE: unable to source package - ${1}/package.mk does not exist"
  123.  
  124. --
  125. 2.14.1
  126.  
  127.  
  128. From 26a0e33af306641c09fdceef4b5cb2c8f7aa93e7 Mon Sep 17 00:00:00 2001
  129. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  130. Date: Sat, 5 Jan 2019 02:34:45 +0000
  131. Subject: [PATCH 05/16] config/functions: add pkg_lock helpers
  132.  
  133. ---
  134. config/functions | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
  135. 1 file changed, 89 insertions(+), 1 deletion(-)
  136.  
  137. diff --git a/config/functions b/config/functions
  138. index e9ef799..000068e 100644
  139. --- a/config/functions
  140. +++ b/config/functions
  141. @@ -1155,7 +1155,7 @@ add_group() {
  142. }
  143.  
  144. # Usage: enable_service <unit> [target]
  145. -enable_service () {
  146. +enable_service() {
  147. local unit="$1"
  148. local unit_dir="/usr/lib/systemd/system"
  149. local target="$2"
  150. @@ -1177,6 +1177,94 @@ enable_service () {
  151. done
  152. }
  153.  
  154. +# Prevent concurrent modifications to a package (unpack) or
  155. +# package:target (install/build).
  156. +#
  157. +# If a package is already locked and the owner is ourselves
  158. +# then assume we already have the required lock.
  159. +pkg_lock() {
  160. + [ -z ${MTJOBID} ] && return 0
  161. +
  162. + local pkg="$1" mode="$2" parent_pkg="$3"
  163. + local this_job="${MTJOBID}"
  164. + local lock_job lock_mode lock_pkg
  165. +
  166. + mkdir -p "${THREAD_CONTROL}/locks"
  167. + exec 99>"${THREAD_CONTROL}/locks/${pkg}.${mode}"
  168. + if ! flock --nonblock --exclusive 99; then
  169. + while [ : ]; do
  170. + read -r lock_job lock_mode lock_pkg <<<$(cat "${THREAD_CONTROL}/locks/${pkg}.${mode}.owner" 2>/dev/null)
  171. + [ -n "${lock_job}" ] && break || sleep 1
  172. + done
  173. +
  174. + if [ ${lock_job} != ${this_job} ]; then
  175. + pkg_lock_msg "${parent_pkg}" "${mode}" "STALLED" "$(printf "waiting on [%02d] %s %s" ${lock_job} "${lock_mode}" "${lock_pkg}")"
  176. + flock --exclusive 99
  177. + fi
  178. + fi
  179. +
  180. + pkg_lock_msg "${pkg}" "${mode}" "LOCKED"
  181. + echo "${this_job} ${mode} ${pkg}" >"${THREAD_CONTROL}/locks/${pkg}.${mode}.owner"
  182. +}
  183. +
  184. +# Log additional information for a locked package.
  185. +pkg_lock_msg() {
  186. + [ -z ${MTJOBID} ] && return 0
  187. +
  188. + local pkg="$1" mode="$2" status="$3" msg="$4"
  189. + local this_job="${MTJOBID}"
  190. +
  191. + if [ -n "${msg}" ]; then
  192. + printf "%s: <%05d> [%02d/%0*d] %-7s %-7s %s (%s)\n" "$(date +%Y-%m-%d\ %H:%M:%S.%N)" $$ ${this_job} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${status}" "${mode}" "${pkg}" "${msg}" >>"${THREAD_CONTROL}/history"
  193. + else
  194. + printf "%s: <%05d> [%02d/%0*d] %-7s %-7s %s\n" "$(date +%Y-%m-%d\ %H:%M:%S.%N)" $$ ${this_job} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${status}" "${mode}" "${pkg}" >>"${THREAD_CONTROL}/history"
  195. + fi
  196. +
  197. + update_scoreboard "${pkg}" "${mode}" "${status}" "${msg}"
  198. +}
  199. +
  200. +update_scoreboard() {
  201. + local pkg="$1" mode="$2" status="$3" msg="$4"
  202. + local line sedline preamble num elapsed
  203. + local boldred boldgreen boldyellow endcolor
  204. +
  205. + (
  206. + flock --exclusive 99
  207. +
  208. + [ -n "${MTJOBID}" ] && sedline=$((MTJOBID + 2)) || sedline=1
  209. +
  210. + num=$(cat "${THREAD_CONTROL}/status" | wc -l)
  211. + while [ ${num} -lt ${sedline} ]; do echo "" >>"${THREAD_CONTROL}/status"; num=$((num + 1)); done
  212. +
  213. + num=$(cat "${THREAD_CONTROL}/progress")
  214. + TZ=UTC0 printf -v elapsed "%(%H:%M:%S)T" $(($(date +%s) - MTBUILDSTART))
  215. + printf -v preamble "%b%s Dashboard - %d of %d steps completed, %s elapsed" "\e[2J\e[0;0H" "${DISTRONAME}" ${num} ${MTMAXJOBS} "${elapsed}"
  216. + printf -v preamble "%-100s %s" "${preamble}" "$(date "+%Y-%m-%d %H:%M:%S")"
  217. +
  218. + # Only update the header if not being called from a worker thread
  219. + if [ -z "${MTJOBID}" ]; then
  220. + sed -e "1s/.*/${preamble}/" -i "${THREAD_CONTROL}/status"
  221. + else
  222. + if [ "${DISABLE_COLORS}" != "yes" ]; then
  223. + boldred="\e[1;31m"
  224. + boldgreen="\e[1;32m"
  225. + boldyellow="\e[1;33m"
  226. + endcolor="\e[0m"
  227. +
  228. + case "${status}" in
  229. + STALLED) color="${boldyellow}";;
  230. + FAILED ) color="${boldred}";;
  231. + *) color="${boldgreen}";;
  232. + esac
  233. + fi
  234. +
  235. + printf -v line "[%02d\/%0*d]: %b%-7s%b %-7s %-30s" ${MTJOBID} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${color}" "${status}" "${endcolor}" "${mode}" "${pkg}"
  236. + [ -n "${msg}" ] && line+=" ${msg//\//\\/}"
  237. + sed -e "1s/.*/${preamble}/;${sedline}s/.*/${line}/" -i "${THREAD_CONTROL}/status"
  238. + fi
  239. + ) 99<"${THREAD_CONTROL}/status"
  240. +}
  241. +
  242. # Use distribution functions if any
  243. if [ -f "distributions/$DISTRO/config/functions" ]; then
  244. . distributions/$DISTRO/config/functions
  245. --
  246. 2.14.1
  247.  
  248.  
  249. From 3dfcb285b3b6fdf7a805dbd380af59e0557f1c70 Mon Sep 17 00:00:00 2001
  250. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  251. Date: Sat, 5 Jan 2019 02:37:33 +0000
  252. Subject: [PATCH 06/16] build system: add parallel build support; use new
  253. "image" package
  254.  
  255. ---
  256. config/multithread | 121 +++++++++
  257. packages/devel/parallel/package.mk | 11 +
  258. packages/virtual/image/package.mk | 44 ++++
  259. scripts/build | 35 ++-
  260. scripts/genpkglist.py | 359 ++++++++++++++++++++++++++
  261. scripts/image | 12 +-
  262. scripts/image_mt | 499 +++++++++++++++++++++++++++++++++++++
  263. scripts/install | 18 +-
  264. scripts/unpack | 28 ++-
  265. 9 files changed, 1093 insertions(+), 34 deletions(-)
  266. create mode 100644 config/multithread
  267. create mode 100644 packages/devel/parallel/package.mk
  268. create mode 100644 packages/virtual/image/package.mk
  269. create mode 100755 scripts/genpkglist.py
  270. create mode 100755 scripts/image_mt
  271.  
  272. diff --git a/config/multithread b/config/multithread
  273. new file mode 100644
  274. index 0000000..6169f24
  275. --- /dev/null
  276. +++ b/config/multithread
  277. @@ -0,0 +1,121 @@
  278. +# SPDX-License-Identifier: GPL-2.0-or-later
  279. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  280. +
  281. +THREADCOUNT=${THREADCOUNT:-100%}
  282. +
  283. +# This function is passed a list of package.mk paths to be processed.
  284. +# Each package.mk is sourced with relevant variables output in JSON format.
  285. +json_worker() {
  286. + local packages="$@"
  287. + local pkgpath hierarchy
  288. +
  289. + exit() { :; }
  290. +
  291. + . config/options ""
  292. +
  293. + for pkgpath in ${packages}; do
  294. + pkgpath="${pkgpath%%@*}"
  295. + source_package "${pkgpath}/package.mk" &>/dev/null
  296. + [[ ${pkgpath} =~ ^${ROOT}/${PACKAGES}/ ]] && hierarchy="global" || hierarchy="local"
  297. +
  298. + if [ -n "$PKG_ARCH" ]; then
  299. + listcontains "$PKG_ARCH" "!$TARGET_ARCH" && continue
  300. + listcontains "$PKG_ARCH" "$TARGET_ARCH" || listcontains "$PKG_ARCH" "any" || continue
  301. + fi
  302. +
  303. + cat <<EOF
  304. + {
  305. + "name": "${PKG_NAME}",
  306. + "hierarchy": "${hierarchy}",
  307. + "section": "${PKG_SECTION}",
  308. + "bootstrap": "${PKG_DEPENDS_BOOTSTRAP}",
  309. + "init": "${PKG_DEPENDS_INIT}",
  310. + "host": "${PKG_DEPENDS_HOST}",
  311. + "target": "${PKG_DEPENDS_TARGET}"
  312. + },
  313. +EOF
  314. + done
  315. +}
  316. +export -f json_worker
  317. +
  318. +# This function is passed the build instruction for a single job.
  319. +# The function will run either "build <package>" or "install <package>".
  320. +# ${slot} is the job slot number, ie. 1-8 when THREADCOUNT=8.
  321. +# ${job} is the sequence within the total number of ${jobs}.
  322. +package_worker() {
  323. + local slot=$1 job=$2 jobs=$3 args="$4"
  324. + local task pkgname result status
  325. +
  326. + export MTJOBID=${slot} MTMAXJOBS=${jobs}
  327. +
  328. + read -r task pkgname <<<$(echo "${args}")
  329. +
  330. + ${SCRIPTS}/${task} ${pkgname} 2>&1
  331. +
  332. + result=$?
  333. +
  334. + [ ${result} -eq 0 ] && status="DONE" || status="FAIL"
  335. +
  336. + (
  337. + flock --exclusive 99
  338. + num=$(($(cat "${THREAD_CONTROL}/progress") + 1))
  339. + echo "${num}" >"${THREAD_CONTROL}/progress"
  340. + printf "[%0*d/%0*d] [%-4s] %-7s %s\n" ${#jobs} ${num} ${#jobs} ${jobs} "${status}" "${task}" "${pkgname}" >&2
  341. + ) 99<"${THREAD_CONTROL}/progress"
  342. +
  343. + if [ ${result} -ne 0 ]; then
  344. + (
  345. + . config/options ""
  346. +
  347. + pkg_lock_msg "${pkgname}" "${task}" "FAILED"
  348. +
  349. + if [ -d "${THREAD_CONTROL}/logs" ]; then
  350. + cat >&2 <<EOF
  351. +$(print_color CLR_ERROR "FAILURE: $SCRIPTS/${task} ${pkgname} has failed!\n")
  352. +The following logs for this failure are available:
  353. + stdout: ${THREAD_CONTROL}/logs/${job}/stdout
  354. + stderr: ${THREAD_CONTROL}/logs/${job}/stderr
  355. +EOF
  356. + fi
  357. + )
  358. + fi
  359. +
  360. + return ${result}
  361. +}
  362. +export -f package_worker
  363. +
  364. +start_multithread_build() {
  365. + local logbuffer maxjobs now
  366. +
  367. + now=$(date +%s)
  368. +
  369. + # init thread control folder
  370. + rm -fr "${THREAD_CONTROL}"
  371. + mkdir -p "${THREAD_CONTROL}"
  372. + echo 0 >"${THREAD_CONTROL}/progress"
  373. + touch "${THREAD_CONTROL}/status"
  374. +
  375. + [ "${THREADCOUNT}" = "0" ] && THREADCOUNT=1
  376. + if [ "${THREADCOUNT}" = "1" -a "${ONELOG,,}" != "no" ] || [ "${ONELOG,,}" = "yes" ]; then
  377. + logbuffer="--ungroup"
  378. + else
  379. + mkdir -p "${THREAD_CONTROL}/logs"
  380. + logbuffer="--group --results ${THREAD_CONTROL}/logs/{#}/"
  381. + fi
  382. +
  383. + cat ${_CACHE_PACKAGE_GLOBAL} ${_CACHE_PACKAGE_LOCAL} | \
  384. + ${TOOLCHAIN}/bin/parallel --plain --no-notice --max-args 30 json_worker | \
  385. + ${SCRIPTS}/genpkglist.py --show-wants --build image > "${THREAD_CONTROL}"/plan
  386. +
  387. + maxjobs=$(cat "${THREAD_CONTROL}"/plan | wc -l)
  388. +
  389. + cat "${THREAD_CONTROL}"/plan | awk '{print $1 " " $2}' | \
  390. + SCRIPTS="${SCRIPTS}" THREAD_CONTROL="${THREAD_CONTROL}" MTBUILDSTART=${now} ${TOOLCHAIN}/bin/parallel \
  391. + --plain --no-notice --max-procs ${THREADCOUNT} --joblog="${THREAD_CONTROL}/joblog" ${logbuffer} --halt now,fail=1 --plus \
  392. + package_worker {%} {#} {##} {}
  393. + result=$?
  394. +
  395. + MTJOBID= MTMAXJOBS=${maxjobs} MTBUILDSTART=${now} update_scoreboard
  396. +
  397. + return ${result}
  398. +}
  399. diff --git a/packages/devel/parallel/package.mk b/packages/devel/parallel/package.mk
  400. new file mode 100644
  401. index 0000000..99e28ea
  402. --- /dev/null
  403. +++ b/packages/devel/parallel/package.mk
  404. @@ -0,0 +1,11 @@
  405. +# SPDX-License-Identifier: GPL-2.0-or-later
  406. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  407. +
  408. +PKG_NAME="parallel"
  409. +PKG_VERSION="20181222"
  410. +PKG_SHA256="058c9f7cf599652aef5b54cf5c95c9a5b6d57d59ce4deebebf7938f7be4da369"
  411. +PKG_LICENSE="GPLv3"
  412. +PKG_SITE="https://www.gnu.org/software/parallel/"
  413. +PKG_URL="http://ftpmirror.gnu.org/parallel/$PKG_NAME-$PKG_VERSION.tar.bz2"
  414. +PKG_DEPENDS_HOST=""
  415. +PKG_LONGDESC="GNU parallel is a shell tool for executing jobs in parallel using one or more computers."
  416. diff --git a/packages/virtual/image/package.mk b/packages/virtual/image/package.mk
  417. new file mode 100644
  418. index 0000000..0ccc00b
  419. --- /dev/null
  420. +++ b/packages/virtual/image/package.mk
  421. @@ -0,0 +1,44 @@
  422. +# SPDX-License-Identifier: GPL-2.0-or-later
  423. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  424. +
  425. +PKG_NAME="image"
  426. +PKG_LICENSE="GPL"
  427. +PKG_SITE="https://libreelec.tv"
  428. +PKG_DEPENDS_TARGET="toolchain squashfs:host dosfstools:host fakeroot:host kmod:host mtools:host populatefs:host libc gcc linux linux-drivers linux-firmware ${BOOTLOADER} busybox util-linux corefonts network misc-packages debug"
  429. +PKG_SECTION="virtual"
  430. +PKG_LONGDESC="Root package used to build cnd create complete image"
  431. +
  432. +# Graphic support
  433. +[ ! "$DISPLAYSERVER" = "no" ] && PKG_DEPENDS_TARGET+=" $DISPLAYSERVER"
  434. +
  435. +# Multimedia support
  436. +[ ! "$MEDIACENTER" = "no" ] && PKG_DEPENDS_TARGET+=" mediacenter"
  437. +
  438. +# Sound support
  439. +[ "$ALSA_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" alsa"
  440. +
  441. +# Automounter support
  442. +[ "$UDEVIL" = "yes" ] && PKG_DEPENDS_TARGET+=" udevil"
  443. +
  444. +# EXFAT support
  445. +[ "$EXFAT" = "yes" ] && PKG_DEPENDS_TARGET+=" fuse-exfat"
  446. +
  447. +# NTFS 3G support
  448. +[ "$NTFS3G" = "yes" ] && PKG_DEPENDS_TARGET+=" ntfs-3g_ntfsprogs"
  449. +
  450. +# Remote support
  451. +[ "$REMOTE_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" remote"
  452. +
  453. +# Virtual image creation support
  454. +[ "$PROJECT" = "Generic" ] && PKG_DEPENDS_TARGET+=" virtual"
  455. +
  456. +# Installer support
  457. +[ "$INSTALLER_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" installer"
  458. +
  459. +# Devtools... (not for Release)
  460. +[ "$TESTING" = "yes" ] && PKG_DEPENDS_TARGET+=" testing"
  461. +
  462. +# OEM packages
  463. +[ "$OEM_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" oem"
  464. +
  465. +true
  466. diff --git a/scripts/build b/scripts/build
  467. index 9032474..44388c9 100755
  468. --- a/scripts/build
  469. +++ b/scripts/build
  470. @@ -7,7 +7,7 @@
  471. . config/options "$1"
  472.  
  473. if [ -z "$1" ]; then
  474. - die "usage: $0 package_name[:<host|target|init|bootstrap>]"
  475. + die "usage: $0 package_name[:<host|target|init|bootstrap>] [parent_pkg]"
  476. fi
  477.  
  478. if [ "$1" = "--all" ]; then
  479. @@ -32,10 +32,14 @@ if [ "${1//:/}" != "${1}" ]; then
  480. PACKAGE_NAME="${1%:*}"
  481. TARGET="${1#*:}"
  482. else
  483. - PACKAGE_NAME=$1
  484. + PACKAGE_NAME="${1}"
  485. TARGET=
  486. fi
  487. TARGET="${TARGET:-target}"
  488. +PARENT_PKG="${2:-${PKG_NAME}:${TARGET}}"
  489. +
  490. +# virtual packages are not built, so no need to lock
  491. +[ "$PKG_SECTION" != "virtual" ] && pkg_lock "${PACKAGE_NAME}:${TARGET}" "build" "${PARENT_PKG}"
  492.  
  493. mkdir -p $STAMPS/$PACKAGE_NAME
  494. STAMP=$STAMPS/$PACKAGE_NAME/build_$TARGET
  495. @@ -46,10 +50,11 @@ if [ -f $STAMP ]; then
  496. rm -f $STAMP
  497. elif [ ! "$BUILD_WITH_DEBUG" = "$STAMP_BUILD_WITH_DEBUG" ]; then
  498. rm -f $STAMP
  499. - elif [ "$1" = "u-boot" -a ! "$UBOOT_SYSTEM" = "$STAMP_UBOOT_SYSTEM" ]; then
  500. + elif [ "${PKG_NAME}" = "u-boot" -a ! "$UBOOT_SYSTEM" = "$STAMP_UBOOT_SYSTEM" ]; then
  501. rm -f $STAMP
  502. else
  503. # stamp matched: already built, do nothing
  504. + [ "$PKG_SECTION" != "virtual" ] && pkg_lock_msg "${PKG_NAME}:${TARGET}" "build" "UNLOCK" "already built"
  505. exit 0
  506. fi
  507. fi
  508. @@ -65,16 +70,9 @@ case "$TARGET" in
  509. "bootstrap") _pkg_depends="$PKG_DEPENDS_BOOTSTRAP";;
  510. esac
  511. for p in $_pkg_depends; do
  512. - $SCRIPTS/build $p
  513. + $SCRIPTS/build "${p}" "${PARENT_PKG}"
  514. done
  515.  
  516. -# build this package
  517. -if [ "${BUILD_WITH_DEBUG}" = "yes" ]; then
  518. - build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})") [DEBUG]" "indent"
  519. -else
  520. - build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})")" "indent"
  521. -fi
  522. -
  523. # virtual packages are not built as they only contain dependencies, so dont go further here
  524. if [ "$PKG_SECTION" = "virtual" ]; then
  525. PKG_DEEPHASH=$(calculate_stamp)
  526. @@ -85,6 +83,15 @@ if [ "$PKG_SECTION" = "virtual" ]; then
  527. exit 0
  528. fi
  529.  
  530. +# build this package
  531. +if [ "${BUILD_WITH_DEBUG}" = "yes" ]; then
  532. + build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})") [DEBUG]" "indent"
  533. +else
  534. + build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})")" "indent"
  535. +fi
  536. +
  537. +pkg_lock_msg "${PKG_NAME}:${TARGET}" "build" "RUNNING"
  538. +
  539. setup_toolchain $TARGET
  540.  
  541. # configure install directory
  542. @@ -224,7 +231,7 @@ if [ -f "$PKG_CONFIGURE_SCRIPT" -o -f "$PKG_CMAKE_SCRIPT" -o -f "$PKG_MESON_SCRI
  543. mkdir -p "$PKG_REAL_BUILD"
  544. cd "$PKG_REAL_BUILD"
  545.  
  546. - MESON_CONF="$PKG_REAL_BUILD/meson.conf"
  547. + MESON_CONF="$PKG_REAL_BUILD/${TARGET}.meson.conf"
  548. fi
  549.  
  550. # configure
  551. @@ -449,6 +456,8 @@ PKG_DEEPHASH=$(calculate_stamp)
  552. for i in PKG_NAME PKG_DEEPHASH BUILD_WITH_DEBUG; do
  553. echo "STAMP_$i=\"${!i}\"" >> $STAMP
  554. done
  555. -if [ "$1" = "u-boot" ]; then
  556. +if [ "${PKG_NAME}" = "u-boot" ]; then
  557. echo "STAMP_UBOOT_SYSTEM=\"${UBOOT_SYSTEM}\"" >> $STAMP
  558. fi
  559. +
  560. +pkg_lock_msg "${PACKAGE_NAME}:${TARGET}" "build" "UNLOCK" "built"
  561. diff --git a/scripts/genpkglist.py b/scripts/genpkglist.py
  562. new file mode 100755
  563. index 0000000..52389d4
  564. --- /dev/null
  565. +++ b/scripts/genpkglist.py
  566. @@ -0,0 +1,359 @@
  567. +#!/usr/bin/env python
  568. +# -*- coding: utf-8 -*-
  569. +
  570. +# SPDX-License-Identifier: GPL-2.0-or-later
  571. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  572. +
  573. +from __future__ import print_function
  574. +import sys, os, codecs, json, argparse, re
  575. +
  576. +ROOT_PKG = "__root__"
  577. +
  578. +class LibreELEC_Package:
  579. + def __init__(self, name, section):
  580. + self.name = name
  581. + self.section = section
  582. + self.deps = {"bootstrap": [],
  583. + "init": [],
  584. + "host": [],
  585. + "target": []}
  586. + self.wants = []
  587. + self.wantedby = []
  588. +
  589. + def __repr__(self):
  590. + s = "%-9s: %s" % ("name", self.name)
  591. + s = "%s\n%-9s: %s" % (s, "section", self.section)
  592. +
  593. + for t in self.deps:
  594. + s = "%s\n%-9s: %s" % (s, t, self.deps[t])
  595. +
  596. + s = "%s\n%-9s: %s" % (s, "NEEDS", self.wants)
  597. + s = "%s\n%-9s: %s" % (s, "WANTED BY", self.wantedby)
  598. +
  599. + return s
  600. +
  601. + def addDependencies(self, target, packages):
  602. + for d in " ".join(packages.split()).split():
  603. + self.deps[target].append(d)
  604. + name = d.split(":")[0]
  605. + if name not in self.wants and name != self.name:
  606. + self.wants.append(name)
  607. +
  608. + def delDependency(self, target, package):
  609. + if package in self.deps[target]:
  610. + self.deps[target].remove(package)
  611. + name = package.split(":")[0]
  612. + if name in self.wants:
  613. + self.wants.remove(name)
  614. +
  615. + def addReference(self, package):
  616. + name = package.split(":")[0]
  617. + if name not in self.wantedby:
  618. + self.wantedby.append(name)
  619. +
  620. + def delReference(self, package):
  621. + name = package.split(":")[0]
  622. + if name in self.wantedby:
  623. + self.wantedby.remove(name)
  624. +
  625. + def isReferenced(self):
  626. + return False if self.wants == [] else True
  627. +
  628. + def isWanted(self):
  629. + return False if self.wantedby == [] else True
  630. +
  631. + def references(self, package):
  632. + return package in self.wants
  633. +
  634. +# Reference material:
  635. +# https://www.electricmonk.nl/docs/dependency_resolving_algorithm/dependency_resolving_algorithm.html
  636. +class Node:
  637. + def __init__(self, name, target, section):
  638. + self.name = name
  639. + self.target = target
  640. + self.section = section
  641. + self.fqname = "%s:%s" % (name, target)
  642. + self.edges = []
  643. +
  644. + def append(self, node):
  645. + # Add the node itself
  646. + if node not in self.edges:
  647. + self.edges.append(node)
  648. +
  649. + # As well as it's edges
  650. + for e in node.edges:
  651. + if e not in self.edges:
  652. + self.edges.append(e)
  653. +
  654. + # Return True if the dependencies of the specified node are met by this node
  655. + def satisfies(self, node):
  656. + for e in node.edges:
  657. + if e not in self.edges:
  658. + return False
  659. + return True
  660. +
  661. + def __repr__(self):
  662. + s = "%-9s: %s" % ("name", self.name)
  663. + s = "%s\n%-9s: %s" % (s, "target", self.target)
  664. + s = "%s\n%-9s: %s" % (s, "fqname", self.fqname)
  665. + s = "%s\n%-9s: %s" % (s, "common", self.commonName())
  666. + s = "%s\n%-9s: %s" % (s, "section", self.section)
  667. +
  668. + for e in self.edges:
  669. + s = "%s\nEDGE: %s" % (s, e.fqname)
  670. +
  671. + return s
  672. +
  673. + def commonName(self):
  674. + return self.name if self.target == "target" else "%s:%s" % (self.name, self.target)
  675. +
  676. + def addEdge(self, node):
  677. + self.edges.append(node)
  678. +
  679. +def eprint(*args, **kwargs):
  680. + print(*args, file=sys.stderr, **kwargs)
  681. +
  682. +# Read a JSON list of all possible packages from stdin
  683. +def loadPackages():
  684. + jdata = json.loads("[%s]" % sys.stdin.read().replace('\n','')[:-1])
  685. +
  686. + map = {}
  687. +
  688. + # Load "global" packages first
  689. + for pkg in jdata:
  690. + if pkg["hierarchy"] == "global":
  691. + map[pkg["name"]] = initPackage(pkg)
  692. +
  693. + # Then the "local" packages, as these will replace any matching "global" packages
  694. + for pkg in jdata:
  695. + if pkg["hierarchy"] == "local":
  696. + map[pkg["name"]] = initPackage(pkg)
  697. +
  698. + return map
  699. +
  700. +# Create a fully formed LibreELEC_Package object
  701. +def initPackage(package):
  702. + pkg = LibreELEC_Package(package["name"], package["section"])
  703. +
  704. + for t in ["bootstrap", "init", "host", "target"]:
  705. + pkg.addDependencies(t, package[t])
  706. +
  707. + return pkg
  708. +
  709. +# Split name:target into components
  710. +def split_package(name):
  711. + parts = name.split(":")
  712. + pn = parts[0]
  713. + pt = parts[1] if len(parts) != 1 else "target"
  714. + return (pn, pt)
  715. +
  716. +# Return a list of packages of the specified type
  717. +def get_packages_by_target(target, list):
  718. + newlist = []
  719. +
  720. + for p in list:
  721. + (pn, pt) = split_package(p)
  722. + if target in ["target", "init"] and pt in ["target", "init"]:
  723. + newlist.append(p)
  724. + elif target in ["bootstrap", "host"] and pt in ["bootstrap", "host"]:
  725. + newlist.append(p)
  726. +
  727. + return newlist
  728. +
  729. +# For the specified node, scan the list and locate the first item that meets the node dependencies
  730. +def findbestpos(node, list):
  731. + i = 0
  732. + pos = -1
  733. + for n in list:
  734. + if n.satisfies(node):
  735. + pos = i
  736. + break
  737. + i += 1
  738. +
  739. + return pos
  740. +
  741. +# Resolve dependencies for a node
  742. +def dep_resolve(node, resolved, unresolved, noreorder):
  743. + unresolved.append(node)
  744. + for edge in node.edges:
  745. + if edge not in resolved:
  746. + if edge in unresolved:
  747. + raise Exception('Circular reference detected: %s -> %s\nRemove %s from %s package.mk::PKG_DEPENDS_%s' % \
  748. + (node.fqname, edge.commonName(), edge.commonName(), node.name, node.target.upper()))
  749. + dep_resolve(edge, resolved, unresolved, noreorder)
  750. + if node not in resolved:
  751. + pos = -1 if noreorder else findbestpos(node, resolved)
  752. + if pos != -1:
  753. + resolved.insert(pos, node)
  754. + else:
  755. + resolved.append(node)
  756. + unresolved.remove(node)
  757. +
  758. +
  759. +# Return a list of build steps for the trigger packages
  760. +def get_build_steps(args, nodes, trigger_pkgs, built_pkgs):
  761. + resolved = []
  762. + unresolved = []
  763. + for pkg in [x for x in trigger_pkgs if x]:
  764. + if pkg.find(":") == -1:
  765. + pkg = "%s:target" % pkg
  766. +
  767. + if pkg not in nodes:
  768. + raise Exception("Not a valid build trigger package: %s" % pkg)
  769. +
  770. + dep_resolve(nodes[pkg], resolved, unresolved, args.no_reorder)
  771. +
  772. + # Abort if any references remain unresolved
  773. + if unresolved != []:
  774. + eprint("The following dependencies have not been resolved:")
  775. + for dep in unresolved:
  776. + eprint(" %s" % dep)
  777. + raise("Unresolved references")
  778. +
  779. + # Output list of resolved dependencies
  780. + for pkg in resolved:
  781. + if pkg.fqname not in built_pkgs:
  782. + built_pkgs.append(pkg.fqname)
  783. + task = "build" if pkg.fqname.endswith(":host") else "install"
  784. + yield(task, pkg.fqname)
  785. +
  786. +# Reduce the complete list of packages to a map of those packages that will
  787. +# be needed for the build.
  788. +def processPackages(args, packages, build):
  789. +
  790. + # Add dummy package to ensure build/install dependencies are not culled
  791. + pkg = {
  792. + "name": ROOT_PKG,
  793. + "section": "virtual",
  794. + "hierarchy": "global",
  795. + "bootstrap": "",
  796. + "init": "",
  797. + "host": " ".join(get_packages_by_target("host", build)),
  798. + "target": " ".join(get_packages_by_target("target", build))
  799. + }
  800. + packages[pkg["name"]] = initPackage(pkg)
  801. +
  802. + # Resolve reverse references that we can use to ignore unreferenced packages
  803. + for pkgname in packages:
  804. + for opkgname in packages:
  805. + opkg = packages[opkgname]
  806. + if opkg.references(pkgname):
  807. + if pkgname in packages:
  808. + packages[pkgname].addReference(opkgname)
  809. +
  810. + # Identify unused packages
  811. + while True:
  812. + changed = False
  813. + for pkgname in packages:
  814. + pkg = packages[pkgname]
  815. + if pkg.isWanted():
  816. + for opkgname in pkg.wantedby:
  817. + if opkgname != ROOT_PKG:
  818. + if not packages[opkgname].isWanted():
  819. + pkg.delReference(opkgname)
  820. + changed = True
  821. + if not changed:
  822. + break
  823. +
  824. + # Create a new map of "needed" packages
  825. + needed_map = {}
  826. + for pkgname in packages:
  827. + pkg = packages[pkgname]
  828. + if pkg.isWanted() or pkgname == ROOT_PKG:
  829. + needed_map[pkgname] = pkg
  830. +
  831. + # Validate package dependency references
  832. + for pkgname in needed_map:
  833. + pkg = needed_map[pkgname]
  834. + for t in pkg.deps:
  835. + for d in pkg.deps[t]:
  836. + if split_package(d)[0] not in needed_map:
  837. + msg = 'Invalid package reference: dependency %s in package %s::PKG_DEPENDS_%s is not valid' % (d, pkgname, t.upper())
  838. + if args.warn_invalid:
  839. + eprint("WARNING: %s" % msg)
  840. + else:
  841. + raise Exception(msg)
  842. +
  843. + node_map = {}
  844. +
  845. + # Convert all packages to target-specific nodes
  846. + for pkgname in needed_map:
  847. + pkg = needed_map[pkgname]
  848. + for target in pkg.deps:
  849. + if pkg.deps[target]:
  850. + node = Node(pkgname, target, pkg.section)
  851. + node_map[node.fqname] = node
  852. +
  853. + # Ensure all referenced dependencies exist as a basic node
  854. + for pkgname in needed_map:
  855. + pkg = needed_map[pkgname]
  856. + for target in pkg.deps:
  857. + for dep in pkg.deps[target]:
  858. + dfq = dep if dep.find(":") != -1 else "%s:target" % dep
  859. + if dfq not in node_map:
  860. + dpkg = packages[split_package(dfq)[0]]
  861. + node_map[dfq] = Node(split_package(dfq)[0], split_package(dfq)[1], dpkg.section)
  862. +
  863. + # To each target-specific node, add the correspnding
  864. + # target-specific dependency nodes ("edges")
  865. + for name in node_map:
  866. + node = node_map[name]
  867. + if node.name not in needed_map:
  868. + if args.warn_invalid:
  869. + continue
  870. + else:
  871. + raise Exception("Invalid package, package name cannot found: %s" % node.name)
  872. + for dep in needed_map[node.name].deps[node.target]:
  873. + dfq = dep if dep.find(":") != -1 else "%s:target" % dep
  874. + node.addEdge(node_map[dfq])
  875. +
  876. + return node_map
  877. +
  878. +#---------------------------------------------
  879. +parser = argparse.ArgumentParser(description="Generate package dependency list for the requested build/install packages. \
  880. + Package data will be read from stdin in JSON format.", \
  881. + formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=25,width=90))
  882. +
  883. +parser.add_argument("-b", "--build", nargs="+", metavar="PACKAGE", required=True, \
  884. + help="Space-separated list of build trigger packages, either for host or target. Required property - specify at least one package.")
  885. +
  886. +parser.add_argument("--warn-invalid", action="store_true", \
  887. + help="Warn about invalid/missing dependency packages, perhaps excluded by a PKG_ARCH incompatability. Default is to abort.")
  888. +
  889. +parser.add_argument("--no-reorder", action="store_true", \
  890. + help="Do not resequence steps based on dependencies. Default is to resequence.")
  891. +
  892. +parser.add_argument("--show-wants", action="store_true", \
  893. + help="Output \"wants\" dependencies for each step.")
  894. +
  895. +args = parser.parse_args()
  896. +
  897. +ALL_PACKAGES = loadPackages()
  898. +
  899. +loaded = len(ALL_PACKAGES)
  900. +
  901. +REQUIRED_PKGS = processPackages(args, ALL_PACKAGES, args.build)
  902. +
  903. +# Output list of packages to build/install
  904. +built_pkgs = []
  905. +steps = []
  906. +
  907. +for step in get_build_steps(args, REQUIRED_PKGS, args.build, built_pkgs):
  908. + steps.append(step)
  909. +
  910. +eprint("Packages loaded : %d" % loaded)
  911. +eprint("Build trigger(s): %d [%s]" % (len(args.build), " ".join(args.build)))
  912. +eprint("Package steps : %d" % len(steps))
  913. +eprint("")
  914. +
  915. +# Output build/install steps
  916. +if args.show_wants:
  917. + for step in steps:
  918. + wants = []
  919. + node = (REQUIRED_PKGS[step[1]])
  920. + for e in node.edges:
  921. + wants.append(e.fqname)
  922. + print("%-7s %-25s (wants: %s)" % (step[0], step[1], ", ".join(wants)))
  923. +else:
  924. + for step in steps:
  925. + print("%-7s %s" % (step[0], step[1]))
  926. diff --git a/scripts/image b/scripts/image
  927. index c164aa0..ea126e8 100755
  928. --- a/scripts/image
  929. +++ b/scripts/image
  930. @@ -97,14 +97,14 @@ mkdir -p $INSTALL
  931. for directory in etc dev proc run sys tmp usr var flash storage; do
  932. mkdir -p $INSTALL/$directory
  933. done
  934. -ln -sf /var/media $INSTALL/media
  935. -ln -sf /usr/lib $INSTALL/lib
  936. -ln -sf /usr/bin $INSTALL/bin
  937. -ln -sf /usr/sbin $INSTALL/sbin
  938. +ln -sfn /var/media $INSTALL/media
  939. +ln -sfn /usr/lib $INSTALL/lib
  940. +ln -sfn /usr/bin $INSTALL/bin
  941. +ln -sfn /usr/sbin $INSTALL/sbin
  942.  
  943. if [ "$TARGET_ARCH" = "x86_64" ]; then
  944. - ln -s /usr/lib $INSTALL/lib64
  945. - ln -s /usr/lib $INSTALL/usr/lib64
  946. + ln -sfn /usr/lib $INSTALL/lib64
  947. + ln -sfn /usr/lib $INSTALL/usr/lib64
  948. fi
  949.  
  950. echo "$TARGET_VERSION" > $INSTALL/etc/release
  951. diff --git a/scripts/image_mt b/scripts/image_mt
  952. new file mode 100755
  953. index 0000000..a0d4579
  954. --- /dev/null
  955. +++ b/scripts/image_mt
  956. @@ -0,0 +1,499 @@
  957. +#!/bin/bash
  958. +
  959. +# SPDX-License-Identifier: GPL-2.0-or-later
  960. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  961. +
  962. +unset _CACHE_PACKAGE_LOCAL _CACHE_PACKAGE_GLOBAL _DEBUG_DEPENDS_LIST _DEBUG_PACKAGE_LIST
  963. +
  964. +. config/options ""
  965. +. config/multithread
  966. +. config/show_config
  967. +
  968. +show_config
  969. +save_build_config
  970. +
  971. +# Setup both toolchain cmake configs to avoid potentially racy behaviour later,
  972. +# using a fork as we don't want the exports at this stage.
  973. +for t in host target; do
  974. + ( setup_toolchain ${t} )
  975. +done
  976. +
  977. +if [ -n "$CUSTOM_GIT_HASH" ]; then
  978. + GIT_HASH="$CUSTOM_GIT_HASH"
  979. +else
  980. + GIT_HASH=$(git rev-parse HEAD)
  981. +fi
  982. +
  983. +if [ "$LIBREELEC_VERSION" = "devel" ]; then
  984. + GIT_ABBREV=${GIT_HASH:0:7}
  985. + DEVEL_VERSION=$LIBREELEC_VERSION
  986. + case "$BUILD_PERIODIC" in
  987. + nightly) LIBREELEC_VERSION=nightly-$(date +%Y%m%d)-$GIT_ABBREV;;
  988. + daily) LIBREELEC_VERSION=daily-$(date +%Y%j)-$GIT_ABBREV;;
  989. + weekly) LIBREELEC_VERSION=weekly-$(date +%G%V)-$GIT_ABBREV;;
  990. + monthly) LIBREELEC_VERSION=monthly-$(date +%Y%m)-$GIT_ABBREV;;
  991. + *) LIBREELEC_VERSION=devel-$(date +%Y%m%d%H%M%S)-$GIT_ABBREV;;
  992. + esac
  993. +fi
  994. +
  995. +# Get origin url, fix git:// and git@github.com: urls if necessary
  996. +ORIGIN_URL="$(git remote -v | awk '$1 == "origin" { print $2 }' | head -1 | sed 's#\.git$##;s#^git:#https:#;s#^git@github\.com:#https://github.com/#')"
  997. +
  998. +[ "${BUILDER_NAME,,}" = "official" ] && BUILDER_NAME=
  999. +if [ "$OFFICIAL" = "yes" ]; then
  1000. + LIBREELEC_BUILD="official"
  1001. +else
  1002. + if [ -n "$BUILDER_NAME" ]; then
  1003. + LIBREELEC_BUILD="$BUILDER_NAME"
  1004. + else
  1005. + LIBREELEC_BUILD="community"
  1006. + fi
  1007. +fi
  1008. +
  1009. +if [ -n "$CUSTOM_VERSION" ]; then
  1010. + LIBREELEC_VERSION="$CUSTOM_VERSION"
  1011. +fi
  1012. +
  1013. +LIBREELEC_ARCH="${DEVICE:-$PROJECT}.$TARGET_ARCH"
  1014. +TARGET_VERSION="$LIBREELEC_ARCH-$LIBREELEC_VERSION"
  1015. +
  1016. +if [ -n "$CUSTOM_IMAGE_NAME" ]; then
  1017. + IMAGE_NAME="$CUSTOM_IMAGE_NAME"
  1018. +else
  1019. + if [ "$DEVEL_VERSION" = "devel" ]; then
  1020. + IMAGE_NAME="$DISTRONAME-$LIBREELEC_ARCH-$OS_VERSION-$LIBREELEC_VERSION"
  1021. + else
  1022. + IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
  1023. + fi
  1024. +
  1025. + if [ -n "$UBOOT_SYSTEM" ] && [ "$UBOOT_SYSTEM" != "${DEVICE:-$PROJECT}" ]; then
  1026. + IMAGE_NAME="$IMAGE_NAME-$UBOOT_SYSTEM"
  1027. + fi
  1028. +fi
  1029. +
  1030. +if [ -n "$IMAGE_SUFFIX" ]; then
  1031. + IMAGE_NAME="$IMAGE_NAME-$IMAGE_SUFFIX"
  1032. +fi
  1033. +
  1034. +echo "$IMAGE_NAME" > $BUILD/BUILD_FILENAME
  1035. +
  1036. +# Setup fakeroot
  1037. +rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist
  1038. +touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT
  1039. +chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable
  1040. +echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT
  1041. +
  1042. +# Clean old install dirs
  1043. +rm -rf $INSTALL
  1044. +rm -rf $STAMPS_INSTALL
  1045. +mkdir -p $INSTALL
  1046. +
  1047. +# Bootstrap the parallel package
  1048. +$SCRIPTS/build parallel:host 2>&1
  1049. +
  1050. +# Build image contents
  1051. +start_multithread_build || die "Parallel build failure - see log for details."
  1052. +
  1053. +echo "Successful build, creating image..." >&2
  1054. +
  1055. +# Create base layout of LibreELEC read-only file system
  1056. +for directory in etc dev proc run sys tmp usr var flash storage; do
  1057. + mkdir -p $INSTALL/$directory
  1058. +done
  1059. +ln -sf /var/media $INSTALL/media
  1060. +ln -sf /usr/lib $INSTALL/lib
  1061. +ln -sf /usr/bin $INSTALL/bin
  1062. +ln -sf /usr/sbin $INSTALL/sbin
  1063. +
  1064. +if [ "$TARGET_ARCH" = "x86_64" ]; then
  1065. + ln -s /usr/lib $INSTALL/lib64
  1066. + ln -s /usr/lib $INSTALL/usr/lib64
  1067. +fi
  1068. +
  1069. +echo "$TARGET_VERSION" > $INSTALL/etc/release
  1070. +
  1071. +# Create /etc/os-release
  1072. +echo -e "NAME=\"$DISTRONAME\"" > $INSTALL/etc/os-release
  1073. +echo -e "VERSION=\"$LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release
  1074. +echo -e "ID=\"libreelec\"" >> $INSTALL/etc/os-release
  1075. +echo -e "VERSION_ID=\"$OS_VERSION\"" >> $INSTALL/etc/os-release
  1076. +echo -e "PRETTY_NAME=\"$DISTRONAME ($LIBREELEC_BUILD): $LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release
  1077. +echo -e "HOME_URL=\"https://libreelec.tv\"" >> $INSTALL/etc/os-release
  1078. +echo -e "BUG_REPORT_URL=\"$ORIGIN_URL\"" >> $INSTALL/etc/os-release
  1079. +echo -e "BUILD_ID=\"$GIT_HASH\"" >> $INSTALL/etc/os-release
  1080. +echo -e "OPENELEC_ARCH=\"$LIBREELEC_ARCH\"" >> $INSTALL/etc/os-release
  1081. +echo -e "LIBREELEC_ARCH=\"$LIBREELEC_ARCH\"" >> $INSTALL/etc/os-release
  1082. +echo -e "LIBREELEC_BUILD=\"$LIBREELEC_BUILD\"" >> $INSTALL/etc/os-release
  1083. +echo -e "LIBREELEC_PROJECT=\"$PROJECT\"" >> $INSTALL/etc/os-release
  1084. +[ -n "$DEVICE" ] && echo -e "LIBREELEC_DEVICE=\"$DEVICE\"" >> $INSTALL/etc/os-release
  1085. +[ -n "$BUILDER_NAME" ] && echo -e "BUILDER_NAME=\"$BUILDER_NAME\"" >> $INSTALL/etc/os-release
  1086. +[ -n "$BUILDER_VERSION" ] && echo -e "BUILDER_VERSION=\"$BUILDER_VERSION\"" >> $INSTALL/etc/os-release
  1087. +
  1088. +# Create /etc/issue
  1089. +echo "$GREETING0" > $INSTALL/etc/issue
  1090. +echo "$GREETING1" >> $INSTALL/etc/issue
  1091. +echo "$GREETING2" >> $INSTALL/etc/issue
  1092. +echo "$GREETING3" >> $INSTALL/etc/issue
  1093. +echo "$GREETING4" >> $INSTALL/etc/issue
  1094. +echo "$DISTRONAME ($LIBREELEC_BUILD): $LIBREELEC_VERSION ($LIBREELEC_ARCH)" >> $INSTALL/etc/issue
  1095. +
  1096. +ln -sf /etc/issue $INSTALL/etc/motd
  1097. +
  1098. +# Copy PROJECT related files to filesystem
  1099. +if [ -d "$PROJECT_DIR/$PROJECT/filesystem" ]; then
  1100. + cp -PR $PROJECT_DIR/$PROJECT/filesystem/* $INSTALL
  1101. + # Install project specific systemd services
  1102. + for service in $PROJECT_DIR/$PROJECT/filesystem/usr/lib/systemd/system/*.service; do
  1103. + if [ -f "$service" ]; then
  1104. + enable_service $(basename $service)
  1105. + fi
  1106. + done
  1107. +fi
  1108. +
  1109. +# Copy DEVICE related files to filesystem
  1110. +if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem" ]; then
  1111. + cp -PR $PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem/* $INSTALL
  1112. + # Install device specific systemd services
  1113. + for service in $PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem/usr/lib/systemd/system/*.service; do
  1114. + if [ -f "$service" ]; then
  1115. + enable_service $(basename $service)
  1116. + fi
  1117. + done
  1118. +fi
  1119. +
  1120. +# Run depmod for base overlay modules
  1121. +MODVER=$(basename $(ls -d $INSTALL/usr/lib/kernel-overlays/base/lib/modules/*))
  1122. +find $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/ -name *.ko | \
  1123. + sed -e "s,$INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/,," \
  1124. + > $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/modules.order
  1125. +$TOOLCHAIN/bin/depmod -b $INSTALL/usr/lib/kernel-overlays/base -a -e -F "$BUILD/linux-$(kernel_version)/System.map" $MODVER 2>&1
  1126. +
  1127. +# Strip kernel modules
  1128. +for MOD in $(find $INSTALL/usr/lib/kernel-overlays/ -type f -name *.ko); do
  1129. + ${TARGET_KERNEL_PREFIX}strip --strip-debug $MOD
  1130. +done
  1131. +
  1132. +# Symlink overlayed modules to /usr/lib/modules
  1133. +ln -sT /var/lib/modules $INSTALL/usr/lib/modules
  1134. +
  1135. +# Symlink overlayed firmware to /usr/lib/firmware
  1136. +ln -sT /var/lib/firmware $INSTALL/usr/lib/firmware
  1137. +
  1138. +# Make target dir
  1139. +mkdir -p $TARGET_IMG
  1140. +rm -rf $TARGET_IMG/$IMAGE_NAME.kernel
  1141. +
  1142. +# Copy kernel to target dir
  1143. +cp -PR $BUILD/linux-$(kernel_version)/arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET $TARGET_IMG/$IMAGE_NAME.kernel
  1144. +chmod 0644 $TARGET_IMG/$IMAGE_NAME.kernel
  1145. +
  1146. +# Set mksquashfs options for each compression method
  1147. +if [ -z "$SQUASHFS_COMPRESSION_OPTION" ]; then
  1148. + if [ "${SQUASHFS_COMPRESSION:-gzip}" = "gzip" ]; then
  1149. + SQUASHFS_COMPRESSION_OPTION="-Xcompression-level 9 -b 262144"
  1150. + elif [ "$SQUASHFS_COMPRESSION" = "lzo" ]; then
  1151. + SQUASHFS_COMPRESSION_OPTION="-Xcompression-level 9 -b 524288"
  1152. + elif [ "$SQUASHFS_COMPRESSION" = "zstd" ]; then
  1153. + SQUASHFS_COMPRESSION_OPTION="-Xcompression-level 22 -b 262144"
  1154. + fi
  1155. +fi
  1156. +
  1157. +# Create squashfs file, default to gzip if no compression configured
  1158. +echo "rm -rf \"$TARGET_IMG/$IMAGE_NAME.system\"" >> $FAKEROOT_SCRIPT
  1159. +echo "$TOOLCHAIN/bin/mksquashfs \"$BUILD/image/system\" \"$TARGET_IMG/$IMAGE_NAME.system\" -noappend -comp ${SQUASHFS_COMPRESSION:-gzip} ${SQUASHFS_COMPRESSION_OPTION}" >> $FAKEROOT_SCRIPT
  1160. +
  1161. +# Run fakeroot
  1162. +$TOOLCHAIN/bin/fakeroot -- $FAKEROOT_SCRIPT
  1163. +rm -rf $FAKEROOT_SCRIPT
  1164. +
  1165. +# Set permissions
  1166. +chmod 0644 $TARGET_IMG/$IMAGE_NAME.system
  1167. +
  1168. +if [ "$1" = "release" -o "$1" = "mkimage" -o "$1" = "amlpkg" -o "$1" = "noobs" ]; then
  1169. +
  1170. + RELEASE_DIR="target/$IMAGE_NAME"
  1171. +
  1172. + # Cleanup
  1173. + rm -rf $RELEASE_DIR
  1174. +
  1175. + # Create release dir
  1176. + mkdir -p $RELEASE_DIR
  1177. +
  1178. + # Remove any previously created release images
  1179. + rm -rf $TARGET_IMG/$IMAGE_NAME.img.gz
  1180. +
  1181. + if [ -n "$BOOTLOADER" ]; then
  1182. +
  1183. + BOOTLOADER_DIR="$(get_pkg_directory "$BOOTLOADER")"
  1184. +
  1185. + if [ -d $BOOTLOADER_DIR/files ]; then
  1186. + cp -R $BOOTLOADER_DIR/files/* $RELEASE_DIR
  1187. + fi
  1188. +
  1189. + if find_file_path bootloader/release $BOOTLOADER_DIR/release; then
  1190. + echo "Running $FOUND_PATH"
  1191. + . $FOUND_PATH
  1192. + fi
  1193. + fi
  1194. +
  1195. + cp $ROOT/README* $RELEASE_DIR
  1196. + cp $ROOT/CHANGELOG* $RELEASE_DIR
  1197. + echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE
  1198. +
  1199. + if [ ! "$MEDIACENTER" = "no" ]; then
  1200. + echo "Kodi commit: $(get_pkg_version $MEDIACENTER)" >> $RELEASE_DIR/RELEASE
  1201. + fi
  1202. +
  1203. + mkdir -p $RELEASE_DIR/licenses
  1204. + cp $ROOT/licenses/* $RELEASE_DIR/licenses
  1205. +
  1206. + mkdir -p $RELEASE_DIR/target
  1207. + cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/target/SYSTEM
  1208. + cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/target/KERNEL
  1209. +
  1210. + # Create md5sum's
  1211. + ( cd $RELEASE_DIR;
  1212. + md5sum -t target/SYSTEM > target/SYSTEM.md5;
  1213. + md5sum -t target/KERNEL > target/KERNEL.md5;
  1214. + )
  1215. +
  1216. + # Create target directory
  1217. + mkdir -p $TARGET_IMG
  1218. +
  1219. + # Remove any previously created release tarballs
  1220. + rm -rf $TARGET_IMG/$IMAGE_NAME.tar
  1221. +
  1222. + # Create release tarball
  1223. + tar cf $TARGET_IMG/$IMAGE_NAME.tar -C target $IMAGE_NAME
  1224. +
  1225. + # Create sha256 checksum of tarball
  1226. + ( cd $TARGET_IMG
  1227. + sha256sum ${IMAGE_NAME}.tar > ${IMAGE_NAME}.tar.sha256
  1228. + )
  1229. +
  1230. + # Create image files if requested
  1231. + if [[ ( "$1" = "amlpkg" || "$1" = "noobs" || "$1" = "mkimage" ) && -n "$BOOTLOADER" ]]; then
  1232. + # INSTALL_SRC_DIR can be board specific
  1233. + if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/install" ]; then
  1234. + INSTALL_SRC_DIR="$PROJECT_DIR/$PROJECT/devices/$DEVICE/install"
  1235. + else
  1236. + INSTALL_SRC_DIR="$PROJECT_DIR/$PROJECT/install"
  1237. + fi
  1238. +
  1239. + # Variables used in image script must be passed
  1240. + env \
  1241. + PATH="$PATH:/sbin" \
  1242. + ROOT="$ROOT" \
  1243. + SCRIPTS="$SCRIPTS" \
  1244. + TOOLCHAIN="$TOOLCHAIN" \
  1245. + PROJECT_DIR="$PROJECT_DIR" \
  1246. + PROJECT="$PROJECT" \
  1247. + DEVICE="$DEVICE" \
  1248. + DISTRO="$DISTRO" \
  1249. + TARGET_IMG="$TARGET_IMG" \
  1250. + IMAGE_NAME="$IMAGE_NAME" \
  1251. + INSTALL_SRC_DIR="$INSTALL_SRC_DIR" \
  1252. + BOOTLOADER="$BOOTLOADER" \
  1253. + KERNEL_NAME="$KERNEL_NAME" \
  1254. + TARGET_KERNEL_ARCH="$TARGET_KERNEL_ARCH" \
  1255. + RELEASE_DIR=$RELEASE_DIR \
  1256. + UUID_STORAGE="$(uuidgen)" \
  1257. + DISTRO_BOOTLABEL="$DISTRO_BOOTLABEL" \
  1258. + DISTRO_DISKLABEL="$DISTRO_DISKLABEL" \
  1259. + UBOOT_SYSTEM="$UBOOT_SYSTEM" \
  1260. + UBOOT_VERSION="$UBOOT_VERSION" \
  1261. + EXTRA_CMDLINE="$EXTRA_CMDLINE" \
  1262. + SYSTEM_SIZE="$SYSTEM_SIZE" \
  1263. + SYSTEM_PART_START="$SYSTEM_PART_START" \
  1264. + $SCRIPTS/mkimage
  1265. + fi
  1266. +
  1267. + # Cleanup release dir
  1268. + rm -rf $RELEASE_DIR
  1269. +
  1270. + # Create WeTek Play (Amlogic) ZIP update and auto-install packages if requested
  1271. + if [ "$1" = "amlpkg" ]; then
  1272. + echo "Creating Amlogic ZIP update package"
  1273. +
  1274. + AML_PKG_DIR="$RELEASE_DIR/ampl-pkg"
  1275. +
  1276. + # Create package directory
  1277. + mkdir -p "$AML_PKG_DIR"
  1278. +
  1279. + # Copy system and kernel images
  1280. + mkdir -p "$AML_PKG_DIR/system"
  1281. + cp $TARGET_IMG/$IMAGE_NAME.system $AML_PKG_DIR/system/SYSTEM
  1282. + cp $TARGET_IMG/$IMAGE_NAME.kernel $AML_PKG_DIR/KERNEL
  1283. +
  1284. + # Copy update-binary and updater-script
  1285. + META_INF_DIR="$AML_PKG_DIR/META-INF/com/google/android"
  1286. + mkdir -p "$META_INF_DIR"
  1287. + cp $INSTALL_SRC_DIR/update-binary $META_INF_DIR
  1288. + cp $INSTALL_SRC_DIR/updater-script $META_INF_DIR
  1289. +
  1290. + # Copy other files if any
  1291. + if [ -d "$INSTALL_SRC_DIR/files" ]; then
  1292. + cp -PR $INSTALL_SRC_DIR/files/* $AML_PKG_DIR
  1293. + fi
  1294. +
  1295. + # Copy device tree image if any
  1296. + if [ -f "$INSTALL/usr/share/bootloader/dtb.img" ]; then
  1297. + cp "$INSTALL/usr/share/bootloader/dtb.img" $AML_PKG_DIR/dtb.img
  1298. + fi
  1299. +
  1300. + # Create the update package
  1301. + pushd "$AML_PKG_DIR" > /dev/null
  1302. + zip -rq update.zip *
  1303. +
  1304. + # Sign the update package
  1305. + echo "Signing the update package"
  1306. + mkdir -p sign
  1307. + SIGNAPK_DIR="$ROOT/tools/signapk"
  1308. + java -Xmx1024m -jar $SIGNAPK_DIR/signapk.jar -w $SIGNAPK_DIR/testkey.x509.pem $SIGNAPK_DIR/testkey.pk8 update.zip sign/$IMAGE_NAME-update.zip
  1309. +
  1310. + # Create the auto-install package
  1311. + echo "Creating Amlogic ZIP auto-install package"
  1312. + pushd sign > /dev/null
  1313. + echo --update_package=/sdcard/$IMAGE_NAME-update.zip > factory_update_param.aml
  1314. + echo --wipe_data >> factory_update_param.aml
  1315. + echo --wipe_cache >> factory_update_param.aml
  1316. + if [ -f "$INSTALL_SRC_DIR/files/recovery.img" ]; then
  1317. + cp $INSTALL_SRC_DIR/files/recovery.img .
  1318. + fi
  1319. +
  1320. + if [ -f $INSTALL_SRC_DIR/files/aml_autoscript ]; then
  1321. + cp $INSTALL_SRC_DIR/files/aml_autoscript .
  1322. + fi
  1323. +
  1324. + # Copy device tree image if any
  1325. + if [ -f "$INSTALL/usr/share/bootloader/dtb.img" ]; then
  1326. + cp "$INSTALL/usr/share/bootloader/dtb.img" .
  1327. + fi
  1328. +
  1329. + zip -q $TARGET_IMG/$IMAGE_NAME.zip *
  1330. +
  1331. + # Create sha256 checksum of zip
  1332. + ( cd $TARGET_IMG
  1333. + sha256sum ${IMAGE_NAME}.zip > ${IMAGE_NAME}.zip.sha256
  1334. + )
  1335. +
  1336. + popd > /dev/null
  1337. + popd > /dev/null
  1338. +
  1339. + elif [ "$1" = "noobs" ]; then
  1340. + echo "Creating \"$1\" release tarball..."
  1341. +
  1342. + RELEASE_DIR="$TARGET_IMG/${IMAGE_NAME}-$1"
  1343. +
  1344. + # eg. LibreELEC_RPi, LibreELEC_RPi2 etc.
  1345. + NOOBS_DISTRO="${DISTRONAME}_${DEVICE:-$PROJECT}"
  1346. +
  1347. + # Create release dir
  1348. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}
  1349. +
  1350. + if [ -f $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png ]; then
  1351. + cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png $RELEASE_DIR/${NOOBS_DISTRO}/${NOOBS_DISTRO}.png
  1352. + else
  1353. + cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}.png $RELEASE_DIR/${NOOBS_DISTRO}/${NOOBS_DISTRO}.png
  1354. + fi
  1355. + cp -PR $ROOT/config/noobs/os.json $RELEASE_DIR/${NOOBS_DISTRO}
  1356. + cp -PR $ROOT/config/noobs/partition_setup.sh $RELEASE_DIR/${NOOBS_DISTRO}
  1357. + cp -PR $ROOT/config/noobs/partitions.json $RELEASE_DIR/${NOOBS_DISTRO}
  1358. + if [ -d $DISTRO_DIR/$DISTRO/noobs/marketing ]; then
  1359. + tar cf $RELEASE_DIR/${NOOBS_DISTRO}/marketing.tar -C $DISTRO_DIR/$DISTRO/noobs/marketing .
  1360. + else
  1361. + tar cf $RELEASE_DIR/${NOOBS_DISTRO}/marketing.tar -C $ROOT/config/noobs/marketing .
  1362. + fi
  1363. + cp $ROOT/README* $RELEASE_DIR/${NOOBS_DISTRO}
  1364. + cp $ROOT/CHANGELOG $RELEASE_DIR/${NOOBS_DISTRO}/release_notes.txt
  1365. +
  1366. + sed -e "s%@DISTRONAME@%$DISTRONAME%g" \
  1367. + -e "s%@PROJECT@%${DEVICE:-$PROJECT}%g" \
  1368. + -e "s%@LIBREELEC_VERSION@%$LIBREELEC_VERSION%g" \
  1369. + -e "s%@RELEASE_DATE@%$(date +%F)%g" \
  1370. + -e "s%@KERNEL_VERSION@%$(kernel_version)%g" \
  1371. + -e "s%@DESCRIPTION@%$DESCRIPTION%g" \
  1372. + -e "s%@ROOT_PASSWORD@%$ROOT_PASSWORD%g" \
  1373. + -e "s%@NOOBS_SUPPORTED_MODELS@%$NOOBS_SUPPORTED_MODELS%g" \
  1374. + -e "s%@NOOBS_HEX@%$NOOBS_HEX%g" \
  1375. + -i $RELEASE_DIR/${NOOBS_DISTRO}/os.json
  1376. +
  1377. + sed -e "s%@DISTRONAME@%$DISTRONAME%g" \
  1378. + -e "s%@PROJECT@%${DEVICE:-$PROJECT}%g" \
  1379. + -e "s%@SYSTEM_SIZE@%$SYSTEM_SIZE%g" \
  1380. + -i $RELEASE_DIR/${NOOBS_DISTRO}/partitions.json
  1381. +
  1382. + # Create System dir
  1383. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/System
  1384. +
  1385. + BOOTLOADER_DIR="$(get_pkg_directory "$BOOTLOADER")"
  1386. + if [ -d $BOOTLOADER_DIR/files/3rdparty/bootloader/ ]; then
  1387. + cp -PR $BOOTLOADER_DIR/files/3rdparty/bootloader/* $RELEASE_DIR/${NOOBS_DISTRO}/System
  1388. + fi
  1389. +
  1390. + # Copy Bootloader
  1391. + cp -PR $BUILD/bcm2835-bootloader-*/LICENCE* $RELEASE_DIR/${NOOBS_DISTRO}/System/
  1392. + cp -PR $BUILD/bcm2835-bootloader-*/bootcode.bin $RELEASE_DIR/${NOOBS_DISTRO}/System/
  1393. + cp -PR $BUILD/bcm2835-bootloader-*/fixup_x.dat $RELEASE_DIR/${NOOBS_DISTRO}/System/fixup.dat
  1394. + cp -PR $BUILD/bcm2835-bootloader-*/start_x.elf $RELEASE_DIR/${NOOBS_DISTRO}/System/start.elf
  1395. + [ -f $BUILD/bcm2835-bootloader-*/dt-blob.bin ] && cp -PR $BUILD/bcm2835-bootloader-*/dt-blob.bin $RELEASE_DIR/${NOOBS_DISTRO}/System/dt-blob.bin
  1396. +
  1397. + # Copy system files
  1398. + cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/${NOOBS_DISTRO}/System/SYSTEM
  1399. + cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/${NOOBS_DISTRO}/System/kernel.img
  1400. +
  1401. + for dtb in $INSTALL/usr/share/bootloader/*.dtb; do
  1402. + if [ -f $dtb ]; then
  1403. + cp -PR $dtb $RELEASE_DIR/${NOOBS_DISTRO}/System
  1404. + fi
  1405. + done
  1406. +
  1407. + for overlay in $INSTALL/usr/share/bootloader/overlays/*; do
  1408. + if [ -f $overlay ]; then
  1409. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/System/overlays
  1410. + cp -PR $overlay $RELEASE_DIR/${NOOBS_DISTRO}/System/overlays
  1411. + fi
  1412. + done
  1413. +
  1414. + # Create md5sum's
  1415. + ( cd $RELEASE_DIR/${NOOBS_DISTRO}/System;
  1416. + md5sum -t SYSTEM > SYSTEM.md5;
  1417. + md5sum -t kernel.img > kernel.img.md5;
  1418. + )
  1419. +
  1420. + # Copy additional files
  1421. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/System/licenses
  1422. + cp $ROOT/licenses/* $RELEASE_DIR/${NOOBS_DISTRO}/System/licenses
  1423. +
  1424. + # Create Storage dir
  1425. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/Storage
  1426. +
  1427. + # Remove any previously created release tarball
  1428. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/System.tar.xz
  1429. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/Storage.tar.xz
  1430. +
  1431. + # Create filesystem tarballs
  1432. + tar cJf $RELEASE_DIR/${NOOBS_DISTRO}/System.tar.xz -C $RELEASE_DIR/${NOOBS_DISTRO}/System/ .
  1433. + tar cJf $RELEASE_DIR/${NOOBS_DISTRO}/Storage.tar.xz -C $RELEASE_DIR/${NOOBS_DISTRO}/Storage/ .
  1434. +
  1435. + # Remove filesystem dirs
  1436. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/System
  1437. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/Storage
  1438. +
  1439. + # Remove any previously created release tarball
  1440. + rm -rf $TARGET_IMG/${IMAGE_NAME}-$1.tar
  1441. +
  1442. + # Create release tarball
  1443. + tar cf $TARGET_IMG/${IMAGE_NAME}-$1.tar -C $TARGET_IMG ${IMAGE_NAME}-$1
  1444. +
  1445. + # Create sha256 checksum of tarball
  1446. + ( cd $TARGET_IMG
  1447. + sha256sum ${IMAGE_NAME}-$1.tar > ${IMAGE_NAME}-$1.tar.sha256
  1448. + )
  1449. + fi
  1450. +
  1451. + if [ -d $RELEASE_DIR ]; then
  1452. + # Cleanup release dir
  1453. + rm -rf $RELEASE_DIR
  1454. + fi
  1455. +fi
  1456. diff --git a/scripts/install b/scripts/install
  1457. index d9e0bfa..a4f47e3 100755
  1458. --- a/scripts/install
  1459. +++ b/scripts/install
  1460. @@ -8,7 +8,7 @@
  1461. . config/options "$1"
  1462.  
  1463. if [ -z "$1" ]; then
  1464. - die "usage: $0 package_name"
  1465. + die "usage: $0 package_name [parent_pkg]"
  1466. fi
  1467.  
  1468. if [ -z "${PKG_NAME}" ]; then
  1469. @@ -29,29 +29,35 @@ if [ "${1//:/}" != "${1}" ]; then
  1470. PACKAGE_NAME="${1%:*}"
  1471. TARGET="${1#*:}"
  1472. else
  1473. - PACKAGE_NAME=$1
  1474. + PACKAGE_NAME="${1}"
  1475. TARGET=
  1476. fi
  1477. [ -z "$TARGET" ] && TARGET="target"
  1478. +PARENT_PKG="${2:-${PKG_NAME}:${TARGET}}"
  1479. +
  1480. +[ "$PKG_SECTION" != "virtual" ] && pkg_lock "${PACKAGE_NAME}:${TARGET}" "install" "${PARENT_PKG}"
  1481.  
  1482. STAMP=$STAMPS_INSTALL/$PACKAGE_NAME/install_$TARGET
  1483. +[ -f $STAMP ] && pkg_lock_msg "${PACKAGE_NAME}:${TARGET}" "install" "UNLOCK" "already installed"
  1484. [ -f $STAMP ] && exit 0
  1485.  
  1486. mkdir -p $STAMPS_INSTALL/$PACKAGE_NAME
  1487.  
  1488. -$SCRIPTS/build $@
  1489. +$SCRIPTS/build "${1}" "${PARENT_PKG}"
  1490.  
  1491. if [ "$TARGET" = target ] ; then
  1492. for p in $PKG_DEPENDS_TARGET; do
  1493. - $SCRIPTS/install $p
  1494. + $SCRIPTS/install "${p}" "${PARENT_PKG}"
  1495. done
  1496. elif [ "$TARGET" = init ] ; then
  1497. for p in $PKG_DEPENDS_INIT; do
  1498. - $SCRIPTS/install $p
  1499. + $SCRIPTS/install "${p}" "${PARENT_PKG}"
  1500. done
  1501. INSTALL=$BUILD/initramfs
  1502. fi
  1503.  
  1504. +pkg_lock_msg "${PACKAGE_NAME}:${TARGET}" "install" "RUNNING"
  1505. +
  1506. build_msg "CLR_INSTALL" "INSTALL" "${PACKAGE_NAME} $(print_color CLR_TARGET "(${TARGET})")" "indent"
  1507.  
  1508. mkdir -p $INSTALL
  1509. @@ -137,3 +143,5 @@ if [ "$TARGET" = target ] ; then
  1510. fi
  1511.  
  1512. touch $STAMP
  1513. +
  1514. +pkg_lock_msg "${PACKAGE_NAME}:${TARGET}" "install" "UNLOCK" "installed"
  1515. diff --git a/scripts/unpack b/scripts/unpack
  1516. index 3dce2c4..9133643 100755
  1517. --- a/scripts/unpack
  1518. +++ b/scripts/unpack
  1519. @@ -7,14 +7,19 @@
  1520. . config/options "$1"
  1521.  
  1522. if [ -z "$1" ]; then
  1523. - die "usage: $0 package_name"
  1524. + die "usage: $0 package_name [parent_pkg]"
  1525. fi
  1526.  
  1527. if [ -z "${PKG_NAME}" ]; then
  1528. die "$(print_color CLR_ERROR "${1}: no package.mk file found")"
  1529. fi
  1530. +PARENT_PKG="${2:-${PKG_NAME}}"
  1531.  
  1532. -$SCRIPTS/get $1
  1533. +pkg_lock "${PKG_NAME}" "unpack" "${PARENT_PKG}"
  1534. +
  1535. +pkg_lock_msg "${PKG_NAME}" "unpack" "RUNNING"
  1536. +
  1537. +$SCRIPTS/get "${PKG_NAME}"
  1538.  
  1539. STAMP="$PKG_BUILD/.libreelec-unpack"
  1540.  
  1541. @@ -22,13 +27,13 @@ mkdir -p $BUILD
  1542.  
  1543. # Perform a wildcard match on the package to ensure old versions are cleaned too
  1544. PKG_DEEPHASH=
  1545. -for i in $BUILD/$1-*; do
  1546. +for i in $BUILD/${PKG_NAME}-*; do
  1547. if [ -d $i -a -f "$i/.libreelec-unpack" ] ; then
  1548. . "$i/.libreelec-unpack"
  1549. - if [ "$STAMP_PKG_NAME" = "$1" ]; then
  1550. + if [ "$STAMP_PKG_NAME" = "${PKG_NAME}" ]; then
  1551. [ -z "${PKG_DEEPHASH}" ] && PKG_DEEPHASH=$(calculate_stamp)
  1552. if [ ! "$PKG_DEEPHASH" = "$STAMP_PKG_DEEPHASH" ] ; then
  1553. - $SCRIPTS/clean $1
  1554. + $SCRIPTS/clean "${PKG_NAME}"
  1555. fi
  1556. fi
  1557. fi
  1558. @@ -36,19 +41,20 @@ done
  1559.  
  1560. if [ -d "$PKG_BUILD" -a ! -f "$STAMP" ]; then
  1561. # stale pkg build dir
  1562. - $SCRIPTS/clean $1
  1563. + $SCRIPTS/clean "${PKG_NAME}"
  1564. fi
  1565.  
  1566. +[ -f "$STAMP" ] && pkg_lock_msg "${PKG_NAME}" "unpack" "UNLOCK" "already unpacked"
  1567. [ -f "$STAMP" ] && exit 0
  1568.  
  1569. -if [ -d "$SOURCES/$1" -o -d "$PKG_DIR/sources" ]; then
  1570. - build_msg "CLR_UNPACK" "UNPACK" "${1}" "indent"
  1571. +if [ -d "$SOURCES/${PKG_NAME}" -o -d "$PKG_DIR/sources" ]; then
  1572. + build_msg "CLR_UNPACK" "UNPACK" "${PKG_NAME}" "indent"
  1573.  
  1574. pkg_call_optional pre_unpack
  1575.  
  1576. if ! pkg_call unpack; then
  1577. if [ -n "$PKG_URL" ]; then
  1578. - $SCRIPTS/extract $1 $BUILD
  1579. + $SCRIPTS/extract "${PKG_NAME}" $BUILD
  1580. fi
  1581. fi
  1582.  
  1583. @@ -159,10 +165,12 @@ fi
  1584. if [ "$PKG_SECTION" != "virtual" ]; then
  1585. mkdir -p "$PKG_BUILD"
  1586.  
  1587. - rm -f $STAMPS/$1/build_*
  1588. + rm -f $STAMPS/${PKG_NAME}/build_*
  1589.  
  1590. PKG_DEEPHASH=$(calculate_stamp)
  1591. for i in PKG_NAME PKG_DEEPHASH; do
  1592. echo "STAMP_$i=\"${!i}\"" >> $STAMP
  1593. done
  1594. fi
  1595. +
  1596. +pkg_lock_msg "${PKG_NAME}" "unpack" "UNLOCK" "unpacked"
  1597. --
  1598. 2.14.1
  1599.  
  1600.  
  1601. From 4ee7b0b05cdf0d4ed8a68ad057c1dae841ffcd7b Mon Sep 17 00:00:00 2001
  1602. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  1603. Date: Sat, 5 Jan 2019 02:48:53 +0000
  1604. Subject: [PATCH 07/16] PKG_DEPENDS_UNPACK: solution for packages using source
  1605. code of another
  1606.  
  1607. ---
  1608. packages/mediacenter/JsonSchemaBuilder/package.mk | 3 ++-
  1609. packages/mediacenter/TexturePacker/package.mk | 3 ++-
  1610. packages/security/nspr/package.mk | 2 ++
  1611. scripts/build | 8 +++++++-
  1612. 4 files changed, 13 insertions(+), 3 deletions(-)
  1613.  
  1614. diff --git a/packages/mediacenter/JsonSchemaBuilder/package.mk b/packages/mediacenter/JsonSchemaBuilder/package.mk
  1615. index b61af9f..b62b79a 100644
  1616. --- a/packages/mediacenter/JsonSchemaBuilder/package.mk
  1617. +++ b/packages/mediacenter/JsonSchemaBuilder/package.mk
  1618. @@ -1,11 +1,12 @@
  1619. # SPDX-License-Identifier: GPL-2.0-or-later
  1620. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  1621. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1622.  
  1623. PKG_NAME="JsonSchemaBuilder"
  1624. PKG_VERSION="0"
  1625. PKG_LICENSE="GPL"
  1626. PKG_SITE="http://www.kodi.tv"
  1627. -PKG_URL=""
  1628. +PKG_DEPENDS_UNPACK="kodi"
  1629. PKG_NEED_UNPACK="$(get_pkg_directory $MEDIACENTER)"
  1630. PKG_LONGDESC="kodi-platform:"
  1631.  
  1632. diff --git a/packages/mediacenter/TexturePacker/package.mk b/packages/mediacenter/TexturePacker/package.mk
  1633. index 8faa689..ed8ee07 100644
  1634. --- a/packages/mediacenter/TexturePacker/package.mk
  1635. +++ b/packages/mediacenter/TexturePacker/package.mk
  1636. @@ -1,12 +1,13 @@
  1637. # SPDX-License-Identifier: GPL-2.0-or-later
  1638. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  1639. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1640.  
  1641. PKG_NAME="TexturePacker"
  1642. PKG_VERSION="0"
  1643. PKG_LICENSE="GPL"
  1644. PKG_SITE="http://www.kodi.tv"
  1645. -PKG_URL=""
  1646. PKG_DEPENDS_HOST="lzo:host libpng:host libjpeg-turbo:host giflib:host"
  1647. +PKG_DEPENDS_UNPACK="kodi"
  1648. PKG_NEED_UNPACK="$(get_pkg_directory $MEDIACENTER)"
  1649. PKG_LONGDESC="kodi-platform:"
  1650.  
  1651. diff --git a/packages/security/nspr/package.mk b/packages/security/nspr/package.mk
  1652. index 7d16ac8..fd63908 100644
  1653. --- a/packages/security/nspr/package.mk
  1654. +++ b/packages/security/nspr/package.mk
  1655. @@ -1,5 +1,6 @@
  1656. # SPDX-License-Identifier: GPL-2.0-or-later
  1657. # Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
  1658. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1659.  
  1660. PKG_NAME="nspr"
  1661. PKG_VERSION="4.19"
  1662. @@ -7,6 +8,7 @@ PKG_LICENSE="Mozilla Public License"
  1663. PKG_SITE="http://www.linuxfromscratch.org/blfs/view/svn/general/nspr.html"
  1664. PKG_DEPENDS_HOST="ccache:host"
  1665. PKG_DEPENDS_TARGET="toolchain nss:host"
  1666. +PKG_DEPENDS_UNPACK="nss"
  1667. PKG_LONGDESC="Netscape Portable Runtime (NSPR) provides a platform-neutral API for system level and libc like functions"
  1668. PKG_TOOLCHAIN="configure"
  1669. PKG_BUILD_FLAGS="-parallel"
  1670. diff --git a/scripts/build b/scripts/build
  1671. index 44388c9..2413007 100755
  1672. --- a/scripts/build
  1673. +++ b/scripts/build
  1674. @@ -59,7 +59,13 @@ if [ -f $STAMP ]; then
  1675. fi
  1676. fi
  1677.  
  1678. -$SCRIPTS/unpack $PACKAGE_NAME
  1679. +if [ -n "${PKG_DEPENDS_UNPACK}" ]; then
  1680. + for p in ${PKG_DEPENDS_UNPACK}; do
  1681. + $SCRIPTS/unpack "${p}" "${PARENT_PKG}"
  1682. + done
  1683. +else
  1684. + $SCRIPTS/unpack "${PACKAGE_NAME}" "${PARENT_PKG}"
  1685. +fi
  1686.  
  1687. # build dependencies, only when PKG_DEPENDS_? is filled
  1688. unset _pkg_depends
  1689. --
  1690. 2.14.1
  1691.  
  1692.  
  1693. From c1b327a66981d2dd9e6c80a299a1678052f22137 Mon Sep 17 00:00:00 2001
  1694. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  1695. Date: Wed, 9 Jan 2019 03:27:04 +0000
  1696. Subject: [PATCH 08/16] PKG_DEPENDS_UNPACK: add source package to
  1697. PKG_NEED_UNPACK
  1698.  
  1699. If the source package changes then we need to rebuild too.
  1700. ---
  1701. config/functions | 6 ++++++
  1702. 1 file changed, 6 insertions(+)
  1703.  
  1704. diff --git a/config/functions b/config/functions
  1705. index 000068e..beae9f3 100644
  1706. --- a/config/functions
  1707. +++ b/config/functions
  1708. @@ -861,6 +861,12 @@ source_package() {
  1709. [ "$PKG_ADDON_IS_STANDALONE" != "yes" ] && PKG_NEED_UNPACK="${PKG_NEED_UNPACK} $(get_pkg_directory $MEDIACENTER)"
  1710. fi
  1711.  
  1712. + if [ -n "${PKG_DEPENDS_UNPACK}" ]; then
  1713. + for _p in ${PKG_DEPENDS_UNPACK}; do
  1714. + PKG_NNED_UNPACK+=" $(get_pkg_directory ${_p})"
  1715. + done
  1716. + fi
  1717. +
  1718. # Automatically set PKG_SOURCE_NAME unless it is already defined.
  1719. # PKG_SOURCE_NAME will be automatically set to a name based on
  1720. # the $PKG_NAME-$PKG_VERSION convention.
  1721. --
  1722. 2.14.1
  1723.  
  1724.  
  1725. From c4c679cc06943c3299ece22a32124b5c5d603f7b Mon Sep 17 00:00:00 2001
  1726. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  1727. Date: Sat, 5 Jan 2019 02:44:12 +0000
  1728. Subject: [PATCH 09/16] packages: pciutils, nasm: build only for x86_64
  1729.  
  1730. ---
  1731. packages/linux/package.mk | 4 ++--
  1732. packages/mediacenter/kodi/package.mk | 6 +++++-
  1733. packages/multimedia/dav1d/package.mk | 6 +++++-
  1734. packages/sysutils/busybox/package.mk | 6 +++++-
  1735. 4 files changed, 17 insertions(+), 5 deletions(-)
  1736.  
  1737. diff --git a/packages/linux/package.mk b/packages/linux/package.mk
  1738. index 3233cb5..3bd5a13 100644
  1739. --- a/packages/linux/package.mk
  1740. +++ b/packages/linux/package.mk
  1741. @@ -6,7 +6,7 @@ PKG_NAME="linux"
  1742. PKG_LICENSE="GPL"
  1743. PKG_SITE="http://www.kernel.org"
  1744. PKG_DEPENDS_HOST="ccache:host"
  1745. -PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host pciutils xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  1746. +PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  1747. PKG_DEPENDS_INIT="toolchain"
  1748. PKG_NEED_UNPACK="$LINUX_DEPENDS"
  1749. PKG_LONGDESC="This package contains a precompiled kernel image and the modules."
  1750. @@ -65,7 +65,7 @@ if [ "$PKG_BUILD_PERF" != "no" ] && grep -q ^CONFIG_PERF_EVENTS= $PKG_KERNEL_CFG
  1751. fi
  1752.  
  1753. if [ "$TARGET_ARCH" = "x86_64" ]; then
  1754. - PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET intel-ucode:host kernel-firmware elfutils:host"
  1755. + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET intel-ucode:host kernel-firmware elfutils:host pciutils"
  1756. fi
  1757.  
  1758. if [ "$BUILD_ANDROID_BOOTIMG" = "yes" ]; then
  1759. diff --git a/packages/mediacenter/kodi/package.mk b/packages/mediacenter/kodi/package.mk
  1760. index a02ea76..3bcec2c 100644
  1761. --- a/packages/mediacenter/kodi/package.mk
  1762. +++ b/packages/mediacenter/kodi/package.mk
  1763. @@ -5,7 +5,7 @@
  1764. PKG_NAME="kodi"
  1765. PKG_LICENSE="GPL"
  1766. PKG_SITE="http://www.kodi.tv"
  1767. -PKG_DEPENDS_TARGET="toolchain JsonSchemaBuilder:host TexturePacker:host Python2 zlib systemd pciutils lzo pcre swig:host libass curl fontconfig fribidi tinyxml libjpeg-turbo freetype libcdio taglib libxml2 libxslt rapidjson sqlite ffmpeg crossguid giflib libdvdnav libhdhomerun libfmt lirc libfstrcmp flatbuffers:host flatbuffers"
  1768. +PKG_DEPENDS_TARGET="toolchain JsonSchemaBuilder:host TexturePacker:host Python2 zlib systemd lzo pcre swig:host libass curl fontconfig fribidi tinyxml libjpeg-turbo freetype libcdio taglib libxml2 libxslt rapidjson sqlite ffmpeg crossguid giflib libdvdnav libhdhomerun libfmt lirc libfstrcmp flatbuffers:host flatbuffers"
  1769. PKG_LONGDESC="A free and open source cross-platform media player."
  1770.  
  1771. PKG_PATCH_DIRS="$KODI_VENDOR"
  1772. @@ -39,6 +39,10 @@ configure_package() {
  1773.  
  1774. get_graphicdrivers
  1775.  
  1776. + if [ "$TARGET_ARCH" = "x86_64" ]; then
  1777. + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET pciutils"
  1778. + fi
  1779. +
  1780. PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET dbus"
  1781.  
  1782. if [ "$DISPLAYSERVER" = "x11" ]; then
  1783. diff --git a/packages/multimedia/dav1d/package.mk b/packages/multimedia/dav1d/package.mk
  1784. index 275aca4..ab20356 100644
  1785. --- a/packages/multimedia/dav1d/package.mk
  1786. +++ b/packages/multimedia/dav1d/package.mk
  1787. @@ -7,5 +7,9 @@ PKG_SHA256="3662184809fa29af39c920877cedec3724dc5c3cf71d94bec424f2a7ee4825cf"
  1788. PKG_LICENSE="BSD"
  1789. PKG_SITE="http://www.jbkempf.com/blog/post/2018/Introducing-dav1d"
  1790. PKG_URL="https://code.videolan.org/videolan/dav1d/-/archive/${PKG_VERSION}/dav1d-${PKG_VERSION}.tar.bz2"
  1791. -PKG_DEPENDS_TARGET="toolchain nasm:host"
  1792. +PKG_DEPENDS_TARGET="toolchain"
  1793. PKG_LONGDESC="dav1d is an AV1 decoder :)"
  1794. +
  1795. +if [ "$TARGET_ARCH" = "x86_64" ]; then
  1796. + PKG_DEPENDS_TARGET+=" nasm:host"
  1797. +fi
  1798. diff --git a/packages/sysutils/busybox/package.mk b/packages/sysutils/busybox/package.mk
  1799. index 4d8b2fb..4aa977c 100644
  1800. --- a/packages/sysutils/busybox/package.mk
  1801. +++ b/packages/sysutils/busybox/package.mk
  1802. @@ -9,7 +9,7 @@ PKG_LICENSE="GPL"
  1803. PKG_SITE="http://www.busybox.net"
  1804. PKG_URL="http://busybox.net/downloads/$PKG_NAME-$PKG_VERSION.tar.bz2"
  1805. PKG_DEPENDS_HOST=""
  1806. -PKG_DEPENDS_TARGET="toolchain busybox:host hdparm dosfstools e2fsprogs zip unzip pciutils usbutils parted procps-ng gptfdisk libtirpc"
  1807. +PKG_DEPENDS_TARGET="toolchain busybox:host hdparm dosfstools e2fsprogs zip unzip usbutils parted procps-ng gptfdisk libtirpc"
  1808. PKG_DEPENDS_INIT="toolchain libtirpc"
  1809. PKG_LONGDESC="BusyBox combines tiny versions of many common UNIX utilities into a single small executable."
  1810. # busybox fails to build with GOLD support enabled with binutils-2.25
  1811. @@ -25,6 +25,10 @@ if [ "$NFS_SUPPORT" = yes ]; then
  1812. PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET rpcbind"
  1813. fi
  1814.  
  1815. +if [ "$TARGET_ARCH" = "x86_64" ]; then
  1816. + PKG_DEPENDS_TARGET+=" pciutils"
  1817. +fi
  1818. +
  1819. pre_build_target() {
  1820. PKG_MAKE_OPTS_TARGET="ARCH=$TARGET_ARCH \
  1821. HOSTCC=$HOST_CC \
  1822. --
  1823. 2.14.1
  1824.  
  1825.  
  1826. From c4ed79c7a5e3242cbda4cdf525c82227956000d2 Mon Sep 17 00:00:00 2001
  1827. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  1828. Date: Sat, 5 Jan 2019 02:50:57 +0000
  1829. Subject: [PATCH 10/16] packages: add missing dependencies
  1830.  
  1831. ---
  1832. packages/addons/addon-depends/system-tools-depends/p7zip/package.mk | 1 +
  1833. packages/compress/bzip2/package.mk | 2 +-
  1834. packages/compress/zstd/package.mk | 1 +
  1835. packages/databases/sqlite/package.mk | 1 +
  1836. packages/debug/libunwind/package.mk | 1 +
  1837. packages/devel/libffi/package.mk | 2 ++
  1838. packages/devel/ncurses/package.mk | 1 +
  1839. packages/devel/pcre/package.mk | 2 +-
  1840. packages/lang/gcc/package.mk | 1 +
  1841. packages/mediacenter/JsonSchemaBuilder/package.mk | 1 +
  1842. packages/security/nspr/package.mk | 2 +-
  1843. packages/sysutils/busybox/package.mk | 2 +-
  1844. packages/sysutils/dosfstools/package.mk | 2 ++
  1845. packages/sysutils/e2fsprogs/package.mk | 1 +
  1846. packages/sysutils/util-linux/package.mk | 2 +-
  1847. packages/tools/aml-dtbtools/package.mk | 1 +
  1848. packages/tools/dtc/package.mk | 2 +-
  1849. packages/tools/mkbootimg/package.mk | 3 ++-
  1850. packages/tools/mtools/package.mk | 3 ++-
  1851. 19 files changed, 23 insertions(+), 8 deletions(-)
  1852.  
  1853. diff --git a/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk b/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk
  1854. index 4db0399..53ef8ff 100644
  1855. --- a/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk
  1856. +++ b/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk
  1857. @@ -7,6 +7,7 @@ PKG_SHA256="5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f"
  1858. PKG_LICENSE="GPL"
  1859. PKG_SITE="http://p7zip.sourceforge.net/"
  1860. PKG_URL="http://downloads.sourceforge.net/project/p7zip/p7zip/${PKG_VERSION}/p7zip_${PKG_VERSION}_src_all.tar.bz2"
  1861. +PKG_DEPENDS_HOST="gcc:host"
  1862. PKG_DEPENDS_TARGET="toolchain"
  1863. PKG_LONGDESC="p7zip is a port of 7za.exe for POSIX systems like Unix."
  1864. PKG_TOOLCHAIN="manual"
  1865. diff --git a/packages/compress/bzip2/package.mk b/packages/compress/bzip2/package.mk
  1866. index 610406b..9a12838 100644
  1867. --- a/packages/compress/bzip2/package.mk
  1868. +++ b/packages/compress/bzip2/package.mk
  1869. @@ -8,7 +8,7 @@ PKG_SHA256="a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd"
  1870. PKG_LICENSE="GPL"
  1871. PKG_SITE="http://www.bzip.org"
  1872. PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.gz"
  1873. -PKG_DEPENDS_HOST=""
  1874. +PKG_DEPENDS_HOST="gcc:host"
  1875. PKG_DEPENDS_TARGET="toolchain"
  1876. PKG_LONGDESC="A high-quality bzip2 data compressor."
  1877. PKG_BUILD_FLAGS="+pic +pic:host"
  1878. diff --git a/packages/compress/zstd/package.mk b/packages/compress/zstd/package.mk
  1879. index 60120e9..6f0bce1 100644
  1880. --- a/packages/compress/zstd/package.mk
  1881. +++ b/packages/compress/zstd/package.mk
  1882. @@ -8,6 +8,7 @@ PKG_LICENSE="BSD/GPLv2"
  1883. PKG_SITE="http://www.zstd.net"
  1884. PKG_URL="https://github.com/facebook/zstd/archive/v${PKG_VERSION}.tar.gz"
  1885. PKG_SOURCE_DIR=$PKG_NAME-$PKG_VERSION
  1886. +PKG_DEPENDS_HOST="gcc:host ninja:host"
  1887. PKG_DEPENDS_TARGET="toolchain"
  1888. PKG_LONGDESC="A fast real-time compression algorithm."
  1889.  
  1890. diff --git a/packages/databases/sqlite/package.mk b/packages/databases/sqlite/package.mk
  1891. index 66af712..8a793e8 100644
  1892. --- a/packages/databases/sqlite/package.mk
  1893. +++ b/packages/databases/sqlite/package.mk
  1894. @@ -8,6 +8,7 @@ PKG_SHA256="5daa6a3fb7d1e8c767cd59c4ded8da6e4b00c61d3b466d0685e35c4dd6d7bf5d"
  1895. PKG_LICENSE="PublicDomain"
  1896. PKG_SITE="https://www.sqlite.org/"
  1897. PKG_URL="https://www.sqlite.org/2018/$PKG_NAME-$PKG_VERSION.tar.gz"
  1898. +PKG_DEPENDS_HOST="gcc:host"
  1899. PKG_DEPENDS_TARGET="toolchain"
  1900. PKG_LONGDESC="An Embeddable SQL Database Engine."
  1901. # libsqlite3.a(sqlite3.o): requires dynamic R_X86_64_PC32 reloc against 'sqlite3_stricmp' which may overflow at runtime
  1902. diff --git a/packages/debug/libunwind/package.mk b/packages/debug/libunwind/package.mk
  1903. index 47698d3..44b91b6 100644
  1904. --- a/packages/debug/libunwind/package.mk
  1905. +++ b/packages/debug/libunwind/package.mk
  1906. @@ -7,6 +7,7 @@ PKG_SHA256="3f3ecb90e28cbe53fba7a4a27ccce7aad188d3210bb1964a923a731a27a75acb"
  1907. PKG_LICENSE="GPL"
  1908. PKG_SITE="http://www.nongnu.org/libunwind/"
  1909. PKG_URL="http://download.savannah.nongnu.org/releases/libunwind/libunwind-${PKG_VERSION}.tar.gz"
  1910. +PKG_DEPENDS_TARGET="gcc:host"
  1911. PKG_LONGDESC="library to determine the call-chain of a program"
  1912.  
  1913. PKG_CONFIGURE_OPTS_TARGET="--enable-static \
  1914. diff --git a/packages/devel/libffi/package.mk b/packages/devel/libffi/package.mk
  1915. index b4e83eb..0cb80e0 100644
  1916. --- a/packages/devel/libffi/package.mk
  1917. +++ b/packages/devel/libffi/package.mk
  1918. @@ -1,5 +1,6 @@
  1919. # SPDX-License-Identifier: GPL-2.0-or-later
  1920. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  1921. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1922.  
  1923. PKG_NAME="libffi"
  1924. PKG_VERSION="3.2.1"
  1925. @@ -7,6 +8,7 @@ PKG_SHA256="d06ebb8e1d9a22d19e38d63fdb83954253f39bedc5d46232a05645685722ca37"
  1926. PKG_LICENSE="GPL"
  1927. PKG_SITE="http://sourceware.org/$PKG_NAME/"
  1928. PKG_URL="ftp://sourceware.org/pub/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.gz"
  1929. +PKG_DEPENDS_HOST="gcc:host"
  1930. PKG_DEPENDS_TARGET="toolchain"
  1931. PKG_LONGDESC="Foreign Function Interface Library."
  1932. PKG_TOOLCHAIN="autotools"
  1933. diff --git a/packages/devel/ncurses/package.mk b/packages/devel/ncurses/package.mk
  1934. index c04d685..e579734 100644
  1935. --- a/packages/devel/ncurses/package.mk
  1936. +++ b/packages/devel/ncurses/package.mk
  1937. @@ -7,6 +7,7 @@ PKG_SHA256="08b07c3e792961f300829512c283d5fefc0b1c421a57b76922c3d13303ed677d"
  1938. PKG_LICENSE="MIT"
  1939. PKG_SITE="http://www.gnu.org/software/ncurses/"
  1940. PKG_URL="http://invisible-mirror.net/archives/ncurses/current/ncurses-$PKG_VERSION.tgz"
  1941. +PKG_DEPENDS_HOST="gcc:host"
  1942. PKG_DEPENDS_TARGET="toolchain zlib ncurses:host"
  1943. PKG_LONGDESC="A library is a free software emulation of curses in System V Release 4.0, and more."
  1944. # causes some segmentation fault's (dialog) when compiled with gcc's link time optimization.
  1945. diff --git a/packages/devel/pcre/package.mk b/packages/devel/pcre/package.mk
  1946. index 0518214..3148324 100644
  1947. --- a/packages/devel/pcre/package.mk
  1948. +++ b/packages/devel/pcre/package.mk
  1949. @@ -8,7 +8,7 @@ PKG_SHA256="2cd04b7c887808be030254e8d77de11d3fe9d4505c39d4b15d2664ffe8bf9301"
  1950. PKG_LICENSE="OSS"
  1951. PKG_SITE="http://www.pcre.org/"
  1952. PKG_URL="https://ftp.pcre.org/pub/pcre/$PKG_NAME-$PKG_VERSION.tar.bz2"
  1953. -PKG_DEPENDS_HOST=""
  1954. +PKG_DEPENDS_HOST="gcc:host"
  1955. PKG_DEPENDS_TARGET="toolchain"
  1956. PKG_LONGDESC="A set of functions that implement regular expression pattern matching."
  1957. PKG_TOOLCHAIN="configure"
  1958. diff --git a/packages/lang/gcc/package.mk b/packages/lang/gcc/package.mk
  1959. index f899aeb..a7d1d87 100644
  1960. --- a/packages/lang/gcc/package.mk
  1961. +++ b/packages/lang/gcc/package.mk
  1962. @@ -11,6 +11,7 @@ PKG_URL="http://ftpmirror.gnu.org/gcc/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERS
  1963. PKG_DEPENDS_BOOTSTRAP="ccache:host autoconf:host binutils:host gmp:host mpfr:host mpc:host"
  1964. PKG_DEPENDS_TARGET="gcc:host"
  1965. PKG_DEPENDS_HOST="ccache:host autoconf:host binutils:host gmp:host mpfr:host mpc:host glibc"
  1966. +PKG_DEPENDS_INIT="toolchain"
  1967. PKG_LONGDESC="This package contains the GNU Compiler Collection."
  1968.  
  1969. GCC_COMMON_CONFIGURE_OPTS="--target=$TARGET_NAME \
  1970. diff --git a/packages/mediacenter/JsonSchemaBuilder/package.mk b/packages/mediacenter/JsonSchemaBuilder/package.mk
  1971. index b62b79a..91fefc9 100644
  1972. --- a/packages/mediacenter/JsonSchemaBuilder/package.mk
  1973. +++ b/packages/mediacenter/JsonSchemaBuilder/package.mk
  1974. @@ -6,6 +6,7 @@ PKG_NAME="JsonSchemaBuilder"
  1975. PKG_VERSION="0"
  1976. PKG_LICENSE="GPL"
  1977. PKG_SITE="http://www.kodi.tv"
  1978. +PKG_DEPENDS_HOST="toolchain"
  1979. PKG_DEPENDS_UNPACK="kodi"
  1980. PKG_NEED_UNPACK="$(get_pkg_directory $MEDIACENTER)"
  1981. PKG_LONGDESC="kodi-platform:"
  1982. diff --git a/packages/security/nspr/package.mk b/packages/security/nspr/package.mk
  1983. index fd63908..58f4f22 100644
  1984. --- a/packages/security/nspr/package.mk
  1985. +++ b/packages/security/nspr/package.mk
  1986. @@ -7,7 +7,7 @@ PKG_VERSION="4.19"
  1987. PKG_LICENSE="Mozilla Public License"
  1988. PKG_SITE="http://www.linuxfromscratch.org/blfs/view/svn/general/nspr.html"
  1989. PKG_DEPENDS_HOST="ccache:host"
  1990. -PKG_DEPENDS_TARGET="toolchain nss:host"
  1991. +PKG_DEPENDS_TARGET="toolchain nss:host nspr:host"
  1992. PKG_DEPENDS_UNPACK="nss"
  1993. PKG_LONGDESC="Netscape Portable Runtime (NSPR) provides a platform-neutral API for system level and libc like functions"
  1994. PKG_TOOLCHAIN="configure"
  1995. diff --git a/packages/sysutils/busybox/package.mk b/packages/sysutils/busybox/package.mk
  1996. index 4aa977c..dd1fba0 100644
  1997. --- a/packages/sysutils/busybox/package.mk
  1998. +++ b/packages/sysutils/busybox/package.mk
  1999. @@ -8,7 +8,7 @@ PKG_SHA256="97648636e579462296478e0218e65e4bc1e9cd69089a3b1aeb810bff7621efb7"
  2000. PKG_LICENSE="GPL"
  2001. PKG_SITE="http://www.busybox.net"
  2002. PKG_URL="http://busybox.net/downloads/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2003. -PKG_DEPENDS_HOST=""
  2004. +PKG_DEPENDS_HOST="gcc:host"
  2005. PKG_DEPENDS_TARGET="toolchain busybox:host hdparm dosfstools e2fsprogs zip unzip usbutils parted procps-ng gptfdisk libtirpc"
  2006. PKG_DEPENDS_INIT="toolchain libtirpc"
  2007. PKG_LONGDESC="BusyBox combines tiny versions of many common UNIX utilities into a single small executable."
  2008. diff --git a/packages/sysutils/dosfstools/package.mk b/packages/sysutils/dosfstools/package.mk
  2009. index 6f8c72b..ffaf5f7 100644
  2010. --- a/packages/sysutils/dosfstools/package.mk
  2011. +++ b/packages/sysutils/dosfstools/package.mk
  2012. @@ -1,5 +1,6 @@
  2013. # SPDX-License-Identifier: GPL-2.0-or-later
  2014. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2015. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2016.  
  2017. PKG_NAME="dosfstools"
  2018. PKG_VERSION="3.0.28"
  2019. @@ -8,6 +9,7 @@ PKG_LICENSE="GPLv3"
  2020. PKG_SITE="https://github.com/dosfstools/dosfstools"
  2021. PKG_URL="https://github.com/dosfstools/dosfstools/releases/download/v$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz"
  2022. PKG_DEPENDS_TARGET="toolchain"
  2023. +PKG_DEPENDS_HOST="gcc:host"
  2024. PKG_DEPENDS_INIT="toolchain dosfstools"
  2025. PKG_LONGDESC="dosfstools contains utilities for making and checking MS-DOS FAT filesystems."
  2026.  
  2027. diff --git a/packages/sysutils/e2fsprogs/package.mk b/packages/sysutils/e2fsprogs/package.mk
  2028. index 0daafc5..260315e 100644
  2029. --- a/packages/sysutils/e2fsprogs/package.mk
  2030. +++ b/packages/sysutils/e2fsprogs/package.mk
  2031. @@ -8,6 +8,7 @@ PKG_SHA256="926f8e8de1ffba55d791f21b71334e8a32b5227257ad370f2bf7e4396629e97f"
  2032. PKG_LICENSE="GPL"
  2033. PKG_SITE="http://e2fsprogs.sourceforge.net/"
  2034. PKG_URL="https://www.kernel.org/pub/linux/kernel/people/tytso/$PKG_NAME/v$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz"
  2035. +PKG_DEPENDS_HOST="gcc:host"
  2036. PKG_DEPENDS_TARGET="toolchain"
  2037. PKG_DEPENDS_INIT="toolchain"
  2038. PKG_LONGDESC="The filesystem utilities for the EXT2 filesystem, including e2fsck, mke2fs, dumpe2fs, fsck, and others."
  2039. diff --git a/packages/sysutils/util-linux/package.mk b/packages/sysutils/util-linux/package.mk
  2040. index 07e07e8..bbe9b4a 100644
  2041. --- a/packages/sysutils/util-linux/package.mk
  2042. +++ b/packages/sysutils/util-linux/package.mk
  2043. @@ -7,7 +7,7 @@ PKG_VERSION="2.32.1"
  2044. PKG_SHA256="86e6707a379c7ff5489c218cfaf1e3464b0b95acf7817db0bc5f179e356a67b2"
  2045. PKG_LICENSE="GPL"
  2046. PKG_URL="http://www.kernel.org/pub/linux/utils/util-linux/v${PKG_VERSION%.*}/$PKG_NAME-$PKG_VERSION.tar.xz"
  2047. -PKG_DEPENDS_HOST=""
  2048. +PKG_DEPENDS_HOST="gcc:host"
  2049. PKG_DEPENDS_TARGET="toolchain"
  2050. PKG_DEPENDS_INIT="toolchain"
  2051. PKG_LONGDESC="A large variety of low-level system utilities that are necessary for a Linux system to function."
  2052. diff --git a/packages/tools/aml-dtbtools/package.mk b/packages/tools/aml-dtbtools/package.mk
  2053. index 8e21b9b..93a0d28 100644
  2054. --- a/packages/tools/aml-dtbtools/package.mk
  2055. +++ b/packages/tools/aml-dtbtools/package.mk
  2056. @@ -7,6 +7,7 @@ PKG_SHA256="8bcaa83fcc9e85c9c04930e7411447d96a97da0809c5ecd9af91c8b554133c41"
  2057. PKG_LICENSE="free"
  2058. PKG_SITE="https://github.com/Wilhansen/aml-dtbtools"
  2059. PKG_URL="https://github.com/Wilhansen/aml-dtbtools/archive/${PKG_VERSION}.tar.gz"
  2060. +PKG_DEPENDS_HOST="gcc:host"
  2061. PKG_LONGDESC="AML DTB Tools"
  2062.  
  2063. PKG_MAKE_OPTS_HOST="dtbTool"
  2064. diff --git a/packages/tools/dtc/package.mk b/packages/tools/dtc/package.mk
  2065. index e943d3e..4fe132c 100644
  2066. --- a/packages/tools/dtc/package.mk
  2067. +++ b/packages/tools/dtc/package.mk
  2068. @@ -8,7 +8,7 @@ PKG_LICENSE="GPL"
  2069. PKG_SITE="https://git.kernel.org/pub/scm/utils/dtc/dtc.git/"
  2070. PKG_URL="https://git.kernel.org/pub/scm/utils/dtc/dtc.git/snapshot/$PKG_VERSION.tar.gz"
  2071. PKG_DEPENDS_HOST="Python2:host swig:host"
  2072. -PKG_DEPENDS_TARGET="toolchain"
  2073. +PKG_DEPENDS_TARGET="toolchain dtc:host"
  2074. PKG_LONGDESC="The Device Tree Compiler"
  2075.  
  2076. PKG_MAKE_OPTS_HOST="dtc libfdt"
  2077. diff --git a/packages/tools/mkbootimg/package.mk b/packages/tools/mkbootimg/package.mk
  2078. index 0b9d83a..adc1d3a 100644
  2079. --- a/packages/tools/mkbootimg/package.mk
  2080. +++ b/packages/tools/mkbootimg/package.mk
  2081. @@ -1,5 +1,6 @@
  2082. # SPDX-License-Identifier: GPL-2.0-or-later
  2083. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2084. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2085.  
  2086. PKG_NAME="mkbootimg"
  2087. PKG_VERSION="6668fc2"
  2088. @@ -7,7 +8,7 @@ PKG_SHA256="d84870e055414d638a3e7eb4b7a3ebf415899841218f24cb3647d06ecf6ddb17"
  2089. PKG_LICENSE="GPL"
  2090. PKG_SITE="https://android.googlesource.com/platform/system/core/+/master/mkbootimg/"
  2091. PKG_URL="https://github.com/codesnake/mkbootimg/archive/$PKG_VERSION.tar.gz"
  2092. -PKG_DEPENDS_HOST=""
  2093. +PKG_DEPENDS_HOST="gcc:host"
  2094. PKG_LONGDESC="mkbootimg: Creates kernel boot images for Android"
  2095.  
  2096. makeinstall_host() {
  2097. diff --git a/packages/tools/mtools/package.mk b/packages/tools/mtools/package.mk
  2098. index 099488f..e0dd42e 100644
  2099. --- a/packages/tools/mtools/package.mk
  2100. +++ b/packages/tools/mtools/package.mk
  2101. @@ -1,5 +1,6 @@
  2102. # SPDX-License-Identifier: GPL-2.0-or-later
  2103. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2104. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2105.  
  2106. PKG_NAME="mtools"
  2107. PKG_VERSION="4.0.18"
  2108. @@ -7,6 +8,6 @@ PKG_SHA256="59e9cf80885399c4f229e5d87e49c0c2bfeec044e1386d59fcd0b0aead6b2f85"
  2109. PKG_LICENSE="GPL"
  2110. PKG_SITE="http://www.gnu.org/software/mtools/"
  2111. PKG_URL="http://ftpmirror.gnu.org/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2112. -PKG_DEPENDS_HOST=""
  2113. +PKG_DEPENDS_HOST="gcc:host"
  2114. PKG_LONGDESC="mtools: A collection of utilities to access MS-DOS disks"
  2115. PKG_TOOLCHAIN="autotools"
  2116. --
  2117. 2.14.1
  2118.  
  2119.  
  2120. From 3b53e51239004f572556e06ee2cbbd3334734727 Mon Sep 17 00:00:00 2001
  2121. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2122. Date: Sun, 6 Jan 2019 10:22:10 +0000
  2123. Subject: [PATCH 11/16] packages: add missing xorg-server dependencies
  2124.  
  2125. ---
  2126. packages/x11/driver/xf86-input-evdev/package.mk | 2 +-
  2127. packages/x11/driver/xf86-input-synaptics/package.mk | 2 +-
  2128. 2 files changed, 2 insertions(+), 2 deletions(-)
  2129.  
  2130. diff --git a/packages/x11/driver/xf86-input-evdev/package.mk b/packages/x11/driver/xf86-input-evdev/package.mk
  2131. index e83dd81..c015cfc 100644
  2132. --- a/packages/x11/driver/xf86-input-evdev/package.mk
  2133. +++ b/packages/x11/driver/xf86-input-evdev/package.mk
  2134. @@ -8,7 +8,7 @@ PKG_SHA256="9edaa6205baf6d2922cc4db3d8e54a7e7773b5f733b0ae90f6be7725f983b70d"
  2135. PKG_LICENSE="OSS"
  2136. PKG_SITE="http://www.X.org"
  2137. PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2138. -PKG_DEPENDS_TARGET="toolchain util-macros libevdev mtdev systemd"
  2139. +PKG_DEPENDS_TARGET="toolchain xorg-server util-macros libevdev mtdev systemd"
  2140. PKG_LONGDESC="Evdev is an Xorg input driver for Linux's generic event devices."
  2141. PKG_TOOLCHAIN="autotools"
  2142.  
  2143. diff --git a/packages/x11/driver/xf86-input-synaptics/package.mk b/packages/x11/driver/xf86-input-synaptics/package.mk
  2144. index abbdf17..8cb9b74 100644
  2145. --- a/packages/x11/driver/xf86-input-synaptics/package.mk
  2146. +++ b/packages/x11/driver/xf86-input-synaptics/package.mk
  2147. @@ -7,7 +7,7 @@ PKG_SHA256="afba3289d7a40217a19d90db98ce181772f9ca6d77e1898727b0afcf02073b5a"
  2148. PKG_LICENSE="GPL"
  2149. PKG_SITE="http://lists.freedesktop.org/mailman/listinfo/xorg"
  2150. PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2151. -PKG_DEPENDS_TARGET="toolchain libXi"
  2152. +PKG_DEPENDS_TARGET="toolchain xorg-server libXi"
  2153. PKG_LONGDESC="Synaptics touchpad driver for X.Org."
  2154. PKG_TOOLCHAIN="autotools"
  2155.  
  2156. --
  2157. 2.14.1
  2158.  
  2159.  
  2160. From 402dba9b739c3751d4a74d0bed1928da24d4cef8 Mon Sep 17 00:00:00 2001
  2161. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2162. Date: Sun, 6 Jan 2019 05:43:49 +0000
  2163. Subject: [PATCH 12/16] packages: elfutils: needs elfutils:host
  2164.  
  2165. ---
  2166. packages/devel/elfutils/package.mk | 2 +-
  2167. 1 file changed, 1 insertion(+), 1 deletion(-)
  2168.  
  2169. diff --git a/packages/devel/elfutils/package.mk b/packages/devel/elfutils/package.mk
  2170. index 6a2cedb..3534b60 100644
  2171. --- a/packages/devel/elfutils/package.mk
  2172. +++ b/packages/devel/elfutils/package.mk
  2173. @@ -9,7 +9,7 @@ PKG_LICENSE="GPL"
  2174. PKG_SITE="https://sourceware.org/elfutils/"
  2175. PKG_URL="https://sourceware.org/elfutils/ftp/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2176. PKG_DEPENDS_HOST="make:host zlib:host"
  2177. -PKG_DEPENDS_TARGET="toolchain zlib"
  2178. +PKG_DEPENDS_TARGET="toolchain zlib elfutils:host"
  2179. PKG_LONGDESC="A collection of utilities to handle ELF objects."
  2180. PKG_TOOLCHAIN="autotools"
  2181. PKG_BUILD_FLAGS="+pic"
  2182. --
  2183. 2.14.1
  2184.  
  2185.  
  2186. From aa95e58018f76ab8be1849f5f943a9c6bde137a1 Mon Sep 17 00:00:00 2001
  2187. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2188. Date: Sat, 5 Jan 2019 22:42:12 +0000
  2189. Subject: [PATCH 13/16] initramfs: use ln -sfn when LINK_NAME is a directory
  2190.  
  2191. INSTALL initramfs (target)
  2192. ln: failed to create symbolic link '/home/ubuntu/projects/LibreELEC.tv/build.LibreELEC-RPi2.arm-9.0-devel-mt/initramfs/lib/lib': Permission denied
  2193. ln: failed to create symbolic link '/home/ubuntu/projects/LibreELEC.tv/build.LibreELEC-RPi2.arm-9.0-devel-mt/initramfs/bin/bin': Permission denied
  2194. ln: failed to create symbolic link '/home/ubuntu/projects/LibreELEC.tv/build.LibreELEC-RPi2.arm-9.0-devel-mt/initramfs/sbin/sbin': Permission denied
  2195.  
  2196. If the directory sym link already exists, we try to
  2197. create a directory within the dereferenced sym link. So...
  2198.  
  2199. ln -sf /usr/lib $BUILD/initramfs/lib
  2200.  
  2201. means we attempt to create a sym link within the existing
  2202. $BUILD/initramfs/lib which is derefernced to /usr/lib/lib,
  2203. resulting in "permission denied".
  2204. ---
  2205. packages/virtual/initramfs/package.mk | 10 +++++-----
  2206. 1 file changed, 5 insertions(+), 5 deletions(-)
  2207.  
  2208. diff --git a/packages/virtual/initramfs/package.mk b/packages/virtual/initramfs/package.mk
  2209. index ef17f19..b278804 100644
  2210. --- a/packages/virtual/initramfs/package.mk
  2211. +++ b/packages/virtual/initramfs/package.mk
  2212. @@ -22,14 +22,14 @@ fi
  2213. post_install() {
  2214. ( cd $BUILD/initramfs
  2215. if [ "$TARGET_ARCH" = "x86_64" ]; then
  2216. - ln -sf /usr/lib $BUILD/initramfs/lib64
  2217. + ln -sfn /usr/lib $BUILD/initramfs/lib64
  2218. mkdir -p $BUILD/initramfs/usr
  2219. - ln -sf /usr/lib $BUILD/initramfs/usr/lib64
  2220. + ln -sfn /usr/lib $BUILD/initramfs/usr/lib64
  2221. fi
  2222.  
  2223. - ln -sf /usr/lib $BUILD/initramfs/lib
  2224. - ln -sf /usr/bin $BUILD/initramfs/bin
  2225. - ln -sf /usr/sbin $BUILD/initramfs/sbin
  2226. + ln -sfn /usr/lib $BUILD/initramfs/lib
  2227. + ln -sfn /usr/bin $BUILD/initramfs/bin
  2228. + ln -sfn /usr/sbin $BUILD/initramfs/sbin
  2229.  
  2230. mkdir -p $BUILD/image/
  2231. fakeroot -- sh -c \
  2232. --
  2233. 2.14.1
  2234.  
  2235.  
  2236. From 6094594e33985500e996826bbbee8fd82a476655 Mon Sep 17 00:00:00 2001
  2237. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2238. Date: Sun, 6 Jan 2019 10:48:46 +0000
  2239. Subject: [PATCH 14/16] flex: work around realloc/malloc build failures with
  2240. flex:target
  2241.  
  2242. ---
  2243. packages/devel/flex/package.mk | 4 ++++
  2244. 1 file changed, 4 insertions(+)
  2245.  
  2246. diff --git a/packages/devel/flex/package.mk b/packages/devel/flex/package.mk
  2247. index 091e4c2..f59cc28 100644
  2248. --- a/packages/devel/flex/package.mk
  2249. +++ b/packages/devel/flex/package.mk
  2250. @@ -1,5 +1,6 @@
  2251. # SPDX-License-Identifier: GPL-2.0-or-later
  2252. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2253. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2254.  
  2255. PKG_NAME="flex"
  2256. PKG_VERSION="2.5.39"
  2257. @@ -13,6 +14,9 @@ PKG_TOOLCHAIN="autotools"
  2258.  
  2259. PKG_CONFIGURE_OPTS_HOST="--enable-static --disable-shared --disable-rpath --with-gnu-ld"
  2260.  
  2261. +PKG_CONFIGURE_OPTS_TARGET="ac_cv_func_realloc_0_nonnull=yes \
  2262. + ac_cv_func_malloc_0_nonnull=yes"
  2263. +
  2264. post_makeinstall_host() {
  2265. cat > $TOOLCHAIN/bin/lex << "EOF"
  2266. #!/bin/sh
  2267. --
  2268. 2.14.1
  2269.  
  2270.  
  2271. From fc2e01071c9ef942c0f588554ee7103c9c944320 Mon Sep 17 00:00:00 2001
  2272. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2273. Date: Sat, 5 Jan 2019 19:32:50 +0000
  2274. Subject: [PATCH 15/16] Makefile: switch to using multi-threaded builds
  2275.  
  2276. ---
  2277. Makefile | 6 +++---
  2278. 1 file changed, 3 insertions(+), 3 deletions(-)
  2279.  
  2280. diff --git a/Makefile b/Makefile
  2281. index a26a9e2..bf85107 100644
  2282. --- a/Makefile
  2283. +++ b/Makefile
  2284. @@ -3,13 +3,13 @@ BUILD_DIRS=build.*
  2285. all: release
  2286.  
  2287. system:
  2288. - ./scripts/image
  2289. + ./scripts/image_mt
  2290.  
  2291. release:
  2292. - ./scripts/image release
  2293. + ./scripts/image_mt release
  2294.  
  2295. image:
  2296. - ./scripts/image mkimage
  2297. + ./scripts/image_mt mkimage
  2298.  
  2299. noobs:
  2300. ./scripts/image noobs
  2301. --
  2302. 2.14.1
  2303.  
  2304.  
  2305. From 8019520328c85ea4a178e6a8b0daaedbe07e3816 Mon Sep 17 00:00:00 2001
  2306. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2307. Date: Sun, 6 Jan 2019 04:03:29 +0000
  2308. Subject: [PATCH 16/16] TEMP: scripts/mttest: testing package
  2309.  
  2310. ---
  2311. scripts/mttest | 28 ++++++++++++++++++++++++++++
  2312. 1 file changed, 28 insertions(+)
  2313. create mode 100755 scripts/mttest
  2314.  
  2315. diff --git a/scripts/mttest b/scripts/mttest
  2316. new file mode 100755
  2317. index 0000000..137dc0f
  2318. --- /dev/null
  2319. +++ b/scripts/mttest
  2320. @@ -0,0 +1,28 @@
  2321. +#!/bin/bash
  2322. +
  2323. +# SPDX-License-Identifier: GPL-2.0-or-later
  2324. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2325. +
  2326. +unset _CACHE_PACKAGE_LOCAL _CACHE_PACKAGE_GLOBAL _DEBUG_DEPENDS_LIST _DEBUG_PACKAGE_LIST
  2327. +
  2328. +. config/options ""
  2329. +. config/multithread
  2330. +
  2331. +BUILD_STEPS=
  2332. +for pkg in ${@}; do
  2333. + BUILD_STEPS+=" ${pkg}"
  2334. +done
  2335. +
  2336. +[ -z "${BUILD_STEPS}" ] && BUILD_STEPS="image"
  2337. +
  2338. +start_multithread_build() {
  2339. + PARALLEL_BIN=${TOOLCHAIN}/bin/parallel
  2340. +
  2341. + [ -x ${PARALLEL_BIN} ] || PARALLEL_BIN=parallel
  2342. +
  2343. + cat ${_CACHE_PACKAGE_GLOBAL} ${_CACHE_PACKAGE_LOCAL} | \
  2344. + ${PARALLEL_BIN} --plain --no-notice --max-args 30 json_worker | \
  2345. + ${SCRIPTS}/genpkglist.py --build ${BUILD_STEPS} --warn-invalid ${GENFLAGS}
  2346. +}
  2347. +
  2348. +start_multithread_build || die "Parallel build/install failure"
  2349. --
  2350. 2.14.1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement