59 lines
1.5 KiB
CMake
59 lines
1.5 KiB
CMake
# Fuzz testing using LLVM's libFuzzer.
|
|
#
|
|
# See:
|
|
# - http://llvm.org/docs/LibFuzzer.html
|
|
# - http://llvm.org/releases/3.8.0/docs/LibFuzzer.html
|
|
#
|
|
# TODO(daniel-j-h):
|
|
# - make more user friendly, at the moment we require you to build and install libFuzzer.a
|
|
# - pick up LLVM_ROOT
|
|
# - build libFuzzer on the fly
|
|
#
|
|
# clang++ -std=c++11 -stdlib=libc++ -c -g -O2 ~/llvm/lib/Fuzzer/*.cpp -I~/llvm/lib/Fuzzer
|
|
# ar ruv libFuzzer.a Fuzzer*.o
|
|
|
|
if (ENABLE_FUZZING)
|
|
|
|
include(ProcessorCount)
|
|
ProcessorCount(nproc)
|
|
|
|
macro(add_fuzz_target binary)
|
|
add_executable(${binary} ${binary}.cc $<TARGET_OBJECTS:UTIL> $<TARGET_OBJECTS:SERVER>)
|
|
target_link_libraries(${binary} Fuzzer osrm)
|
|
target_include_directories(${binary} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
add_custom_target(fuzz-${binary}
|
|
DEPENDS ${binary}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "corpus/${binary}"
|
|
COMMAND ${binary} -use_traces=1 -jobs=${nproc} -workers=${nproc} -max_len=4096 "corpus/${binary}"
|
|
COMMENT "Fuzzing ${binary}" VERBATIM)
|
|
endmacro ()
|
|
|
|
|
|
set(ServerTargets
|
|
"match_parameters"
|
|
"nearest_parameters"
|
|
"route_parameters"
|
|
"table_parameters"
|
|
"tile_parameters"
|
|
"trip_parameters"
|
|
"url_parser"
|
|
"request_parser")
|
|
|
|
foreach (target ${ServerTargets})
|
|
add_fuzz_target(${target})
|
|
endforeach ()
|
|
|
|
|
|
set(UtilTargets
|
|
"escape_json"
|
|
"uri_decode")
|
|
|
|
foreach (target ${UtilTargets})
|
|
add_fuzz_target(${target})
|
|
endforeach ()
|
|
|
|
|
|
endif ()
|