e51fe8bfe0
This should deal with the annoying thing that meson will only print its configure output all at once at the end.
151 lines
4.0 KiB
Bash
151 lines
4.0 KiB
Bash
#
|
|
# 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() {
|
|
: ${meson_cmd:=meson}
|
|
: ${meson_builddir:=build}
|
|
: ${meson_crossfile:=xbps_meson.cross}
|
|
|
|
if [ "$CROSS_BUILD" ]; then
|
|
configure_args+=" --cross-file=${meson_crossfile}"
|
|
fi
|
|
|
|
# binutils ar needs a plugin when LTO is used on static libraries, so we
|
|
# have to use the gcc-ar wrapper that calls the correct plugin.
|
|
# As seen in https://github.com/mesonbuild/meson/issues/1646 (and its
|
|
# solution, https://github.com/mesonbuild/meson/pull/1649), meson fixed
|
|
# issues with static libraries + LTO by defaulting to gcc-ar themselves.
|
|
# We also force gcc-ar usage in the crossfile above.
|
|
export AR="gcc-ar"
|
|
|
|
# unbuffered output for continuous logging
|
|
PYTHONUNBUFFERED=1 ${meson_cmd} \
|
|
--prefix=/usr \
|
|
--libdir=/usr/lib${XBPS_TARGET_WORDSIZE} \
|
|
--libexecdir=/usr/libexec \
|
|
--bindir=/usr/bin \
|
|
--sbindir=/usr/bin \
|
|
--includedir=/usr/include \
|
|
--datadir=/usr/share \
|
|
--mandir=/usr/share/man \
|
|
--infodir=/usr/share/info \
|
|
--localedir=/usr/share/locale \
|
|
--sysconfdir=/etc \
|
|
--localstatedir=/var \
|
|
--sharedstatedir=/var/lib \
|
|
--buildtype=plain \
|
|
--auto-features=auto \
|
|
--wrap-mode=nodownload \
|
|
-Db_lto=true -Db_ndebug=true \
|
|
-Db_staticpic=true \
|
|
${configure_args} . ${meson_builddir}
|
|
}
|
|
|
|
do_build() {
|
|
: ${make_cmd:=ninja}
|
|
: ${make_build_target:=all}
|
|
: ${meson_builddir:=build}
|
|
|
|
${make_cmd} -C ${meson_builddir} ${makejobs} ${make_build_args} ${make_build_target}
|
|
}
|
|
|
|
do_check() {
|
|
: ${make_cmd:=ninja}
|
|
: ${make_check_target:=test}
|
|
: ${meson_builddir:=build}
|
|
|
|
${make_cmd} -C ${meson_builddir} ${makejobs} ${make_check_args} ${make_check_target}
|
|
}
|
|
|
|
do_install() {
|
|
: ${make_cmd:=ninja}
|
|
: ${make_install_target:=install}
|
|
: ${meson_builddir:=build}
|
|
|
|
DESTDIR=${DESTDIR} ${make_cmd} -C ${meson_builddir} ${make_install_args} ${make_install_target}
|
|
}
|