From 70172d9997f9c695009294646ca16d5bf238c16b Mon Sep 17 00:00:00 2001 From: Dan Liew Date: Fri, 27 May 2016 03:14:40 +0000 Subject: [PATCH] [LibFuzzer] Refactor declaration of tests in CMake. Add a new CMake function (``add_libfuzzer_test()``) to simplify declaration of executables for testing LibFuzzer and use it to reorganise how tests are declared. Note that configuration of the lit configuration files has been moved as late as possible because we are going to need to disable some tests for some platforms and we will need to propagate this information into the lit configuration. Note the code for custom mains was removed because no tests are currently written for this and Kostya seems happy to remove this. Differential Revision: http://reviews.llvm.org/D20706 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270958 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Fuzzer/test/CMakeLists.txt | 149 +++++++++++--------------- lib/Fuzzer/test/dfsan/CMakeLists.txt | 17 +-- lib/Fuzzer/test/trace-bb/CMakeLists.txt | 13 +-- lib/Fuzzer/test/trace-pc/CMakeLists.txt | 14 +-- lib/Fuzzer/test/ubsan/CMakeLists.txt | 13 +-- lib/Fuzzer/test/uninstrumented/CMakeLists.txt | 13 +-- 6 files changed, 104 insertions(+), 115 deletions(-) diff --git a/lib/Fuzzer/test/CMakeLists.txt b/lib/Fuzzer/test/CMakeLists.txt index 5ff11b0669e..a6702d059d8 100644 --- a/lib/Fuzzer/test/CMakeLists.txt +++ b/lib/Fuzzer/test/CMakeLists.txt @@ -27,13 +27,39 @@ endforeach() # 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 @@ set(Tests 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" diff --git a/lib/Fuzzer/test/dfsan/CMakeLists.txt b/lib/Fuzzer/test/dfsan/CMakeLists.txt index 362a4566711..2a4dc18bfee 100644 --- a/lib/Fuzzer/test/dfsan/CMakeLists.txt +++ b/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) diff --git a/lib/Fuzzer/test/trace-bb/CMakeLists.txt b/lib/Fuzzer/test/trace-bb/CMakeLists.txt index 915ae365734..fd168c4515b 100644 --- a/lib/Fuzzer/test/trace-bb/CMakeLists.txt +++ b/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) diff --git a/lib/Fuzzer/test/trace-pc/CMakeLists.txt b/lib/Fuzzer/test/trace-pc/CMakeLists.txt index 94bd5f66877..cf18278ac64 100644 --- a/lib/Fuzzer/test/trace-pc/CMakeLists.txt +++ b/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) diff --git a/lib/Fuzzer/test/ubsan/CMakeLists.txt b/lib/Fuzzer/test/ubsan/CMakeLists.txt index b7d0f500a75..7a9eacdbe7d 100644 --- a/lib/Fuzzer/test/ubsan/CMakeLists.txt +++ b/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) diff --git a/lib/Fuzzer/test/uninstrumented/CMakeLists.txt b/lib/Fuzzer/test/uninstrumented/CMakeLists.txt index b4d7e4a2a65..35c96481af3 100644 --- a/lib/Fuzzer/test/uninstrumented/CMakeLists.txt +++ b/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) -- 2.11.0