#!/bin/sh
HERE=`dirname "$0"`
TARGET="$1"
shift

if [ -d /opt/picolibc-ci ]; then
    TOP=/opt/picolibc-ci
else
    TOP=/opt
fi

# Put only the relevant toolchain in PATH for specific CI targets.
# Fallback to previous behavior for other targets.
case "$TARGET" in
    *clang-hexagon*)
        for p in "$TOP"/*hexagon*/bin "$TOP"/*/models/*; do
            [ -d "$p" ] && PATH="$p":$PATH
        done
        ;;
    *clang-arm*|*clang-aarch64*|*clang-thumb*)
        for p in "$TOP"/LLVM-ET-Arm*/bin "$TOP"/*/models/*; do
            [ -d "$p" ] && PATH="$p":$PATH
        done
        ;;
    *)
        for p in "$TOP"/*/bin "$TOP"/*/models/*; do
            PATH="$p":$PATH
        done
        ;;
esac

# We can't use both the analyzer and sanitizer because
# the analyzer is run after the sanitizer and generates a lot
# of false positives, so just use the sanitizer as it
# appears to find more relevant bugs at this point.

SANITIZER="-Dsanitize=undefined"

# Use traps with the sanitizer on msp430 as the handlers make many
# tests too large

case "$TARGET" in
    *msp430*)
	SANITIZER="$SANITIZER -Dsanitize-trap-on-error=true"
	;;
esac

OPTIONS="$SANITIZER -Dexhaustive-math-tests=native"

"$HERE"/do-run "$TARGET" $OPTIONS "$@"
