Add 'fuzzer' option to build Tint fuzzers in CMake builds

Change-Id: I2c36690b4a14062984e2872f8e612a1e7e6d1051
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/190680
Auto-Submit: David Neto <dneto@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/tools/setup-build b/tools/setup-build
index fc2aff2..0bcc0db 100755
--- a/tools/setup-build
+++ b/tools/setup-build
@@ -34,16 +34,18 @@
 POSSIBLE_BUILD_SYSTEMS="[gn|cmake]"
 POSSIBLE_BUILD_TYPES="[debug|release]"
 POSSIBLE_BUILD_ARCHS="[native|x86]"
+BUILD_FUZZER=""
 
 BUILD_SYSTEM=""
 BUILD_TYPE=""
 BUILD_ARCH=""
 
 function show_usage() {
-  echo "setup-build $POSSIBLE_BUILD_SYSTEMS $POSSIBLE_BUILD_TYPES $POSSIBLE_BUILD_ARCHS"
+  echo "setup-build $POSSIBLE_BUILD_SYSTEMS $POSSIBLE_BUILD_TYPES $POSSIBLE_BUILD_ARCHS [fuzz|fuzzer]"
   echo
   echo "creates a build directory in <dawn>/out using either GN or CMake, then"
   echo "updates the '<dawn>/out/active' symlink to point to the build directory"
+  echo "Specifying 'fuzz' or 'fuzzer' forces Clang to be used"
   if [[ ! -z "$1" ]]; then
     echo
     echo "$1"
@@ -95,6 +97,9 @@
     ;;
     "native")
     ;;
+    "fuzz" | "fuzzer")
+      BUILD_FUZZER=1
+    ;;
     "--help" | "-help" | "-h")
       show_usage
     ;;
@@ -116,6 +121,9 @@
 if [[ ! -z "$BUILD_ARCH" ]]; then
   BUILD_DIR+="-$BUILD_ARCH"
 fi
+if [[ ! -z "$BUILD_FUZZER" ]]; then
+  BUILD_DIR+="-fuzz"
+fi
 
 function generate() {
   pushd "$ROOT_DIR" > /dev/null
@@ -150,6 +158,9 @@
         show_usage "invalid build architecture '$BUILD_ARCH'"
       ;;
     esac
+    if [[ -n "$BUILD_FUZZER" ]]; then
+        GN_ARGS+=" use_libfuzzer=true"
+    fi
     if [ -f "$ROOT_DIR/out/$BUILD_DIR/args.gn" ]; then
       generate "gn" "gen" "out/active" # keep existing args
     else
@@ -165,6 +176,11 @@
     CMAKE_FLAGS+=("-DTINT_BUILD_WGSL_WRITER=1")
     CMAKE_FLAGS+=("-DTINT_BUILD_TINTD=1")
     CMAKE_FLAGS+=("-DDAWN_BUILD_NODE_BINDINGS=1")
+    if [[ -n "$BUILD_FUZZER" ]]; then
+        CMAKE_FLAGS+=("-DCMAKE_CXX_COMPILER=clang++")
+        CMAKE_FLAGS+=("-DCMAKE_C_COMPILER=clang")
+        CMAKE_FLAGS+=("-DTINT_BUILD_FUZZERS=ON")
+    fi
     if [[ -x $(command -v ccache) ]]; then
       CMAKE_FLAGS+=("-DCMAKE_CXX_COMPILER_LAUNCHER=ccache")
     fi