[setup-build]: add ubsan option
The gn debug build does not support ubsan, so error out in that
case.
Change-Id: I1113abf13872b115d215987648d22981490a5350
No-Try: true
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/257274
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/tools/setup-build b/tools/setup-build
index 1df682c..95e50d3 100755
--- a/tools/setup-build
+++ b/tools/setup-build
@@ -44,6 +44,7 @@
SISO="1"
SHARED=""
INSTALL=""
+UBSAN=""
function show_usage() {
echo "setup-build [-f] $POSSIBLE_BUILD_SYSTEMS $POSSIBLE_BUILD_TYPES $POSSIBLE_BUILD_ARCHS [fuzz|fuzzer]"
@@ -68,9 +69,10 @@
echo " local Use local compilation instead of remote"
echo " remoteexec Use siso to improve compile time (the default)"
echo " shared Build shared libs (cmake only)"
+ echo " ubsan Enable undefined behaviour sanitizer"
if [[ ! -z "$1" ]]; then
echo
- echo "$1"
+ echo "error: $1"
fi
exit 1
}
@@ -140,6 +142,9 @@
"shared")
SHARED=1
;;
+ "ubsan")
+ UBSAN=1
+ ;;
"--help" | "-help" | "-h")
show_usage
;;
@@ -157,6 +162,10 @@
show_usage "build type $POSSIBLE_BUILD_TYPES required"
fi
+if [[ ( -n "$UBSAN" ) && ( "$BUILD_SYSTEM-$BUILD_TYPE" == "gn-debug" ) ]]; then
+ show_usage "the gn build does not support ubsan with debug builds: use a release build instead"
+fi
+
BUILD_DIR="$BUILD_SYSTEM-$BUILD_TYPE"
if [[ ! -z "$BUILD_ARCH" ]]; then
BUILD_DIR+="-$BUILD_ARCH"
@@ -164,6 +173,9 @@
if [[ ! -z "$BUILD_FUZZER" ]]; then
BUILD_DIR+="-fuzz"
fi
+if [[ ! -z "$UBSAN" ]]; then
+ BUILD_DIR+="-ubsan"
+fi
function generate() {
pushd "$ROOT_DIR" > /dev/null
@@ -211,6 +223,9 @@
else
GN_ARGS+=" use_siso=false"
fi
+ if [[ -n "$UBSAN" ]]; then
+ GN_ARGS+=" is_ubsan=true"
+ fi
if grep 'dawn_node.*True' .gclient >/dev/null; then
GN_ARGS+=" dawn_build_node_bindings=true"
fi
@@ -271,6 +286,9 @@
show_usage "invalid build architecture '$BUILD_ARCH'"
;;
esac
+ if [[ -n "$UBSAN" ]]; then
+ CMAKE_FLAGS+=("-DDAWN_ENABLE_UBSAN=ON")
+ fi
if [[ -n "$INSTALL" ]]; then
CMAKE_FLAGS+=("-DCMAKE_INSTALL_PREFIX=out/install")
CMAKE_FLAGS+=("-DTINT_ENABLE_INSTALL=ON")