mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 13:46:49 +00:00
Merge pull request #3328 from MilhouseVH/le92_mt_fixup3
buildsystem: use isolated sysroot for installation
This commit is contained in:
commit
ee662ebeb6
@ -1261,11 +1261,15 @@ pkg_lock_status() {
|
||||
local status="$1" pkg="$2" task="$3" msg="$4"
|
||||
local this_job="${MTJOBID}" line
|
||||
|
||||
printf -v line "%s: <%05d> [%02d/%0*d] %-7s %-7s %-35s" \
|
||||
"$(date +%Y-%m-%d\ %H:%M:%S.%N)" $$ ${this_job} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${status}" "${task}" "${pkg}"
|
||||
[ -n "${msg}" ] && line+=" (${msg})"
|
||||
(
|
||||
flock --exclusive 94
|
||||
|
||||
echo "${line}" >>"${THREAD_CONTROL}/history"
|
||||
printf -v line "%s: <%05d> [%02d/%0*d] %-7s %-7s %-35s" \
|
||||
"$(date +%Y-%m-%d\ %H:%M:%S.%N)" $$ ${this_job} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${status}" "${task}" "${pkg}"
|
||||
[ -n "${msg}" ] && line+=" (${msg})"
|
||||
|
||||
echo "${line}" >>"${THREAD_CONTROL}/history"
|
||||
) 94>"${THREAD_CONTROL}/locks/.history"
|
||||
|
||||
[ "${DASHBOARD}" != "no" ] && update_dashboard "${status}" "${pkg}" "${task}" "${msg}"
|
||||
|
||||
|
@ -144,7 +144,7 @@ start_multithread_build() {
|
||||
local singlethread buildopts
|
||||
|
||||
# init thread control folder
|
||||
rm -fr "${THREAD_CONTROL}"
|
||||
rm -rf "${THREAD_CONTROL}"
|
||||
mkdir -p "${THREAD_CONTROL}/locks"
|
||||
echo -1 >"${THREAD_CONTROL}/progress.prev"
|
||||
echo 0 >"${THREAD_CONTROL}/progress"
|
||||
|
@ -17,5 +17,6 @@ PKG_CONFIGURE_OPTS_TARGET="--enable-static \
|
||||
--disable-largefile"
|
||||
|
||||
post_makeinstall_target() {
|
||||
cp $PKG_BUILD/common/utils.h $SYSROOT_PREFIX/usr/include/libimobiledevice/
|
||||
mkdir -p "${SYSROOT_PREFIX}/usr/include/lib/libimobiledevice"
|
||||
cp ${PKG_BUILD}/common/utils.h "${SYSROOT_PREFIX}/usr/include/libimobiledevice"
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Lukas Rusak (lrusak@libreelec.tv)
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="qtbase"
|
||||
PKG_VERSION="5.6.2"
|
||||
@ -11,8 +12,8 @@ PKG_DEPENDS_TARGET="pcre zlib"
|
||||
PKG_LONGDESC="A cross-platform application and UI framework."
|
||||
|
||||
PKG_CONFIGURE_OPTS_TARGET="-prefix /usr
|
||||
-sysroot $SYSROOT_PREFIX
|
||||
-hostprefix $TOOLCHAIN
|
||||
-sysroot "${SYSROOT_PREFIX}"
|
||||
-hostprefix "${TOOLCHAIN}"
|
||||
-device linux-libreelec-g++
|
||||
-opensource -confirm-license
|
||||
-release
|
||||
@ -52,31 +53,42 @@ PKG_CONFIGURE_OPTS_TARGET="-prefix /usr
|
||||
|
||||
configure_target() {
|
||||
QMAKE_CONF_DIR="mkspecs/devices/linux-libreelec-g++"
|
||||
QMAKE_CONF="${QMAKE_CONF_DIR}/qmake.conf"
|
||||
|
||||
cd ..
|
||||
mkdir -p $QMAKE_CONF_DIR
|
||||
echo "MAKEFILE_GENERATOR = UNIX" > $QMAKE_CONF
|
||||
echo "CONFIG += incremental" >> $QMAKE_CONF
|
||||
echo "QMAKE_INCREMENTAL_STYLE = sublib" >> $QMAKE_CONF
|
||||
echo "include(../../common/linux.conf)" >> $QMAKE_CONF
|
||||
echo "include(../../common/gcc-base-unix.conf)" >> $QMAKE_CONF
|
||||
echo "include(../../common/g++-unix.conf)" >> $QMAKE_CONF
|
||||
echo "load(device_config)" >> $QMAKE_CONF
|
||||
echo "QMAKE_CC = $CC" >> $QMAKE_CONF
|
||||
echo "QMAKE_CXX = $CXX" >> $QMAKE_CONF
|
||||
echo "QMAKE_LINK = $CXX" >> $QMAKE_CONF
|
||||
echo "QMAKE_LINK_SHLIB = $CXX" >> $QMAKE_CONF
|
||||
echo "QMAKE_AR = $AR cqs" >> $QMAKE_CONF
|
||||
echo "QMAKE_OBJCOPY = $OBJCOPY" >> $QMAKE_CONF
|
||||
echo "QMAKE_NM = $NM -P" >> $QMAKE_CONF
|
||||
echo "QMAKE_STRIP = $STRIP" >> $QMAKE_CONF
|
||||
echo "QMAKE_CFLAGS = $CFLAGS" >> $QMAKE_CONF
|
||||
echo "QMAKE_CXXFLAGS = $CXXFLAGS" >> $QMAKE_CONF
|
||||
echo "QMAKE_LFLAGS = $LDFLAGS" >> $QMAKE_CONF
|
||||
echo "load(qt_config)" >> $QMAKE_CONF
|
||||
echo '#include "../../linux-g++/qplatformdefs.h"' >> $QMAKE_CONF_DIR/qplatformdefs.h
|
||||
mkdir -p ${QMAKE_CONF_DIR}
|
||||
|
||||
cat >"${QMAKE_CONF_DIR}/qmake.conf" <<EOF
|
||||
MAKEFILE_GENERATOR = UNIX
|
||||
CONFIG += incremental
|
||||
QMAKE_INCREMENTAL_STYLE = sublib
|
||||
include(../../common/linux.conf)
|
||||
include(../../common/gcc-base-unix.conf)
|
||||
include(../../common/g++-unix.conf)
|
||||
load(device_config)
|
||||
QMAKE_CC = ${CC}
|
||||
QMAKE_CXX = ${CXX}
|
||||
QMAKE_LINK = ${CXX}
|
||||
QMAKE_LINK_SHLIB = ${CXX}
|
||||
QMAKE_AR = ${AR} cqs
|
||||
QMAKE_OBJCOPY = ${OBJCOPY}
|
||||
QMAKE_NM = ${NM} -P
|
||||
QMAKE_STRIP = ${STRIP}
|
||||
QMAKE_CFLAGS = ${CFLAGS}
|
||||
QMAKE_CXXFLAGS = ${CXXFLAGS}
|
||||
QMAKE_LFLAGS = ${LDFLAGS}
|
||||
load(qt_config)
|
||||
EOF
|
||||
|
||||
cat >"${QMAKE_CONF_DIR}/qplatformdefs.h" <<EOF
|
||||
#include "../../linux-g++/qplatformdefs.h"
|
||||
EOF
|
||||
|
||||
unset CC CXX LD RANLIB AR AS CPPFLAGS CFLAGS LDFLAGS CXXFLAGS
|
||||
./configure $PKG_CONFIGURE_OPTS_TARGET
|
||||
./configure ${PKG_CONFIGURE_OPTS_TARGET}
|
||||
}
|
||||
|
||||
post_makeinstall_target() {
|
||||
# Qt installs directly to $SYSROOT_PREFIX so don't rely on scripts/build fixing this up
|
||||
# PKG_ORIG_SYSROOT_PREFIX will be undefined when performing a legacy build
|
||||
sed -e "s:\(['= ]\)/usr:\\1${PKG_ORIG_SYSROOT_PREFIX:-${SYSROOT_PREFIX}}/usr:g" -i "${PKG_ORIG_SYSROOT_PREFIX:-${SYSROOT_PREFIX}}/usr/lib"/libQt*.la
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libopenmpt"
|
||||
PKG_VERSION="0.3.1"
|
||||
@ -7,7 +8,7 @@ PKG_SHA256="6fc5614926edd523d5585e40fdaf0b2ea08689d4dc91de49511d02503744cbb5"
|
||||
PKG_LICENSE="BSD"
|
||||
PKG_SITE="http://lib.openmpt.org/libopenmpt/"
|
||||
PKG_URL="http://lib.openmpt.org/files/libopenmpt/src/${PKG_NAME}-${PKG_VERSION}+release.autotools.tar.gz"
|
||||
PKG_DEPENDS_TARGET="toolchain libogg libvorbis"
|
||||
PKG_DEPENDS_TARGET="toolchain libogg libvorbis zlib"
|
||||
PKG_LONGDESC="libopenmpt renders mod music files as raw audio data, for playing or conversion."
|
||||
PKG_BUILD_FLAGS="+pic"
|
||||
|
||||
|
@ -9,7 +9,7 @@ PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.kodi.tv"
|
||||
PKG_URL="https://github.com/rbuehlma/pvr.zattoo/archive/$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_TARGET="toolchain kodi-platform"
|
||||
PKG_DEPENDS_TARGET="toolchain kodi-platform tinyxml2"
|
||||
PKG_SECTION=""
|
||||
PKG_SHORTDESC="pvr.zattoo"
|
||||
PKG_LONGDESC="pvr.zattoo"
|
||||
|
@ -10,7 +10,7 @@ PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/notspiff/screensaver.asterwave"
|
||||
PKG_URL="https://github.com/notspiff/screensaver.asterwave/archive/$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_TARGET="toolchain kodi-platform soil"
|
||||
PKG_DEPENDS_TARGET="toolchain kodi-platform soil glm"
|
||||
PKG_SECTION=""
|
||||
PKG_SHORTDESC="screensaver.asterwave"
|
||||
PKG_LONGDESC="screensaver.asterwave"
|
||||
|
@ -10,7 +10,7 @@ PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/notspiff/screensaver.cpblobs"
|
||||
PKG_URL="https://github.com/notspiff/screensaver.cpblobs/archive/$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_TARGET="toolchain kodi-platform soil"
|
||||
PKG_DEPENDS_TARGET="toolchain kodi-platform soil glm"
|
||||
PKG_SECTION=""
|
||||
PKG_SHORTDESC="screensaver.cpblobs"
|
||||
PKG_LONGDESC="screensaver.cpblobs"
|
||||
|
@ -373,13 +373,17 @@ fi
|
||||
|
||||
pkg_call_exists post_make_$TARGET && pkg_call post_make_$TARGET
|
||||
|
||||
# make install writes directly to sysroot which then needs fixing up - this is racy
|
||||
if listcontains "configure:target cmake-make:target autotools:target make:target" "${PKG_TOOLCHAIN}:${TARGET}"; then
|
||||
acquire_exclusive_lock "${PKG_NAME}:${TARGET}" "build"
|
||||
PKG_NEED_UNLOCK=yes
|
||||
else
|
||||
PKG_NEED_UNLOCK=no
|
||||
fi
|
||||
# Hack around directly writing/modifying the content of a shared sysroot
|
||||
# by temporarily installing new files to a package specific sysroot
|
||||
PKG_ORIG_SYSROOT_PREFIX="${SYSROOT_PREFIX}"
|
||||
export SYSROOT_PREFIX="${BUILD}/.sysroot/${PKG_NAME}.${TARGET}"
|
||||
rm -rf "${SYSROOT_PREFIX}"
|
||||
|
||||
# Create common sysroot directories as some packages expect them to exist.
|
||||
# TODO: Fix those packages so we don't need to pre-create directories.
|
||||
for d in /usr/lib /usr/include /usr/bin /usr/lib/pkgconfig; do
|
||||
mkdir -p "${SYSROOT_PREFIX}${d}"
|
||||
done
|
||||
|
||||
# make install
|
||||
pkg_call_exists pre_makeinstall_$TARGET && pkg_call pre_makeinstall_$TARGET
|
||||
@ -422,14 +426,26 @@ fi
|
||||
|
||||
pkg_call_exists post_makeinstall_$TARGET && pkg_call post_makeinstall_$TARGET
|
||||
|
||||
# This is the racy part - one or more processes may be creating, modifying or deleting
|
||||
# $SYSROOT_PREFIX/usr/lib/*.la files while another (eg. this) process is rewriting the same
|
||||
# files as it fixes up the libdir prefix. Eugh.
|
||||
for i in $(find $SYSROOT_PREFIX/usr/lib/ -name "*.la" 2>/dev/null); do
|
||||
sed -e "s:\(['= ]\)/usr:\\1$SYSROOT_PREFIX/usr:g" -i $i
|
||||
# Fixup temporary sysroot references to the shared sysroot
|
||||
for i in $(find "${SYSROOT_PREFIX}/usr/lib" -type f -name "*.la" 2>/dev/null); do
|
||||
sed -e "s:\(['= ]\)/usr:\\1${PKG_ORIG_SYSROOT_PREFIX}/usr:g" -i "${i}"
|
||||
done
|
||||
for i in $(find "${SYSROOT_PREFIX}/usr/bin" -type f -name "*-config" 2>/dev/null); do
|
||||
sed -e "s#${SYSROOT_PREFIX}/usr#${PKG_ORIG_SYSROOT_PREFIX}/usr#g" -i "${i}"
|
||||
done
|
||||
for i in $(find "${SYSROOT_PREFIX}/usr/lib" -type f -name "*.pc" 2>/dev/null); do
|
||||
sed -e "s#${SYSROOT_PREFIX}/usr#${PKG_ORIG_SYSROOT_PREFIX}/usr#g" -i "${i}"
|
||||
done
|
||||
for i in $(find "${SYSROOT_PREFIX}/usr"/{lib,share} -type f -name "*.cmake" 2>/dev/null); do
|
||||
sed -e "s#${SYSROOT_PREFIX}/usr#${PKG_ORIG_SYSROOT_PREFIX}/usr#g" -i "${i}"
|
||||
done
|
||||
|
||||
[ "${PKG_NEED_UNLOCK}" = "yes" ] && release_exclusive_lock "${PKG_NAME}:${TARGET}" "build"
|
||||
# Transfer the new sysroot content to the shared sysroot
|
||||
mkdir -p "${PKG_ORIG_SYSROOT_PREFIX}"
|
||||
cp -PR "${SYSROOT_PREFIX}"/* "${PKG_ORIG_SYSROOT_PREFIX}"
|
||||
rm -rf "${SYSROOT_PREFIX}"
|
||||
|
||||
export SYSROOT_PREFIX="${PKG_ORIG_SYSROOT_PREFIX}"
|
||||
|
||||
if [ "$TARGET" = "target" -o "$TARGET" = "init" ]; then
|
||||
if [ -d $INSTALL ]; then
|
||||
|
@ -313,7 +313,7 @@ def processPackages(args, packages, build):
|
||||
elif not args.ignore_invalid:
|
||||
raise Exception("Invalid package! Package %s cannot be found for this PROJECT/DEVICE/ARCH" % dfq_p)
|
||||
|
||||
# To each target-specific node, add the correspnding
|
||||
# To each target-specific node, add the corresponding
|
||||
# target-specific dependency nodes ("edges")
|
||||
for name in node_map:
|
||||
node = node_map[name]
|
||||
|
@ -13,6 +13,8 @@ unset _CACHE_PACKAGE_LOCAL _CACHE_PACKAGE_GLOBAL _DEBUG_DEPENDS_LIST _DEBUG_PACK
|
||||
show_config
|
||||
save_build_config
|
||||
|
||||
${SCRIPTS}/checkdeps
|
||||
|
||||
# Setup both toolchain cmake configs to avoid potentially racy behaviour later.
|
||||
# Use a fork for host to isolate any variable modifications.
|
||||
( setup_toolchain host )
|
||||
|
@ -54,7 +54,7 @@ if [ -d "$SOURCES/${PKG_NAME}" -o -d "$PKG_DIR/sources" ]; then
|
||||
|
||||
# unpack into a unique location as unpacking into a single ${BUILD} directory is not thread-safe
|
||||
PKG_UNPACK_DIR="${BUILD}/.unpack/${PKG_NAME}"
|
||||
rm -fr "${PKG_UNPACK_DIR}"
|
||||
rm -rf "${PKG_UNPACK_DIR}"
|
||||
mkdir -p "${PKG_UNPACK_DIR}"
|
||||
|
||||
pkg_call_exists pre_unpack && pkg_call pre_unpack
|
||||
@ -84,7 +84,7 @@ if [ -d "$SOURCES/${PKG_NAME}" -o -d "$PKG_DIR/sources" ]; then
|
||||
fi
|
||||
|
||||
# cleanup
|
||||
rm -fr "${PKG_UNPACK_DIR}"
|
||||
rm -rf "${PKG_UNPACK_DIR}"
|
||||
|
||||
if [ -d "$PKG_DIR/sources" ]; then
|
||||
[ ! -d "$PKG_BUILD" ] && mkdir -p "$PKG_BUILD"
|
||||
|
Loading…
x
Reference in New Issue
Block a user