163 lines
3.5 KiB
Bash
Executable file
163 lines
3.5 KiB
Bash
Executable file
#!/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
|