diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2023-02-21 21:04:58 +0000 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2023-02-23 11:34:32 +0000 |
| commit | 015bd1447472f82a5607ecb5fabaf25bf37cd4e2 (patch) | |
| tree | b9127e4e2cf30728548fc746b255a6c1fc14443f | |
| parent | 80de73a6aa4c4e726860c492d2264d4958a56b0d (diff) | |
| download | puzzles-015bd1447472f82a5607ecb5fabaf25bf37cd4e2.zip puzzles-015bd1447472f82a5607ecb5fabaf25bf37cd4e2.tar.gz puzzles-015bd1447472f82a5607ecb5fabaf25bf37cd4e2.tar.bz2 puzzles-015bd1447472f82a5607ecb5fabaf25bf37cd4e2.tar.xz | |
Don't give the libFuzzer version of fuzzpuzz a special name
I've changed my mind already. The other versions of fuzzpuzz all have
different command-line interfaces anyway, so I think the best approach
is to just accept that and decide that precisely how fuzzpuzz works
isn't a defined API. Fuzzing is inherently not an end-user activity, so
I think it's acceptable to make it a bit inconsistent.
This means that in Clang builds you get the non-libFuzzer version of
fuzzpuzz by default (so you can use it with other fuzzers), but if you
turn on WITH_LIBFUZZER then you'll get the libFuzzer version instead.
| -rw-r--r-- | CMakeLists.txt | 17 | ||||
| -rw-r--r-- | fuzzpuzz.c | 8 |
2 files changed, 11 insertions, 14 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index ceb4756..37c0f54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -279,18 +279,15 @@ if(build_cli_programs) write_generated_games_header() include(CheckFunctionExists) check_function_exists(HF_ITER HAVE_HF_ITER) + set(WITH_LIBFUZZER OFF + CACHE BOOL "Build fuzzpuzz using Clang's libFuzzer") cliprogram(fuzzpuzz fuzzpuzz.c list.c ${puzzle_sources} - COMPILE_DEFINITIONS COMBINED $<$<BOOL:${HAVE_HF_ITER}>:HAVE_HF_ITER>) + COMPILE_DEFINITIONS COMBINED $<$<BOOL:${WITH_LIBFUZZER}>:OMIT_MAIN> + $<$<BOOL:${HAVE_HF_ITER}>:HAVE_HF_ITER>) target_include_directories(fuzzpuzz PRIVATE ${generated_include_dir}) - - if(CMAKE_C_COMPILER_ID MATCHES "Clang") - cliprogram(fuzzpuzz-libfuzzer fuzzpuzz.c list.c ${puzzle_sources} - COMPILE_DEFINITIONS COMBINED OMIT_MAIN) - target_include_directories(fuzzpuzz-libfuzzer - PRIVATE ${generated_include_dir}) - target_compile_options(fuzzpuzz-libfuzzer PRIVATE -fsanitize=fuzzer) - set_target_properties(fuzzpuzz-libfuzzer - PROPERTIES LINK_FLAGS -fsanitize=fuzzer) + if(WITH_LIBFUZZER) + target_compile_options(fuzzpuzz PRIVATE -fsanitize=fuzzer) + set_target_properties(fuzzpuzz PROPERTIES LINK_FLAGS -fsanitize=fuzzer) endif() endif() @@ -27,11 +27,11 @@ * You can also use libFuzzer, though it's not really a good fit for * Puzzles. The experimental forking mode seems to work OK: * - * CC=clang cmake -B build-clang - * cmake --build build-clang --target fuzzpuzz-libfuzzer + * CC=clang cmake -B build-clang -DWITH_LIBFUZZER=Y + * cmake --build build-clang --target fuzzpuzz * mkdir fuzz-corpus && ln icons/''*.sav fuzz-corpus - * build-clang/fuzzpuzz-libfuzzer -fork=1 -ignore_crashes=1 \ - * -dict=fuzzpuzz.dict fuzz-corpus + * build-clang/fuzzpuzz -fork=1 -ignore_crashes=1 -dict=fuzzpuzz.dict \ + * fuzz-corpus */ #include <stdbool.h> |