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}