Index: compiler-rt/lib/fuzzer/CMakeLists.txt =================================================================== --- compiler-rt/lib/fuzzer/CMakeLists.txt +++ compiler-rt/lib/fuzzer/CMakeLists.txt @@ -46,6 +46,7 @@ FuzzerMutate.h FuzzerOptions.h FuzzerRandom.h + FuzzerPlatform.h FuzzerSHA1.h FuzzerTracePC.h FuzzerUtil.h Index: compiler-rt/lib/fuzzer/tests/CMakeLists.txt =================================================================== --- compiler-rt/lib/fuzzer/tests/CMakeLists.txt +++ compiler-rt/lib/fuzzer/tests/CMakeLists.txt @@ -11,12 +11,6 @@ set(FUZZER_SUPPORTED_OS osx) endif() -add_custom_target(FuzzerUnitTests) -set_target_properties(FuzzerUnitTests PROPERTIES FOLDER "Compiler-RT Tests") - -add_custom_target(FuzzedDataProviderUnitTests) -set_target_properties(FuzzedDataProviderUnitTests PROPERTIES FOLDER "Compiler-RT Tests") - set(LIBFUZZER_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS}) list(APPEND LIBFUZZER_UNITTEST_LINK_FLAGS --driver-mode=g++) @@ -41,23 +35,58 @@ list(APPEND LIBFUZZER_UNITTEST_CFLAGS "-fvisibility=hidden") endif() -if(COMPILER_RT_DEFAULT_TARGET_ARCH IN_LIST FUZZER_SUPPORTED_ARCH) - # libFuzzer unit tests are only run on the host machine. - set(arch ${COMPILER_RT_DEFAULT_TARGET_ARCH}) - - set(LIBFUZZER_TEST_RUNTIME RTFuzzerTest.${arch}) +# Compile test runtime for use in unit tests. +# generate_libfuzzer_unittests( ) +function (generate_libfuzzer_test_runtime runtime arch) + cmake_parse_arguments(TEST "" "" "OBJECT_LIBS" ${ARGN}) + set(name ${runtime}.${arch}) + set(suffix) if(APPLE) - set(LIBFUZZER_TEST_RUNTIME_OBJECTS - $) + set(suffix ${FUZZER_SUPPORTED_OS}) else() - set(LIBFUZZER_TEST_RUNTIME_OBJECTS - $) + set(suffix ${arch}) endif() - add_library(${LIBFUZZER_TEST_RUNTIME} STATIC - ${LIBFUZZER_TEST_RUNTIME_OBJECTS}) - set_target_properties(${LIBFUZZER_TEST_RUNTIME} PROPERTIES + set(${name}_TEST_OBJECTS) + foreach(object_lib ${TEST_OBJECT_LIBS}) + list(APPEND ${name}_TEST_OBJECTS $) + endforeach() + add_library(${name} STATIC ${${name}_TEST_OBJECTS}) + set_target_properties(${name} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} FOLDER "Compiler-RT Runtime tests") +endfunction() + +# Compile and register compiler-rt/lib/fuzzer tests. +# generate_libfuzzer_unittests( +# NAME +# SOURCES +# RUNTIME +# DEPS +# ) +function(generate_libfuzzer_unittests prefix arch) + cmake_parse_arguments(TEST "" "NAME;RUNTIME" "SOURCES;DEPS" ${ARGN}) + if (NOT DEFINED TEST_NAME) + set(TEST_NAME ${prefix}) + endif() + add_custom_target(${prefix}UnitTests) + set(${prefix}TestObjects) + generate_compiler_rt_tests(${prefix}TestObjects + "${prefix}UnitTests" "${TEST_NAME}-${arch}-Test" ${arch} + SOURCES ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE} + RUNTIME ${TEST_RUNTIME}.${arch} + DEPS gtest ${LIBFUZZER_TEST_RUNTIME_DEPS} ${TEST_DEPS} + CFLAGS ${LIBFUZZER_UNITTEST_CFLAGS} ${LIBFUZZER_TEST_RUNTIME_CFLAGS} + LINK_FLAGS ${LIBFUZZER_UNITTEST_LINK_FLAGS} ${LIBFUZZER_TEST_RUNTIME_LINK_FLAGS}) + set_target_properties(${prefix}UnitTests PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +endfunction() + +if(COMPILER_RT_DEFAULT_TARGET_ARCH IN_LIST FUZZER_SUPPORTED_ARCH) + # libFuzzer unit tests are only run on the host machine. + set(arch ${COMPILER_RT_DEFAULT_TARGET_ARCH}) + + generate_libfuzzer_test_runtime(RTFuzzerTest ${arch} + OBJECT_LIBS RTfuzzer) if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND COMPILER_RT_LIBCXX_PATH AND @@ -68,24 +97,13 @@ set(LIBFUZZER_TEST_RUNTIME_LINK_FLAGS ${LIBCXX_${arch}_PREFIX}/lib/libc++.a) endif() - set(FuzzerTestObjects) - generate_compiler_rt_tests(FuzzerTestObjects - FuzzerUnitTests "Fuzzer-${arch}-Test" ${arch} - SOURCES FuzzerUnittest.cpp ${COMPILER_RT_GTEST_SOURCE} - RUNTIME ${LIBFUZZER_TEST_RUNTIME} - DEPS gtest ${LIBFUZZER_TEST_RUNTIME_DEPS} FuzzerTestUtil.h - CFLAGS ${LIBFUZZER_UNITTEST_CFLAGS} ${LIBFUZZER_TEST_RUNTIME_CFLAGS} - LINK_FLAGS ${LIBFUZZER_UNITTEST_LINK_FLAGS} ${LIBFUZZER_TEST_RUNTIME_LINK_FLAGS}) - set_target_properties(FuzzerUnitTests PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + generate_libfuzzer_unittests(Fuzzer ${arch} + SOURCES FuzzerUnittest.cpp + RUNTIME RTFuzzerTest) - set(FuzzedDataProviderTestObjects) - generate_compiler_rt_tests(FuzzedDataProviderTestObjects - FuzzedDataProviderUnitTests "FuzzerUtils-${arch}-Test" ${arch} - SOURCES FuzzedDataProviderUnittest.cpp ${COMPILER_RT_GTEST_SOURCE} - DEPS gtest ${LIBFUZZER_TEST_RUNTIME_DEPS} ${COMPILER_RT_SOURCE_DIR}/include/fuzzer/FuzzedDataProvider.h - CFLAGS ${LIBFUZZER_UNITTEST_CFLAGS} ${LIBFUZZER_TEST_RUNTIME_CFLAGS} - LINK_FLAGS ${LIBFUZZER_UNITTEST_LINK_FLAGS} ${LIBFUZZER_TEST_RUNTIME_LINK_FLAGS}) - set_target_properties(FuzzedDataProviderUnitTests PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + generate_libfuzzer_unittests(FuzzedDataProvider ${arch} + NAME FuzzerUtils + SOURCES FuzzedDataProviderUnittest.cpp + RUNTIME RTFuzzerTest + DEPS ${COMPILER_RT_SOURCE_DIR}/include/fuzzer/FuzzedDataProvider.h) endif()