xref: /netbsd-src/sys/external/bsd/compiler_rt/dist/lib/fuzzer/tests/CMakeLists.txt (revision a7c257b03e4462df2b1020128fb82716512d7856)
1include(CompilerRTCompile)
2
3set(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
10if (APPLE)
11  set(FUZZER_SUPPORTED_OS osx)
12endif()
13
14add_custom_target(FuzzerUnitTests)
15set_target_properties(FuzzerUnitTests PROPERTIES FOLDER "Compiler-RT Tests")
16
17set(LIBFUZZER_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS})
18list(APPEND LIBFUZZER_UNITTEST_LINK_FLAGS --driver-mode=g++)
19
20if(APPLE OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
21  list(APPEND LIBFUZZER_UNITTEST_LINK_FLAGS -lc++ -lpthread)
22elseif(NOT WIN32)
23  list(APPEND LIBFUZZER_UNITTEST_LINK_FLAGS -lstdc++ -lpthread)
24endif()
25
26if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" AND COMPILER_RT_LIBCXX_PATH)
27  list(APPEND LIBFUZZER_UNITTEST_CFLAGS -nostdinc++)
28endif()
29
30if(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})
64endif()
65