67 lines
1.9 KiB
Bash
Executable File
67 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
project_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
|
meson_bin=${MESON_BIN:-meson}
|
|
meson_dir=$(CDPATH= cd -- "$(dirname -- "$meson_bin")" && pwd)
|
|
profile=${MFEM_MATRIX_PROFILE:-portable}
|
|
jobs=${MFEM_JOBS:-4}
|
|
|
|
compiler_family() {
|
|
"$1" --version 2>&1 | sed -n '1p'
|
|
}
|
|
|
|
require_clang() {
|
|
version=$(compiler_family "$1")
|
|
case "$version" in
|
|
*clang*|*Clang*) ;;
|
|
*) echo "error: $1 is not a Clang compiler: $version" >&2; exit 2 ;;
|
|
esac
|
|
}
|
|
|
|
require_gnu() {
|
|
version=$(compiler_family "$1")
|
|
case "$version" in
|
|
*gcc*|*GCC*|*"Free Software Foundation"*) ;;
|
|
*) echo "error: $1 is not a GNU compiler: $version" >&2; exit 2 ;;
|
|
esac
|
|
}
|
|
|
|
run_configuration() {
|
|
name=$1
|
|
c_compiler=$2
|
|
cxx_compiler=$3
|
|
mode=$4
|
|
build_dir="$project_root/build-$name"
|
|
|
|
if test -f "$build_dir/meson-private/coredata.dat"; then
|
|
wipe_flag=--wipe
|
|
else
|
|
wipe_flag=
|
|
fi
|
|
env PATH="$meson_dir:$PATH" CC="$c_compiler" CXX="$cxx_compiler" \
|
|
"$meson_bin" setup $wipe_flag "$build_dir" "$project_root" \
|
|
--buildtype="$mode" \
|
|
-Dallow_preinstalled=false \
|
|
-Dfeature_profile="$profile" \
|
|
-Dbuild_examples=true \
|
|
-Dbuild_tests=true \
|
|
-Dbuild_python=false \
|
|
-Djobs="$jobs"
|
|
env PATH="$meson_dir:$PATH" "$meson_bin" compile -C "$build_dir"
|
|
env PATH="$meson_dir:$PATH" "$meson_bin" test -C "$build_dir" --print-errorlogs
|
|
}
|
|
|
|
clang_cc=${CLANG_CC:-clang}
|
|
clang_cxx=${CLANG_CXX:-clang++}
|
|
gcc_cc=${GNU_CC:-gcc}
|
|
gcc_cxx=${GNU_CXX:-g++}
|
|
|
|
require_clang "$clang_cxx"
|
|
require_gnu "$gcc_cxx"
|
|
|
|
run_configuration clang-debug "$clang_cc" "$clang_cxx" debug
|
|
run_configuration clang-release "$clang_cc" "$clang_cxx" release
|
|
run_configuration gcc-debug "$gcc_cc" "$gcc_cxx" debug
|
|
run_configuration gcc-release "$gcc_cc" "$gcc_cxx" release
|