Commit bf3382d5 by Patrick Steinhardt

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.
parent 186a7ba5
...@@ -19,8 +19,7 @@ automated fuzz testing. libFuzzer only works with clang. ...@@ -19,8 +19,7 @@ automated fuzz testing. libFuzzer only works with clang.
and [`leak`/`address,leak`](https://clang.llvm.org/docs/LeakSanitizer.html). and [`leak`/`address,leak`](https://clang.llvm.org/docs/LeakSanitizer.html).
3. Create the cmake build environment and configure the build with the 3. Create the cmake build environment and configure the build with the
sanitizer chosen: `CC=/usr/bin/clang-6.0 cmake sanitizer chosen: `CC=/usr/bin/clang-6.0 cmake
-DBUILD_CLAR=OFF -DBUILD_FUZZERS=ON -DUSE_SANIZER=address -DBUILD_CLAR=OFF -DBUILD_FUZZERS=ON -DUSE_SANITIZER=address
-DCMAKE_EXE_LINKER_FLAGS="-fsanitize=fuzzer"
-DCMAKE_BUILD_TYPE=RelWithDebInfo ..`. Note that building the fuzzer targets -DCMAKE_BUILD_TYPE=RelWithDebInfo ..`. Note that building the fuzzer targets
is incompatible with the tests and examples. is incompatible with the tests and examples.
4. Build libgit2: `cmake --build .` 4. Build libgit2: `cmake --build .`
...@@ -58,10 +57,9 @@ variable). ...@@ -58,10 +57,9 @@ variable).
## Standalone mode ## Standalone mode
In order to ensure that there are no regresions, each fuzzer target can be run 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` 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 This makes it compatible with gcc. This does not use the fuzzing engine, but
with gcc. This does not use the fuzzing engine, but just invokes every file in just invokes every file in the chosen corpus.
the chosen corpus.
In order to get full coverage, though, you might want to also enable one of the 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. sanitizers. You might need a recent version of clang to get full support.
......
LINK_DIRECTORIES(${LIBGIT2_LIBDIRS}) LINK_DIRECTORIES(${LIBGIT2_LIBDIRS})
INCLUDE_DIRECTORIES(${LIBGIT2_INCLUDES}) 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) FILE(GLOB SRC_FUZZ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *_fuzzer.c)
FOREACH(fuzz_target_src ${SRC_FUZZ}) FOREACH(fuzz_target_src ${SRC_FUZZ})
STRING(REPLACE ".c" "" fuzz_target_name ${fuzz_target_src}) STRING(REPLACE ".c" "" fuzz_target_name ${fuzz_target_src})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment