From f4273541b8970bbde12a6d6030709b3d1856a127 Mon Sep 17 00:00:00 2001 From: John Date: Sat, 19 Oct 2019 15:25:45 +0200 Subject: [PATCH] New build-helper: qemu --- Manual.md | 5 +++++ common/build-helper/qemu.sh | 6 ++++++ common/build-style/cmake.sh | 5 +---- common/build-style/meson.sh | 5 +---- 4 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 common/build-helper/qemu.sh diff --git a/Manual.md b/Manual.md index d29afbd2cc..f8928ed685 100644 --- a/Manual.md +++ b/Manual.md @@ -944,6 +944,11 @@ additional paths to be searched when linking target binaries to be introspected. `qemu--static` when running the target binary. You can for example specify `GIR_EXTRA_OPTIONS="-strace"` to see a trace of what happens when running that binary. +- 'qemu' sets additional variables for the `cmake` and `meson` build styles to allow +executing cross-compiled binaries inside qemu. +It sets `CMAKE_CROSSCOMPILING_EMULATOR` for cmake and `exe_wrapper` for meson +to `qemu--static` and `QEMU_LD_PREFIX` to `XBPS_CROSS_BASE` + ### Functions diff --git a/common/build-helper/qemu.sh b/common/build-helper/qemu.sh new file mode 100644 index 0000000000..f7a1839cc3 --- /dev/null +++ b/common/build-helper/qemu.sh @@ -0,0 +1,6 @@ +if [ "$CROSS_BUILD" ]; then + export QEMU_LD_PREFIX=${XBPS_CROSS_BASE} + if [[ $hostmakedepends != *"qemu-user-static"* ]]; then + hostmakedepends+=" qemu-user-static" + fi +fi diff --git a/common/build-style/cmake.sh b/common/build-style/cmake.sh index 083a3bf5ff..233551b35c 100644 --- a/common/build-style/cmake.sh +++ b/common/build-style/cmake.sh @@ -2,7 +2,6 @@ # This helper is for templates using cmake. # do_configure() { - export QEMU_LD_PREFIX=${XBPS_CROSS_BASE} local cmake_args= [ ! -d ${cmake_builddir:=build} ] && mkdir -p ${cmake_builddir} cd ${cmake_builddir} @@ -51,7 +50,7 @@ _EOF cmake_args+=" -DCMAKE_INSTALL_LIBDIR=lib" fi - if [ "${hostmakedepends}" != "${hostmakedepends/qemu-user-static/}" ]; then + if [[ $build_helper = *"qemu"* ]]; then echo "SET(CMAKE_CROSSCOMPILING_EMULATOR /usr/bin/qemu-${XBPS_TARGET_QEMU_MACHINE}-static)" \ >> cross_${XBPS_CROSS_TRIPLET}.cmake fi @@ -66,7 +65,6 @@ _EOF } do_build() { - export QEMU_LD_PREFIX=${XBPS_CROSS_BASE} : ${make_cmd:=make} cd ${cmake_builddir:=build} @@ -94,7 +92,6 @@ do_check() { } do_install() { - export QEMU_LD_PREFIX=${XBPS_CROSS_BASE} : ${make_cmd:=make} : ${make_install_target:=install} diff --git a/common/build-style/meson.sh b/common/build-style/meson.sh index d318978ea5..73d4fd6ab5 100644 --- a/common/build-style/meson.sh +++ b/common/build-style/meson.sh @@ -69,7 +69,7 @@ cpu_family = '${_MESON_CPU_FAMILY}' cpu = '${_MESON_TARGET_CPU}' endian = '${_MESON_TARGET_ENDIAN}' EOF - if [ "${hostmakedepends}" != "${hostmakedepends/qemu-user-static/}" ]; then + if [[ $build_helper = *"qemu"* ]]; then sed -e "/\[binaries\]/ a exe_wrapper = '/usr/bin/qemu-${XBPS_TARGET_QEMU_MACHINE}-static'" \ -i ${meson_crossfile} fi @@ -82,7 +82,6 @@ do_configure() { : ${meson_cmd:=meson} : ${meson_builddir:=build} : ${meson_crossfile:=xbps_meson.cross} - export QEMU_LD_PREFIX=${XBPS_CROSS_BASE} if [ "$CROSS_BUILD" ]; then configure_args+=" --cross-file=${meson_crossfile}" @@ -135,7 +134,6 @@ do_build() { : ${make_cmd:=ninja} : ${make_build_target:=all} : ${meson_builddir:=build} - export QEMU_LD_PREFIX=${XBPS_CROSS_BASE} ${make_cmd} -C ${meson_builddir} ${makejobs} ${make_build_args} ${make_build_target} } @@ -152,7 +150,6 @@ do_install() { : ${make_cmd:=ninja} : ${make_install_target:=install} : ${meson_builddir:=build} - export QEMU_LD_PREFIX=${XBPS_CROSS_BASE} DESTDIR=${DESTDIR} ${make_cmd} -C ${meson_builddir} ${make_install_args} ${make_install_target} }