Home | History | Annotate | Line # | Download | only in tests
      1 include(CompilerRTCompile)
      2 
      3 set(LIBFUZZER_UNITTEST_CFLAGS
      4   ${COMPILER_RT_UNITTEST_CFLAGS}
      5   ${COMPILER_RT_GTEST_CFLAGS}
      6   -I${COMPILER_RT_SOURCE_DIR}/lib/fuzzer
      7   -fno-rtti
      8   -O2)
      9 
     10 if (APPLE)
     11   set(FUZZER_SUPPORTED_OS osx)
     12 endif()
     13 
     14 add_custom_target(FuzzerUnitTests)
     15 set_target_properties(FuzzerUnitTests PROPERTIES FOLDER "Compiler-RT Tests")
     16 
     17 set(LIBFUZZER_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS})
     18 list(APPEND LIBFUZZER_UNITTEST_LINK_FLAGS --driver-mode=g++)
     19 
     20 if(APPLE OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
     21   list(APPEND LIBFUZZER_UNITTEST_LINK_FLAGS -lc++ -lpthread)
     22 elseif(NOT WIN32)
     23   list(APPEND LIBFUZZER_UNITTEST_LINK_FLAGS -lstdc++ -lpthread)
     24 endif()
     25 
     26 if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" AND COMPILER_RT_LIBCXX_PATH)
     27   list(APPEND LIBFUZZER_UNITTEST_CFLAGS -nostdinc++)
     28 endif()
     29 
     30 if(COMPILER_RT_DEFAULT_TARGET_ARCH IN_LIST FUZZER_SUPPORTED_ARCH)
     31   # libFuzzer unit tests are only run on the host machine.
     32   set(arch ${COMPILER_RT_DEFAULT_TARGET_ARCH})
     33 
     34   set(LIBFUZZER_TEST_RUNTIME RTFuzzerTest.${arch})
     35   if(APPLE)
     36     set(LIBFUZZER_TEST_RUNTIME_OBJECTS
     37       $<TARGET_OBJECTS:RTfuzzer.osx>)
     38   else()
     39     set(LIBFUZZER_TEST_RUNTIME_OBJECTS
     40       $<TARGET_OBJECTS:RTfuzzer.${arch}>)
     41   endif()
     42   add_library(${LIBFUZZER_TEST_RUNTIME} STATIC
     43     ${LIBFUZZER_TEST_RUNTIME_OBJECTS})
     44   set_target_properties(${LIBFUZZER_TEST_RUNTIME} PROPERTIES
     45     ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
     46     FOLDER "Compiler-RT Runtime tests")
     47 
     48   if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" AND COMPILER_RT_LIBCXX_PATH)
     49     set(LIBFUZZER_TEST_RUNTIME_DEPS libcxx_fuzzer_${arch}-build)
     50     set(LIBFUZZER_TEST_RUNTIME_CFLAGS -isystem ${LIBCXX_${arch}_PREFIX}/include/c++/v1)
     51     set(LIBFUZZER_TEST_RUNTIME_LINK_FLAGS ${LIBCXX_${arch}_PREFIX}/lib/libc++.a)
     52   endif()
     53 
     54   set(FuzzerTestObjects)
     55   generate_compiler_rt_tests(FuzzerTestObjects
     56     FuzzerUnitTests "Fuzzer-${arch}-Test" ${arch}
     57     SOURCES FuzzerUnittest.cpp ${COMPILER_RT_GTEST_SOURCE}
     58     RUNTIME ${LIBFUZZER_TEST_RUNTIME}
     59     DEPS gtest ${LIBFUZZER_TEST_RUNTIME_DEPS}
     60     CFLAGS ${LIBFUZZER_UNITTEST_CFLAGS} ${LIBFUZZER_TEST_RUNTIME_CFLAGS}
     61     LINK_FLAGS ${LIBFUZZER_UNITTEST_LINK_FLAGS} ${LIBFUZZER_TEST_RUNTIME_LINK_FLAGS})
     62   set_target_properties(FuzzerUnitTests PROPERTIES
     63     RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
     64 endif()
     65