Add fuzzer instrumentation when building fuzzers Without this the fuzzing is unguided and takes exponentially more time to find interesting corpus cases. Change-Id: I1b66de153bc41a829a5276a02a729f4e6bb50ef0 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/33722 Reviewed-by: David Neto <dneto@google.com> Reviewed-by: Ryan Harrison <rharrison@chromium.org> Commit-Queue: Ben Clayton <bclayton@google.com> Auto-Submit: Ben Clayton <bclayton@google.com>
diff --git a/fuzzers/CMakeLists.txt b/fuzzers/CMakeLists.txt index 90e3fb8..3599d42 100644 --- a/fuzzers/CMakeLists.txt +++ b/fuzzers/CMakeLists.txt
@@ -14,20 +14,9 @@ function(add_tint_fuzzer NAME) add_executable(${NAME} ${NAME}.cc) - target_link_libraries(${NAME} libtint) + target_link_libraries(${NAME} libtint-fuzz) tint_default_compile_options(${NAME}) - target_link_options(${NAME} PRIVATE - -fno-omit-frame-pointer - -fsanitize=fuzzer,address,undefined - -fsanitize-address-use-after-scope - -O1 - -g - ) - - target_compile_options(${NAME} PRIVATE - -fsanitize=fuzzer,address,undefined - -Wno-missing-prototypes - ) + target_compile_options(${NAME} PRIVATE -Wno-missing-prototypes) endfunction() if (${TINT_BUILD_WGSL_READER})
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 90dc67c..0ff1ee2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt
@@ -435,10 +435,24 @@ target_compile_options(libtint PRIVATE -fvisibility=hidden) endif() +if (${TINT_BUILD_FUZZERS}) + # Tint library with fuzzer instrumentation + add_library(libtint-fuzz ${TINT_LIB_SRCS}) + tint_default_compile_options(libtint-fuzz) + if (${COMPILER_IS_LIKE_GNU}) + target_compile_options(libtint-fuzz PRIVATE -fvisibility=hidden) + endif() + target_compile_options(libtint-fuzz PUBLIC -fsanitize=fuzzer -fsanitize-coverage=trace-cmp) + target_link_options(libtint-fuzz PUBLIC -fsanitize=fuzzer -fsanitize-coverage=trace-cmp) +endif() + set_target_properties(libtint PROPERTIES OUTPUT_NAME "tint") if(${TINT_BUILD_SPV_READER} OR ${TINT_BUILD_SPV_WRITER}) tint_spvtools_compile_options(libtint) + if (${TINT_BUILD_FUZZERS}) + tint_spvtools_compile_options(libtint-fuzz) + endif() endif() if(${TINT_BUILD_SPV_READER})