#!/bin/sh expected_triplet=$TARGET if [ -z "$expected_triplet" ]; then echo "ERROR: target triplet not provided!" exit 1 fi current_triplet=`$CC -dumpmachine` if [ "$CC" = "clang" ]; then export CXX="clang++" export CXXFLAGS="-stdlib=libc++" else export CXX="g++-10" fi if [ "$TARGET" != "darwin" -a "$CC" != "clang" -a "$expected_triplet" != "$current_triplet" ]; then cross=yes export CC="${expected_triplet}-${CC}" export CXX="${expected_triplet}-${CXX}" export STRIP="${expected_triplet}-strip" export AR="${expected_triplet}-ar" export AS="${expected_triplet}-as" else export STRIP="strip" export AR="ar" fi meson_system="linux" case "${expected_triplet}" in darwin) # special case here meson_system="darwin" ;; x86_64*) meson_cpu_family="x86_64" meson_cpu="x86_64" meson_endian="little" case "${expected_triplet}" in *w64*) meson_system="windows" ;; *) qemu_cpu="x86_64" ;; esac ;; i686*) meson_cpu_family="x86" meson_cpu="i686" meson_endian="little" qemu_cpu="i386" ;; powerpc64le*) meson_cpu_family="ppc64" meson_cpu="ppc64le" meson_endian="little" qemu_cpu="ppc64le" ;; powerpc64*) meson_cpu_family="ppc64" meson_cpu="ppc64" meson_endian="big" qemu_cpu="ppc64" ;; powerpcle*) echo "ERROR: ppcle not supported in qemu" exit 1 ;; powerpc*) meson_cpu_family="ppc" meson_cpu="ppc" meson_endian="big" qemu_cpu="ppc" ;; aarch64-*) meson_cpu_family="aarch64" meson_cpu="aarch64" meson_endian="little" qemu_cpu="aarch64" ;; arm-*) meson_cpu_family="arm" meson_cpu="armv6l" meson_endian="little" qemu_cpu="arm" ;; riscv64-*) meson_cpu_family="riscv64" meson_cpu="riscv64" meson_endian="little" qemu_cpu="riscv64" ;; s390x*) meson_cpu_family="s390x" meson_cpu="s390x" meson_endian="big" qemu_cpu="s390x" ;; mips-*) meson_cpu_family="mips" meson_cpu="mips" meson_endian="big" qemu_cpu="mips" ;; m68k*) meson_cpu_family="m68k" meson_cpu="m68k" meson_endian="big" qemu_cpu="m68k" ;; *) echo "ERROR: Cross CPU unspecified" exit 1 ;; esac export PATH="$(pwd)/host_tools:$PATH" if [ -n "$qemu_cpu" -a -n "$cross" ]; then echo ">> Preparing qemu..." # work around glibc being dumb # the cache format is not endian agnostic, so unless a dummy file exists # here, qemu will try to use host's and it will crash guest glibc on BE sudo mkdir -p /usr/${expected_triplet}/etc sudo touch /usr/${expected_triplet}/etc/ld.so.cache fi echo ">> Building and testing cubescript..." mkdir -p build cd build args="" if [ -n "${cross}" ]; then cat << EOF > crossfile [binaries] c = '${CC}' cpp = '${CXX}' strip = '${STRIP}' [host_machine] system = '${meson_system}' cpu_family = '${meson_cpu_family}' cpu = '${meson_cpu}' endian = '${meson_endian}' EOF args="${args} --cross-file=crossfile" fi if [ -n "$BUILDTYPE" ]; then args="${args} --buildtype=$BUILDTYPE" fi meson .. ${args} || exit 1 ninja all || exit 1 ninja test || exit 1 cd .. exit 0