Advertisement
Guest User

Untitled

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