Fix stack_trace_compressor builds for Clang < 6.0
Summary:
Clang 4.* doesn't supply -fsanitize=fuzzer, and Clang 5.* doesn't supply
-fsanitize=fuzzer-no-link. Generally, in LLVM, fuzz targets are added through
the add_llvm_fuzzer build rule, which can't be used in compiler-rt (as it has
to be able to be standalone built).
Instead of adding tooling to add a dummy main (which kind of defeats the
purpose of these fuzz targets), we instead build the fuzz target only when the
Clang version is >= 6.*.
Reviewers: tejohnson
Subscribers: mgorny, #sanitizers, llvm-commits
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D66682
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@369823 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/gwp_asan/CMakeLists.txt b/lib/gwp_asan/CMakeLists.txt
index 3db583c..dadde36 100644
--- a/lib/gwp_asan/CMakeLists.txt
+++ b/lib/gwp_asan/CMakeLists.txt
@@ -99,9 +99,15 @@
ADDITIONAL_HEADERS ${GWP_ASAN_BACKTRACE_HEADERS}
CFLAGS ${GWP_ASAN_CFLAGS} ${SANITIZER_COMMON_CFLAGS})
- # Build the stack trace compressor fuzzer.
- if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND
- COMPILER_RT_BUILD_LIBFUZZER)
+ # Build the stack trace compressor fuzzer. Note that clang versions 4.* did
+ # not have -fsanitize=fuzzer, and Clang versions 5.* didn't have
+ # -fsanitize=fuzzer-no-link. In general, the way we build fuzz targets in LLVM
+ # core is to link it against a dummy main when DLLVM_USE_SANITIZE_COVERAGE
+ # isn't specified. Instead, here we only build fuzz targets if clang version
+ # is >= 6.0.
+ if (COMPILER_RT_BUILD_LIBFUZZER AND
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND
+ CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
add_executable(stack_trace_compressor_fuzzer
stack_trace_compressor_fuzzer.cpp
${GWP_ASAN_SOURCES}