]> granicus.if.org Git - llvm/commitdiff
[libFuzzer] Always build libFuzzer
authorKuba Mracek <mracek@apple.com>
Fri, 21 Apr 2017 22:38:24 +0000 (22:38 +0000)
committerKuba Mracek <mracek@apple.com>
Fri, 21 Apr 2017 22:38:24 +0000 (22:38 +0000)
There are two reasons why users might want to build libfuzzer:
- To fuzz LLVM itself
- To get the libFuzzer.a archive file, so that they can attach it to their code
This change always builds libfuzzer, and supports the second use case if the specified flag is set.

The point of this patch is to have something that can potentially be shipped with the compiler, and this also ensures that the version of libFuzzer is correct to use with that compiler.

Patch by George Karpenkov.

Differential Revision: https://reviews.llvm.org/D32096

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301054 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Fuzzer/CMakeLists.txt

index 7c00db657bbc5ce6a5b7533c305cecd5764c646a..b886021aee3fd71bcf1208c5cb36f906f6406d86 100644 (file)
@@ -13,9 +13,6 @@ if( APPLE )
   endif()
 endif()
 
-set(LIBFUZZER_FLAGS_BASE "${CMAKE_CXX_FLAGS}")
-# Disable the coverage and sanitizer instrumentation for the fuzzer itself.
-set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fno-sanitize-coverage=trace-pc-guard,edge,trace-cmp,indirect-calls,8bit-counters -Werror")
 if( LLVM_USE_SANITIZE_COVERAGE )
   if(NOT "${LLVM_USE_SANITIZER}" STREQUAL "Address")
     message(FATAL_ERROR
@@ -23,41 +20,50 @@ if( LLVM_USE_SANITIZE_COVERAGE )
       "LLVM_USE_SANITIZE_COVERAGE=YES to be set."
       )
   endif()
+  set(LIBFUZZER_FLAGS_BASE "${CMAKE_CXX_FLAGS}")
+
+  # Disable the coverage and sanitizer instrumentation for the fuzzer itself.
+  set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fno-sanitize-coverage=trace-pc-guard,edge,trace-cmp,indirect-calls,8bit-counters -Werror")
+endif()
+
+# Compile libFuzzer if the compilation is specifically requested, OR
+# if the platform is known to be working.
+if ( LLVM_USE_SANITIZE_COVERAGE OR CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux" )
   add_library(LLVMFuzzerNoMainObjects OBJECT
-    FuzzerCrossOver.cpp
-    FuzzerDriver.cpp
-    FuzzerExtFunctionsDlsym.cpp
-    FuzzerExtFunctionsDlsymWin.cpp
-    FuzzerExtFunctionsWeak.cpp
-    FuzzerExtraCounters.cpp
-    FuzzerIO.cpp
-    FuzzerIOPosix.cpp
-    FuzzerIOWindows.cpp
-    FuzzerLoop.cpp
-    FuzzerMerge.cpp
-    FuzzerMutate.cpp
-    FuzzerSHA1.cpp
-    FuzzerShmemPosix.cpp
-    FuzzerShmemWindows.cpp
-    FuzzerTracePC.cpp
-    FuzzerTraceState.cpp
-    FuzzerUtil.cpp
-    FuzzerUtilDarwin.cpp
-    FuzzerUtilLinux.cpp
-    FuzzerUtilPosix.cpp
-    FuzzerUtilWindows.cpp
-    )
+      FuzzerCrossOver.cpp
+      FuzzerDriver.cpp
+      FuzzerExtFunctionsDlsym.cpp
+      FuzzerExtFunctionsDlsymWin.cpp
+      FuzzerExtFunctionsWeak.cpp
+      FuzzerExtraCounters.cpp
+      FuzzerIO.cpp
+      FuzzerIOPosix.cpp
+      FuzzerIOWindows.cpp
+      FuzzerLoop.cpp
+      FuzzerMerge.cpp
+      FuzzerMutate.cpp
+      FuzzerSHA1.cpp
+      FuzzerShmemPosix.cpp
+      FuzzerShmemWindows.cpp
+      FuzzerTracePC.cpp
+      FuzzerTraceState.cpp
+      FuzzerUtil.cpp
+      FuzzerUtilDarwin.cpp
+      FuzzerUtilLinux.cpp
+      FuzzerUtilPosix.cpp
+      FuzzerUtilWindows.cpp
+      )
   add_library(LLVMFuzzerNoMain STATIC
-    $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
-    )
+      $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
+      )
   target_link_libraries(LLVMFuzzerNoMain ${LLVM_PTHREAD_LIB})
   add_library(LLVMFuzzer STATIC
-    FuzzerMain.cpp
-    $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
-    )
+      FuzzerMain.cpp
+      $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
+      )
   target_link_libraries(LLVMFuzzer ${LLVM_PTHREAD_LIB})
+endif()
 
-  if( LLVM_INCLUDE_TESTS )
-    add_subdirectory(test)
-  endif()
+if( LLVM_USE_SANITIZE_COVERAGE AND LLVM_INCLUDE_TESTS )
+  add_subdirectory(test)
 endif()