Advertisement
Guest User

Untitled

a guest
Jan 13th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 106.96 KB | None | 0 0
  1. From 4da38f35e80cd07b1b284f503d4484fb5e889874 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/19] 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 0283eaf3783e702c1f2c78018b6b20420100ade3 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/19] 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 b4e6f5cd40ac6f797100392f335e2cbdb1b07e18 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/19] 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 c952889daa994fa887fe60d5545d365e9ce367a0 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/19] 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 fd3e678..f8d64c1 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 0c1d9ef079dad6f48b7ed811288bc198d4827117 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/19] config/functions: add pkg_lock helpers
  132.  
  133. ---
  134. config/functions | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
  135. 1 file changed, 117 insertions(+), 1 deletion(-)
  136.  
  137. diff --git a/config/functions b/config/functions
  138. index f8d64c1..7b9669c 100644
  139. --- a/config/functions
  140. +++ b/config/functions
  141. @@ -1159,7 +1159,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. @@ -1181,6 +1181,122 @@ 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. + exec 99>"${THREAD_CONTROL}/locks/${pkg}.${mode}"
  167. + if ! flock --nonblock --exclusive 99; then
  168. + while [ : ]; do
  169. + read -r lock_job lock_mode lock_pkg <<<$(cat "${THREAD_CONTROL}/locks/${pkg}.${mode}.owner" 2>/dev/null)
  170. + [ -n "${lock_job}" ] && break || sleep 1
  171. + done
  172. +
  173. + if [ ${lock_job} != ${this_job} ]; then
  174. + pkg_lock_status "STALLED" "${parent_pkg}" "${mode}" "$(printf "waiting on [%02d] %s %s" ${lock_job} "${lock_mode}" "${lock_pkg}")"
  175. + flock --exclusive 99
  176. + fi
  177. + fi
  178. + echo "${this_job} ${mode} ${pkg}" >"${THREAD_CONTROL}/locks/${pkg}.${mode}.owner"
  179. +
  180. + pkg_lock_status "LOCKED" "${pkg}" "${mode}"
  181. +}
  182. +
  183. +# Log additional information for a locked package.
  184. +pkg_lock_status() {
  185. + [ -z ${MTJOBID} ] && return 0
  186. +
  187. + local status="$1" pkg="$2" mode="$3" msg="$4"
  188. + local this_job="${MTJOBID}" line
  189. +
  190. + printf -v line "%s: <%05d> [%02d/%0*d] %-7s %-7s %s" \
  191. + "$(date +%Y-%m-%d\ %H:%M:%S.%N)" $$ ${this_job} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${status}" "${mode}" "${pkg}"
  192. + [ -n "${msg}" ] && line+=" (${msg})"
  193. +
  194. + echo "${line}" >>"${THREAD_CONTROL}/history"
  195. +
  196. + update_scoreboard "${status}" "${pkg}" "${mode}" "${msg}"
  197. +}
  198. +
  199. +update_scoreboard() {
  200. + local status="$1" pkg="$2" mode="$3" msg="$4"
  201. + local line sedline preamble num elapsed projdevarch
  202. + local boldred boldgreen boldyellow endcolor
  203. +
  204. + (
  205. + flock --exclusive 99
  206. +
  207. + [ -n "${MTJOBID}" ] && sedline=$((MTJOBID + 2)) || sedline=1
  208. +
  209. + num=$(cat "${THREAD_CONTROL}/status" | wc -l)
  210. + while [ ${num} -lt ${sedline} ]; do echo "" >>"${THREAD_CONTROL}/status"; num=$((num + 1)); done
  211. +
  212. + num=$(($(cat "${THREAD_CONTROL}/progress.prev") + 1))
  213. + projdevarch="${PROJECT}\/"
  214. + [ -n "${DEVICE}" ] && projdevarch+="${DEVICE}\/"
  215. + projdevarch+="${TARGET_ARCH}"
  216. + TZ=UTC0 printf -v elapsed "%(%H:%M:%S)T" $(($(date +%s) - MTBUILDSTART))
  217. + printf -v preamble "%b%s Dashboard (%s) - %d of %d jobs completed, %s elapsed" "\e[2J\e[0;0H" "${DISTRONAME}" "${projdevarch}" ${num} ${MTMAXJOBS} "${elapsed}"
  218. + printf -v preamble "%-120s %s" "${preamble}" "$(date "+%Y-%m-%d %H:%M:%S")"
  219. +
  220. + # Only update the header when caller is not a worker thread
  221. + if [ -z "${MTJOBID}" ]; then
  222. + sed -e "1s/.*/${preamble}/" -i "${THREAD_CONTROL}/status"
  223. + else
  224. + if [ "${DISABLE_COLORS}" != "yes" ]; then
  225. + boldred="\e[1;31m"
  226. + boldgreen="\e[1;32m"
  227. + boldyellow="\e[1;33m"
  228. + endcolor="\e[0m"
  229. +
  230. + case "${status}" in
  231. + STALLED) color="${boldyellow}";;
  232. + FAILED ) color="${boldred}";;
  233. + *) color="${boldgreen}";;
  234. + esac
  235. + fi
  236. +
  237. + printf -v line "[%02d\/%0*d]: %b%-7s%b %-7s %-30s" ${MTJOBID} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${color}" "${status}" "${endcolor}" "${mode}" "${pkg}"
  238. + [ -n "${msg}" ] && line+=" ${msg//\//\\/}"
  239. + sed -e "1s/.*/${preamble}/;${sedline}s/.*/${line}/" -i "${THREAD_CONTROL}/status"
  240. + fi
  241. + ) 99>"${THREAD_CONTROL}/locks/.status"
  242. +}
  243. +
  244. +# Thread concurrency helpers to avoid concurrency issues with some code,
  245. +# eg. when Python installs directly into $TOOLCHAIN.
  246. +# Test MTJOBID so that these are a noop during non-multithreaded builds.
  247. +acquire_exclusive_lock() {
  248. + if [ -n "${MTJOBID}" ]; then
  249. + exec 100>"${THREAD_CONTROL}/locks/.global"
  250. + flock --exclusive 100
  251. + fi
  252. +}
  253. +
  254. +release_exclusive_lock() {
  255. + if [ -n "${MTJOBID}" ]; then
  256. + flock --unlock 100
  257. + fi
  258. +}
  259. +
  260. +# Execute single command using mutex
  261. +exec_thread_safe() {
  262. + local result
  263. + acquire_exclusive_lock
  264. + $@
  265. + result=$?
  266. + release_exclusive_lock
  267. + return ${result}
  268. +}
  269. +
  270. # Use distribution functions if any
  271. if [ -f "distributions/$DISTRO/config/functions" ]; then
  272. . distributions/$DISTRO/config/functions
  273. --
  274. 2.14.1
  275.  
  276.  
  277. From 0eeed1a97d5b01e0fa5f1715ada99b12cd2f52ef Mon Sep 17 00:00:00 2001
  278. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  279. Date: Sat, 5 Jan 2019 02:37:33 +0000
  280. Subject: [PATCH 06/19] build system: add parallel build support; use new
  281. "image" package
  282.  
  283. ---
  284. config/multithread | 119 +++++++++
  285. packages/devel/parallel/package.mk | 11 +
  286. packages/virtual/image/package.mk | 44 ++++
  287. scripts/build | 35 ++-
  288. scripts/genbuildplan.py | 366 +++++++++++++++++++++++++++
  289. scripts/image | 12 +-
  290. scripts/image_mt | 498 +++++++++++++++++++++++++++++++++++++
  291. scripts/install | 18 +-
  292. scripts/unpack | 28 ++-
  293. scripts/viewplan | 17 ++
  294. tools/dashboard | 10 +
  295. 11 files changed, 1124 insertions(+), 34 deletions(-)
  296. create mode 100644 config/multithread
  297. create mode 100644 packages/devel/parallel/package.mk
  298. create mode 100644 packages/virtual/image/package.mk
  299. create mode 100755 scripts/genbuildplan.py
  300. create mode 100755 scripts/image_mt
  301. create mode 100755 scripts/viewplan
  302. create mode 100755 tools/dashboard
  303.  
  304. diff --git a/config/multithread b/config/multithread
  305. new file mode 100644
  306. index 0000000..9369afb
  307. --- /dev/null
  308. +++ b/config/multithread
  309. @@ -0,0 +1,119 @@
  310. +# SPDX-License-Identifier: GPL-2.0-or-later
  311. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  312. +
  313. +THREADCOUNT=${THREADCOUNT:-100%}
  314. +
  315. +# This function is passed a list of package.mk paths to be processed.
  316. +# Each package.mk is sourced with relevant variables output in JSON format.
  317. +json_worker() {
  318. + local packages="$@"
  319. + local pkgpath hierarchy
  320. +
  321. + exit() { :; }
  322. +
  323. + . config/options ""
  324. +
  325. + for pkgpath in ${packages}; do
  326. + pkgpath="${pkgpath%%@*}"
  327. + source_package "${pkgpath}/package.mk" &>/dev/null
  328. + [[ ${pkgpath} =~ ^${ROOT}/${PACKAGES}/ ]] && hierarchy="global" || hierarchy="local"
  329. +
  330. + if [ -n "$PKG_ARCH" ]; then
  331. + listcontains "$PKG_ARCH" "!$TARGET_ARCH" && continue
  332. + listcontains "$PKG_ARCH" "$TARGET_ARCH" || listcontains "$PKG_ARCH" "any" || continue
  333. + fi
  334. +
  335. + cat <<EOF
  336. + {
  337. + "name": "${PKG_NAME}",
  338. + "hierarchy": "${hierarchy}",
  339. + "section": "${PKG_SECTION}",
  340. + "bootstrap": "${PKG_DEPENDS_BOOTSTRAP}",
  341. + "init": "${PKG_DEPENDS_INIT}",
  342. + "host": "${PKG_DEPENDS_HOST}",
  343. + "target": "${PKG_DEPENDS_TARGET}"
  344. + },
  345. +EOF
  346. + done
  347. +}
  348. +export -f json_worker
  349. +
  350. +# This function is passed the build instruction for a single job.
  351. +# The function will run either "build <package>" or "install <package>".
  352. +# ${slot} is the job slot number, ie. 1-8 when THREADCOUNT=8.
  353. +# ${job} is the sequence within the total number of ${jobs}.
  354. +package_worker() {
  355. + local slot=$1 job=$2 jobs=$3 args="$4"
  356. + local task pkgname result status
  357. +
  358. + . config/options ""
  359. +
  360. + export MTJOBID=${slot} MTMAXJOBS=${jobs}
  361. +
  362. + read -r task pkgname <<<$(echo "${args}")
  363. +
  364. + ${SCRIPTS}/${task} ${pkgname} 2>&1 && result=0 || result=1
  365. +
  366. + [ ${result} -eq 0 ] && status="DONE" || status="FAIL"
  367. +
  368. + (
  369. + flock --exclusive 99
  370. + num=$(($(cat "${THREAD_CONTROL}/progress") + 1))
  371. + cp "${THREAD_CONTROL}/progress" "${THREAD_CONTROL}/progress.prev"
  372. + echo "${num}" >"${THREAD_CONTROL}/progress"
  373. + printf "[%0*d/%0*d] [%-4s] %-7s %s\n" ${#jobs} ${num} ${#jobs} ${jobs} "${status}" "${task}" "${pkgname}" >&2
  374. + ) 99<"${THREAD_CONTROL}/progress"
  375. +
  376. + if [ ${result} -eq 0 ]; then
  377. + pkg_lock_status "IDLE"
  378. + else
  379. + pkg_lock_status "FAILED" "${pkgname}" "${task}"
  380. +
  381. + if [ -d "${THREAD_CONTROL}/logs" ]; then
  382. + cat >&2 <<EOF
  383. +$(print_color CLR_ERROR "FAILURE: $SCRIPTS/${task} ${pkgname} has failed!\n")
  384. +The following logs for this failure are available:
  385. + stdout: ${THREAD_CONTROL}/logs/${job}/stdout
  386. + stderr: ${THREAD_CONTROL}/logs/${job}/stderr
  387. +EOF
  388. + fi
  389. + fi
  390. +
  391. + return ${result}
  392. +}
  393. +export -f package_worker
  394. +
  395. +start_multithread_build() {
  396. + local logbuffer maxjobs now
  397. +
  398. + now=$(date +%s)
  399. +
  400. + # init thread control folder
  401. + rm -fr "${THREAD_CONTROL}"
  402. + mkdir -p "${THREAD_CONTROL}/locks"
  403. + echo -1 >"${THREAD_CONTROL}/progress.prev"
  404. + echo 0 >"${THREAD_CONTROL}/progress"
  405. + touch "${THREAD_CONTROL}/status"
  406. +
  407. + [ "${THREADCOUNT}" = "0" ] && THREADCOUNT=1
  408. + if [ "${THREADCOUNT}" = "1" -a "${ONELOG,,}" != "no" ] || [ "${ONELOG,,}" = "yes" ]; then
  409. + logbuffer="--ungroup"
  410. + else
  411. + mkdir -p "${THREAD_CONTROL}/logs"
  412. + logbuffer="--group --results ${THREAD_CONTROL}/logs/{#}/"
  413. + fi
  414. +
  415. + # Bootstrap the parallel package
  416. + $SCRIPTS/build parallel:host 2>&1 || die "Unable to bootstrap parallel package"
  417. +
  418. + cat ${_CACHE_PACKAGE_GLOBAL} ${_CACHE_PACKAGE_LOCAL} | \
  419. + ${TOOLCHAIN}/bin/parallel --plain --no-notice --max-args 30 json_worker | \
  420. + ${SCRIPTS}/genbuildplan.py --show-wants --build ${@} > "${THREAD_CONTROL}"/plan || return
  421. +
  422. + maxjobs=$(cat "${THREAD_CONTROL}"/plan | wc -l)
  423. +
  424. + cat "${THREAD_CONTROL}"/plan | awk '{print $1 " " $2}' | \
  425. + MTBUILDSTART=${now} ${TOOLCHAIN}/bin/parallel \
  426. + --plain --no-notice --max-procs ${THREADCOUNT} --joblog="${THREAD_CONTROL}/joblog" ${logbuffer} --halt now,fail=1 --plus \
  427. + package_worker {%} {#} {##} {}
  428. +}
  429. diff --git a/packages/devel/parallel/package.mk b/packages/devel/parallel/package.mk
  430. new file mode 100644
  431. index 0000000..99e28ea
  432. --- /dev/null
  433. +++ b/packages/devel/parallel/package.mk
  434. @@ -0,0 +1,11 @@
  435. +# SPDX-License-Identifier: GPL-2.0-or-later
  436. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  437. +
  438. +PKG_NAME="parallel"
  439. +PKG_VERSION="20181222"
  440. +PKG_SHA256="058c9f7cf599652aef5b54cf5c95c9a5b6d57d59ce4deebebf7938f7be4da369"
  441. +PKG_LICENSE="GPLv3"
  442. +PKG_SITE="https://www.gnu.org/software/parallel/"
  443. +PKG_URL="http://ftpmirror.gnu.org/parallel/$PKG_NAME-$PKG_VERSION.tar.bz2"
  444. +PKG_DEPENDS_HOST=""
  445. +PKG_LONGDESC="GNU parallel is a shell tool for executing jobs in parallel using one or more computers."
  446. diff --git a/packages/virtual/image/package.mk b/packages/virtual/image/package.mk
  447. new file mode 100644
  448. index 0000000..0ccc00b
  449. --- /dev/null
  450. +++ b/packages/virtual/image/package.mk
  451. @@ -0,0 +1,44 @@
  452. +# SPDX-License-Identifier: GPL-2.0-or-later
  453. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  454. +
  455. +PKG_NAME="image"
  456. +PKG_LICENSE="GPL"
  457. +PKG_SITE="https://libreelec.tv"
  458. +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"
  459. +PKG_SECTION="virtual"
  460. +PKG_LONGDESC="Root package used to build cnd create complete image"
  461. +
  462. +# Graphic support
  463. +[ ! "$DISPLAYSERVER" = "no" ] && PKG_DEPENDS_TARGET+=" $DISPLAYSERVER"
  464. +
  465. +# Multimedia support
  466. +[ ! "$MEDIACENTER" = "no" ] && PKG_DEPENDS_TARGET+=" mediacenter"
  467. +
  468. +# Sound support
  469. +[ "$ALSA_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" alsa"
  470. +
  471. +# Automounter support
  472. +[ "$UDEVIL" = "yes" ] && PKG_DEPENDS_TARGET+=" udevil"
  473. +
  474. +# EXFAT support
  475. +[ "$EXFAT" = "yes" ] && PKG_DEPENDS_TARGET+=" fuse-exfat"
  476. +
  477. +# NTFS 3G support
  478. +[ "$NTFS3G" = "yes" ] && PKG_DEPENDS_TARGET+=" ntfs-3g_ntfsprogs"
  479. +
  480. +# Remote support
  481. +[ "$REMOTE_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" remote"
  482. +
  483. +# Virtual image creation support
  484. +[ "$PROJECT" = "Generic" ] && PKG_DEPENDS_TARGET+=" virtual"
  485. +
  486. +# Installer support
  487. +[ "$INSTALLER_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" installer"
  488. +
  489. +# Devtools... (not for Release)
  490. +[ "$TESTING" = "yes" ] && PKG_DEPENDS_TARGET+=" testing"
  491. +
  492. +# OEM packages
  493. +[ "$OEM_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" oem"
  494. +
  495. +true
  496. diff --git a/scripts/build b/scripts/build
  497. index 9032474..7c74262 100755
  498. --- a/scripts/build
  499. +++ b/scripts/build
  500. @@ -7,7 +7,7 @@
  501. . config/options "$1"
  502.  
  503. if [ -z "$1" ]; then
  504. - die "usage: $0 package_name[:<host|target|init|bootstrap>]"
  505. + die "usage: $0 package_name[:<host|target|init|bootstrap>] [parent_pkg]"
  506. fi
  507.  
  508. if [ "$1" = "--all" ]; then
  509. @@ -32,10 +32,14 @@ if [ "${1//:/}" != "${1}" ]; then
  510. PACKAGE_NAME="${1%:*}"
  511. TARGET="${1#*:}"
  512. else
  513. - PACKAGE_NAME=$1
  514. + PACKAGE_NAME="${1}"
  515. TARGET=
  516. fi
  517. TARGET="${TARGET:-target}"
  518. +PARENT_PKG="${2:-${PKG_NAME}:${TARGET}}"
  519. +
  520. +# virtual packages are not built, so no need to lock
  521. +[ "$PKG_SECTION" != "virtual" ] && pkg_lock "${PACKAGE_NAME}:${TARGET}" "build" "${PARENT_PKG}"
  522.  
  523. mkdir -p $STAMPS/$PACKAGE_NAME
  524. STAMP=$STAMPS/$PACKAGE_NAME/build_$TARGET
  525. @@ -46,10 +50,11 @@ if [ -f $STAMP ]; then
  526. rm -f $STAMP
  527. elif [ ! "$BUILD_WITH_DEBUG" = "$STAMP_BUILD_WITH_DEBUG" ]; then
  528. rm -f $STAMP
  529. - elif [ "$1" = "u-boot" -a ! "$UBOOT_SYSTEM" = "$STAMP_UBOOT_SYSTEM" ]; then
  530. + elif [ "${PKG_NAME}" = "u-boot" -a ! "$UBOOT_SYSTEM" = "$STAMP_UBOOT_SYSTEM" ]; then
  531. rm -f $STAMP
  532. else
  533. # stamp matched: already built, do nothing
  534. + [ "$PKG_SECTION" != "virtual" ] && pkg_lock_status "UNLOCK" "${PKG_NAME}:${TARGET}" "build" "already built"
  535. exit 0
  536. fi
  537. fi
  538. @@ -65,16 +70,9 @@ case "$TARGET" in
  539. "bootstrap") _pkg_depends="$PKG_DEPENDS_BOOTSTRAP";;
  540. esac
  541. for p in $_pkg_depends; do
  542. - $SCRIPTS/build $p
  543. + $SCRIPTS/build "${p}" "${PARENT_PKG}"
  544. done
  545.  
  546. -# build this package
  547. -if [ "${BUILD_WITH_DEBUG}" = "yes" ]; then
  548. - build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})") [DEBUG]" "indent"
  549. -else
  550. - build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})")" "indent"
  551. -fi
  552. -
  553. # virtual packages are not built as they only contain dependencies, so dont go further here
  554. if [ "$PKG_SECTION" = "virtual" ]; then
  555. PKG_DEEPHASH=$(calculate_stamp)
  556. @@ -85,6 +83,15 @@ if [ "$PKG_SECTION" = "virtual" ]; then
  557. exit 0
  558. fi
  559.  
  560. +# build this package
  561. +if [ "${BUILD_WITH_DEBUG}" = "yes" ]; then
  562. + build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})") [DEBUG]" "indent"
  563. +else
  564. + build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})")" "indent"
  565. +fi
  566. +
  567. +pkg_lock_status "ACTIVE" "${PKG_NAME}:${TARGET}" "build"
  568. +
  569. setup_toolchain $TARGET
  570.  
  571. # configure install directory
  572. @@ -224,7 +231,7 @@ if [ -f "$PKG_CONFIGURE_SCRIPT" -o -f "$PKG_CMAKE_SCRIPT" -o -f "$PKG_MESON_SCRI
  573. mkdir -p "$PKG_REAL_BUILD"
  574. cd "$PKG_REAL_BUILD"
  575.  
  576. - MESON_CONF="$PKG_REAL_BUILD/meson.conf"
  577. + MESON_CONF="$PKG_REAL_BUILD/${TARGET}.meson.conf"
  578. fi
  579.  
  580. # configure
  581. @@ -449,6 +456,8 @@ PKG_DEEPHASH=$(calculate_stamp)
  582. for i in PKG_NAME PKG_DEEPHASH BUILD_WITH_DEBUG; do
  583. echo "STAMP_$i=\"${!i}\"" >> $STAMP
  584. done
  585. -if [ "$1" = "u-boot" ]; then
  586. +if [ "${PKG_NAME}" = "u-boot" ]; then
  587. echo "STAMP_UBOOT_SYSTEM=\"${UBOOT_SYSTEM}\"" >> $STAMP
  588. fi
  589. +
  590. +pkg_lock_status "UNLOCK" "${PACKAGE_NAME}:${TARGET}" "build" "built"
  591. diff --git a/scripts/genbuildplan.py b/scripts/genbuildplan.py
  592. new file mode 100755
  593. index 0000000..6631bcb
  594. --- /dev/null
  595. +++ b/scripts/genbuildplan.py
  596. @@ -0,0 +1,366 @@
  597. +#!/usr/bin/env python
  598. +# -*- coding: utf-8 -*-
  599. +
  600. +# SPDX-License-Identifier: GPL-2.0-or-later
  601. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  602. +
  603. +from __future__ import print_function
  604. +import sys, os, codecs, json, argparse, re
  605. +
  606. +ROOT_PKG = "__root__"
  607. +
  608. +class LibreELEC_Package:
  609. + def __init__(self, name, section):
  610. + self.name = name
  611. + self.section = section
  612. + self.deps = {"bootstrap": [],
  613. + "init": [],
  614. + "host": [],
  615. + "target": []}
  616. + self.wants = []
  617. + self.wantedby = []
  618. +
  619. + def __repr__(self):
  620. + s = "%-9s: %s" % ("name", self.name)
  621. + s = "%s\n%-9s: %s" % (s, "section", self.section)
  622. +
  623. + for t in self.deps:
  624. + s = "%s\n%-9s: %s" % (s, t, self.deps[t])
  625. +
  626. + s = "%s\n%-9s: %s" % (s, "NEEDS", self.wants)
  627. + s = "%s\n%-9s: %s" % (s, "WANTED BY", self.wantedby)
  628. +
  629. + return s
  630. +
  631. + def addDependencies(self, target, packages):
  632. + for d in " ".join(packages.split()).split():
  633. + self.deps[target].append(d)
  634. + name = d.split(":")[0]
  635. + if name not in self.wants and name != self.name:
  636. + self.wants.append(name)
  637. +
  638. + def delDependency(self, target, package):
  639. + if package in self.deps[target]:
  640. + self.deps[target].remove(package)
  641. + name = package.split(":")[0]
  642. + if name in self.wants:
  643. + self.wants.remove(name)
  644. +
  645. + def addReference(self, package):
  646. + name = package.split(":")[0]
  647. + if name not in self.wantedby:
  648. + self.wantedby.append(name)
  649. +
  650. + def delReference(self, package):
  651. + name = package.split(":")[0]
  652. + if name in self.wantedby:
  653. + self.wantedby.remove(name)
  654. +
  655. + def isReferenced(self):
  656. + return False if self.wants == [] else True
  657. +
  658. + def isWanted(self):
  659. + return False if self.wantedby == [] else True
  660. +
  661. + def references(self, package):
  662. + return package in self.wants
  663. +
  664. +# Reference material:
  665. +# https://www.electricmonk.nl/docs/dependency_resolving_algorithm/dependency_resolving_algorithm.html
  666. +class Node:
  667. + def __init__(self, name, target, section):
  668. + self.name = name
  669. + self.target = target
  670. + self.section = section
  671. + self.fqname = "%s:%s" % (name, target)
  672. + self.edges = []
  673. +
  674. + def appendEdges(self, node):
  675. + # Add the node itself...
  676. + if node not in self.edges:
  677. + self.edges.append(node)
  678. + # as well as it's edges
  679. + for e in node.edges:
  680. + if e not in self.edges:
  681. + self.edges.append(e)
  682. +
  683. + # Return True if the dependencies of the specified node are met by this node
  684. + def satisfies(self, node):
  685. + for e in node.edges:
  686. + if e not in self.edges:
  687. + return False
  688. + return True
  689. +
  690. + def __repr__(self):
  691. + s = "%-9s: %s" % ("name", self.name)
  692. + s = "%s\n%-9s: %s" % (s, "target", self.target)
  693. + s = "%s\n%-9s: %s" % (s, "fqname", self.fqname)
  694. + s = "%s\n%-9s: %s" % (s, "common", self.commonName())
  695. + s = "%s\n%-9s: %s" % (s, "section", self.section)
  696. +
  697. + for e in self.edges:
  698. + s = "%s\nEDGE: %s" % (s, e.fqname)
  699. +
  700. + return s
  701. +
  702. + def commonName(self):
  703. + return self.name if self.target == "target" else "%s:%s" % (self.name, self.target)
  704. +
  705. + def addEdge(self, node):
  706. + self.edges.append(node)
  707. +
  708. +def eprint(*args, **kwargs):
  709. + print(*args, file=sys.stderr, **kwargs)
  710. +
  711. +# Read a JSON list of all possible packages from stdin
  712. +def loadPackages():
  713. + jdata = json.loads("[%s]" % sys.stdin.read().replace('\n','')[:-1])
  714. +
  715. + map = {}
  716. +
  717. + # Load "global" packages first
  718. + for pkg in jdata:
  719. + if pkg["hierarchy"] == "global":
  720. + map[pkg["name"]] = initPackage(pkg)
  721. +
  722. + # Then the "local" packages, as these will replace any matching "global" packages
  723. + for pkg in jdata:
  724. + if pkg["hierarchy"] == "local":
  725. + map[pkg["name"]] = initPackage(pkg)
  726. +
  727. + return map
  728. +
  729. +# Create a fully formed LibreELEC_Package object
  730. +def initPackage(package):
  731. + pkg = LibreELEC_Package(package["name"], package["section"])
  732. +
  733. + for target in ["bootstrap", "init", "host", "target"]:
  734. + pkg.addDependencies(target, package[target])
  735. +
  736. + return pkg
  737. +
  738. +# Split name:target into components
  739. +def split_package(name):
  740. + parts = name.split(":")
  741. + pn = parts[0]
  742. + pt = parts[1] if len(parts) != 1 else "target"
  743. + return (pn, pt)
  744. +
  745. +# Return a list of packages of the specified type
  746. +def get_packages_by_target(target, list):
  747. + newlist = []
  748. +
  749. + for p in list:
  750. + (pn, pt) = split_package(p)
  751. + if target in ["target", "init"] and pt in ["target", "init"]:
  752. + newlist.append(p)
  753. + elif target in ["bootstrap", "host"] and pt in ["bootstrap", "host"]:
  754. + newlist.append(p)
  755. +
  756. + return newlist
  757. +
  758. +# For the specified node iterate over the list and return the first position where
  759. +# we could possibly build this node with all dependencies satisfied.
  760. +def findearliestpos(node, list):
  761. + # Keep a running total of all dependencies as we progress
  762. + # through the list (ie. build).
  763. + alldeps = Node("", "", "")
  764. +
  765. + for n in list:
  766. + alldeps.appendEdges(n)
  767. + if alldeps.satisfies(node):
  768. + return list.index(n) + 1
  769. +
  770. + return -1
  771. +
  772. +# Resolve dependencies for a node
  773. +def dep_resolve(node, resolved, unresolved, noreorder):
  774. + unresolved.append(node)
  775. + for edge in node.edges:
  776. + if edge not in resolved:
  777. + if edge in unresolved:
  778. + raise Exception('Circular reference detected: %s -> %s\nRemove %s from %s package.mk::PKG_DEPENDS_%s' % \
  779. + (node.fqname, edge.commonName(), edge.commonName(), node.name, node.target.upper()))
  780. + dep_resolve(edge, resolved, unresolved, noreorder)
  781. + if node not in resolved:
  782. + pos = -1 if noreorder else findearliestpos(node, resolved)
  783. + if pos != -1:
  784. + resolved.insert(pos, node)
  785. + else:
  786. + resolved.append(node)
  787. + unresolved.remove(node)
  788. +
  789. +# Return a list of build steps for the trigger packages
  790. +def get_build_steps(args, nodes, trigger_pkgs, built_pkgs):
  791. + resolved = []
  792. + unresolved = []
  793. +
  794. + for pkg in [x for x in trigger_pkgs if x]:
  795. + if pkg.find(":") == -1:
  796. + pkg = "%s:target" % pkg
  797. +
  798. + if pkg not in nodes:
  799. + raise Exception("Not a valid build trigger package: %s" % pkg)
  800. +
  801. + dep_resolve(nodes[pkg], resolved, unresolved, args.no_reorder)
  802. +
  803. + # Abort if any references remain unresolved
  804. + if unresolved != []:
  805. + eprint("The following dependencies have not been resolved:")
  806. + for dep in unresolved:
  807. + eprint(" %s" % dep)
  808. + raise("Unresolved references")
  809. +
  810. + # Output list of resolved dependencies
  811. + for pkg in resolved:
  812. + if pkg.fqname not in built_pkgs:
  813. + built_pkgs.append(pkg.fqname)
  814. + task = "build" if pkg.fqname.endswith(":host") else "install"
  815. + yield(task, pkg.fqname)
  816. +
  817. +# Reduce the complete list of packages to a map of those packages that will
  818. +# be needed for the build.
  819. +def processPackages(args, packages, build):
  820. + # Add dummy package to ensure build/install dependencies are not culled
  821. + pkg = {
  822. + "name": ROOT_PKG,
  823. + "section": "virtual",
  824. + "hierarchy": "global",
  825. + "bootstrap": "",
  826. + "init": "",
  827. + "host": " ".join(get_packages_by_target("host", build)),
  828. + "target": " ".join(get_packages_by_target("target", build))
  829. + }
  830. +
  831. + packages[pkg["name"]] = initPackage(pkg)
  832. +
  833. + # Resolve reverse references that we can use to ignore unreferenced packages
  834. + for pkgname in packages:
  835. + for opkgname in packages:
  836. + opkg = packages[opkgname]
  837. + if opkg.references(pkgname):
  838. + if pkgname in packages:
  839. + packages[pkgname].addReference(opkgname)
  840. +
  841. + # Identify unused packages
  842. + while True:
  843. + changed = False
  844. + for pkgname in packages:
  845. + pkg = packages[pkgname]
  846. + if pkg.isWanted():
  847. + for opkgname in pkg.wantedby:
  848. + if opkgname != ROOT_PKG:
  849. + if not packages[opkgname].isWanted():
  850. + pkg.delReference(opkgname)
  851. + changed = True
  852. + if not changed:
  853. + break
  854. +
  855. + # Create a new map of "needed" packages
  856. + needed_map = {}
  857. + for pkgname in packages:
  858. + pkg = packages[pkgname]
  859. + if pkg.isWanted() or pkgname == ROOT_PKG:
  860. + needed_map[pkgname] = pkg
  861. +
  862. + # Validate package dependency references
  863. + for pkgname in needed_map:
  864. + pkg = needed_map[pkgname]
  865. + for t in pkg.deps:
  866. + for d in pkg.deps[t]:
  867. + if split_package(d)[0] not in needed_map:
  868. + msg = 'Invalid package reference: dependency %s in package %s::PKG_DEPENDS_%s is not valid' % (d, pkgname, t.upper())
  869. + if args.warn_invalid:
  870. + eprint("WARNING: %s" % msg)
  871. + else:
  872. + raise Exception(msg)
  873. +
  874. + node_map = {}
  875. +
  876. + # Convert all packages to target-specific nodes
  877. + for pkgname in needed_map:
  878. + pkg = needed_map[pkgname]
  879. + for target in pkg.deps:
  880. + if pkg.deps[target]:
  881. + node = Node(pkgname, target, pkg.section)
  882. + node_map[node.fqname] = node
  883. +
  884. + # Ensure all referenced dependencies exist as a basic node
  885. + for pkgname in needed_map:
  886. + pkg = needed_map[pkgname]
  887. + for target in pkg.deps:
  888. + for dep in pkg.deps[target]:
  889. + dfq = dep if dep.find(":") != -1 else "%s:target" % dep
  890. + if dfq not in node_map:
  891. + (dfq_p, dfq_t) = split_package(dfq)
  892. + if dfq_p not in packages:
  893. + raise Exception("Invalid package! Package %s cannot be found for this PROJECT/DEVICE/ARCH" % dfq_p)
  894. + dpkg = packages[dfq_p]
  895. + node_map[dfq] = Node(dfq_p, dfq_t, dpkg.section)
  896. +
  897. + # To each target-specific node, add the correspnding
  898. + # target-specific dependency nodes ("edges")
  899. + for name in node_map:
  900. + node = node_map[name]
  901. + if node.name not in needed_map:
  902. + if args.warn_invalid:
  903. + continue
  904. + else:
  905. + raise Exception("Invalid package! Package %s cannot be found for this PROJECT/DEVICE/ARCH" % node.name)
  906. + for dep in needed_map[node.name].deps[node.target]:
  907. + dfq = dep if dep.find(":") != -1 else "%s:target" % dep
  908. + node.addEdge(node_map[dfq])
  909. +
  910. + return node_map
  911. +
  912. +#---------------------------------------------
  913. +parser = argparse.ArgumentParser(description="Generate package dependency list for the requested build/install packages. \
  914. + Package data will be read from stdin in JSON format.", \
  915. + formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=25,width=90))
  916. +
  917. +parser.add_argument("-b", "--build", nargs="+", metavar="PACKAGE", required=True, \
  918. + help="Space-separated list of build trigger packages, either for host or target. Required property - specify at least one package.")
  919. +
  920. +parser.add_argument("--warn-invalid", action="store_true", \
  921. + help="Warn about invalid/missing dependency packages, perhaps excluded by a PKG_ARCH incompatability. Default is to abort.")
  922. +
  923. +parser.add_argument("--no-reorder", action="store_true", \
  924. + help="Do not resequence steps based on dependencies. Default is to resequence.")
  925. +
  926. +parser.add_argument("--show-wants", action="store_true", \
  927. + help="Output \"wants\" dependencies for each step.")
  928. +
  929. +parser.add_argument("--hide-wants", action="store_false", dest="show_wants", \
  930. + help="Disable --show-wants.")
  931. +
  932. +args = parser.parse_args()
  933. +
  934. +ALL_PACKAGES = loadPackages()
  935. +
  936. +loaded = len(ALL_PACKAGES)
  937. +
  938. +REQUIRED_PKGS = processPackages(args, ALL_PACKAGES, args.build)
  939. +
  940. +# Output list of packages to build/install
  941. +built_pkgs = []
  942. +steps = []
  943. +
  944. +for step in get_build_steps(args, REQUIRED_PKGS, args.build, built_pkgs):
  945. + steps.append(step)
  946. +
  947. +eprint("Packages loaded : %d" % loaded)
  948. +eprint("Build trigger(s): %d [%s]" % (len(args.build), " ".join(args.build)))
  949. +eprint("Package steps : %d" % len(steps))
  950. +eprint("")
  951. +
  952. +# Output build/install steps
  953. +if args.show_wants:
  954. + for step in steps:
  955. + wants = []
  956. + node = (REQUIRED_PKGS[step[1]])
  957. + for e in node.edges:
  958. + wants.append(e.fqname)
  959. + print("%-7s %-25s (wants: %s)" % (step[0], step[1], ", ".join(wants)))
  960. +else:
  961. + for step in steps:
  962. + print("%-7s %s" % (step[0], step[1]))
  963. diff --git a/scripts/image b/scripts/image
  964. index c164aa0..ea126e8 100755
  965. --- a/scripts/image
  966. +++ b/scripts/image
  967. @@ -97,14 +97,14 @@ mkdir -p $INSTALL
  968. for directory in etc dev proc run sys tmp usr var flash storage; do
  969. mkdir -p $INSTALL/$directory
  970. done
  971. -ln -sf /var/media $INSTALL/media
  972. -ln -sf /usr/lib $INSTALL/lib
  973. -ln -sf /usr/bin $INSTALL/bin
  974. -ln -sf /usr/sbin $INSTALL/sbin
  975. +ln -sfn /var/media $INSTALL/media
  976. +ln -sfn /usr/lib $INSTALL/lib
  977. +ln -sfn /usr/bin $INSTALL/bin
  978. +ln -sfn /usr/sbin $INSTALL/sbin
  979.  
  980. if [ "$TARGET_ARCH" = "x86_64" ]; then
  981. - ln -s /usr/lib $INSTALL/lib64
  982. - ln -s /usr/lib $INSTALL/usr/lib64
  983. + ln -sfn /usr/lib $INSTALL/lib64
  984. + ln -sfn /usr/lib $INSTALL/usr/lib64
  985. fi
  986.  
  987. echo "$TARGET_VERSION" > $INSTALL/etc/release
  988. diff --git a/scripts/image_mt b/scripts/image_mt
  989. new file mode 100755
  990. index 0000000..14bcdc0
  991. --- /dev/null
  992. +++ b/scripts/image_mt
  993. @@ -0,0 +1,498 @@
  994. +#!/bin/bash
  995. +
  996. +# SPDX-License-Identifier: GPL-2.0-or-later
  997. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  998. +
  999. +unset _CACHE_PACKAGE_LOCAL _CACHE_PACKAGE_GLOBAL _DEBUG_DEPENDS_LIST _DEBUG_PACKAGE_LIST
  1000. +
  1001. +. config/options ""
  1002. +. config/multithread
  1003. +. config/show_config
  1004. +
  1005. +show_config
  1006. +save_build_config
  1007. +
  1008. +# Setup both toolchain cmake configs to avoid potentially racy behaviour later,
  1009. +# using a fork as we don't want the exports at this stage.
  1010. +for t in host target; do
  1011. + ( setup_toolchain ${t} )
  1012. +done
  1013. +
  1014. +if [ -n "$CUSTOM_GIT_HASH" ]; then
  1015. + GIT_HASH="$CUSTOM_GIT_HASH"
  1016. +else
  1017. + GIT_HASH=$(git rev-parse HEAD)
  1018. +fi
  1019. +
  1020. +if [ "$LIBREELEC_VERSION" = "devel" ]; then
  1021. + GIT_ABBREV=${GIT_HASH:0:7}
  1022. + DEVEL_VERSION=$LIBREELEC_VERSION
  1023. + case "$BUILD_PERIODIC" in
  1024. + nightly) LIBREELEC_VERSION=nightly-$(date +%Y%m%d)-$GIT_ABBREV;;
  1025. + daily) LIBREELEC_VERSION=daily-$(date +%Y%j)-$GIT_ABBREV;;
  1026. + weekly) LIBREELEC_VERSION=weekly-$(date +%G%V)-$GIT_ABBREV;;
  1027. + monthly) LIBREELEC_VERSION=monthly-$(date +%Y%m)-$GIT_ABBREV;;
  1028. + *) LIBREELEC_VERSION=devel-$(date +%Y%m%d%H%M%S)-$GIT_ABBREV;;
  1029. + esac
  1030. +fi
  1031. +
  1032. +# Get origin url, fix git:// and git@github.com: urls if necessary
  1033. +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/#')"
  1034. +
  1035. +[ "${BUILDER_NAME,,}" = "official" ] && BUILDER_NAME=
  1036. +if [ "$OFFICIAL" = "yes" ]; then
  1037. + LIBREELEC_BUILD="official"
  1038. +else
  1039. + if [ -n "$BUILDER_NAME" ]; then
  1040. + LIBREELEC_BUILD="$BUILDER_NAME"
  1041. + else
  1042. + LIBREELEC_BUILD="community"
  1043. + fi
  1044. +fi
  1045. +
  1046. +if [ -n "$CUSTOM_VERSION" ]; then
  1047. + LIBREELEC_VERSION="$CUSTOM_VERSION"
  1048. +fi
  1049. +
  1050. +LIBREELEC_ARCH="${DEVICE:-$PROJECT}.$TARGET_ARCH"
  1051. +TARGET_VERSION="$LIBREELEC_ARCH-$LIBREELEC_VERSION"
  1052. +
  1053. +if [ -n "$CUSTOM_IMAGE_NAME" ]; then
  1054. + IMAGE_NAME="$CUSTOM_IMAGE_NAME"
  1055. +else
  1056. + if [ "$DEVEL_VERSION" = "devel" ]; then
  1057. + IMAGE_NAME="$DISTRONAME-$LIBREELEC_ARCH-$OS_VERSION-$LIBREELEC_VERSION"
  1058. + else
  1059. + IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
  1060. + fi
  1061. +
  1062. + if [ -n "$UBOOT_SYSTEM" ] && [ "$UBOOT_SYSTEM" != "${DEVICE:-$PROJECT}" ]; then
  1063. + IMAGE_NAME="$IMAGE_NAME-$UBOOT_SYSTEM"
  1064. + fi
  1065. +fi
  1066. +
  1067. +if [ -n "$IMAGE_SUFFIX" ]; then
  1068. + IMAGE_NAME="$IMAGE_NAME-$IMAGE_SUFFIX"
  1069. +fi
  1070. +
  1071. +echo "$IMAGE_NAME" > $BUILD/BUILD_FILENAME
  1072. +
  1073. +# Setup fakeroot
  1074. +rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist
  1075. +touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT
  1076. +chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable
  1077. +echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT
  1078. +
  1079. +# Clean old install dirs
  1080. +rm -rf $INSTALL
  1081. +rm -rf $STAMPS_INSTALL
  1082. +mkdir -p $INSTALL
  1083. +
  1084. +# Create base layout of LibreELEC read-only file system
  1085. +for directory in etc dev proc run sys tmp usr var flash storage; do
  1086. + mkdir -p $INSTALL/$directory
  1087. +done
  1088. +
  1089. +# Build image contents
  1090. +start_multithread_build image || die "Parallel build failure - see log for details. Time of failure: $(date)"
  1091. +
  1092. +echo "Successful build, creating image..." >&2
  1093. +
  1094. +# Create legacy sym links
  1095. +ln -sfn /var/media $INSTALL/media
  1096. +ln -sfn /usr/lib $INSTALL/lib
  1097. +ln -sfn /usr/bin $INSTALL/bin
  1098. +ln -sfn /usr/sbin $INSTALL/sbin
  1099. +
  1100. +if [ "$TARGET_ARCH" = "x86_64" ]; then
  1101. + ln -sfn /usr/lib $INSTALL/lib64
  1102. + ln -sfn /usr/lib $INSTALL/usr/lib64
  1103. +fi
  1104. +
  1105. +echo "$TARGET_VERSION" > $INSTALL/etc/release
  1106. +
  1107. +# Create /etc/os-release
  1108. +echo -e "NAME=\"$DISTRONAME\"" > $INSTALL/etc/os-release
  1109. +echo -e "VERSION=\"$LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release
  1110. +echo -e "ID=\"libreelec\"" >> $INSTALL/etc/os-release
  1111. +echo -e "VERSION_ID=\"$OS_VERSION\"" >> $INSTALL/etc/os-release
  1112. +echo -e "PRETTY_NAME=\"$DISTRONAME ($LIBREELEC_BUILD): $LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release
  1113. +echo -e "HOME_URL=\"https://libreelec.tv\"" >> $INSTALL/etc/os-release
  1114. +echo -e "BUG_REPORT_URL=\"$ORIGIN_URL\"" >> $INSTALL/etc/os-release
  1115. +echo -e "BUILD_ID=\"$GIT_HASH\"" >> $INSTALL/etc/os-release
  1116. +echo -e "OPENELEC_ARCH=\"$LIBREELEC_ARCH\"" >> $INSTALL/etc/os-release
  1117. +echo -e "LIBREELEC_ARCH=\"$LIBREELEC_ARCH\"" >> $INSTALL/etc/os-release
  1118. +echo -e "LIBREELEC_BUILD=\"$LIBREELEC_BUILD\"" >> $INSTALL/etc/os-release
  1119. +echo -e "LIBREELEC_PROJECT=\"$PROJECT\"" >> $INSTALL/etc/os-release
  1120. +[ -n "$DEVICE" ] && echo -e "LIBREELEC_DEVICE=\"$DEVICE\"" >> $INSTALL/etc/os-release
  1121. +[ -n "$BUILDER_NAME" ] && echo -e "BUILDER_NAME=\"$BUILDER_NAME\"" >> $INSTALL/etc/os-release
  1122. +[ -n "$BUILDER_VERSION" ] && echo -e "BUILDER_VERSION=\"$BUILDER_VERSION\"" >> $INSTALL/etc/os-release
  1123. +
  1124. +# Create /etc/issue
  1125. +echo "$GREETING0" > $INSTALL/etc/issue
  1126. +echo "$GREETING1" >> $INSTALL/etc/issue
  1127. +echo "$GREETING2" >> $INSTALL/etc/issue
  1128. +echo "$GREETING3" >> $INSTALL/etc/issue
  1129. +echo "$GREETING4" >> $INSTALL/etc/issue
  1130. +echo "$DISTRONAME ($LIBREELEC_BUILD): $LIBREELEC_VERSION ($LIBREELEC_ARCH)" >> $INSTALL/etc/issue
  1131. +
  1132. +ln -sf /etc/issue $INSTALL/etc/motd
  1133. +
  1134. +# Copy PROJECT related files to filesystem
  1135. +if [ -d "$PROJECT_DIR/$PROJECT/filesystem" ]; then
  1136. + cp -PR $PROJECT_DIR/$PROJECT/filesystem/* $INSTALL
  1137. + # Install project specific systemd services
  1138. + for service in $PROJECT_DIR/$PROJECT/filesystem/usr/lib/systemd/system/*.service; do
  1139. + if [ -f "$service" ]; then
  1140. + enable_service $(basename $service)
  1141. + fi
  1142. + done
  1143. +fi
  1144. +
  1145. +# Copy DEVICE related files to filesystem
  1146. +if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem" ]; then
  1147. + cp -PR $PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem/* $INSTALL
  1148. + # Install device specific systemd services
  1149. + for service in $PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem/usr/lib/systemd/system/*.service; do
  1150. + if [ -f "$service" ]; then
  1151. + enable_service $(basename $service)
  1152. + fi
  1153. + done
  1154. +fi
  1155. +
  1156. +# Run depmod for base overlay modules
  1157. +MODVER=$(basename $(ls -d $INSTALL/usr/lib/kernel-overlays/base/lib/modules/*))
  1158. +find $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/ -name *.ko | \
  1159. + sed -e "s,$INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/,," \
  1160. + > $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/modules.order
  1161. +$TOOLCHAIN/bin/depmod -b $INSTALL/usr/lib/kernel-overlays/base -a -e -F "$BUILD/linux-$(kernel_version)/System.map" $MODVER 2>&1
  1162. +
  1163. +# Strip kernel modules
  1164. +for MOD in $(find $INSTALL/usr/lib/kernel-overlays/ -type f -name *.ko); do
  1165. + ${TARGET_KERNEL_PREFIX}strip --strip-debug $MOD
  1166. +done
  1167. +
  1168. +# Symlink overlayed modules to /usr/lib/modules
  1169. +ln -sT /var/lib/modules $INSTALL/usr/lib/modules
  1170. +
  1171. +# Symlink overlayed firmware to /usr/lib/firmware
  1172. +ln -sT /var/lib/firmware $INSTALL/usr/lib/firmware
  1173. +
  1174. +# Make target dir
  1175. +mkdir -p $TARGET_IMG
  1176. +rm -rf $TARGET_IMG/$IMAGE_NAME.kernel
  1177. +
  1178. +# Copy kernel to target dir
  1179. +cp -PR $BUILD/linux-$(kernel_version)/arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET $TARGET_IMG/$IMAGE_NAME.kernel
  1180. +chmod 0644 $TARGET_IMG/$IMAGE_NAME.kernel
  1181. +
  1182. +# Set mksquashfs options for each compression method
  1183. +if [ -z "$SQUASHFS_COMPRESSION_OPTION" ]; then
  1184. + if [ "${SQUASHFS_COMPRESSION:-gzip}" = "gzip" ]; then
  1185. + SQUASHFS_COMPRESSION_OPTION="-Xcompression-level 9 -b 262144"
  1186. + elif [ "$SQUASHFS_COMPRESSION" = "lzo" ]; then
  1187. + SQUASHFS_COMPRESSION_OPTION="-Xcompression-level 9 -b 524288"
  1188. + elif [ "$SQUASHFS_COMPRESSION" = "zstd" ]; then
  1189. + SQUASHFS_COMPRESSION_OPTION="-Xcompression-level 22 -b 262144"
  1190. + fi
  1191. +fi
  1192. +
  1193. +# Create squashfs file, default to gzip if no compression configured
  1194. +echo "rm -rf \"$TARGET_IMG/$IMAGE_NAME.system\"" >> $FAKEROOT_SCRIPT
  1195. +echo "$TOOLCHAIN/bin/mksquashfs \"$BUILD/image/system\" \"$TARGET_IMG/$IMAGE_NAME.system\" -noappend -comp ${SQUASHFS_COMPRESSION:-gzip} ${SQUASHFS_COMPRESSION_OPTION}" >> $FAKEROOT_SCRIPT
  1196. +
  1197. +# Run fakeroot
  1198. +$TOOLCHAIN/bin/fakeroot -- $FAKEROOT_SCRIPT
  1199. +rm -rf $FAKEROOT_SCRIPT
  1200. +
  1201. +# Set permissions
  1202. +chmod 0644 $TARGET_IMG/$IMAGE_NAME.system
  1203. +
  1204. +if [ "$1" = "release" -o "$1" = "mkimage" -o "$1" = "amlpkg" -o "$1" = "noobs" ]; then
  1205. +
  1206. + RELEASE_DIR="target/$IMAGE_NAME"
  1207. +
  1208. + # Cleanup
  1209. + rm -rf $RELEASE_DIR
  1210. +
  1211. + # Create release dir
  1212. + mkdir -p $RELEASE_DIR
  1213. +
  1214. + # Remove any previously created release images
  1215. + rm -rf $TARGET_IMG/$IMAGE_NAME.img.gz
  1216. +
  1217. + if [ -n "$BOOTLOADER" ]; then
  1218. +
  1219. + BOOTLOADER_DIR="$(get_pkg_directory "$BOOTLOADER")"
  1220. +
  1221. + if [ -d $BOOTLOADER_DIR/files ]; then
  1222. + cp -R $BOOTLOADER_DIR/files/* $RELEASE_DIR
  1223. + fi
  1224. +
  1225. + if find_file_path bootloader/release $BOOTLOADER_DIR/release; then
  1226. + echo "Running $FOUND_PATH"
  1227. + . $FOUND_PATH
  1228. + fi
  1229. + fi
  1230. +
  1231. + cp $ROOT/README* $RELEASE_DIR
  1232. + cp $ROOT/CHANGELOG* $RELEASE_DIR
  1233. + echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE
  1234. +
  1235. + if [ ! "$MEDIACENTER" = "no" ]; then
  1236. + echo "Kodi commit: $(get_pkg_version $MEDIACENTER)" >> $RELEASE_DIR/RELEASE
  1237. + fi
  1238. +
  1239. + mkdir -p $RELEASE_DIR/licenses
  1240. + cp $ROOT/licenses/* $RELEASE_DIR/licenses
  1241. +
  1242. + mkdir -p $RELEASE_DIR/target
  1243. + cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/target/SYSTEM
  1244. + cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/target/KERNEL
  1245. +
  1246. + # Create md5sum's
  1247. + ( cd $RELEASE_DIR;
  1248. + md5sum -t target/SYSTEM > target/SYSTEM.md5;
  1249. + md5sum -t target/KERNEL > target/KERNEL.md5;
  1250. + )
  1251. +
  1252. + # Create target directory
  1253. + mkdir -p $TARGET_IMG
  1254. +
  1255. + # Remove any previously created release tarballs
  1256. + rm -rf $TARGET_IMG/$IMAGE_NAME.tar
  1257. +
  1258. + # Create release tarball
  1259. + tar cf $TARGET_IMG/$IMAGE_NAME.tar -C target $IMAGE_NAME
  1260. +
  1261. + # Create sha256 checksum of tarball
  1262. + ( cd $TARGET_IMG
  1263. + sha256sum ${IMAGE_NAME}.tar > ${IMAGE_NAME}.tar.sha256
  1264. + )
  1265. +
  1266. + # Create image files if requested
  1267. + if [[ ( "$1" = "amlpkg" || "$1" = "noobs" || "$1" = "mkimage" ) && -n "$BOOTLOADER" ]]; then
  1268. + # INSTALL_SRC_DIR can be board specific
  1269. + if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/install" ]; then
  1270. + INSTALL_SRC_DIR="$PROJECT_DIR/$PROJECT/devices/$DEVICE/install"
  1271. + else
  1272. + INSTALL_SRC_DIR="$PROJECT_DIR/$PROJECT/install"
  1273. + fi
  1274. +
  1275. + # Variables used in image script must be passed
  1276. + env \
  1277. + PATH="$PATH:/sbin" \
  1278. + ROOT="$ROOT" \
  1279. + SCRIPTS="$SCRIPTS" \
  1280. + TOOLCHAIN="$TOOLCHAIN" \
  1281. + PROJECT_DIR="$PROJECT_DIR" \
  1282. + PROJECT="$PROJECT" \
  1283. + DEVICE="$DEVICE" \
  1284. + DISTRO="$DISTRO" \
  1285. + TARGET_IMG="$TARGET_IMG" \
  1286. + IMAGE_NAME="$IMAGE_NAME" \
  1287. + INSTALL_SRC_DIR="$INSTALL_SRC_DIR" \
  1288. + BOOTLOADER="$BOOTLOADER" \
  1289. + KERNEL_NAME="$KERNEL_NAME" \
  1290. + TARGET_KERNEL_ARCH="$TARGET_KERNEL_ARCH" \
  1291. + RELEASE_DIR=$RELEASE_DIR \
  1292. + UUID_STORAGE="$(uuidgen)" \
  1293. + DISTRO_BOOTLABEL="$DISTRO_BOOTLABEL" \
  1294. + DISTRO_DISKLABEL="$DISTRO_DISKLABEL" \
  1295. + UBOOT_SYSTEM="$UBOOT_SYSTEM" \
  1296. + UBOOT_VERSION="$UBOOT_VERSION" \
  1297. + EXTRA_CMDLINE="$EXTRA_CMDLINE" \
  1298. + SYSTEM_SIZE="$SYSTEM_SIZE" \
  1299. + SYSTEM_PART_START="$SYSTEM_PART_START" \
  1300. + $SCRIPTS/mkimage
  1301. + fi
  1302. +
  1303. + # Cleanup release dir
  1304. + rm -rf $RELEASE_DIR
  1305. +
  1306. + # Create WeTek Play (Amlogic) ZIP update and auto-install packages if requested
  1307. + if [ "$1" = "amlpkg" ]; then
  1308. + echo "Creating Amlogic ZIP update package"
  1309. +
  1310. + AML_PKG_DIR="$RELEASE_DIR/ampl-pkg"
  1311. +
  1312. + # Create package directory
  1313. + mkdir -p "$AML_PKG_DIR"
  1314. +
  1315. + # Copy system and kernel images
  1316. + mkdir -p "$AML_PKG_DIR/system"
  1317. + cp $TARGET_IMG/$IMAGE_NAME.system $AML_PKG_DIR/system/SYSTEM
  1318. + cp $TARGET_IMG/$IMAGE_NAME.kernel $AML_PKG_DIR/KERNEL
  1319. +
  1320. + # Copy update-binary and updater-script
  1321. + META_INF_DIR="$AML_PKG_DIR/META-INF/com/google/android"
  1322. + mkdir -p "$META_INF_DIR"
  1323. + cp $INSTALL_SRC_DIR/update-binary $META_INF_DIR
  1324. + cp $INSTALL_SRC_DIR/updater-script $META_INF_DIR
  1325. +
  1326. + # Copy other files if any
  1327. + if [ -d "$INSTALL_SRC_DIR/files" ]; then
  1328. + cp -PR $INSTALL_SRC_DIR/files/* $AML_PKG_DIR
  1329. + fi
  1330. +
  1331. + # Copy device tree image if any
  1332. + if [ -f "$INSTALL/usr/share/bootloader/dtb.img" ]; then
  1333. + cp "$INSTALL/usr/share/bootloader/dtb.img" $AML_PKG_DIR/dtb.img
  1334. + fi
  1335. +
  1336. + # Create the update package
  1337. + pushd "$AML_PKG_DIR" > /dev/null
  1338. + zip -rq update.zip *
  1339. +
  1340. + # Sign the update package
  1341. + echo "Signing the update package"
  1342. + mkdir -p sign
  1343. + SIGNAPK_DIR="$ROOT/tools/signapk"
  1344. + java -Xmx1024m -jar $SIGNAPK_DIR/signapk.jar -w $SIGNAPK_DIR/testkey.x509.pem $SIGNAPK_DIR/testkey.pk8 update.zip sign/$IMAGE_NAME-update.zip
  1345. +
  1346. + # Create the auto-install package
  1347. + echo "Creating Amlogic ZIP auto-install package"
  1348. + pushd sign > /dev/null
  1349. + echo --update_package=/sdcard/$IMAGE_NAME-update.zip > factory_update_param.aml
  1350. + echo --wipe_data >> factory_update_param.aml
  1351. + echo --wipe_cache >> factory_update_param.aml
  1352. + if [ -f "$INSTALL_SRC_DIR/files/recovery.img" ]; then
  1353. + cp $INSTALL_SRC_DIR/files/recovery.img .
  1354. + fi
  1355. +
  1356. + if [ -f $INSTALL_SRC_DIR/files/aml_autoscript ]; then
  1357. + cp $INSTALL_SRC_DIR/files/aml_autoscript .
  1358. + fi
  1359. +
  1360. + # Copy device tree image if any
  1361. + if [ -f "$INSTALL/usr/share/bootloader/dtb.img" ]; then
  1362. + cp "$INSTALL/usr/share/bootloader/dtb.img" .
  1363. + fi
  1364. +
  1365. + zip -q $TARGET_IMG/$IMAGE_NAME.zip *
  1366. +
  1367. + # Create sha256 checksum of zip
  1368. + ( cd $TARGET_IMG
  1369. + sha256sum ${IMAGE_NAME}.zip > ${IMAGE_NAME}.zip.sha256
  1370. + )
  1371. +
  1372. + popd > /dev/null
  1373. + popd > /dev/null
  1374. +
  1375. + elif [ "$1" = "noobs" ]; then
  1376. + echo "Creating \"$1\" release tarball..."
  1377. +
  1378. + RELEASE_DIR="$TARGET_IMG/${IMAGE_NAME}-$1"
  1379. +
  1380. + # eg. LibreELEC_RPi, LibreELEC_RPi2 etc.
  1381. + NOOBS_DISTRO="${DISTRONAME}_${DEVICE:-$PROJECT}"
  1382. +
  1383. + # Create release dir
  1384. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}
  1385. +
  1386. + if [ -f $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png ]; then
  1387. + cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png $RELEASE_DIR/${NOOBS_DISTRO}/${NOOBS_DISTRO}.png
  1388. + else
  1389. + cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}.png $RELEASE_DIR/${NOOBS_DISTRO}/${NOOBS_DISTRO}.png
  1390. + fi
  1391. + cp -PR $ROOT/config/noobs/os.json $RELEASE_DIR/${NOOBS_DISTRO}
  1392. + cp -PR $ROOT/config/noobs/partition_setup.sh $RELEASE_DIR/${NOOBS_DISTRO}
  1393. + cp -PR $ROOT/config/noobs/partitions.json $RELEASE_DIR/${NOOBS_DISTRO}
  1394. + if [ -d $DISTRO_DIR/$DISTRO/noobs/marketing ]; then
  1395. + tar cf $RELEASE_DIR/${NOOBS_DISTRO}/marketing.tar -C $DISTRO_DIR/$DISTRO/noobs/marketing .
  1396. + else
  1397. + tar cf $RELEASE_DIR/${NOOBS_DISTRO}/marketing.tar -C $ROOT/config/noobs/marketing .
  1398. + fi
  1399. + cp $ROOT/README* $RELEASE_DIR/${NOOBS_DISTRO}
  1400. + cp $ROOT/CHANGELOG $RELEASE_DIR/${NOOBS_DISTRO}/release_notes.txt
  1401. +
  1402. + sed -e "s%@DISTRONAME@%$DISTRONAME%g" \
  1403. + -e "s%@PROJECT@%${DEVICE:-$PROJECT}%g" \
  1404. + -e "s%@LIBREELEC_VERSION@%$LIBREELEC_VERSION%g" \
  1405. + -e "s%@RELEASE_DATE@%$(date +%F)%g" \
  1406. + -e "s%@KERNEL_VERSION@%$(kernel_version)%g" \
  1407. + -e "s%@DESCRIPTION@%$DESCRIPTION%g" \
  1408. + -e "s%@ROOT_PASSWORD@%$ROOT_PASSWORD%g" \
  1409. + -e "s%@NOOBS_SUPPORTED_MODELS@%$NOOBS_SUPPORTED_MODELS%g" \
  1410. + -e "s%@NOOBS_HEX@%$NOOBS_HEX%g" \
  1411. + -i $RELEASE_DIR/${NOOBS_DISTRO}/os.json
  1412. +
  1413. + sed -e "s%@DISTRONAME@%$DISTRONAME%g" \
  1414. + -e "s%@PROJECT@%${DEVICE:-$PROJECT}%g" \
  1415. + -e "s%@SYSTEM_SIZE@%$SYSTEM_SIZE%g" \
  1416. + -i $RELEASE_DIR/${NOOBS_DISTRO}/partitions.json
  1417. +
  1418. + # Create System dir
  1419. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/System
  1420. +
  1421. + BOOTLOADER_DIR="$(get_pkg_directory "$BOOTLOADER")"
  1422. + if [ -d $BOOTLOADER_DIR/files/3rdparty/bootloader/ ]; then
  1423. + cp -PR $BOOTLOADER_DIR/files/3rdparty/bootloader/* $RELEASE_DIR/${NOOBS_DISTRO}/System
  1424. + fi
  1425. +
  1426. + # Copy Bootloader
  1427. + cp -PR $BUILD/bcm2835-bootloader-*/LICENCE* $RELEASE_DIR/${NOOBS_DISTRO}/System/
  1428. + cp -PR $BUILD/bcm2835-bootloader-*/bootcode.bin $RELEASE_DIR/${NOOBS_DISTRO}/System/
  1429. + cp -PR $BUILD/bcm2835-bootloader-*/fixup_x.dat $RELEASE_DIR/${NOOBS_DISTRO}/System/fixup.dat
  1430. + cp -PR $BUILD/bcm2835-bootloader-*/start_x.elf $RELEASE_DIR/${NOOBS_DISTRO}/System/start.elf
  1431. + [ -f $BUILD/bcm2835-bootloader-*/dt-blob.bin ] && cp -PR $BUILD/bcm2835-bootloader-*/dt-blob.bin $RELEASE_DIR/${NOOBS_DISTRO}/System/dt-blob.bin
  1432. +
  1433. + # Copy system files
  1434. + cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/${NOOBS_DISTRO}/System/SYSTEM
  1435. + cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/${NOOBS_DISTRO}/System/kernel.img
  1436. +
  1437. + for dtb in $INSTALL/usr/share/bootloader/*.dtb; do
  1438. + if [ -f $dtb ]; then
  1439. + cp -PR $dtb $RELEASE_DIR/${NOOBS_DISTRO}/System
  1440. + fi
  1441. + done
  1442. +
  1443. + for overlay in $INSTALL/usr/share/bootloader/overlays/*; do
  1444. + if [ -f $overlay ]; then
  1445. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/System/overlays
  1446. + cp -PR $overlay $RELEASE_DIR/${NOOBS_DISTRO}/System/overlays
  1447. + fi
  1448. + done
  1449. +
  1450. + # Create md5sum's
  1451. + ( cd $RELEASE_DIR/${NOOBS_DISTRO}/System;
  1452. + md5sum -t SYSTEM > SYSTEM.md5;
  1453. + md5sum -t kernel.img > kernel.img.md5;
  1454. + )
  1455. +
  1456. + # Copy additional files
  1457. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/System/licenses
  1458. + cp $ROOT/licenses/* $RELEASE_DIR/${NOOBS_DISTRO}/System/licenses
  1459. +
  1460. + # Create Storage dir
  1461. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/Storage
  1462. +
  1463. + # Remove any previously created release tarball
  1464. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/System.tar.xz
  1465. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/Storage.tar.xz
  1466. +
  1467. + # Create filesystem tarballs
  1468. + tar cJf $RELEASE_DIR/${NOOBS_DISTRO}/System.tar.xz -C $RELEASE_DIR/${NOOBS_DISTRO}/System/ .
  1469. + tar cJf $RELEASE_DIR/${NOOBS_DISTRO}/Storage.tar.xz -C $RELEASE_DIR/${NOOBS_DISTRO}/Storage/ .
  1470. +
  1471. + # Remove filesystem dirs
  1472. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/System
  1473. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/Storage
  1474. +
  1475. + # Remove any previously created release tarball
  1476. + rm -rf $TARGET_IMG/${IMAGE_NAME}-$1.tar
  1477. +
  1478. + # Create release tarball
  1479. + tar cf $TARGET_IMG/${IMAGE_NAME}-$1.tar -C $TARGET_IMG ${IMAGE_NAME}-$1
  1480. +
  1481. + # Create sha256 checksum of tarball
  1482. + ( cd $TARGET_IMG
  1483. + sha256sum ${IMAGE_NAME}-$1.tar > ${IMAGE_NAME}-$1.tar.sha256
  1484. + )
  1485. + fi
  1486. +
  1487. + if [ -d $RELEASE_DIR ]; then
  1488. + # Cleanup release dir
  1489. + rm -rf $RELEASE_DIR
  1490. + fi
  1491. +fi
  1492. diff --git a/scripts/install b/scripts/install
  1493. index d9e0bfa..ea39c7e 100755
  1494. --- a/scripts/install
  1495. +++ b/scripts/install
  1496. @@ -8,7 +8,7 @@
  1497. . config/options "$1"
  1498.  
  1499. if [ -z "$1" ]; then
  1500. - die "usage: $0 package_name"
  1501. + die "usage: $0 package_name [parent_pkg]"
  1502. fi
  1503.  
  1504. if [ -z "${PKG_NAME}" ]; then
  1505. @@ -29,29 +29,35 @@ if [ "${1//:/}" != "${1}" ]; then
  1506. PACKAGE_NAME="${1%:*}"
  1507. TARGET="${1#*:}"
  1508. else
  1509. - PACKAGE_NAME=$1
  1510. + PACKAGE_NAME="${1}"
  1511. TARGET=
  1512. fi
  1513. [ -z "$TARGET" ] && TARGET="target"
  1514. +PARENT_PKG="${2:-${PKG_NAME}:${TARGET}}"
  1515. +
  1516. +[ "$PKG_SECTION" != "virtual" ] && pkg_lock "${PACKAGE_NAME}:${TARGET}" "install" "${PARENT_PKG}"
  1517.  
  1518. STAMP=$STAMPS_INSTALL/$PACKAGE_NAME/install_$TARGET
  1519. +[ -f $STAMP ] && pkg_lock_status "UNLOCK" "${PACKAGE_NAME}:${TARGET}" "install" "already installed"
  1520. [ -f $STAMP ] && exit 0
  1521.  
  1522. mkdir -p $STAMPS_INSTALL/$PACKAGE_NAME
  1523.  
  1524. -$SCRIPTS/build $@
  1525. +$SCRIPTS/build "${1}" "${PARENT_PKG}"
  1526.  
  1527. if [ "$TARGET" = target ] ; then
  1528. for p in $PKG_DEPENDS_TARGET; do
  1529. - $SCRIPTS/install $p
  1530. + $SCRIPTS/install "${p}" "${PARENT_PKG}"
  1531. done
  1532. elif [ "$TARGET" = init ] ; then
  1533. for p in $PKG_DEPENDS_INIT; do
  1534. - $SCRIPTS/install $p
  1535. + $SCRIPTS/install "${p}" "${PARENT_PKG}"
  1536. done
  1537. INSTALL=$BUILD/initramfs
  1538. fi
  1539.  
  1540. +pkg_lock_status "ACTIVE" "${PACKAGE_NAME}:${TARGET}" "install"
  1541. +
  1542. build_msg "CLR_INSTALL" "INSTALL" "${PACKAGE_NAME} $(print_color CLR_TARGET "(${TARGET})")" "indent"
  1543.  
  1544. mkdir -p $INSTALL
  1545. @@ -137,3 +143,5 @@ if [ "$TARGET" = target ] ; then
  1546. fi
  1547.  
  1548. touch $STAMP
  1549. +
  1550. +pkg_lock_status "UNLOCK" "${PACKAGE_NAME}:${TARGET}" "install" "installed"
  1551. diff --git a/scripts/unpack b/scripts/unpack
  1552. index 3dce2c4..81a2c06 100755
  1553. --- a/scripts/unpack
  1554. +++ b/scripts/unpack
  1555. @@ -7,14 +7,19 @@
  1556. . config/options "$1"
  1557.  
  1558. if [ -z "$1" ]; then
  1559. - die "usage: $0 package_name"
  1560. + die "usage: $0 package_name [parent_pkg]"
  1561. fi
  1562.  
  1563. if [ -z "${PKG_NAME}" ]; then
  1564. die "$(print_color CLR_ERROR "${1}: no package.mk file found")"
  1565. fi
  1566. +PARENT_PKG="${2:-${PKG_NAME}}"
  1567.  
  1568. -$SCRIPTS/get $1
  1569. +pkg_lock "${PKG_NAME}" "unpack" "${PARENT_PKG}"
  1570. +
  1571. +pkg_lock_status "ACTIVE" "${PKG_NAME}" "unpack"
  1572. +
  1573. +$SCRIPTS/get "${PKG_NAME}"
  1574.  
  1575. STAMP="$PKG_BUILD/.libreelec-unpack"
  1576.  
  1577. @@ -22,13 +27,13 @@ mkdir -p $BUILD
  1578.  
  1579. # Perform a wildcard match on the package to ensure old versions are cleaned too
  1580. PKG_DEEPHASH=
  1581. -for i in $BUILD/$1-*; do
  1582. +for i in $BUILD/${PKG_NAME}-*; do
  1583. if [ -d $i -a -f "$i/.libreelec-unpack" ] ; then
  1584. . "$i/.libreelec-unpack"
  1585. - if [ "$STAMP_PKG_NAME" = "$1" ]; then
  1586. + if [ "$STAMP_PKG_NAME" = "${PKG_NAME}" ]; then
  1587. [ -z "${PKG_DEEPHASH}" ] && PKG_DEEPHASH=$(calculate_stamp)
  1588. if [ ! "$PKG_DEEPHASH" = "$STAMP_PKG_DEEPHASH" ] ; then
  1589. - $SCRIPTS/clean $1
  1590. + $SCRIPTS/clean "${PKG_NAME}"
  1591. fi
  1592. fi
  1593. fi
  1594. @@ -36,19 +41,20 @@ done
  1595.  
  1596. if [ -d "$PKG_BUILD" -a ! -f "$STAMP" ]; then
  1597. # stale pkg build dir
  1598. - $SCRIPTS/clean $1
  1599. + $SCRIPTS/clean "${PKG_NAME}"
  1600. fi
  1601.  
  1602. +[ -f "$STAMP" ] && pkg_lock_status "UNLOCK" "${PKG_NAME}" "unpack" "already unpacked"
  1603. [ -f "$STAMP" ] && exit 0
  1604.  
  1605. -if [ -d "$SOURCES/$1" -o -d "$PKG_DIR/sources" ]; then
  1606. - build_msg "CLR_UNPACK" "UNPACK" "${1}" "indent"
  1607. +if [ -d "$SOURCES/${PKG_NAME}" -o -d "$PKG_DIR/sources" ]; then
  1608. + build_msg "CLR_UNPACK" "UNPACK" "${PKG_NAME}" "indent"
  1609.  
  1610. pkg_call_optional pre_unpack
  1611.  
  1612. if ! pkg_call unpack; then
  1613. if [ -n "$PKG_URL" ]; then
  1614. - $SCRIPTS/extract $1 $BUILD
  1615. + $SCRIPTS/extract "${PKG_NAME}" $BUILD
  1616. fi
  1617. fi
  1618.  
  1619. @@ -159,10 +165,12 @@ fi
  1620. if [ "$PKG_SECTION" != "virtual" ]; then
  1621. mkdir -p "$PKG_BUILD"
  1622.  
  1623. - rm -f $STAMPS/$1/build_*
  1624. + rm -f $STAMPS/${PKG_NAME}/build_*
  1625.  
  1626. PKG_DEEPHASH=$(calculate_stamp)
  1627. for i in PKG_NAME PKG_DEEPHASH; do
  1628. echo "STAMP_$i=\"${!i}\"" >> $STAMP
  1629. done
  1630. fi
  1631. +
  1632. +pkg_lock_status "UNLOCK" "${PKG_NAME}" "unpack" "unpacked"
  1633. diff --git a/scripts/viewplan b/scripts/viewplan
  1634. new file mode 100755
  1635. index 0000000..999a41d
  1636. --- /dev/null
  1637. +++ b/scripts/viewplan
  1638. @@ -0,0 +1,17 @@
  1639. +#!/bin/bash
  1640. +
  1641. +# SPDX-License-Identifier: GPL-2.0-or-later
  1642. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1643. +
  1644. +unset _CACHE_PACKAGE_LOCAL _CACHE_PACKAGE_GLOBAL _DEBUG_DEPENDS_LIST _DEBUG_PACKAGE_LIST
  1645. +
  1646. +. config/options ""
  1647. +. config/multithread
  1648. +
  1649. +PARALLEL_BIN=${TOOLCHAIN}/bin/parallel
  1650. +
  1651. +[ -x ${PARALLEL_BIN} ] || PARALLEL_BIN=parallel
  1652. +
  1653. +cat ${_CACHE_PACKAGE_GLOBAL} ${_CACHE_PACKAGE_LOCAL} | \
  1654. + ${PARALLEL_BIN} --plain --no-notice --max-args 30 json_worker | \
  1655. + ${SCRIPTS}/genbuildplan.py --show-wants --build ${@:-image} --warn-invalid ${GENFLAGS}
  1656. diff --git a/tools/dashboard b/tools/dashboard
  1657. new file mode 100755
  1658. index 0000000..ae76644
  1659. --- /dev/null
  1660. +++ b/tools/dashboard
  1661. @@ -0,0 +1,10 @@
  1662. +#!/bin/bash
  1663. +
  1664. +# SPDX-License-Identifier: GPL-2.0-or-later
  1665. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1666. +
  1667. +. config/options ""
  1668. +
  1669. +command -v inotifywait >/dev/null && delay= || delay="-s 1.0"
  1670. +
  1671. +tail -Fn+0 ${delay} ${THREAD_CONTROL}/status 2>/dev/null
  1672. --
  1673. 2.14.1
  1674.  
  1675.  
  1676. From 89564d9484384f34e7be15674cbd97f58733e7d6 Mon Sep 17 00:00:00 2001
  1677. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  1678. Date: Sat, 5 Jan 2019 02:48:53 +0000
  1679. Subject: [PATCH 07/19] PKG_DEPENDS_UNPACK: solution for packages using source
  1680. code of another
  1681.  
  1682. ---
  1683. packages/mediacenter/JsonSchemaBuilder/package.mk | 3 ++-
  1684. packages/mediacenter/TexturePacker/package.mk | 3 ++-
  1685. packages/security/nspr/package.mk | 2 ++
  1686. scripts/build | 8 +++++++-
  1687. 4 files changed, 13 insertions(+), 3 deletions(-)
  1688.  
  1689. diff --git a/packages/mediacenter/JsonSchemaBuilder/package.mk b/packages/mediacenter/JsonSchemaBuilder/package.mk
  1690. index b61af9f..b62b79a 100644
  1691. --- a/packages/mediacenter/JsonSchemaBuilder/package.mk
  1692. +++ b/packages/mediacenter/JsonSchemaBuilder/package.mk
  1693. @@ -1,11 +1,12 @@
  1694. # SPDX-License-Identifier: GPL-2.0-or-later
  1695. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  1696. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1697.  
  1698. PKG_NAME="JsonSchemaBuilder"
  1699. PKG_VERSION="0"
  1700. PKG_LICENSE="GPL"
  1701. PKG_SITE="http://www.kodi.tv"
  1702. -PKG_URL=""
  1703. +PKG_DEPENDS_UNPACK="kodi"
  1704. PKG_NEED_UNPACK="$(get_pkg_directory $MEDIACENTER)"
  1705. PKG_LONGDESC="kodi-platform:"
  1706.  
  1707. diff --git a/packages/mediacenter/TexturePacker/package.mk b/packages/mediacenter/TexturePacker/package.mk
  1708. index 8faa689..ed8ee07 100644
  1709. --- a/packages/mediacenter/TexturePacker/package.mk
  1710. +++ b/packages/mediacenter/TexturePacker/package.mk
  1711. @@ -1,12 +1,13 @@
  1712. # SPDX-License-Identifier: GPL-2.0-or-later
  1713. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  1714. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1715.  
  1716. PKG_NAME="TexturePacker"
  1717. PKG_VERSION="0"
  1718. PKG_LICENSE="GPL"
  1719. PKG_SITE="http://www.kodi.tv"
  1720. -PKG_URL=""
  1721. PKG_DEPENDS_HOST="lzo:host libpng:host libjpeg-turbo:host giflib:host"
  1722. +PKG_DEPENDS_UNPACK="kodi"
  1723. PKG_NEED_UNPACK="$(get_pkg_directory $MEDIACENTER)"
  1724. PKG_LONGDESC="kodi-platform:"
  1725.  
  1726. diff --git a/packages/security/nspr/package.mk b/packages/security/nspr/package.mk
  1727. index 7d16ac8..fd63908 100644
  1728. --- a/packages/security/nspr/package.mk
  1729. +++ b/packages/security/nspr/package.mk
  1730. @@ -1,5 +1,6 @@
  1731. # SPDX-License-Identifier: GPL-2.0-or-later
  1732. # Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
  1733. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1734.  
  1735. PKG_NAME="nspr"
  1736. PKG_VERSION="4.19"
  1737. @@ -7,6 +8,7 @@ PKG_LICENSE="Mozilla Public License"
  1738. PKG_SITE="http://www.linuxfromscratch.org/blfs/view/svn/general/nspr.html"
  1739. PKG_DEPENDS_HOST="ccache:host"
  1740. PKG_DEPENDS_TARGET="toolchain nss:host"
  1741. +PKG_DEPENDS_UNPACK="nss"
  1742. PKG_LONGDESC="Netscape Portable Runtime (NSPR) provides a platform-neutral API for system level and libc like functions"
  1743. PKG_TOOLCHAIN="configure"
  1744. PKG_BUILD_FLAGS="-parallel"
  1745. diff --git a/scripts/build b/scripts/build
  1746. index 7c74262..d42ca5a 100755
  1747. --- a/scripts/build
  1748. +++ b/scripts/build
  1749. @@ -59,7 +59,13 @@ if [ -f $STAMP ]; then
  1750. fi
  1751. fi
  1752.  
  1753. -$SCRIPTS/unpack $PACKAGE_NAME
  1754. +if [ -n "${PKG_DEPENDS_UNPACK}" ]; then
  1755. + for p in ${PKG_DEPENDS_UNPACK}; do
  1756. + $SCRIPTS/unpack "${p}" "${PARENT_PKG}"
  1757. + done
  1758. +else
  1759. + $SCRIPTS/unpack "${PACKAGE_NAME}" "${PARENT_PKG}"
  1760. +fi
  1761.  
  1762. # build dependencies, only when PKG_DEPENDS_? is filled
  1763. unset _pkg_depends
  1764. --
  1765. 2.14.1
  1766.  
  1767.  
  1768. From ac53f61b58e0a7a329acf88818eb119614d4a323 Mon Sep 17 00:00:00 2001
  1769. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  1770. Date: Wed, 9 Jan 2019 03:27:04 +0000
  1771. Subject: [PATCH 08/19] PKG_DEPENDS_UNPACK: add source package to
  1772. PKG_NEED_UNPACK
  1773.  
  1774. If the source package changes then we need to rebuild too.
  1775. ---
  1776. config/functions | 6 ++++++
  1777. 1 file changed, 6 insertions(+)
  1778.  
  1779. diff --git a/config/functions b/config/functions
  1780. index 7b9669c..baa8271 100644
  1781. --- a/config/functions
  1782. +++ b/config/functions
  1783. @@ -861,6 +861,12 @@ source_package() {
  1784. [ "$PKG_ADDON_IS_STANDALONE" != "yes" ] && PKG_NEED_UNPACK="${PKG_NEED_UNPACK} $(get_pkg_directory $MEDIACENTER)"
  1785. fi
  1786.  
  1787. + if [ -n "${PKG_DEPENDS_UNPACK}" ]; then
  1788. + for _p in ${PKG_DEPENDS_UNPACK}; do
  1789. + PKG_NNED_UNPACK+=" $(get_pkg_directory ${_p})"
  1790. + done
  1791. + fi
  1792. +
  1793. # Automatically set PKG_SOURCE_NAME unless it is already defined.
  1794. # PKG_SOURCE_NAME will be automatically set to a name based on
  1795. # the $PKG_NAME-$PKG_VERSION convention.
  1796. --
  1797. 2.14.1
  1798.  
  1799.  
  1800. From 235b35c9b76f2b81dd4ac9bf4f0972a31dbf3ef6 Mon Sep 17 00:00:00 2001
  1801. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  1802. Date: Sat, 5 Jan 2019 02:44:12 +0000
  1803. Subject: [PATCH 09/19] packages: pciutils, nasm: build only for x86_64
  1804.  
  1805. ---
  1806. packages/linux/package.mk | 4 ++--
  1807. packages/mediacenter/kodi/package.mk | 6 +++++-
  1808. packages/multimedia/dav1d/package.mk | 6 +++++-
  1809. packages/sysutils/busybox/package.mk | 6 +++++-
  1810. 4 files changed, 17 insertions(+), 5 deletions(-)
  1811.  
  1812. diff --git a/packages/linux/package.mk b/packages/linux/package.mk
  1813. index e51516b..c02469f 100644
  1814. --- a/packages/linux/package.mk
  1815. +++ b/packages/linux/package.mk
  1816. @@ -6,7 +6,7 @@ PKG_NAME="linux"
  1817. PKG_LICENSE="GPL"
  1818. PKG_SITE="http://www.kernel.org"
  1819. PKG_DEPENDS_HOST="ccache:host"
  1820. -PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host pciutils xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  1821. +PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  1822. PKG_DEPENDS_INIT="toolchain"
  1823. PKG_NEED_UNPACK="$LINUX_DEPENDS"
  1824. PKG_LONGDESC="This package contains a precompiled kernel image and the modules."
  1825. @@ -65,7 +65,7 @@ if [ "$PKG_BUILD_PERF" != "no" ] && grep -q ^CONFIG_PERF_EVENTS= $PKG_KERNEL_CFG
  1826. fi
  1827.  
  1828. if [ "$TARGET_ARCH" = "x86_64" ]; then
  1829. - PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET intel-ucode:host kernel-firmware elfutils:host"
  1830. + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET intel-ucode:host kernel-firmware elfutils:host pciutils"
  1831. fi
  1832.  
  1833. if [ "$BUILD_ANDROID_BOOTIMG" = "yes" ]; then
  1834. diff --git a/packages/mediacenter/kodi/package.mk b/packages/mediacenter/kodi/package.mk
  1835. index a02ea76..3bcec2c 100644
  1836. --- a/packages/mediacenter/kodi/package.mk
  1837. +++ b/packages/mediacenter/kodi/package.mk
  1838. @@ -5,7 +5,7 @@
  1839. PKG_NAME="kodi"
  1840. PKG_LICENSE="GPL"
  1841. PKG_SITE="http://www.kodi.tv"
  1842. -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"
  1843. +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"
  1844. PKG_LONGDESC="A free and open source cross-platform media player."
  1845.  
  1846. PKG_PATCH_DIRS="$KODI_VENDOR"
  1847. @@ -39,6 +39,10 @@ configure_package() {
  1848.  
  1849. get_graphicdrivers
  1850.  
  1851. + if [ "$TARGET_ARCH" = "x86_64" ]; then
  1852. + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET pciutils"
  1853. + fi
  1854. +
  1855. PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET dbus"
  1856.  
  1857. if [ "$DISPLAYSERVER" = "x11" ]; then
  1858. diff --git a/packages/multimedia/dav1d/package.mk b/packages/multimedia/dav1d/package.mk
  1859. index 275aca4..ab20356 100644
  1860. --- a/packages/multimedia/dav1d/package.mk
  1861. +++ b/packages/multimedia/dav1d/package.mk
  1862. @@ -7,5 +7,9 @@ PKG_SHA256="3662184809fa29af39c920877cedec3724dc5c3cf71d94bec424f2a7ee4825cf"
  1863. PKG_LICENSE="BSD"
  1864. PKG_SITE="http://www.jbkempf.com/blog/post/2018/Introducing-dav1d"
  1865. PKG_URL="https://code.videolan.org/videolan/dav1d/-/archive/${PKG_VERSION}/dav1d-${PKG_VERSION}.tar.bz2"
  1866. -PKG_DEPENDS_TARGET="toolchain nasm:host"
  1867. +PKG_DEPENDS_TARGET="toolchain"
  1868. PKG_LONGDESC="dav1d is an AV1 decoder :)"
  1869. +
  1870. +if [ "$TARGET_ARCH" = "x86_64" ]; then
  1871. + PKG_DEPENDS_TARGET+=" nasm:host"
  1872. +fi
  1873. diff --git a/packages/sysutils/busybox/package.mk b/packages/sysutils/busybox/package.mk
  1874. index 4d8b2fb..4aa977c 100644
  1875. --- a/packages/sysutils/busybox/package.mk
  1876. +++ b/packages/sysutils/busybox/package.mk
  1877. @@ -9,7 +9,7 @@ PKG_LICENSE="GPL"
  1878. PKG_SITE="http://www.busybox.net"
  1879. PKG_URL="http://busybox.net/downloads/$PKG_NAME-$PKG_VERSION.tar.bz2"
  1880. PKG_DEPENDS_HOST=""
  1881. -PKG_DEPENDS_TARGET="toolchain busybox:host hdparm dosfstools e2fsprogs zip unzip pciutils usbutils parted procps-ng gptfdisk libtirpc"
  1882. +PKG_DEPENDS_TARGET="toolchain busybox:host hdparm dosfstools e2fsprogs zip unzip usbutils parted procps-ng gptfdisk libtirpc"
  1883. PKG_DEPENDS_INIT="toolchain libtirpc"
  1884. PKG_LONGDESC="BusyBox combines tiny versions of many common UNIX utilities into a single small executable."
  1885. # busybox fails to build with GOLD support enabled with binutils-2.25
  1886. @@ -25,6 +25,10 @@ if [ "$NFS_SUPPORT" = yes ]; then
  1887. PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET rpcbind"
  1888. fi
  1889.  
  1890. +if [ "$TARGET_ARCH" = "x86_64" ]; then
  1891. + PKG_DEPENDS_TARGET+=" pciutils"
  1892. +fi
  1893. +
  1894. pre_build_target() {
  1895. PKG_MAKE_OPTS_TARGET="ARCH=$TARGET_ARCH \
  1896. HOSTCC=$HOST_CC \
  1897. --
  1898. 2.14.1
  1899.  
  1900.  
  1901. From aef0eb8be3b8e7f557f39c2c4c03795ca21b4447 Mon Sep 17 00:00:00 2001
  1902. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  1903. Date: Sat, 5 Jan 2019 02:50:57 +0000
  1904. Subject: [PATCH 10/19] packages: add missing dependencies
  1905.  
  1906. ---
  1907. packages/addons/addon-depends/system-tools-depends/p7zip/package.mk | 1 +
  1908. packages/compress/bzip2/package.mk | 2 +-
  1909. packages/compress/xz/package.mk | 1 +
  1910. packages/compress/zstd/package.mk | 1 +
  1911. packages/databases/sqlite/package.mk | 1 +
  1912. packages/debug/libunwind/package.mk | 1 +
  1913. packages/devel/elfutils/package.mk | 2 +-
  1914. packages/devel/flex/package.mk | 1 +
  1915. packages/devel/glib/package.mk | 2 +-
  1916. packages/devel/libffi/package.mk | 2 ++
  1917. packages/devel/ncurses/package.mk | 1 +
  1918. packages/devel/pcre/package.mk | 2 +-
  1919. packages/lang/gcc/package.mk | 1 +
  1920. packages/linux/package.mk | 2 +-
  1921. packages/mediacenter/JsonSchemaBuilder/package.mk | 1 +
  1922. packages/print/freetype/package.mk | 1 +
  1923. packages/security/nspr/package.mk | 2 +-
  1924. packages/sysutils/busybox/package.mk | 2 +-
  1925. packages/sysutils/dosfstools/package.mk | 2 ++
  1926. packages/sysutils/e2fsprogs/package.mk | 1 +
  1927. packages/sysutils/gptfdisk/package.mk | 2 +-
  1928. packages/sysutils/util-linux/package.mk | 2 +-
  1929. packages/sysutils/v4l-utils/package.mk | 2 +-
  1930. packages/tools/aml-dtbtools/package.mk | 1 +
  1931. packages/tools/dtc/package.mk | 2 +-
  1932. packages/tools/mkbootimg/package.mk | 3 ++-
  1933. packages/tools/mtools/package.mk | 3 ++-
  1934. packages/x11/lib/pixman/package.mk | 2 ++
  1935. 28 files changed, 33 insertions(+), 13 deletions(-)
  1936.  
  1937. diff --git a/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk b/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk
  1938. index 4db0399..53ef8ff 100644
  1939. --- a/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk
  1940. +++ b/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk
  1941. @@ -7,6 +7,7 @@ PKG_SHA256="5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f"
  1942. PKG_LICENSE="GPL"
  1943. PKG_SITE="http://p7zip.sourceforge.net/"
  1944. PKG_URL="http://downloads.sourceforge.net/project/p7zip/p7zip/${PKG_VERSION}/p7zip_${PKG_VERSION}_src_all.tar.bz2"
  1945. +PKG_DEPENDS_HOST="gcc:host"
  1946. PKG_DEPENDS_TARGET="toolchain"
  1947. PKG_LONGDESC="p7zip is a port of 7za.exe for POSIX systems like Unix."
  1948. PKG_TOOLCHAIN="manual"
  1949. diff --git a/packages/compress/bzip2/package.mk b/packages/compress/bzip2/package.mk
  1950. index 610406b..9a12838 100644
  1951. --- a/packages/compress/bzip2/package.mk
  1952. +++ b/packages/compress/bzip2/package.mk
  1953. @@ -8,7 +8,7 @@ PKG_SHA256="a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd"
  1954. PKG_LICENSE="GPL"
  1955. PKG_SITE="http://www.bzip.org"
  1956. PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.gz"
  1957. -PKG_DEPENDS_HOST=""
  1958. +PKG_DEPENDS_HOST="gcc:host"
  1959. PKG_DEPENDS_TARGET="toolchain"
  1960. PKG_LONGDESC="A high-quality bzip2 data compressor."
  1961. PKG_BUILD_FLAGS="+pic +pic:host"
  1962. diff --git a/packages/compress/xz/package.mk b/packages/compress/xz/package.mk
  1963. index 0974846..ab7d013 100644
  1964. --- a/packages/compress/xz/package.mk
  1965. +++ b/packages/compress/xz/package.mk
  1966. @@ -9,6 +9,7 @@ PKG_LICENSE="GPL"
  1967. PKG_SITE="http://tukaani.org/xz/"
  1968. PKG_URL="http://tukaani.org/xz/$PKG_NAME-$PKG_VERSION.tar.bz2"
  1969. PKG_DEPENDS_HOST="ccache:host"
  1970. +PKG_DEPENDS_TARGET="gcc:host"
  1971. PKG_LONGDESC="A free general-purpose data compression software with high compression ratio."
  1972. PKG_BUILD_FLAGS="+pic"
  1973.  
  1974. diff --git a/packages/compress/zstd/package.mk b/packages/compress/zstd/package.mk
  1975. index 3ec5713..2aee9d6 100644
  1976. --- a/packages/compress/zstd/package.mk
  1977. +++ b/packages/compress/zstd/package.mk
  1978. @@ -8,6 +8,7 @@ PKG_LICENSE="BSD/GPLv2"
  1979. PKG_SITE="http://www.zstd.net"
  1980. PKG_URL="https://github.com/facebook/zstd/releases/download/v${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.gz"
  1981. PKG_SOURCE_DIR=$PKG_NAME-$PKG_VERSION
  1982. +PKG_DEPENDS_HOST="gcc:host ninja:host"
  1983. PKG_DEPENDS_TARGET="toolchain"
  1984. PKG_LONGDESC="A fast real-time compression algorithm."
  1985.  
  1986. diff --git a/packages/databases/sqlite/package.mk b/packages/databases/sqlite/package.mk
  1987. index 66af712..8a793e8 100644
  1988. --- a/packages/databases/sqlite/package.mk
  1989. +++ b/packages/databases/sqlite/package.mk
  1990. @@ -8,6 +8,7 @@ PKG_SHA256="5daa6a3fb7d1e8c767cd59c4ded8da6e4b00c61d3b466d0685e35c4dd6d7bf5d"
  1991. PKG_LICENSE="PublicDomain"
  1992. PKG_SITE="https://www.sqlite.org/"
  1993. PKG_URL="https://www.sqlite.org/2018/$PKG_NAME-$PKG_VERSION.tar.gz"
  1994. +PKG_DEPENDS_HOST="gcc:host"
  1995. PKG_DEPENDS_TARGET="toolchain"
  1996. PKG_LONGDESC="An Embeddable SQL Database Engine."
  1997. # libsqlite3.a(sqlite3.o): requires dynamic R_X86_64_PC32 reloc against 'sqlite3_stricmp' which may overflow at runtime
  1998. diff --git a/packages/debug/libunwind/package.mk b/packages/debug/libunwind/package.mk
  1999. index 47698d3..44b91b6 100644
  2000. --- a/packages/debug/libunwind/package.mk
  2001. +++ b/packages/debug/libunwind/package.mk
  2002. @@ -7,6 +7,7 @@ PKG_SHA256="3f3ecb90e28cbe53fba7a4a27ccce7aad188d3210bb1964a923a731a27a75acb"
  2003. PKG_LICENSE="GPL"
  2004. PKG_SITE="http://www.nongnu.org/libunwind/"
  2005. PKG_URL="http://download.savannah.nongnu.org/releases/libunwind/libunwind-${PKG_VERSION}.tar.gz"
  2006. +PKG_DEPENDS_TARGET="gcc:host"
  2007. PKG_LONGDESC="library to determine the call-chain of a program"
  2008.  
  2009. PKG_CONFIGURE_OPTS_TARGET="--enable-static \
  2010. diff --git a/packages/devel/elfutils/package.mk b/packages/devel/elfutils/package.mk
  2011. index 6a2cedb..3534b60 100644
  2012. --- a/packages/devel/elfutils/package.mk
  2013. +++ b/packages/devel/elfutils/package.mk
  2014. @@ -9,7 +9,7 @@ PKG_LICENSE="GPL"
  2015. PKG_SITE="https://sourceware.org/elfutils/"
  2016. PKG_URL="https://sourceware.org/elfutils/ftp/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2017. PKG_DEPENDS_HOST="make:host zlib:host"
  2018. -PKG_DEPENDS_TARGET="toolchain zlib"
  2019. +PKG_DEPENDS_TARGET="toolchain zlib elfutils:host"
  2020. PKG_LONGDESC="A collection of utilities to handle ELF objects."
  2021. PKG_TOOLCHAIN="autotools"
  2022. PKG_BUILD_FLAGS="+pic"
  2023. diff --git a/packages/devel/flex/package.mk b/packages/devel/flex/package.mk
  2024. index 091e4c2..37e2324 100644
  2025. --- a/packages/devel/flex/package.mk
  2026. +++ b/packages/devel/flex/package.mk
  2027. @@ -8,6 +8,7 @@ PKG_LICENSE="GPL"
  2028. PKG_SITE="http://flex.sourceforge.net/"
  2029. PKG_URL="$SOURCEFORGE_SRC/flex/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2030. PKG_DEPENDS_HOST="ccache:host"
  2031. +PKG_DEPENDS_TARGET="toolchain"
  2032. PKG_LONGDESC="A tool for generating programs that perform pattern-matching on text."
  2033. PKG_TOOLCHAIN="autotools"
  2034.  
  2035. diff --git a/packages/devel/glib/package.mk b/packages/devel/glib/package.mk
  2036. index a6ee221..d490da4 100644
  2037. --- a/packages/devel/glib/package.mk
  2038. +++ b/packages/devel/glib/package.mk
  2039. @@ -8,8 +8,8 @@ PKG_SHA256="991421f41a4ed4cc1637e5f9db0d03fd236d2cbd19f3c5b097a343bec5126602"
  2040. PKG_LICENSE="LGPL"
  2041. PKG_SITE="http://www.gtk.org/"
  2042. PKG_URL="http://ftp.gnome.org/pub/gnome/sources/glib/${PKG_VERSION%.*}/$PKG_NAME-$PKG_VERSION.tar.xz"
  2043. +PKG_DEPENDS_HOST="libffi:host pcre:host pkg-config:host"
  2044. PKG_DEPENDS_TARGET="toolchain zlib libffi Python2:host util-linux"
  2045. -PKG_DEPENDS_HOST="libffi:host pcre:host"
  2046. PKG_LONGDESC="A library which includes support routines for C such as lists, trees, hashes, memory allocation."
  2047. PKG_TOOLCHAIN="autotools"
  2048.  
  2049. diff --git a/packages/devel/libffi/package.mk b/packages/devel/libffi/package.mk
  2050. index b4e83eb..0cb80e0 100644
  2051. --- a/packages/devel/libffi/package.mk
  2052. +++ b/packages/devel/libffi/package.mk
  2053. @@ -1,5 +1,6 @@
  2054. # SPDX-License-Identifier: GPL-2.0-or-later
  2055. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2056. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2057.  
  2058. PKG_NAME="libffi"
  2059. PKG_VERSION="3.2.1"
  2060. @@ -7,6 +8,7 @@ PKG_SHA256="d06ebb8e1d9a22d19e38d63fdb83954253f39bedc5d46232a05645685722ca37"
  2061. PKG_LICENSE="GPL"
  2062. PKG_SITE="http://sourceware.org/$PKG_NAME/"
  2063. PKG_URL="ftp://sourceware.org/pub/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.gz"
  2064. +PKG_DEPENDS_HOST="gcc:host"
  2065. PKG_DEPENDS_TARGET="toolchain"
  2066. PKG_LONGDESC="Foreign Function Interface Library."
  2067. PKG_TOOLCHAIN="autotools"
  2068. diff --git a/packages/devel/ncurses/package.mk b/packages/devel/ncurses/package.mk
  2069. index c04d685..e579734 100644
  2070. --- a/packages/devel/ncurses/package.mk
  2071. +++ b/packages/devel/ncurses/package.mk
  2072. @@ -7,6 +7,7 @@ PKG_SHA256="08b07c3e792961f300829512c283d5fefc0b1c421a57b76922c3d13303ed677d"
  2073. PKG_LICENSE="MIT"
  2074. PKG_SITE="http://www.gnu.org/software/ncurses/"
  2075. PKG_URL="http://invisible-mirror.net/archives/ncurses/current/ncurses-$PKG_VERSION.tgz"
  2076. +PKG_DEPENDS_HOST="gcc:host"
  2077. PKG_DEPENDS_TARGET="toolchain zlib ncurses:host"
  2078. PKG_LONGDESC="A library is a free software emulation of curses in System V Release 4.0, and more."
  2079. # causes some segmentation fault's (dialog) when compiled with gcc's link time optimization.
  2080. diff --git a/packages/devel/pcre/package.mk b/packages/devel/pcre/package.mk
  2081. index 0518214..3148324 100644
  2082. --- a/packages/devel/pcre/package.mk
  2083. +++ b/packages/devel/pcre/package.mk
  2084. @@ -8,7 +8,7 @@ PKG_SHA256="2cd04b7c887808be030254e8d77de11d3fe9d4505c39d4b15d2664ffe8bf9301"
  2085. PKG_LICENSE="OSS"
  2086. PKG_SITE="http://www.pcre.org/"
  2087. PKG_URL="https://ftp.pcre.org/pub/pcre/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2088. -PKG_DEPENDS_HOST=""
  2089. +PKG_DEPENDS_HOST="gcc:host"
  2090. PKG_DEPENDS_TARGET="toolchain"
  2091. PKG_LONGDESC="A set of functions that implement regular expression pattern matching."
  2092. PKG_TOOLCHAIN="configure"
  2093. diff --git a/packages/lang/gcc/package.mk b/packages/lang/gcc/package.mk
  2094. index f899aeb..a7d1d87 100644
  2095. --- a/packages/lang/gcc/package.mk
  2096. +++ b/packages/lang/gcc/package.mk
  2097. @@ -11,6 +11,7 @@ PKG_URL="http://ftpmirror.gnu.org/gcc/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERS
  2098. PKG_DEPENDS_BOOTSTRAP="ccache:host autoconf:host binutils:host gmp:host mpfr:host mpc:host"
  2099. PKG_DEPENDS_TARGET="gcc:host"
  2100. PKG_DEPENDS_HOST="ccache:host autoconf:host binutils:host gmp:host mpfr:host mpc:host glibc"
  2101. +PKG_DEPENDS_INIT="toolchain"
  2102. PKG_LONGDESC="This package contains the GNU Compiler Collection."
  2103.  
  2104. GCC_COMMON_CONFIGURE_OPTS="--target=$TARGET_NAME \
  2105. diff --git a/packages/linux/package.mk b/packages/linux/package.mk
  2106. index c02469f..b053a46 100644
  2107. --- a/packages/linux/package.mk
  2108. +++ b/packages/linux/package.mk
  2109. @@ -5,7 +5,7 @@
  2110. PKG_NAME="linux"
  2111. PKG_LICENSE="GPL"
  2112. PKG_SITE="http://www.kernel.org"
  2113. -PKG_DEPENDS_HOST="ccache:host"
  2114. +PKG_DEPENDS_HOST="ccache:host openssl:host"
  2115. PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  2116. PKG_DEPENDS_INIT="toolchain"
  2117. PKG_NEED_UNPACK="$LINUX_DEPENDS"
  2118. diff --git a/packages/mediacenter/JsonSchemaBuilder/package.mk b/packages/mediacenter/JsonSchemaBuilder/package.mk
  2119. index b62b79a..91fefc9 100644
  2120. --- a/packages/mediacenter/JsonSchemaBuilder/package.mk
  2121. +++ b/packages/mediacenter/JsonSchemaBuilder/package.mk
  2122. @@ -6,6 +6,7 @@ PKG_NAME="JsonSchemaBuilder"
  2123. PKG_VERSION="0"
  2124. PKG_LICENSE="GPL"
  2125. PKG_SITE="http://www.kodi.tv"
  2126. +PKG_DEPENDS_HOST="toolchain"
  2127. PKG_DEPENDS_UNPACK="kodi"
  2128. PKG_NEED_UNPACK="$(get_pkg_directory $MEDIACENTER)"
  2129. PKG_LONGDESC="kodi-platform:"
  2130. diff --git a/packages/print/freetype/package.mk b/packages/print/freetype/package.mk
  2131. index 4188f2c..23759c3 100644
  2132. --- a/packages/print/freetype/package.mk
  2133. +++ b/packages/print/freetype/package.mk
  2134. @@ -8,6 +8,7 @@ PKG_SHA256="e20a6e1400798fd5e3d831dd821b61c35b1f9a6465d6b18a53a9df4cf441acf0"
  2135. PKG_LICENSE="GPL"
  2136. PKG_SITE="http://www.freetype.org"
  2137. PKG_URL="http://download.savannah.gnu.org/releases/freetype/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2138. +PKG_DEPENDS_HOST="gcc:host"
  2139. PKG_DEPENDS_TARGET="toolchain zlib libpng"
  2140. PKG_LONGDESC="The FreeType engine is a free and portable TrueType font rendering engine."
  2141. PKG_TOOLCHAIN="configure"
  2142. diff --git a/packages/security/nspr/package.mk b/packages/security/nspr/package.mk
  2143. index fd63908..58f4f22 100644
  2144. --- a/packages/security/nspr/package.mk
  2145. +++ b/packages/security/nspr/package.mk
  2146. @@ -7,7 +7,7 @@ PKG_VERSION="4.19"
  2147. PKG_LICENSE="Mozilla Public License"
  2148. PKG_SITE="http://www.linuxfromscratch.org/blfs/view/svn/general/nspr.html"
  2149. PKG_DEPENDS_HOST="ccache:host"
  2150. -PKG_DEPENDS_TARGET="toolchain nss:host"
  2151. +PKG_DEPENDS_TARGET="toolchain nss:host nspr:host"
  2152. PKG_DEPENDS_UNPACK="nss"
  2153. PKG_LONGDESC="Netscape Portable Runtime (NSPR) provides a platform-neutral API for system level and libc like functions"
  2154. PKG_TOOLCHAIN="configure"
  2155. diff --git a/packages/sysutils/busybox/package.mk b/packages/sysutils/busybox/package.mk
  2156. index 4aa977c..dd1fba0 100644
  2157. --- a/packages/sysutils/busybox/package.mk
  2158. +++ b/packages/sysutils/busybox/package.mk
  2159. @@ -8,7 +8,7 @@ PKG_SHA256="97648636e579462296478e0218e65e4bc1e9cd69089a3b1aeb810bff7621efb7"
  2160. PKG_LICENSE="GPL"
  2161. PKG_SITE="http://www.busybox.net"
  2162. PKG_URL="http://busybox.net/downloads/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2163. -PKG_DEPENDS_HOST=""
  2164. +PKG_DEPENDS_HOST="gcc:host"
  2165. PKG_DEPENDS_TARGET="toolchain busybox:host hdparm dosfstools e2fsprogs zip unzip usbutils parted procps-ng gptfdisk libtirpc"
  2166. PKG_DEPENDS_INIT="toolchain libtirpc"
  2167. PKG_LONGDESC="BusyBox combines tiny versions of many common UNIX utilities into a single small executable."
  2168. diff --git a/packages/sysutils/dosfstools/package.mk b/packages/sysutils/dosfstools/package.mk
  2169. index 6f8c72b..ffaf5f7 100644
  2170. --- a/packages/sysutils/dosfstools/package.mk
  2171. +++ b/packages/sysutils/dosfstools/package.mk
  2172. @@ -1,5 +1,6 @@
  2173. # SPDX-License-Identifier: GPL-2.0-or-later
  2174. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2175. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2176.  
  2177. PKG_NAME="dosfstools"
  2178. PKG_VERSION="3.0.28"
  2179. @@ -8,6 +9,7 @@ PKG_LICENSE="GPLv3"
  2180. PKG_SITE="https://github.com/dosfstools/dosfstools"
  2181. PKG_URL="https://github.com/dosfstools/dosfstools/releases/download/v$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz"
  2182. PKG_DEPENDS_TARGET="toolchain"
  2183. +PKG_DEPENDS_HOST="gcc:host"
  2184. PKG_DEPENDS_INIT="toolchain dosfstools"
  2185. PKG_LONGDESC="dosfstools contains utilities for making and checking MS-DOS FAT filesystems."
  2186.  
  2187. diff --git a/packages/sysutils/e2fsprogs/package.mk b/packages/sysutils/e2fsprogs/package.mk
  2188. index 0daafc5..260315e 100644
  2189. --- a/packages/sysutils/e2fsprogs/package.mk
  2190. +++ b/packages/sysutils/e2fsprogs/package.mk
  2191. @@ -8,6 +8,7 @@ PKG_SHA256="926f8e8de1ffba55d791f21b71334e8a32b5227257ad370f2bf7e4396629e97f"
  2192. PKG_LICENSE="GPL"
  2193. PKG_SITE="http://e2fsprogs.sourceforge.net/"
  2194. PKG_URL="https://www.kernel.org/pub/linux/kernel/people/tytso/$PKG_NAME/v$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz"
  2195. +PKG_DEPENDS_HOST="gcc:host"
  2196. PKG_DEPENDS_TARGET="toolchain"
  2197. PKG_DEPENDS_INIT="toolchain"
  2198. PKG_LONGDESC="The filesystem utilities for the EXT2 filesystem, including e2fsck, mke2fs, dumpe2fs, fsck, and others."
  2199. diff --git a/packages/sysutils/gptfdisk/package.mk b/packages/sysutils/gptfdisk/package.mk
  2200. index 2668ea6..5e59cb0 100644
  2201. --- a/packages/sysutils/gptfdisk/package.mk
  2202. +++ b/packages/sysutils/gptfdisk/package.mk
  2203. @@ -7,7 +7,7 @@ PKG_SHA256="b663391a6876f19a3cd901d862423a16e2b5ceaa2f4a3b9bb681e64b9c7ba78d"
  2204. PKG_LICENSE="GPL"
  2205. PKG_SITE="http://www.rodsbooks.com/gdisk/"
  2206. PKG_URL="https://downloads.sourceforge.net/project/$PKG_NAME/$PKG_NAME/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz"
  2207. -PKG_DEPENDS_TARGET="toolchain popt"
  2208. +PKG_DEPENDS_TARGET="toolchain popt crossguid"
  2209. PKG_LONGDESC="GPT text-mode partitioning tools"
  2210.  
  2211. make_target() {
  2212. diff --git a/packages/sysutils/util-linux/package.mk b/packages/sysutils/util-linux/package.mk
  2213. index 07e07e8..27a18b8 100644
  2214. --- a/packages/sysutils/util-linux/package.mk
  2215. +++ b/packages/sysutils/util-linux/package.mk
  2216. @@ -7,7 +7,7 @@ PKG_VERSION="2.32.1"
  2217. PKG_SHA256="86e6707a379c7ff5489c218cfaf1e3464b0b95acf7817db0bc5f179e356a67b2"
  2218. PKG_LICENSE="GPL"
  2219. PKG_URL="http://www.kernel.org/pub/linux/utils/util-linux/v${PKG_VERSION%.*}/$PKG_NAME-$PKG_VERSION.tar.xz"
  2220. -PKG_DEPENDS_HOST=""
  2221. +PKG_DEPENDS_HOST="gcc:host pkg-config:host"
  2222. PKG_DEPENDS_TARGET="toolchain"
  2223. PKG_DEPENDS_INIT="toolchain"
  2224. PKG_LONGDESC="A large variety of low-level system utilities that are necessary for a Linux system to function."
  2225. diff --git a/packages/sysutils/v4l-utils/package.mk b/packages/sysutils/v4l-utils/package.mk
  2226. index 6e37014..84495df 100644
  2227. --- a/packages/sysutils/v4l-utils/package.mk
  2228. +++ b/packages/sysutils/v4l-utils/package.mk
  2229. @@ -10,7 +10,7 @@ PKG_SHA256="e6b962c4b1253cf852c31da13fd6b5bb7cbe5aa9e182881aec55123bae680692"
  2230. PKG_LICENSE="GPL"
  2231. PKG_SITE="http://linuxtv.org/"
  2232. PKG_URL="http://linuxtv.org/downloads/v4l-utils/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2233. -PKG_DEPENDS_TARGET="toolchain"
  2234. +PKG_DEPENDS_TARGET="toolchain alsa-lib systemd"
  2235. PKG_LONGDESC="Linux V4L2 and DVB API utilities and v4l libraries (libv4l)."
  2236.  
  2237. PKG_CONFIGURE_OPTS_TARGET="--without-jpeg \
  2238. diff --git a/packages/tools/aml-dtbtools/package.mk b/packages/tools/aml-dtbtools/package.mk
  2239. index 8e21b9b..93a0d28 100644
  2240. --- a/packages/tools/aml-dtbtools/package.mk
  2241. +++ b/packages/tools/aml-dtbtools/package.mk
  2242. @@ -7,6 +7,7 @@ PKG_SHA256="8bcaa83fcc9e85c9c04930e7411447d96a97da0809c5ecd9af91c8b554133c41"
  2243. PKG_LICENSE="free"
  2244. PKG_SITE="https://github.com/Wilhansen/aml-dtbtools"
  2245. PKG_URL="https://github.com/Wilhansen/aml-dtbtools/archive/${PKG_VERSION}.tar.gz"
  2246. +PKG_DEPENDS_HOST="gcc:host"
  2247. PKG_LONGDESC="AML DTB Tools"
  2248.  
  2249. PKG_MAKE_OPTS_HOST="dtbTool"
  2250. diff --git a/packages/tools/dtc/package.mk b/packages/tools/dtc/package.mk
  2251. index e943d3e..4fe132c 100644
  2252. --- a/packages/tools/dtc/package.mk
  2253. +++ b/packages/tools/dtc/package.mk
  2254. @@ -8,7 +8,7 @@ PKG_LICENSE="GPL"
  2255. PKG_SITE="https://git.kernel.org/pub/scm/utils/dtc/dtc.git/"
  2256. PKG_URL="https://git.kernel.org/pub/scm/utils/dtc/dtc.git/snapshot/$PKG_VERSION.tar.gz"
  2257. PKG_DEPENDS_HOST="Python2:host swig:host"
  2258. -PKG_DEPENDS_TARGET="toolchain"
  2259. +PKG_DEPENDS_TARGET="toolchain dtc:host"
  2260. PKG_LONGDESC="The Device Tree Compiler"
  2261.  
  2262. PKG_MAKE_OPTS_HOST="dtc libfdt"
  2263. diff --git a/packages/tools/mkbootimg/package.mk b/packages/tools/mkbootimg/package.mk
  2264. index 0b9d83a..adc1d3a 100644
  2265. --- a/packages/tools/mkbootimg/package.mk
  2266. +++ b/packages/tools/mkbootimg/package.mk
  2267. @@ -1,5 +1,6 @@
  2268. # SPDX-License-Identifier: GPL-2.0-or-later
  2269. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2270. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2271.  
  2272. PKG_NAME="mkbootimg"
  2273. PKG_VERSION="6668fc2"
  2274. @@ -7,7 +8,7 @@ PKG_SHA256="d84870e055414d638a3e7eb4b7a3ebf415899841218f24cb3647d06ecf6ddb17"
  2275. PKG_LICENSE="GPL"
  2276. PKG_SITE="https://android.googlesource.com/platform/system/core/+/master/mkbootimg/"
  2277. PKG_URL="https://github.com/codesnake/mkbootimg/archive/$PKG_VERSION.tar.gz"
  2278. -PKG_DEPENDS_HOST=""
  2279. +PKG_DEPENDS_HOST="gcc:host"
  2280. PKG_LONGDESC="mkbootimg: Creates kernel boot images for Android"
  2281.  
  2282. makeinstall_host() {
  2283. diff --git a/packages/tools/mtools/package.mk b/packages/tools/mtools/package.mk
  2284. index 099488f..e0dd42e 100644
  2285. --- a/packages/tools/mtools/package.mk
  2286. +++ b/packages/tools/mtools/package.mk
  2287. @@ -1,5 +1,6 @@
  2288. # SPDX-License-Identifier: GPL-2.0-or-later
  2289. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2290. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2291.  
  2292. PKG_NAME="mtools"
  2293. PKG_VERSION="4.0.18"
  2294. @@ -7,6 +8,6 @@ PKG_SHA256="59e9cf80885399c4f229e5d87e49c0c2bfeec044e1386d59fcd0b0aead6b2f85"
  2295. PKG_LICENSE="GPL"
  2296. PKG_SITE="http://www.gnu.org/software/mtools/"
  2297. PKG_URL="http://ftpmirror.gnu.org/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2298. -PKG_DEPENDS_HOST=""
  2299. +PKG_DEPENDS_HOST="gcc:host"
  2300. PKG_LONGDESC="mtools: A collection of utilities to access MS-DOS disks"
  2301. PKG_TOOLCHAIN="autotools"
  2302. diff --git a/packages/x11/lib/pixman/package.mk b/packages/x11/lib/pixman/package.mk
  2303. index 65868f2..631a570 100644
  2304. --- a/packages/x11/lib/pixman/package.mk
  2305. +++ b/packages/x11/lib/pixman/package.mk
  2306. @@ -1,5 +1,6 @@
  2307. # SPDX-License-Identifier: GPL-2.0-or-later
  2308. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2309. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2310.  
  2311. PKG_NAME="pixman"
  2312. PKG_VERSION="0.34.0"
  2313. @@ -7,6 +8,7 @@ PKG_SHA256="39ba3438f3d17c464b0cb8be006dacbca0ab5aee97ebde69fec7ecdbf85794a0"
  2314. PKG_LICENSE="OSS"
  2315. PKG_SITE="http://www.x.org/"
  2316. PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2317. +PKG_DEPENDS_HOST="gcc:host"
  2318. PKG_DEPENDS_TARGET="toolchain util-macros"
  2319. PKG_LONGDESC="Pixman is a generic library for manipulating pixel regions, contains low-level pixel manipulation routines."
  2320.  
  2321. --
  2322. 2.14.1
  2323.  
  2324.  
  2325. From ea414a31b78a862fdaa018084ad4c31e805d36bc Mon Sep 17 00:00:00 2001
  2326. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2327. Date: Sun, 6 Jan 2019 10:22:10 +0000
  2328. Subject: [PATCH 11/19] packages: add missing xorg dependencies
  2329.  
  2330. ---
  2331. packages/x11/app/xkbcomp/package.mk | 3 ++-
  2332. packages/x11/driver/xf86-input-evdev/package.mk | 2 +-
  2333. packages/x11/driver/xf86-input-synaptics/package.mk | 2 +-
  2334. packages/x11/lib/libXi/package.mk | 2 +-
  2335. 4 files changed, 5 insertions(+), 4 deletions(-)
  2336.  
  2337. diff --git a/packages/x11/app/xkbcomp/package.mk b/packages/x11/app/xkbcomp/package.mk
  2338. index fdee2ed..cefb1e3 100644
  2339. --- a/packages/x11/app/xkbcomp/package.mk
  2340. +++ b/packages/x11/app/xkbcomp/package.mk
  2341. @@ -1,5 +1,6 @@
  2342. # SPDX-License-Identifier: GPL-2.0-or-later
  2343. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2344. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2345.  
  2346. PKG_NAME="xkbcomp"
  2347. PKG_VERSION="1.4.1"
  2348. @@ -7,7 +8,7 @@ PKG_SHA256="748dc4cf58ac95684106bd9cf163ac6ab7de9a236faec02a6f4d4006d63a5736"
  2349. PKG_LICENSE="OSS"
  2350. PKG_SITE="http://www.X.org"
  2351. PKG_URL="http://xorg.freedesktop.org/archive/individual/app/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2352. -PKG_DEPENDS_TARGET="toolchain util-macros libX11"
  2353. +PKG_DEPENDS_TARGET="toolchain util-macros libX11 libxkbfile"
  2354. PKG_LONGDESC="The xkbcomp keymap compiler converts a description of an XKB keymap into one of several output formats."
  2355.  
  2356. PKG_CONFIGURE_OPTS_TARGET="--with-xkb-config-root=$XORG_PATH_XKB"
  2357. diff --git a/packages/x11/driver/xf86-input-evdev/package.mk b/packages/x11/driver/xf86-input-evdev/package.mk
  2358. index e83dd81..c015cfc 100644
  2359. --- a/packages/x11/driver/xf86-input-evdev/package.mk
  2360. +++ b/packages/x11/driver/xf86-input-evdev/package.mk
  2361. @@ -8,7 +8,7 @@ PKG_SHA256="9edaa6205baf6d2922cc4db3d8e54a7e7773b5f733b0ae90f6be7725f983b70d"
  2362. PKG_LICENSE="OSS"
  2363. PKG_SITE="http://www.X.org"
  2364. PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2365. -PKG_DEPENDS_TARGET="toolchain util-macros libevdev mtdev systemd"
  2366. +PKG_DEPENDS_TARGET="toolchain xorg-server util-macros libevdev mtdev systemd"
  2367. PKG_LONGDESC="Evdev is an Xorg input driver for Linux's generic event devices."
  2368. PKG_TOOLCHAIN="autotools"
  2369.  
  2370. diff --git a/packages/x11/driver/xf86-input-synaptics/package.mk b/packages/x11/driver/xf86-input-synaptics/package.mk
  2371. index abbdf17..8cb9b74 100644
  2372. --- a/packages/x11/driver/xf86-input-synaptics/package.mk
  2373. +++ b/packages/x11/driver/xf86-input-synaptics/package.mk
  2374. @@ -7,7 +7,7 @@ PKG_SHA256="afba3289d7a40217a19d90db98ce181772f9ca6d77e1898727b0afcf02073b5a"
  2375. PKG_LICENSE="GPL"
  2376. PKG_SITE="http://lists.freedesktop.org/mailman/listinfo/xorg"
  2377. PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2378. -PKG_DEPENDS_TARGET="toolchain libXi"
  2379. +PKG_DEPENDS_TARGET="toolchain xorg-server libXi"
  2380. PKG_LONGDESC="Synaptics touchpad driver for X.Org."
  2381. PKG_TOOLCHAIN="autotools"
  2382.  
  2383. diff --git a/packages/x11/lib/libXi/package.mk b/packages/x11/lib/libXi/package.mk
  2384. index 8f50cc5..ac1707c 100644
  2385. --- a/packages/x11/lib/libXi/package.mk
  2386. +++ b/packages/x11/lib/libXi/package.mk
  2387. @@ -8,7 +8,7 @@ PKG_SHA256="c2e6b8ff84f9448386c1b5510a5cf5a16d788f76db018194dacdc200180faf45"
  2388. PKG_LICENSE="OSS"
  2389. PKG_SITE="http://www.x.org/"
  2390. PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2391. -PKG_DEPENDS_TARGET="toolchain util-macros libX11 libXfixes"
  2392. +PKG_DEPENDS_TARGET="toolchain util-macros libX11 libXfixes libXext"
  2393. PKG_LONGDESC="LibXi provides an X Window System client interface to the XINPUT extension to the X protocol."
  2394. PKG_BUILD_FLAGS="+pic"
  2395.  
  2396. --
  2397. 2.14.1
  2398.  
  2399.  
  2400. From 6f197b23217b02d2ef4eab5a74aa971fd67ff07b Mon Sep 17 00:00:00 2001
  2401. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2402. Date: Sat, 12 Jan 2019 14:12:26 +0000
  2403. Subject: [PATCH 12/19] packages: more missing dependencies
  2404.  
  2405. ---
  2406. packages/databases/sqlite/package.mk | 2 +-
  2407. packages/devel/bison/package.mk | 3 ++-
  2408. packages/devel/flex/package.mk | 2 +-
  2409. packages/devel/gmp/package.mk | 3 ++-
  2410. packages/lang/Python2/package.mk | 2 +-
  2411. 5 files changed, 7 insertions(+), 5 deletions(-)
  2412.  
  2413. diff --git a/packages/databases/sqlite/package.mk b/packages/databases/sqlite/package.mk
  2414. index 8a793e8..9bda7be 100644
  2415. --- a/packages/databases/sqlite/package.mk
  2416. +++ b/packages/databases/sqlite/package.mk
  2417. @@ -9,7 +9,7 @@ PKG_LICENSE="PublicDomain"
  2418. PKG_SITE="https://www.sqlite.org/"
  2419. PKG_URL="https://www.sqlite.org/2018/$PKG_NAME-$PKG_VERSION.tar.gz"
  2420. PKG_DEPENDS_HOST="gcc:host"
  2421. -PKG_DEPENDS_TARGET="toolchain"
  2422. +PKG_DEPENDS_TARGET="toolchain ncurses"
  2423. PKG_LONGDESC="An Embeddable SQL Database Engine."
  2424. # libsqlite3.a(sqlite3.o): requires dynamic R_X86_64_PC32 reloc against 'sqlite3_stricmp' which may overflow at runtime
  2425. PKG_BUILD_FLAGS="+pic +pic:host -parallel"
  2426. diff --git a/packages/devel/bison/package.mk b/packages/devel/bison/package.mk
  2427. index 5c15fbc..886e922 100644
  2428. --- a/packages/devel/bison/package.mk
  2429. +++ b/packages/devel/bison/package.mk
  2430. @@ -1,5 +1,6 @@
  2431. # SPDX-License-Identifier: GPL-2.0-or-later
  2432. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2433. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2434.  
  2435. PKG_NAME="bison"
  2436. PKG_VERSION="3.0.5"
  2437. @@ -7,7 +8,7 @@ PKG_SHA256="075cef2e814642e30e10e8155e93022e4a91ca38a65aa1d5467d4e969f97f338"
  2438. PKG_LICENSE="GPL"
  2439. PKG_SITE="http://www.gnu.org/software/bison/"
  2440. PKG_URL="http://ftpmirror.gnu.org/bison/$PKG_NAME-$PKG_VERSION.tar.xz"
  2441. -PKG_DEPENDS_HOST="ccache:host"
  2442. +PKG_DEPENDS_HOST="ccache:host m4:host"
  2443. PKG_LONGDESC="A general-purpose parser generator."
  2444.  
  2445. PKG_CONFIGURE_OPTS_HOST="--disable-rpath --with-gnu-ld"
  2446. diff --git a/packages/devel/flex/package.mk b/packages/devel/flex/package.mk
  2447. index 37e2324..dc68458 100644
  2448. --- a/packages/devel/flex/package.mk
  2449. +++ b/packages/devel/flex/package.mk
  2450. @@ -7,7 +7,7 @@ PKG_SHA256="add2b55f3bc38cb512b48fad7d72f43b11ef244487ff25fc00aabec1e32b617f"
  2451. PKG_LICENSE="GPL"
  2452. PKG_SITE="http://flex.sourceforge.net/"
  2453. PKG_URL="$SOURCEFORGE_SRC/flex/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2454. -PKG_DEPENDS_HOST="ccache:host"
  2455. +PKG_DEPENDS_HOST="ccache:host m4:host"
  2456. PKG_DEPENDS_TARGET="toolchain"
  2457. PKG_LONGDESC="A tool for generating programs that perform pattern-matching on text."
  2458. PKG_TOOLCHAIN="autotools"
  2459. diff --git a/packages/devel/gmp/package.mk b/packages/devel/gmp/package.mk
  2460. index fddce60..af57dc1 100644
  2461. --- a/packages/devel/gmp/package.mk
  2462. +++ b/packages/devel/gmp/package.mk
  2463. @@ -1,5 +1,6 @@
  2464. # SPDX-License-Identifier: GPL-2.0-or-later
  2465. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2466. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2467.  
  2468. PKG_NAME="gmp"
  2469. PKG_VERSION="6.1.2"
  2470. @@ -7,7 +8,7 @@ PKG_SHA256="87b565e89a9a684fe4ebeeddb8399dce2599f9c9049854ca8c0dfbdea0e21912"
  2471. PKG_LICENSE="LGPLv3+"
  2472. PKG_SITE="http://gmplib.org/"
  2473. PKG_URL="https://gmplib.org/download/gmp/$PKG_NAME-$PKG_VERSION.tar.xz"
  2474. -PKG_DEPENDS_HOST="ccache:host"
  2475. +PKG_DEPENDS_HOST="ccache:host m4:host"
  2476. PKG_LONGDESC="A library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers."
  2477. PKG_BUILD_FLAGS="+pic:host"
  2478.  
  2479. diff --git a/packages/lang/Python2/package.mk b/packages/lang/Python2/package.mk
  2480. index a5e17da..edfe51e 100644
  2481. --- a/packages/lang/Python2/package.mk
  2482. +++ b/packages/lang/Python2/package.mk
  2483. @@ -10,7 +10,7 @@ PKG_LICENSE="OSS"
  2484. PKG_SITE="http://www.python.org/"
  2485. PKG_URL="http://www.python.org/ftp/python/$PKG_VERSION/${PKG_NAME::-1}-$PKG_VERSION.tar.xz"
  2486. PKG_DEPENDS_HOST="zlib:host bzip2:host sqlite:host"
  2487. -PKG_DEPENDS_TARGET="toolchain sqlite expat zlib bzip2 openssl libffi Python2:host"
  2488. +PKG_DEPENDS_TARGET="toolchain sqlite expat zlib bzip2 openssl libffi Python2:host ncurses readline"
  2489. PKG_LONGDESC="Python2 is an interpreted object-oriented programming language."
  2490.  
  2491. PKG_TOOLCHAIN="autotools"
  2492. --
  2493. 2.14.1
  2494.  
  2495.  
  2496. From 5a793688cf6c11629f3f80f4f6f695677468ac90 Mon Sep 17 00:00:00 2001
  2497. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2498. Date: Sat, 12 Jan 2019 01:25:27 +0000
  2499. Subject: [PATCH 13/19] packages: add thread safety workaround
  2500.  
  2501. Avoids trashing $TOOLCHAIN/lib/python2.7/site-packages/easy-install.pth
  2502. when installing Python host packages (distutilscross:host, setuptools:host,
  2503. MarkupSafe:host etc.).
  2504. ---
  2505. packages/python/devel/Mako/package.mk | 2 +-
  2506. packages/python/devel/MarkupSafe/package.mk | 2 +-
  2507. packages/python/devel/distutilscross/package.mk | 3 ++-
  2508. packages/python/devel/meson/package.mk | 2 +-
  2509. packages/python/devel/pathlib/package.mk | 2 +-
  2510. packages/python/devel/setuptools/package.mk | 4 ++--
  2511. packages/tools/dtc/package.mk | 2 +-
  2512. 7 files changed, 9 insertions(+), 8 deletions(-)
  2513.  
  2514. diff --git a/packages/python/devel/Mako/package.mk b/packages/python/devel/Mako/package.mk
  2515. index 45007cf..41217f6 100644
  2516. --- a/packages/python/devel/Mako/package.mk
  2517. +++ b/packages/python/devel/Mako/package.mk
  2518. @@ -13,5 +13,5 @@ PKG_LONGDESC="Mako is a super-fast templating language that borrows the best ide
  2519. PKG_TOOLCHAIN="manual"
  2520.  
  2521. makeinstall_host() {
  2522. - python3 setup.py install --prefix=$TOOLCHAIN
  2523. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN
  2524. }
  2525. diff --git a/packages/python/devel/MarkupSafe/package.mk b/packages/python/devel/MarkupSafe/package.mk
  2526. index 3780381..20c090e 100644
  2527. --- a/packages/python/devel/MarkupSafe/package.mk
  2528. +++ b/packages/python/devel/MarkupSafe/package.mk
  2529. @@ -13,5 +13,5 @@ PKG_LONGDESC="MarkupSafe implements a XML/HTML/XHTML Markup safe string for Pyth
  2530. PKG_TOOLCHAIN="manual"
  2531.  
  2532. makeinstall_host() {
  2533. - python3 setup.py install --prefix=$TOOLCHAIN
  2534. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN
  2535. }
  2536. diff --git a/packages/python/devel/distutilscross/package.mk b/packages/python/devel/distutilscross/package.mk
  2537. index 367e35a..4c767be 100644
  2538. --- a/packages/python/devel/distutilscross/package.mk
  2539. +++ b/packages/python/devel/distutilscross/package.mk
  2540. @@ -1,5 +1,6 @@
  2541. # SPDX-License-Identifier: GPL-2.0-or-later
  2542. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2543. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2544.  
  2545. PKG_NAME="distutilscross"
  2546. PKG_VERSION="0.1"
  2547. @@ -12,5 +13,5 @@ PKG_LONGDESC="distutilscross enhances distutils to support Cross Compile of Pyth
  2548. PKG_TOOLCHAIN="manual"
  2549.  
  2550. makeinstall_host() {
  2551. - python setup.py install --prefix=$TOOLCHAIN
  2552. + exec_thread_safe python setup.py install --prefix=$TOOLCHAIN
  2553. }
  2554. diff --git a/packages/python/devel/meson/package.mk b/packages/python/devel/meson/package.mk
  2555. index 0e34988..ff0820d 100644
  2556. --- a/packages/python/devel/meson/package.mk
  2557. +++ b/packages/python/devel/meson/package.mk
  2558. @@ -16,7 +16,7 @@ make_host() {
  2559. }
  2560.  
  2561. makeinstall_host() {
  2562. - python3 setup.py install --prefix=$TOOLCHAIN --skip-build
  2563. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN --skip-build
  2564.  
  2565. # Avoid using full path to python3 that may exceed 128 byte limit.
  2566. # Instead use PATH as we know our toolchain is first.
  2567. diff --git a/packages/python/devel/pathlib/package.mk b/packages/python/devel/pathlib/package.mk
  2568. index 30c9bea..61f8e55 100644
  2569. --- a/packages/python/devel/pathlib/package.mk
  2570. +++ b/packages/python/devel/pathlib/package.mk
  2571. @@ -12,5 +12,5 @@ PKG_LONGDESC="This module offers a set of classes featuring all the common opera
  2572. PKG_TOOLCHAIN="manual"
  2573.  
  2574. makeinstall_host() {
  2575. - python3 setup.py install --prefix=$TOOLCHAIN
  2576. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN
  2577. }
  2578. diff --git a/packages/python/devel/setuptools/package.mk b/packages/python/devel/setuptools/package.mk
  2579. index 8a21964..531e6d7 100644
  2580. --- a/packages/python/devel/setuptools/package.mk
  2581. +++ b/packages/python/devel/setuptools/package.mk
  2582. @@ -18,6 +18,6 @@ make_host() {
  2583. }
  2584.  
  2585. makeinstall_host() {
  2586. - python2 setup.py install --prefix=$TOOLCHAIN
  2587. - python3 setup.py install --prefix=$TOOLCHAIN
  2588. + exec_thread_safe python2 setup.py install --prefix=$TOOLCHAIN
  2589. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN
  2590. }
  2591. diff --git a/packages/tools/dtc/package.mk b/packages/tools/dtc/package.mk
  2592. index 4fe132c..c5a005a 100644
  2593. --- a/packages/tools/dtc/package.mk
  2594. +++ b/packages/tools/dtc/package.mk
  2595. @@ -22,7 +22,7 @@ makeinstall_host() {
  2596.  
  2597. post_makeinstall_host() {
  2598. python ./pylibfdt/setup.py build_ext --inplace
  2599. - python ./pylibfdt/setup.py install --prefix=$TOOLCHAIN
  2600. + exec_thread_safe python ./pylibfdt/setup.py install --prefix=$TOOLCHAIN
  2601.  
  2602. touch $TOOLCHAIN/lib/$PKG_PYTHON_VERSION/site-packages/pylibfdt/__init__.py
  2603. }
  2604. --
  2605. 2.14.1
  2606.  
  2607.  
  2608. From f1cddec3e46643cc7b23b41915ebe5f5a175d5ff Mon Sep 17 00:00:00 2001
  2609. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2610. Date: Sun, 6 Jan 2019 10:48:46 +0000
  2611. Subject: [PATCH 14/19] flex: work around realloc/malloc build failures with
  2612. flex:target
  2613.  
  2614. ---
  2615. packages/devel/flex/package.mk | 4 ++++
  2616. 1 file changed, 4 insertions(+)
  2617.  
  2618. diff --git a/packages/devel/flex/package.mk b/packages/devel/flex/package.mk
  2619. index dc68458..42bdc27 100644
  2620. --- a/packages/devel/flex/package.mk
  2621. +++ b/packages/devel/flex/package.mk
  2622. @@ -1,5 +1,6 @@
  2623. # SPDX-License-Identifier: GPL-2.0-or-later
  2624. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2625. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2626.  
  2627. PKG_NAME="flex"
  2628. PKG_VERSION="2.5.39"
  2629. @@ -14,6 +15,9 @@ PKG_TOOLCHAIN="autotools"
  2630.  
  2631. PKG_CONFIGURE_OPTS_HOST="--enable-static --disable-shared --disable-rpath --with-gnu-ld"
  2632.  
  2633. +PKG_CONFIGURE_OPTS_TARGET="ac_cv_func_realloc_0_nonnull=yes \
  2634. + ac_cv_func_malloc_0_nonnull=yes"
  2635. +
  2636. post_makeinstall_host() {
  2637. cat > $TOOLCHAIN/bin/lex << "EOF"
  2638. #!/bin/sh
  2639. --
  2640. 2.14.1
  2641.  
  2642.  
  2643. From b60c844b4e355c0cc59c47083030ab0bde691841 Mon Sep 17 00:00:00 2001
  2644. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2645. Date: Sun, 13 Jan 2019 04:30:32 +0000
  2646. Subject: [PATCH 15/19] libcec: remove useless demo script
  2647.  
  2648. ---
  2649. packages/devel/libcec/package.mk | 3 +++
  2650. 1 file changed, 3 insertions(+)
  2651.  
  2652. diff --git a/packages/devel/libcec/package.mk b/packages/devel/libcec/package.mk
  2653. index ef45e2a..53b143e 100644
  2654. --- a/packages/devel/libcec/package.mk
  2655. +++ b/packages/devel/libcec/package.mk
  2656. @@ -49,6 +49,9 @@ pre_configure_target() {
  2657. }
  2658.  
  2659. post_makeinstall_target() {
  2660. + # Remove the Python3 demo - useless for us
  2661. + rm -f $INSTALL/usr/bin/pyCecClient
  2662. +
  2663. PYTHON_DIR=$INSTALL/usr/lib/$PKG_PYTHON_VERSION
  2664. if [ -d $PYTHON_DIR/dist-packages ]; then
  2665. mv $PYTHON_DIR/dist-packages $PYTHON_DIR/site-packages
  2666. --
  2667. 2.14.1
  2668.  
  2669.  
  2670. From d70f1588153df7a721d8b868851a3cde4d6c1a6c Mon Sep 17 00:00:00 2001
  2671. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2672. Date: Sat, 5 Jan 2019 22:42:12 +0000
  2673. Subject: [PATCH 16/19] initramfs: use ln -sfn when LINK_NAME is a directory
  2674.  
  2675. INSTALL initramfs (target)
  2676. ln: failed to create symbolic link '/home/ubuntu/projects/LibreELEC.tv/build.LibreELEC-RPi2.arm-9.0-devel-mt/initramfs/lib/lib': Permission denied
  2677. ln: failed to create symbolic link '/home/ubuntu/projects/LibreELEC.tv/build.LibreELEC-RPi2.arm-9.0-devel-mt/initramfs/bin/bin': Permission denied
  2678. ln: failed to create symbolic link '/home/ubuntu/projects/LibreELEC.tv/build.LibreELEC-RPi2.arm-9.0-devel-mt/initramfs/sbin/sbin': Permission denied
  2679.  
  2680. If the directory sym link already exists, we try to
  2681. create a directory within the dereferenced sym link. So...
  2682.  
  2683. ln -sf /usr/lib $BUILD/initramfs/lib
  2684.  
  2685. means we attempt to create a sym link within the existing
  2686. $BUILD/initramfs/lib which is derefernced to /usr/lib/lib,
  2687. resulting in "permission denied".
  2688. ---
  2689. packages/virtual/initramfs/package.mk | 10 +++++-----
  2690. 1 file changed, 5 insertions(+), 5 deletions(-)
  2691.  
  2692. diff --git a/packages/virtual/initramfs/package.mk b/packages/virtual/initramfs/package.mk
  2693. index ef17f19..b278804 100644
  2694. --- a/packages/virtual/initramfs/package.mk
  2695. +++ b/packages/virtual/initramfs/package.mk
  2696. @@ -22,14 +22,14 @@ fi
  2697. post_install() {
  2698. ( cd $BUILD/initramfs
  2699. if [ "$TARGET_ARCH" = "x86_64" ]; then
  2700. - ln -sf /usr/lib $BUILD/initramfs/lib64
  2701. + ln -sfn /usr/lib $BUILD/initramfs/lib64
  2702. mkdir -p $BUILD/initramfs/usr
  2703. - ln -sf /usr/lib $BUILD/initramfs/usr/lib64
  2704. + ln -sfn /usr/lib $BUILD/initramfs/usr/lib64
  2705. fi
  2706.  
  2707. - ln -sf /usr/lib $BUILD/initramfs/lib
  2708. - ln -sf /usr/bin $BUILD/initramfs/bin
  2709. - ln -sf /usr/sbin $BUILD/initramfs/sbin
  2710. + ln -sfn /usr/lib $BUILD/initramfs/lib
  2711. + ln -sfn /usr/bin $BUILD/initramfs/bin
  2712. + ln -sfn /usr/sbin $BUILD/initramfs/sbin
  2713.  
  2714. mkdir -p $BUILD/image/
  2715. fakeroot -- sh -c \
  2716. --
  2717. 2.14.1
  2718.  
  2719.  
  2720. From 4dad401f3be82d0f3922abd4cbda3a575ac3f654 Mon Sep 17 00:00:00 2001
  2721. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2722. Date: Sat, 5 Jan 2019 19:32:50 +0000
  2723. Subject: [PATCH 17/19] Makefile: switch to using multi-threaded builds
  2724.  
  2725. ---
  2726. Makefile | 6 +++---
  2727. 1 file changed, 3 insertions(+), 3 deletions(-)
  2728.  
  2729. diff --git a/Makefile b/Makefile
  2730. index a26a9e2..bf85107 100644
  2731. --- a/Makefile
  2732. +++ b/Makefile
  2733. @@ -3,13 +3,13 @@ BUILD_DIRS=build.*
  2734. all: release
  2735.  
  2736. system:
  2737. - ./scripts/image
  2738. + ./scripts/image_mt
  2739.  
  2740. release:
  2741. - ./scripts/image release
  2742. + ./scripts/image_mt release
  2743.  
  2744. image:
  2745. - ./scripts/image mkimage
  2746. + ./scripts/image_mt mkimage
  2747.  
  2748. noobs:
  2749. ./scripts/image noobs
  2750. --
  2751. 2.14.1
  2752.  
  2753.  
  2754. From c39f03771ccd2af4a113f4c3b67ae1d1143e4937 Mon Sep 17 00:00:00 2001
  2755. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2756. Date: Sun, 13 Jan 2019 04:43:31 +0000
  2757. Subject: [PATCH 18/19] EXPERIMENTAL: initramfs: stop building from inside
  2758. linux:target
  2759.  
  2760. ---
  2761. packages/linux/package.mk | 7 +------
  2762. packages/virtual/initramfs/package.mk | 1 +
  2763. 2 files changed, 2 insertions(+), 6 deletions(-)
  2764.  
  2765. diff --git a/packages/linux/package.mk b/packages/linux/package.mk
  2766. index b053a46..d30792c 100644
  2767. --- a/packages/linux/package.mk
  2768. +++ b/packages/linux/package.mk
  2769. @@ -6,7 +6,7 @@ PKG_NAME="linux"
  2770. PKG_LICENSE="GPL"
  2771. PKG_SITE="http://www.kernel.org"
  2772. PKG_DEPENDS_HOST="ccache:host openssl:host"
  2773. -PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  2774. +PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils initramfs $KERNEL_EXTRA_DEPENDS_TARGET"
  2775. PKG_DEPENDS_INIT="toolchain"
  2776. PKG_NEED_UNPACK="$LINUX_DEPENDS"
  2777. PKG_LONGDESC="This package contains a precompiled kernel image and the modules."
  2778. @@ -203,11 +203,6 @@ make_target() {
  2779. )
  2780. fi
  2781.  
  2782. - ( cd $ROOT
  2783. - rm -rf $BUILD/initramfs
  2784. - $SCRIPTS/install initramfs
  2785. - ) || die "FAILURE: Building initramfs"
  2786. -
  2787. if [ "$BOOTLOADER" = "u-boot" -a -n "$KERNEL_UBOOT_EXTRA_TARGET" ]; then
  2788. for extra_target in "$KERNEL_UBOOT_EXTRA_TARGET"; do
  2789. kernel_make $extra_target
  2790. diff --git a/packages/virtual/initramfs/package.mk b/packages/virtual/initramfs/package.mk
  2791. index b278804..49da5b9 100644
  2792. --- a/packages/virtual/initramfs/package.mk
  2793. +++ b/packages/virtual/initramfs/package.mk
  2794. @@ -8,6 +8,7 @@ PKG_LICENSE="GPL"
  2795. PKG_SITE="http://www.openelec.tv"
  2796. PKG_URL=""
  2797. PKG_DEPENDS_TARGET="toolchain libc:init busybox:init linux:init plymouth-lite:init util-linux:init e2fsprogs:init dosfstools:init fakeroot:host"
  2798. +PKG_NEED_UNPACK="$LINUX_DEPENDS $(get_pkg_directory busybox)"
  2799. PKG_SECTION="virtual"
  2800. PKG_LONGDESC="debug is a Metapackage for installing initramfs"
  2801.  
  2802. --
  2803. 2.14.1
  2804.  
  2805.  
  2806. From c5b0a0e1e9571dd85801f85feb16408b9cd8125a Mon Sep 17 00:00:00 2001
  2807. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2808. Date: Mon, 14 Jan 2019 01:18:33 +0000
  2809. Subject: [PATCH 19/19] sq: EXPERIMENTAL: tweak initramfs deps to avoid
  2810. circular refs
  2811.  
  2812. ---
  2813. packages/linux/package.mk | 4 ++--
  2814. packages/virtual/image/package.mk | 2 +-
  2815. 2 files changed, 3 insertions(+), 3 deletions(-)
  2816.  
  2817. diff --git a/packages/linux/package.mk b/packages/linux/package.mk
  2818. index d30792c..7faecd1 100644
  2819. --- a/packages/linux/package.mk
  2820. +++ b/packages/linux/package.mk
  2821. @@ -6,8 +6,8 @@ PKG_NAME="linux"
  2822. PKG_LICENSE="GPL"
  2823. PKG_SITE="http://www.kernel.org"
  2824. PKG_DEPENDS_HOST="ccache:host openssl:host"
  2825. -PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils initramfs $KERNEL_EXTRA_DEPENDS_TARGET"
  2826. -PKG_DEPENDS_INIT="toolchain"
  2827. +PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  2828. +PKG_DEPENDS_INIT="toolchain linux"
  2829. PKG_NEED_UNPACK="$LINUX_DEPENDS"
  2830. PKG_LONGDESC="This package contains a precompiled kernel image and the modules."
  2831. PKG_IS_KERNEL_PKG="yes"
  2832. diff --git a/packages/virtual/image/package.mk b/packages/virtual/image/package.mk
  2833. index 0ccc00b..cbb54d4 100644
  2834. --- a/packages/virtual/image/package.mk
  2835. +++ b/packages/virtual/image/package.mk
  2836. @@ -4,7 +4,7 @@
  2837. PKG_NAME="image"
  2838. PKG_LICENSE="GPL"
  2839. PKG_SITE="https://libreelec.tv"
  2840. -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"
  2841. +PKG_DEPENDS_TARGET="toolchain squashfs:host dosfstools:host fakeroot:host kmod:host mtools:host populatefs:host libc gcc initramfs linux-drivers linux-firmware ${BOOTLOADER} busybox util-linux corefonts network misc-packages debug"
  2842. PKG_SECTION="virtual"
  2843. PKG_LONGDESC="Root package used to build cnd create complete image"
  2844.  
  2845. --
  2846. 2.14.1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement