Files
2025-01-20 19:18:33 +03:00

103 lines
2.7 KiB
Bash

if test -n "${TRAVIS:-}"; then
set -x
fi
if test -z "${ARCH:-}"; then
ARCH=$(uname -m)
fi
CFLAGS="-Wall -Wextra -Werror ${CFLAGS:-}"
if test $ARCH = $(uname -m); then
# Native
TARGET=$ARCH
PREFIX=
INTERP=
else
# Simulate
# (see .github/workflows/ci.yml for list of needed packages)
case "$ARCH" in
arm*hf | armhf-*)
TARGET=armhf
PREFIX=arm-linux-gnueabihf-
INTERP="qemu-arm -L /usr/arm-linux-gnueabihf -E LD_LIBRARY_PATH=.${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
CFLAGS="$CFLAGS -mthumb-interwork -mfpu=neon"
;;
arm | arm-* | armel-*)
TARGET=arm
PREFIX=arm-linux-gnueabi-
INTERP="qemu-arm -L /usr/arm-linux-gnueabi -E LD_LIBRARY_PATH=.${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
;;
aarch64*)
TARGET=aarch64
PREFIX=aarch64-linux-gnu-
INTERP="qemu-aarch64 -L /usr/aarch64-linux-gnu -E LD_LIBRARY_PATH=.${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
;;
i[0-9]86*)
TARGET=i686
PREFIX=
INTERP=
CFLAGS="$CFLAGS -m32"
;;
mips | mips-*)
TARGET=mips
PREFIX=mips-linux-gnu-
INTERP="qemu-mips -L /usr/mips-linux-gnu -E LD_LIBRARY_PATH=.${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
;;
mipsel | mipsel-*)
TARGET=mipsel
PREFIX=mipsel-linux-gnu-
INTERP="qemu-mipsel -L /usr/mipsel-linux-gnu -E LD_LIBRARY_PATH=.${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
;;
mips64el | mips64el-*)
TARGET=mips64el
PREFIX=mips64el-linux-gnuabi64-
INTERP="qemu-mips64el -L /usr/mips64el-linux-gnuabi64 -E LD_LIBRARY_PATH=.${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
;;
ppc64 | powerpc64 | powerpc64-*)
TARGET=powerpc64
PREFIX=powerpc64-linux-gnu-
INTERP="qemu-ppc64 -L /usr/powerpc64-linux-gnu -E LD_LIBRARY_PATH=.${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
;;
ppc64le | powerpc64le | powerpc64le-*)
TARGET=powerpc64le
PREFIX=powerpc64le-linux-gnu-
INTERP="qemu-ppc64le -L /usr/powerpc64le-linux-gnu -E LD_LIBRARY_PATH=.${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
;;
rv64 | riscv4 | riscv64-*)
TARGET=riscv64
PREFIX=riscv64-linux-gnu-
INTERP="qemu-riscv64 -L /usr/riscv64-linux-gnu -E LD_LIBRARY_PATH=.${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
;;
*)
echo >&2 "Unsupported target: $ARCH"
exit 1
;;
esac
fi
CFLAGS="-Wall -Wextra -Werror ${CFLAGS:-}"
if uname | grep -q BSD; then
CC=$PREFIX${CC:-cc}
CXX=$PREFIX${CXX:-c++}
else
CC=$PREFIX${CC:-gcc}
CXX=$PREFIX${CXX:-g++}
fi
if uname | grep -q BSD; then
LIBS='-pthread'
else
LIBS='-ldl -pthread'
fi
# Do not bother with non-native targets
if test -z "$INTERP" \
&& uname | grep -q Linux \
&& echo 'int main() {}' | $CC $CFLAGS -fsanitize=thread -x c - -o /dev/null 2> /dev/null; then
TSAN_AVAILABLE=1
else
TSAN_AVAILABLE=
fi