libcubescript/.ci/build-cs

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