123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # SPDX-License-Identifier: GPL-2.0
- # Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
- THREADCOUNT=${THREADCOUNT:-$(nproc)}
- start_multithread_build() {
- local buildopts result=0
- # init thread control folder
- rm -rf "${THREAD_CONTROL}"
- mkdir -p "${THREAD_CONTROL}/locks"
- echo -1 >"${THREAD_CONTROL}/progress.prev"
- echo 0 >"${THREAD_CONTROL}/progress"
- touch "${THREAD_CONTROL}/status"
- # Increase file descriptors if building one thread/package
- [ "${THREADCOUNT}" = "0" ] && ulimit -n ${ULIMITN:-10240}
- # create a single log file by default for a single threaded build (or the builder is a masochist)
- if [ ${THREADCOUNT} -eq 1 -a "${ONELOG,,}" != "no" ] || [ "${ONELOG,,}" = "yes" ]; then
- buildopts+=" --no-log-burst"
- else
- mkdir -p "${THREAD_CONTROL}/logs"
- buildopts+=" --log-burst"
- fi
- buildopts+=" --log-combine ${LOGCOMBINE:-always}"
- [ "${AUTOREMOVE}" = "yes" ] && buildopts+=" --auto-remove"
- # When building addons, don't halt on error - keep building all packages/addons
- [ "${MTADDONBUILD}" = "yes" ] && buildopts+=" --continue-on-error" || buildopts+=" --halt-on-error"
- [ "${MTPROGRESS}" = "yes" ] && buildopts+=" --progress"
- [ "${MTVERBOSE}" = "yes" ] && buildopts+=" --verbose"
- [ "${MTDEBUG}" = "yes" ] && buildopts+=" --debug"
- if [ "${DISABLE_COLORS}" = "yes" ]; then
- buildopts+=" --colors=never"
- else
- buildopts+=" --colors=${MTCOLORS:-auto}"
- fi
- [ "${MTBOOKENDS}" = "no" ] && buildopts+=" --without-bookends" || buildopts+=" --with-bookends"
- [ "${MTIMMEDIATE}" = "no" ] && buildopts+=" --fail-after-active" || buildopts+=" --fail-immediately"
- buildopts+=" --stats-interval ${MTINTERVAL:-60}"
- # pipefail: return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status
- set -o pipefail
- ${SCRIPTS}/pkgjson | ${SCRIPTS}/genbuildplan.py --show-wants --with-json "${THREAD_CONTROL}"/plan.json \
- --build ${@} > "${THREAD_CONTROL}"/plan || result=1
- if [ ${result} -eq 0 ]; then
- save_build_config
- # export the following vars so that they will be available to subprocesses of pkgbuilder.py
- export ROOT SCRIPTS THREAD_CONTROL
- MTBUILDSTART=$(date +%s) MTWITHLOCKS=yes ${SCRIPTS}/pkgbuilder.py \
- --plan "${THREAD_CONTROL}"/plan.json \
- --joblog "${THREAD_CONTROL}"/joblog \
- --loadstats "${THREAD_CONTROL}"/loadstats \
- --max-procs ${THREADCOUNT} ${buildopts} || result=1
- [ ${result} -eq 0 -a -f "${THREAD_CONTROL}"/history ] && echo && cat "${THREAD_CONTROL}"/history | ${ROOT}/tools/mtstats.py
- rm -f "${THREAD_CONTROL}/parallel.pid"
- fi
- set +o pipefail
- return ${result}
- }
|