mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 21:56:42 +00:00
buildsystem: convert to support mesonbuild >= 0.51.0
- meson needs a host environment for cross-compile - allow setup_toolchain to setup toolchain based on used build-system - adjust creation of meson.conf
This commit is contained in:
parent
20c1d1b267
commit
73eef7432f
@ -268,8 +268,47 @@ setup_toolchain() {
|
|||||||
export MAKEFLAGS="$MAKEFLAGS V=1 VERBOSE=1"
|
export MAKEFLAGS="$MAKEFLAGS V=1 VERBOSE=1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$1" in
|
case "$1:$2" in
|
||||||
target|init)
|
meson:target)
|
||||||
|
export DESTIMAGE="target"
|
||||||
|
export AWK="gawk"
|
||||||
|
export CC="$TOOLCHAIN/bin/host-gcc"
|
||||||
|
export CXX="$TOOLCHAIN/bin/host-g++"
|
||||||
|
export CPP="cpp"
|
||||||
|
export LD="ld"
|
||||||
|
export AS="as"
|
||||||
|
export AR="ar"
|
||||||
|
export NM="nm"
|
||||||
|
export RANLIB="ranlib"
|
||||||
|
export OBJCOPY="objcopy"
|
||||||
|
export OBJDUMP="objdump"
|
||||||
|
export STRIP="strip"
|
||||||
|
export CPPFLAGS="$HOST_CPPFLAGS"
|
||||||
|
export CFLAGS="$HOST_CFLAGS"
|
||||||
|
export CXXFLAGS="$HOST_CXXFLAGS"
|
||||||
|
export LDFLAGS="$HOST_LDFLAGS"
|
||||||
|
setup_pkg_config_target
|
||||||
|
export TARGET_CC="${TARGET_PREFIX}gcc"
|
||||||
|
export TARGET_CXX="${TARGET_PREFIX}g++"
|
||||||
|
export TARGET_AR="${TARGET_PREFIX}ar"
|
||||||
|
export TARGET_STRIP="${TARGET_PREFIX}strip"
|
||||||
|
export TARGET_CFLAGS="$TARGET_CFLAGS"
|
||||||
|
export TARGET_CXXFLAGS="$TARGET_CXXFLAGS"
|
||||||
|
export TARGET_LDFLAGS="$TARGET_LDFLAGS"
|
||||||
|
export HOST_CC="$CC"
|
||||||
|
export HOST_CXX="$CXX"
|
||||||
|
export HOSTCC="$CC"
|
||||||
|
export HOSTCXX="$CXX"
|
||||||
|
export CC_FOR_BUILD="$CC"
|
||||||
|
export CXX_FOR_BUILD="$CXX"
|
||||||
|
export BUILD_CC="$CC"
|
||||||
|
export BUILD_CXX="$CXX"
|
||||||
|
export _python_sysroot="$SYSROOT_PREFIX"
|
||||||
|
export _python_prefix=/usr
|
||||||
|
export _python_exec_prefix=/usr
|
||||||
|
;;
|
||||||
|
|
||||||
|
*:target|*:init)
|
||||||
export DESTIMAGE="target"
|
export DESTIMAGE="target"
|
||||||
export CC="${TARGET_PREFIX}gcc"
|
export CC="${TARGET_PREFIX}gcc"
|
||||||
export CXX="${TARGET_PREFIX}g++"
|
export CXX="${TARGET_PREFIX}g++"
|
||||||
@ -315,7 +354,7 @@ setup_toolchain() {
|
|||||||
export _python_prefix=/usr
|
export _python_prefix=/usr
|
||||||
export _python_exec_prefix=/usr
|
export _python_exec_prefix=/usr
|
||||||
;;
|
;;
|
||||||
host|bootstrap)
|
*:host|*:bootstrap)
|
||||||
export DESTIMAGE="host"
|
export DESTIMAGE="host"
|
||||||
export AWK="gawk"
|
export AWK="gawk"
|
||||||
export CC="$TOOLCHAIN/bin/host-gcc"
|
export CC="$TOOLCHAIN/bin/host-gcc"
|
||||||
@ -366,15 +405,8 @@ setup_toolchain() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
create_meson_conf() {
|
create_meson_conf_host() {
|
||||||
local endian root properties
|
local properties
|
||||||
case "$1" in
|
|
||||||
target|init) root="$SYSROOT_PREFIX/usr"
|
|
||||||
;;
|
|
||||||
host|bootstrap) root="$TOOLCHAIN"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
properties="PKG_MESON_PROPERTIES_${1^^}"
|
properties="PKG_MESON_PROPERTIES_${1^^}"
|
||||||
|
|
||||||
cat > $2 <<EOF
|
cat > $2 <<EOF
|
||||||
@ -394,7 +426,7 @@ cpu = '$TARGET_SUBARCH'
|
|||||||
endian = 'little'
|
endian = 'little'
|
||||||
|
|
||||||
[properties]
|
[properties]
|
||||||
root = '$root'
|
root = '$TOOLCHAIN'
|
||||||
$(python -c "import os; print('c_args = {}'.format([x for x in os.getenv('CFLAGS').split()]))")
|
$(python -c "import os; print('c_args = {}'.format([x for x in os.getenv('CFLAGS').split()]))")
|
||||||
$(python -c "import os; print('c_link_args = {}'.format([x for x in os.getenv('LDFLAGS').split()]))")
|
$(python -c "import os; print('c_link_args = {}'.format([x for x in os.getenv('LDFLAGS').split()]))")
|
||||||
$(python -c "import os; print('cpp_args = {}'.format([x for x in os.getenv('CXXFLAGS').split()]))")
|
$(python -c "import os; print('cpp_args = {}'.format([x for x in os.getenv('CXXFLAGS').split()]))")
|
||||||
@ -403,6 +435,37 @@ ${!properties}
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
create_meson_conf_target() {
|
||||||
|
local properties
|
||||||
|
properties="PKG_MESON_PROPERTIES_${1^^}"
|
||||||
|
|
||||||
|
cat > $2 <<EOF
|
||||||
|
[binaries]
|
||||||
|
c = '$TARGET_CC'
|
||||||
|
cpp = '$TARGET_CXX'
|
||||||
|
ar = '$TARGET_AR'
|
||||||
|
strip = '$TARGET_STRIP'
|
||||||
|
pkgconfig = '$PKG_CONFIG'
|
||||||
|
llvm-config = '$SYSROOT_PREFIX/usr/bin/llvm-config-host'
|
||||||
|
libgcrypt-config = '$SYSROOT_PREFIX/usr/bin/libgcrypt-config'
|
||||||
|
|
||||||
|
[host_machine]
|
||||||
|
system = 'linux'
|
||||||
|
cpu_family = '$TARGET_ARCH'
|
||||||
|
cpu = '$TARGET_SUBARCH'
|
||||||
|
endian = 'little'
|
||||||
|
|
||||||
|
[properties]
|
||||||
|
root = '$SYSROOT_PREFIX/usr'
|
||||||
|
$(python -c "import os; print('c_args = {}'.format([x for x in os.getenv('TARGET_CFLAGS').split()]))")
|
||||||
|
$(python -c "import os; print('c_link_args = {}'.format([x for x in os.getenv('TARGET_LDFLAGS').split()]))")
|
||||||
|
$(python -c "import os; print('cpp_args = {}'.format([x for x in os.getenv('TARGET_CXXFLAGS').split()]))")
|
||||||
|
$(python -c "import os; print('cpp_link_args = {}'.format([x for x in os.getenv('TARGET_LDFLAGS').split()]))")
|
||||||
|
${!properties}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# unset all PKG_* vars apart from those exported by setup_toolchain, then set default values
|
# unset all PKG_* vars apart from those exported by setup_toolchain, then set default values
|
||||||
reset_pkg_vars() {
|
reset_pkg_vars() {
|
||||||
local vars var
|
local vars var
|
||||||
|
@ -85,7 +85,34 @@ else
|
|||||||
build_msg "CLR_BUILD" "BUILD" "${PKG_NAME} $(print_color "CLR_TARGET" "(${TARGET})")" "indent"
|
build_msg "CLR_BUILD" "BUILD" "${PKG_NAME} $(print_color "CLR_TARGET" "(${TARGET})")" "indent"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
setup_toolchain ${TARGET}
|
# setup configure scripts
|
||||||
|
PKG_CONFIGURE_SCRIPT="${PKG_CONFIGURE_SCRIPT:-${PKG_BUILD}/configure}"
|
||||||
|
PKG_CMAKE_SCRIPT="${PKG_CMAKE_SCRIPT:-${PKG_BUILD}/CMakeLists.txt}"
|
||||||
|
PKG_MESON_SCRIPT="${PKG_MESON_SCRIPT:-${PKG_BUILD}/meson.build}"
|
||||||
|
|
||||||
|
# auto detect toolchain
|
||||||
|
_auto_toolchain=""
|
||||||
|
if [ -z "${PKG_TOOLCHAIN}" -o "${PKG_TOOLCHAIN}" = "auto" ]; then
|
||||||
|
if [ -f "${PKG_MESON_SCRIPT}" ]; then
|
||||||
|
PKG_TOOLCHAIN="meson"
|
||||||
|
elif [ -f "${PKG_CMAKE_SCRIPT}" ]; then
|
||||||
|
PKG_TOOLCHAIN="cmake"
|
||||||
|
elif [ -f "${PKG_CONFIGURE_SCRIPT}" ]; then
|
||||||
|
PKG_TOOLCHAIN="configure"
|
||||||
|
elif [ -f "${PKG_BUILD}/Makefile" ]; then
|
||||||
|
PKG_TOOLCHAIN="make"
|
||||||
|
else
|
||||||
|
die "Not possible to detect toolchain automatically. Add PKG_TOOLCHAIN= to package.mk"
|
||||||
|
fi
|
||||||
|
_auto_toolchain=" (auto-detect)"
|
||||||
|
fi
|
||||||
|
if ! listcontains "meson cmake cmake-make configure ninja make autotools manual" "${PKG_TOOLCHAIN}"; then
|
||||||
|
die "$(print_color "CLR_ERROR" "ERROR:") unknown toolchain ${PKG_TOOLCHAIN}"
|
||||||
|
fi
|
||||||
|
build_msg "CLR_TOOLCHAIN" "TOOLCHAIN" "${PKG_TOOLCHAIN}${_auto_toolchain}"
|
||||||
|
|
||||||
|
# setup toolchain
|
||||||
|
setup_toolchain ${PKG_TOOLCHAIN} ${TARGET}
|
||||||
|
|
||||||
# configure install directory
|
# configure install directory
|
||||||
if [ "${TARGET}" = "target" ]; then
|
if [ "${TARGET}" = "target" ]; then
|
||||||
@ -173,32 +200,6 @@ BOOTSTRAP_CONFIGURE_OPTS="${HOST_CONFIGURE_OPTS}"
|
|||||||
BOOTSTRAP_CMAKE_OPTS="${HOST_CMAKE_OPTS}"
|
BOOTSTRAP_CMAKE_OPTS="${HOST_CMAKE_OPTS}"
|
||||||
BOOTSTRAP_MESON_OPTS="${HOST_MESON_OPTS}"
|
BOOTSTRAP_MESON_OPTS="${HOST_MESON_OPTS}"
|
||||||
|
|
||||||
# setup configure scripts
|
|
||||||
PKG_CONFIGURE_SCRIPT="${PKG_CONFIGURE_SCRIPT:-${PKG_BUILD}/configure}"
|
|
||||||
PKG_CMAKE_SCRIPT="${PKG_CMAKE_SCRIPT:-${PKG_BUILD}/CMakeLists.txt}"
|
|
||||||
PKG_MESON_SCRIPT="${PKG_MESON_SCRIPT:-${PKG_BUILD}/meson.build}"
|
|
||||||
|
|
||||||
# auto detect toolchain
|
|
||||||
_auto_toolchain=""
|
|
||||||
if [ -z "${PKG_TOOLCHAIN}" -o "${PKG_TOOLCHAIN}" = "auto" ]; then
|
|
||||||
if [ -f "${PKG_MESON_SCRIPT}" ]; then
|
|
||||||
PKG_TOOLCHAIN="meson"
|
|
||||||
elif [ -f "${PKG_CMAKE_SCRIPT}" ]; then
|
|
||||||
PKG_TOOLCHAIN="cmake"
|
|
||||||
elif [ -f "${PKG_CONFIGURE_SCRIPT}" ]; then
|
|
||||||
PKG_TOOLCHAIN="configure"
|
|
||||||
elif [ -f "${PKG_BUILD}/Makefile" ]; then
|
|
||||||
PKG_TOOLCHAIN="make"
|
|
||||||
else
|
|
||||||
die "Not possible to detect toolchain automatically. Add PKG_TOOLCHAIN= to package.mk"
|
|
||||||
fi
|
|
||||||
_auto_toolchain=" (auto-detect)"
|
|
||||||
fi
|
|
||||||
if ! listcontains "meson cmake cmake-make configure ninja make autotools manual" "${PKG_TOOLCHAIN}"; then
|
|
||||||
die "$(print_color "CLR_ERROR" "ERROR:") unknown toolchain ${PKG_TOOLCHAIN}"
|
|
||||||
fi
|
|
||||||
build_msg "CLR_TOOLCHAIN" "TOOLCHAIN" "${PKG_TOOLCHAIN}${_auto_toolchain}"
|
|
||||||
|
|
||||||
# make autoreconf
|
# make autoreconf
|
||||||
if [ "${PKG_TOOLCHAIN}" = "autotools" ]; then
|
if [ "${PKG_TOOLCHAIN}" = "autotools" ]; then
|
||||||
${SCRIPTS}/autoreconf "${PKG_NAME}" "${PARENT_PKG}"
|
${SCRIPTS}/autoreconf "${PKG_NAME}" "${PARENT_PKG}"
|
||||||
@ -237,22 +238,22 @@ else
|
|||||||
case "${PKG_TOOLCHAIN}:${TARGET}" in
|
case "${PKG_TOOLCHAIN}:${TARGET}" in
|
||||||
# meson builds
|
# meson builds
|
||||||
"meson:target")
|
"meson:target")
|
||||||
create_meson_conf ${TARGET} ${MESON_CONF}
|
create_meson_conf_target ${TARGET} ${MESON_CONF}
|
||||||
echo "Executing (target): meson ${TARGET_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_TARGET} $(dirname ${PKG_MESON_SCRIPT})" | tr -s " "
|
echo "Executing (target): meson ${TARGET_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_TARGET} $(dirname ${PKG_MESON_SCRIPT})" | tr -s " "
|
||||||
CC="${HOST_CC}" CXX="${HOST_CXX}" meson ${TARGET_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_TARGET} $(dirname ${PKG_MESON_SCRIPT})
|
CC="${HOST_CC}" CXX="${HOST_CXX}" meson ${TARGET_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_TARGET} $(dirname ${PKG_MESON_SCRIPT})
|
||||||
;;
|
;;
|
||||||
"meson:host")
|
"meson:host")
|
||||||
create_meson_conf ${TARGET} ${MESON_CONF}
|
create_meson_conf_host ${TARGET} ${MESON_CONF}
|
||||||
echo "Executing (host): meson ${HOST_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_HOST} $(dirname ${PKG_MESON_SCRIPT})" | tr -s " "
|
echo "Executing (host): meson ${HOST_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_HOST} $(dirname ${PKG_MESON_SCRIPT})" | tr -s " "
|
||||||
meson ${HOST_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_HOST} $(dirname ${PKG_MESON_SCRIPT})
|
meson ${HOST_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_HOST} $(dirname ${PKG_MESON_SCRIPT})
|
||||||
;;
|
;;
|
||||||
"meson:init")
|
"meson:init")
|
||||||
create_meson_conf ${TARGET} ${MESON_CONF}
|
create_meson_conf_target ${TARGET} ${MESON_CONF}
|
||||||
echo "Executing (init): meson ${INIT_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_INIT} $(dirname ${PKG_MESON_SCRIPT})" | tr -s " "
|
echo "Executing (init): meson ${INIT_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_INIT} $(dirname ${PKG_MESON_SCRIPT})" | tr -s " "
|
||||||
meson ${INIT_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_INIT} $(dirname ${PKG_MESON_SCRIPT})
|
meson ${INIT_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_INIT} $(dirname ${PKG_MESON_SCRIPT})
|
||||||
;;
|
;;
|
||||||
"meson:bootstrap")
|
"meson:bootstrap")
|
||||||
create_meson_conf ${TARGET} ${MESON_CONF}
|
create_meson_conf_host ${TARGET} ${MESON_CONF}
|
||||||
echo "Executing (bootstrap): meson ${BOOTSTRAP_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_BOOTSTRAP} $(dirname ${PKG_MESON_SCRIPT})" | tr -s " "
|
echo "Executing (bootstrap): meson ${BOOTSTRAP_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_BOOTSTRAP} $(dirname ${PKG_MESON_SCRIPT})" | tr -s " "
|
||||||
meson ${BOOTSTRAP_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_BOOTSTRAP} $(dirname ${PKG_MESON_SCRIPT})
|
meson ${BOOTSTRAP_MESON_OPTS} --cross-file=${MESON_CONF} ${PKG_MESON_OPTS_BOOTSTRAP} $(dirname ${PKG_MESON_SCRIPT})
|
||||||
;;
|
;;
|
||||||
|
@ -10,7 +10,7 @@ ${SCRIPTS}/checkdeps
|
|||||||
|
|
||||||
# Setup both toolchain cmake configs to avoid potentially racy behaviour later.
|
# Setup both toolchain cmake configs to avoid potentially racy behaviour later.
|
||||||
# Use a fork for host to isolate any variable modifications.
|
# Use a fork for host to isolate any variable modifications.
|
||||||
( setup_toolchain host )
|
( setup_toolchain generic host )
|
||||||
setup_toolchain target
|
setup_toolchain generic target
|
||||||
|
|
||||||
MTADDONBUILD=no start_multithread_build ${@}
|
MTADDONBUILD=no start_multithread_build ${@}
|
||||||
|
@ -132,8 +132,8 @@ fi
|
|||||||
# check environment and configure toolchains
|
# check environment and configure toolchains
|
||||||
${SCRIPTS}/checkdeps
|
${SCRIPTS}/checkdeps
|
||||||
|
|
||||||
(setup_toolchain host)
|
( setup_toolchain generic host )
|
||||||
setup_toolchain target
|
setup_toolchain generic target
|
||||||
|
|
||||||
# collect list of addons for building
|
# collect list of addons for building
|
||||||
addons=
|
addons=
|
||||||
|
@ -25,8 +25,8 @@ ${SCRIPTS}/checkdeps
|
|||||||
|
|
||||||
# Setup both toolchain cmake configs to avoid potentially racy behaviour later.
|
# Setup both toolchain cmake configs to avoid potentially racy behaviour later.
|
||||||
# Use a fork for host to isolate any variable modifications.
|
# Use a fork for host to isolate any variable modifications.
|
||||||
( setup_toolchain host )
|
( setup_toolchain generic host )
|
||||||
setup_toolchain target
|
setup_toolchain generic target
|
||||||
|
|
||||||
function do_mkimage() {
|
function do_mkimage() {
|
||||||
# Variables used in mkimage script must be passed
|
# Variables used in mkimage script must be passed
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
. config/options "${1}"
|
. config/options "${1}"
|
||||||
|
|
||||||
# Make sure we have a value for STRIP
|
# Make sure we have a value for STRIP
|
||||||
setup_toolchain target
|
setup_toolchain generic target
|
||||||
|
|
||||||
[ -n "${2}" ] && PKG_ADDON_ID=${2}
|
[ -n "${2}" ] && PKG_ADDON_ID=${2}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user