common/build-helper/meson.sh: new build helper, used by meson build style
This commit is contained in:
parent
420644298e
commit
c6431f06c5
4 changed files with 89 additions and 84 deletions
|
@ -1079,6 +1079,11 @@ additional paths to be searched when linking target binaries to be introspected.
|
||||||
`qemu-<target_arch>-static` when running the target binary. You can for example specify
|
`qemu-<target_arch>-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.
|
`GIR_EXTRA_OPTIONS="-strace"` to see a trace of what happens when running that binary.
|
||||||
|
|
||||||
|
- `meson` creates a cross file, `${XBPS_WRAPPERDIR}/meson/xbps_meson.cross`, which configures
|
||||||
|
meson for cross builds. This is particularly useful for building packages that wrap meson
|
||||||
|
invocations (e.g., `python3-pep517` packages that use a meson backend) and is added by default
|
||||||
|
for packages that use the `meson` build style.
|
||||||
|
|
||||||
- `qemu` sets additional variables for the `cmake` and `meson` build styles to allow
|
- `qemu` sets additional variables for the `cmake` and `meson` build styles to allow
|
||||||
executing cross-compiled binaries inside qemu.
|
executing cross-compiled binaries inside qemu.
|
||||||
It sets `CMAKE_CROSSCOMPILING_EMULATOR` for cmake and `exe_wrapper` for meson
|
It sets `CMAKE_CROSSCOMPILING_EMULATOR` for cmake and `exe_wrapper` for meson
|
||||||
|
|
82
common/build-helper/meson.sh
Normal file
82
common/build-helper/meson.sh
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
# This build helper writes a Meson cross-file, allowing other build styles
|
||||||
|
# to properly drive cross-builds in Meson when appropriate
|
||||||
|
|
||||||
|
if [ -n "$CROSS_BUILD" ]; then
|
||||||
|
mkdir -p "${XBPS_WRAPPERDIR}/meson"
|
||||||
|
|
||||||
|
_MESON_TARGET_ENDIAN=little
|
||||||
|
# drop the -musl suffix to the target cpu, meson doesn't recognize it
|
||||||
|
_MESON_TARGET_CPU=${XBPS_TARGET_MACHINE/-musl/}
|
||||||
|
case "$XBPS_TARGET_MACHINE" in
|
||||||
|
mips|mips-musl|mipshf-musl)
|
||||||
|
_MESON_TARGET_ENDIAN=big
|
||||||
|
_MESON_CPU_FAMILY=mips
|
||||||
|
;;
|
||||||
|
armv*)
|
||||||
|
_MESON_CPU_FAMILY=arm
|
||||||
|
;;
|
||||||
|
i686*)
|
||||||
|
_MESON_CPU_FAMILY=x86
|
||||||
|
;;
|
||||||
|
ppc64le*)
|
||||||
|
_MESON_CPU_FAMILY=ppc64
|
||||||
|
;;
|
||||||
|
ppc64*)
|
||||||
|
_MESON_TARGET_ENDIAN=big
|
||||||
|
_MESON_CPU_FAMILY=ppc64
|
||||||
|
;;
|
||||||
|
ppcle*)
|
||||||
|
_MESON_CPU_FAMILY=ppc
|
||||||
|
;;
|
||||||
|
ppc*)
|
||||||
|
_MESON_TARGET_ENDIAN=big
|
||||||
|
_MESON_CPU_FAMILY=ppc
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# if we reached here that means that the cpu and cpu_family
|
||||||
|
# are the same like 'x86_64' and 'aarch64'
|
||||||
|
_MESON_CPU_FAMILY=${_MESON_TARGET_CPU}
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Tell meson to run binaries with qemu if desired
|
||||||
|
_MESON_EXE_WRAPPER=""
|
||||||
|
if [[ "${build_helper}" = *qemu* ]]; then
|
||||||
|
_MESON_EXE_WRAPPER="exe_wrapper = '/usr/bin/qemu-${XBPS_TARGET_QEMU_MACHINE}-static'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Record cross-compiling information in cross file.
|
||||||
|
#
|
||||||
|
# CFLAGS, CXXFLAGS and LDFLAGS are not yet available and
|
||||||
|
# will be taken from the environment at configure time.
|
||||||
|
cat > "${XBPS_WRAPPERDIR}/meson/xbps_meson.cross" <<-EOF
|
||||||
|
[binaries]
|
||||||
|
${_MESON_EXE_WRAPPER:-# exe_wrapper is not set}
|
||||||
|
c = '${CC}'
|
||||||
|
cpp = '${CXX}'
|
||||||
|
ar = '${XBPS_CROSS_TRIPLET}-gcc-ar'
|
||||||
|
nm = '${NM}'
|
||||||
|
ld = '${LD}'
|
||||||
|
strip = '${STRIP}'
|
||||||
|
readelf = '${READELF}'
|
||||||
|
objcopy = '${OBJCOPY}'
|
||||||
|
pkgconfig = '${PKG_CONFIG}'
|
||||||
|
rust = ['rustc', '--target', '${RUST_TARGET}' ,'--sysroot', '${XBPS_CROSS_BASE}/usr']
|
||||||
|
g-ir-scanner = '${XBPS_CROSS_BASE}/usr/bin/g-ir-scanner'
|
||||||
|
g-ir-compiler = '${XBPS_CROSS_BASE}/usr/bin/g-ir-compiler'
|
||||||
|
g-ir-generate = '${XBPS_CROSS_BASE}/usr/bin/g-ir-generate'
|
||||||
|
llvm-config = '/usr/bin/llvm-config'
|
||||||
|
cups-config = '${XBPS_CROSS_BASE}/usr/bin/cups-config'
|
||||||
|
|
||||||
|
[properties]
|
||||||
|
needs_exe_wrapper = true
|
||||||
|
|
||||||
|
[host_machine]
|
||||||
|
system = 'linux'
|
||||||
|
cpu_family = '${_MESON_CPU_FAMILY}'
|
||||||
|
cpu = '${_MESON_TARGET_CPU}'
|
||||||
|
endian = '${_MESON_TARGET_ENDIAN}'
|
||||||
|
EOF
|
||||||
|
|
||||||
|
unset _MESON_CPU_FAMILY _MESON_TARGET_CPU _MESON_TARGET_ENDIAN _MESON_EXE_WRAPPER
|
||||||
|
fi
|
|
@ -1,94 +1,11 @@
|
||||||
#
|
#
|
||||||
# This helper is for templates using meson.
|
# This helper is for templates using meson.
|
||||||
#
|
#
|
||||||
do_patch() {
|
|
||||||
: ${meson_crossfile:=xbps_meson.cross}
|
|
||||||
|
|
||||||
if [ "$CROSS_BUILD" ]; then
|
|
||||||
_MESON_TARGET_ENDIAN=little
|
|
||||||
# drop the -musl suffix to the target cpu, meson doesn't recognize it
|
|
||||||
_MESON_TARGET_CPU=${XBPS_TARGET_MACHINE/-musl/}
|
|
||||||
case "$XBPS_TARGET_MACHINE" in
|
|
||||||
mips|mips-musl|mipshf-musl)
|
|
||||||
_MESON_TARGET_ENDIAN=big
|
|
||||||
_MESON_CPU_FAMILY=mips
|
|
||||||
;;
|
|
||||||
armv*)
|
|
||||||
_MESON_CPU_FAMILY=arm
|
|
||||||
;;
|
|
||||||
i686*)
|
|
||||||
_MESON_CPU_FAMILY=x86
|
|
||||||
;;
|
|
||||||
ppc64le*)
|
|
||||||
_MESON_CPU_FAMILY=ppc64
|
|
||||||
;;
|
|
||||||
ppc64*)
|
|
||||||
_MESON_TARGET_ENDIAN=big
|
|
||||||
_MESON_CPU_FAMILY=ppc64
|
|
||||||
;;
|
|
||||||
ppcle*)
|
|
||||||
_MESON_CPU_FAMILY=ppc
|
|
||||||
;;
|
|
||||||
ppc*)
|
|
||||||
_MESON_TARGET_ENDIAN=big
|
|
||||||
_MESON_CPU_FAMILY=ppc
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# if we reached here that means that the cpu and cpu_family
|
|
||||||
# are the same like 'x86_64' and 'aarch64'
|
|
||||||
_MESON_CPU_FAMILY=${_MESON_TARGET_CPU}
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Record cross-compiling information in cross file.
|
|
||||||
# CFLAGS and LDFLAGS must be set as c_args and c_link_args.
|
|
||||||
cat > ${meson_crossfile} <<EOF
|
|
||||||
[binaries]
|
|
||||||
c = '${CC}'
|
|
||||||
cpp = '${CXX}'
|
|
||||||
ar = '${XBPS_CROSS_TRIPLET}-gcc-ar'
|
|
||||||
nm = '${NM}'
|
|
||||||
ld = '${LD}'
|
|
||||||
strip = '${STRIP}'
|
|
||||||
readelf = '${READELF}'
|
|
||||||
objcopy = '${OBJCOPY}'
|
|
||||||
pkgconfig = '${PKG_CONFIG}'
|
|
||||||
rust = ['rustc', '--target', '${RUST_TARGET}' ,'--sysroot', '${XBPS_CROSS_BASE}/usr']
|
|
||||||
g-ir-scanner = '${XBPS_CROSS_BASE}/usr/bin/g-ir-scanner'
|
|
||||||
g-ir-compiler = '${XBPS_CROSS_BASE}/usr/bin/g-ir-compiler'
|
|
||||||
g-ir-generate = '${XBPS_CROSS_BASE}/usr/bin/g-ir-generate'
|
|
||||||
llvm-config = '/usr/bin/llvm-config'
|
|
||||||
cups-config = '${XBPS_CROSS_BASE}/usr/bin/cups-config'
|
|
||||||
|
|
||||||
[properties]
|
|
||||||
needs_exe_wrapper = true
|
|
||||||
|
|
||||||
[built-in options]
|
|
||||||
c_args = ['$(echo ${CFLAGS} | sed -r "s/\s+/','/g")']
|
|
||||||
c_link_args = ['$(echo ${LDFLAGS} | sed -r "s/\s+/','/g")']
|
|
||||||
|
|
||||||
cpp_args = ['$(echo ${CXXFLAGS} | sed -r "s/\s+/','/g")']
|
|
||||||
cpp_link_args = ['$(echo ${LDFLAGS} | sed -r "s/\s+/','/g")']
|
|
||||||
|
|
||||||
[host_machine]
|
|
||||||
system = 'linux'
|
|
||||||
cpu_family = '${_MESON_CPU_FAMILY}'
|
|
||||||
cpu = '${_MESON_TARGET_CPU}'
|
|
||||||
endian = '${_MESON_TARGET_ENDIAN}'
|
|
||||||
EOF
|
|
||||||
if [[ $build_helper = *"qemu"* ]]; then
|
|
||||||
sed -e "/\[binaries\]/ a exe_wrapper = '/usr/bin/qemu-${XBPS_TARGET_QEMU_MACHINE}-static'" \
|
|
||||||
-i ${meson_crossfile}
|
|
||||||
fi
|
|
||||||
|
|
||||||
unset _MESON_CPU_FAMILY _MESON_TARGET_CPU _MESON_TARGET_ENDIAN
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
do_configure() {
|
do_configure() {
|
||||||
: ${meson_cmd:=meson}
|
: ${meson_cmd:=meson}
|
||||||
: ${meson_builddir:=build}
|
: ${meson_builddir:=build}
|
||||||
: ${meson_crossfile:=xbps_meson.cross}
|
: ${meson_crossfile:="${XBPS_WRAPPERDIR}/meson/xbps_meson.cross"}
|
||||||
|
|
||||||
if [ "$CROSS_BUILD" ]; then
|
if [ "$CROSS_BUILD" ]; then
|
||||||
configure_args+=" --cross-file=${meson_crossfile}"
|
configure_args+=" --cross-file=${meson_crossfile}"
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
hostmakedepends+=" meson"
|
hostmakedepends+=" meson"
|
||||||
|
build_helper+=" meson"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue