Index: llvm/trunk/lib/Fuzzer/test/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/CMakeLists.txt @@ -27,13 +27,39 @@ # Enable the coverage instrumentation (it is disabled for the Fuzzer lib). set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fsanitize-coverage=edge,indirect-calls") -set(DFSanTests - MemcmpTest - SimpleCmpTest - StrcmpTest - StrncmpTest - SwitchTest - ) +# add_libfuzzer_test( +# SOURCES source0.cpp [source1.cpp ...] +# ) +# +# Declares a LibFuzzer test executable with target name LLVMFuzzer-. +# +# One or more source files to be compiled into the binary must be declared +# after the SOURCES keyword. +function(add_libfuzzer_test name) + set(multi_arg_options "SOURCES") + cmake_parse_arguments( + "add_libfuzzer_test" "" "" "${multi_arg_options}" ${ARGN}) + if ("${add_libfuzzer_test_SOURCES}" STREQUAL "") + message(FATAL_ERROR "Source files must be specified") + endif() + add_executable(LLVMFuzzer-${name} + ${add_libfuzzer_test_SOURCES} + ) + target_link_libraries(LLVMFuzzer-${name} LLVMFuzzer) + # Place binary where llvm-lit expects to find it + set_target_properties(LLVMFuzzer-${name} + PROPERTIES RUNTIME_OUTPUT_DIRECTORY + "${CMAKE_BINARY_DIR}/lib/Fuzzer/test" + ) + set(TestBinaries ${TestBinaries} LLVMFuzzer-${name} PARENT_SCOPE) +endfunction() + +# Variable to keep track of all test targets +set(TestBinaries) + +############################################################################### +# Basic tests +############################################################################### set(Tests AccumulateAllocationsTest @@ -67,107 +93,60 @@ TimeoutTest ) -set(CustomMainTests - ) - -set(UninstrumentedTests - UninstrumentedTest - ) - -set(TraceBBTests - SimpleTest - ) - -set(TracePCTests - FourIndependentBranchesTest - FullCoverageSetTest - ) - -set(UbsanTests - SignedIntOverflowTest - ) - -set(TestBinaries) - foreach(Test ${Tests}) - add_executable(LLVMFuzzer-${Test} - ${Test}.cpp - ) - target_link_libraries(LLVMFuzzer-${Test} - LLVMFuzzer - ) - set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test}) -endforeach() - -foreach(Test ${CustomMainTests}) - add_executable(LLVMFuzzer-${Test} - ${Test}.cpp - ) - target_link_libraries(LLVMFuzzer-${Test} - LLVMFuzzerNoMain - ) - set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test}) + add_libfuzzer_test(${Test} SOURCES ${Test}.cpp) endforeach() - -configure_lit_site_cfg( - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg - ) - -configure_lit_site_cfg( - ${CMAKE_CURRENT_SOURCE_DIR}/unit/lit.site.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/unit/lit.site.cfg - ) - -include_directories(..) -include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include) +############################################################################### +# Unit tests +############################################################################### add_executable(LLVMFuzzer-Unittest FuzzerUnittest.cpp FuzzerFnAdapterUnittest.cpp - $ ) target_link_libraries(LLVMFuzzer-Unittest gtest gtest_main + LLVMFuzzerNoMain + ) + +target_include_directories(LLVMFuzzer-Unittest PRIVATE + "${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include" ) set(TestBinaries ${TestBinaries} LLVMFuzzer-Unittest) +set_target_properties(LLVMFuzzer-Unittest + PROPERTIES RUNTIME_OUTPUT_DIRECTORY + "${CMAKE_CURRENT_BINARY_DIR}" +) +############################################################################### +# Additional tests +############################################################################### +include_directories(..) add_subdirectory(dfsan) - -foreach(Test ${DFSanTests}) - set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test}-DFSan) -endforeach() - add_subdirectory(uninstrumented) - -foreach(Test ${UninstrumentedTests}) - set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test}-Uninstrumented) -endforeach() - add_subdirectory(ubsan) - -foreach(Test ${UbsanTests}) - set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test}-Ubsan) -endforeach() - add_subdirectory(trace-bb) - -foreach(Test ${TraceBBTests}) - set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test}-TraceBB) -endforeach() - add_subdirectory(trace-pc) -foreach(Test ${TracePCTests}) - set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test}-TracePC) -endforeach() +############################################################################### +# Configure lit to run the tests +# +# Note this is done after declaring all tests so we can inform lit if any tests +# need to be disabled. +############################################################################### -set_target_properties(${TestBinaries} - PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg + ) + +configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/unit/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/unit/lit.site.cfg ) add_lit_testsuite(check-fuzzer "Running Fuzzer tests" Index: llvm/trunk/lib/Fuzzer/test/dfsan/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/dfsan/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/dfsan/CMakeLists.txt @@ -3,12 +3,17 @@ set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fno-sanitize=all -fsanitize=dataflow") +set(DFSanTests + MemcmpTest + SimpleCmpTest + StrcmpTest + StrncmpTest + SwitchTest + ) + foreach(Test ${DFSanTests}) - add_executable(LLVMFuzzer-${Test}-DFSan - ../${Test}.cpp - ) - target_link_libraries(LLVMFuzzer-${Test}-DFSan - LLVMFuzzer - ) + add_libfuzzer_test(${Test}-DFSan SOURCES ../${Test}.cpp) endforeach() +# Propagate value into parent directory +set(TestBinaries ${TestBinaries} PARENT_SCOPE) Index: llvm/trunk/lib/Fuzzer/test/trace-bb/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/trace-bb/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/trace-bb/CMakeLists.txt @@ -3,12 +3,13 @@ set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fsanitize-coverage=edge,trace-bb") +set(TraceBBTests + SimpleTest + ) + foreach(Test ${TraceBBTests}) - add_executable(LLVMFuzzer-${Test}-TraceBB - ../${Test}.cpp - ) - target_link_libraries(LLVMFuzzer-${Test}-TraceBB - LLVMFuzzer - ) + add_libfuzzer_test(${Test}-TraceBB SOURCES ../${Test}.cpp) endforeach() +# Propagate value into parent directory +set(TestBinaries ${TestBinaries} PARENT_SCOPE) Index: llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt @@ -3,12 +3,14 @@ set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fno-sanitize-coverage=8bit-counters -fsanitize-coverage=trace-pc") +set(TracePCTests + FourIndependentBranchesTest + FullCoverageSetTest + ) + foreach(Test ${TracePCTests}) - add_executable(LLVMFuzzer-${Test}-TracePC - ../${Test}.cpp - ) - target_link_libraries(LLVMFuzzer-${Test}-TracePC - LLVMFuzzer - ) + add_libfuzzer_test(${Test}-TracePC SOURCES ../${Test}.cpp) endforeach() +# Propagate value into parent directory +set(TestBinaries ${TestBinaries} PARENT_SCOPE) Index: llvm/trunk/lib/Fuzzer/test/ubsan/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/ubsan/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/ubsan/CMakeLists.txt @@ -3,12 +3,13 @@ set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fsanitize=undefined -fno-sanitize-recover=all") +set(UbsanTests + SignedIntOverflowTest + ) + foreach(Test ${UbsanTests}) - add_executable(LLVMFuzzer-${Test}-Ubsan - ../${Test}.cpp - ) - target_link_libraries(LLVMFuzzer-${Test}-Ubsan - LLVMFuzzer - ) + add_libfuzzer_test(${Test}-Ubsan SOURCES ../${Test}.cpp) endforeach() +# Propagate value into parent directory +set(TestBinaries ${TestBinaries} PARENT_SCOPE) Index: llvm/trunk/lib/Fuzzer/test/uninstrumented/CMakeLists.txt =================================================================== --- llvm/trunk/lib/Fuzzer/test/uninstrumented/CMakeLists.txt +++ llvm/trunk/lib/Fuzzer/test/uninstrumented/CMakeLists.txt @@ -3,12 +3,13 @@ set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fno-sanitize=all -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters") +set(UninstrumentedTests + UninstrumentedTest + ) + foreach(Test ${UninstrumentedTests}) - add_executable(LLVMFuzzer-${Test}-Uninstrumented - ../${Test}.cpp - ) - target_link_libraries(LLVMFuzzer-${Test}-Uninstrumented - LLVMFuzzer - ) + add_libfuzzer_test(${Test}-Uninstrumented SOURCES ../${Test}.cpp) endforeach() +# Propagate value into parent directory +set(TestBinaries ${TestBinaries} PARENT_SCOPE)