1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 12:43:36 +01:00

[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

llvm-svn: 270958
This commit is contained in:
Dan Liew 2016-05-27 03:14:40 +00:00
parent 5295a83f17
commit d14bf97a6e
6 changed files with 114 additions and 125 deletions

View File

@ -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(<name>
# SOURCES source0.cpp [source1.cpp ...]
# )
#
# Declares a LibFuzzer test executable with target name LLVMFuzzer-<name>.
#
# 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,48 +93,51 @@ 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})
add_libfuzzer_test(${Test} SOURCES ${Test}.cpp)
endforeach()
foreach(Test ${CustomMainTests})
add_executable(LLVMFuzzer-${Test}
${Test}.cpp
)
target_link_libraries(LLVMFuzzer-${Test}
LLVMFuzzerNoMain
)
set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test})
endforeach()
###############################################################################
# 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)
add_subdirectory(uninstrumented)
add_subdirectory(ubsan)
add_subdirectory(trace-bb)
add_subdirectory(trace-pc)
###############################################################################
# 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.
###############################################################################
configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
@ -120,56 +149,6 @@ configure_lit_site_cfg(
${CMAKE_CURRENT_BINARY_DIR}/unit/lit.site.cfg
)
include_directories(..)
include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include)
add_executable(LLVMFuzzer-Unittest
FuzzerUnittest.cpp
FuzzerFnAdapterUnittest.cpp
$<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
)
target_link_libraries(LLVMFuzzer-Unittest
gtest
gtest_main
)
set(TestBinaries ${TestBinaries} LLVMFuzzer-Unittest)
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()
set_target_properties(${TestBinaries}
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
add_lit_testsuite(check-fuzzer "Running Fuzzer tests"
${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${TestBinaries} FileCheck not

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)