summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2018-07-19 15:22:18 +0200
committerPatrick Steinhardt <ps@pks.im>2018-08-03 09:50:35 +0200
commitbf3382d5448d4cb0487cc69510b6184d44e7eafc (patch)
tree5c0bd71e72b63396617c51605a3921a7bd6ee36e
parent186a7ba5d71c38e96af07ec9b8dfa29661fabb5a (diff)
downloadlibgit2-bf3382d5448d4cb0487cc69510b6184d44e7eafc.tar.gz
cmake: remove need to add "-fsanitize=fuzzer" flag for fuzzers
Right now, users are being instrucded to add the "-DCMAKE_EXE_LINKER_FLAGS=-fsanitize=fuzzer" flag when they want to build our fuzzers. This is error-prone and user unfriendly. Instead, just add the flag to our fuzzers' build instructions so that it happens automatically. Adjust the README accordingly.
-rw-r--r--docs/fuzzing.md10
-rw-r--r--fuzzers/CMakeLists.txt4
2 files changed, 8 insertions, 6 deletions
diff --git a/docs/fuzzing.md b/docs/fuzzing.md
index 03b1affbd..9d32f8747 100644
--- a/docs/fuzzing.md
+++ b/docs/fuzzing.md
@@ -19,8 +19,7 @@ automated fuzz testing. libFuzzer only works with clang.
and [`leak`/`address,leak`](https://clang.llvm.org/docs/LeakSanitizer.html).
3. Create the cmake build environment and configure the build with the
sanitizer chosen: `CC=/usr/bin/clang-6.0 cmake
- -DBUILD_CLAR=OFF -DBUILD_FUZZERS=ON -DUSE_SANIZER=address
- -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=fuzzer"
+ -DBUILD_CLAR=OFF -DBUILD_FUZZERS=ON -DUSE_SANITIZER=address
-DCMAKE_BUILD_TYPE=RelWithDebInfo ..`. Note that building the fuzzer targets
is incompatible with the tests and examples.
4. Build libgit2: `cmake --build .`
@@ -58,10 +57,9 @@ variable).
## Standalone mode
In order to ensure that there are no regresions, each fuzzer target can be run
-in a standalone mode. This can be done by passing `-DUSE_STANDALONE_FUZZERS=ON`
-to `cmake` without setting `-DCMAKE_EXE_LINKER_FLAGS`. This makes it compatible
-with gcc. This does not use the fuzzing engine, but just invokes every file in
-the chosen corpus.
+in a standalone mode. This can be done by passing `-DUSE_STANDALONE_FUZZERS=ON`.
+This makes it compatible with gcc. This does not use the fuzzing engine, but
+just invokes every file in the chosen corpus.
In order to get full coverage, though, you might want to also enable one of the
sanitizers. You might need a recent version of clang to get full support.
diff --git a/fuzzers/CMakeLists.txt b/fuzzers/CMakeLists.txt
index 13705fa95..ea0612322 100644
--- a/fuzzers/CMakeLists.txt
+++ b/fuzzers/CMakeLists.txt
@@ -1,6 +1,10 @@
LINK_DIRECTORIES(${LIBGIT2_LIBDIRS})
INCLUDE_DIRECTORIES(${LIBGIT2_INCLUDES})
+IF(BUILD_FUZZERS AND NOT USE_STANDALONE_FUZZERS)
+ ADD_C_FLAG(-fsanitize=fuzzer)
+ENDIF ()
+
FILE(GLOB SRC_FUZZ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *_fuzzer.c)
FOREACH(fuzz_target_src ${SRC_FUZZ})
STRING(REPLACE ".c" "" fuzz_target_name ${fuzz_target_src})