[PATCH] D32096: Always build libfuzzer

George Karpenkov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 14 14:22:17 PDT 2017


george.karpenkov created this revision.
Herald added a subscriber: mgorny.

Hi,

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

Current CMake file only supports the first case: in order to build it, the user has to compile the entire LLVM repo with coverage flags (which is not even possible using e.g. default mac os clang).

The proposed change always builds libfuzzer, and supports the second use case if the specified flag is set.


Repository:
  rL LLVM

https://reviews.llvm.org/D32096

Files:
  lib/Fuzzer/CMakeLists.txt


Index: lib/Fuzzer/CMakeLists.txt
===================================================================
--- lib/Fuzzer/CMakeLists.txt
+++ lib/Fuzzer/CMakeLists.txt
@@ -1,14 +1,11 @@
-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
-      "LibFuzzer and its tests require LLVM_USE_SANITIZER=Address and "
-      "LLVM_USE_SANITIZE_COVERAGE=YES to be set."
-      )
-  endif()
-  add_library(LLVMFuzzerNoMainObjects OBJECT
+  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()
+
+add_library(LLVMFuzzerNoMainObjects OBJECT
     FuzzerCrossOver.cpp
     FuzzerDriver.cpp
     FuzzerExtFunctionsDlsym.cpp
@@ -32,15 +29,24 @@
     FuzzerUtilPosix.cpp
     FuzzerUtilWindows.cpp
     )
-  add_library(LLVMFuzzerNoMain STATIC
+add_library(LLVMFuzzerNoMain STATIC
     $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
     )
-  target_link_libraries(LLVMFuzzerNoMain ${LLVM_PTHREAD_LIB})
-  add_library(LLVMFuzzer STATIC
+target_link_libraries(LLVMFuzzerNoMain ${LLVM_PTHREAD_LIB})
+add_library(LLVMFuzzer STATIC
     FuzzerMain.cpp
     $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
     )
-  target_link_libraries(LLVMFuzzer ${LLVM_PTHREAD_LIB})
+target_link_libraries(LLVMFuzzer ${LLVM_PTHREAD_LIB})
+
+if( LLVM_USE_SANITIZE_COVERAGE )
+
+  if(NOT "${LLVM_USE_SANITIZER}" STREQUAL "Address")
+    message(FATAL_ERROR
+      "LibFuzzer tests require LLVM_USE_SANITIZER=Address and "
+      "LLVM_USE_SANITIZE_COVERAGE=YES to be set."
+      )
+  endif()
 
   if( LLVM_INCLUDE_TESTS )
     add_subdirectory(test)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32096.95345.patch
Type: text/x-patch
Size: 2045 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170414/f5f3c54b/attachment.bin>


More information about the llvm-commits mailing list