1 include(CheckCXXCompilerFlag)
2 include(CompilerRTCompile)
3 include(CompilerRTLink)
5 set(MEMPROF_UNITTEST_CFLAGS
6 ${COMPILER_RT_UNITTEST_CFLAGS}
7 ${COMPILER_RT_GTEST_CFLAGS}
8 ${COMPILER_RT_GMOCK_CFLAGS}
9 ${SANITIZER_TEST_CXX_CFLAGS}
10 -I${COMPILER_RT_SOURCE_DIR}/lib/
11 -DSANITIZER_COMMON_NO_REDEFINE_BUILTINS
16 -fno-omit-frame-pointer)
18 # Suppress warnings for gmock variadic macros for clang and gcc respectively.
19 append_list_if(SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG -Wno-gnu-zero-variadic-macro-arguments MEMPROF_UNITTEST_CFLAGS)
20 append_list_if(COMPILER_RT_HAS_WVARIADIC_MACROS_FLAG -Wno-variadic-macros MEMPROF_UNITTEST_CFLAGS)
22 file(GLOB MEMPROF_HEADERS ../*.h)
26 ../memprof_rawprofile.cpp)
32 include_directories(../../../include)
34 set(MEMPROF_UNIT_TEST_HEADERS
37 set(MEMPROF_UNITTEST_LINK_FLAGS
38 ${COMPILER_RT_UNITTEST_LINK_FLAGS})
41 list(APPEND MEMPROF_UNITTEST_LINK_FLAGS -pthread)
44 set(MEMPROF_UNITTEST_DEPS)
45 if (TARGET cxx-headers OR HAVE_LIBCXX)
46 list(APPEND MEMPROF_UNITTEST_DEPS cxx-headers)
49 set(MEMPROF_UNITTEST_LINK_LIBRARIES
50 ${COMPILER_RT_UNWINDER_LINK_LIBS}
51 ${SANITIZER_TEST_CXX_LIBRARIES})
52 append_list_if(COMPILER_RT_HAS_LIBDL -ldl MEMPROF_UNITTEST_LINK_LIBRARIES)
54 # Adds memprof tests for each architecture.
55 macro(add_memprof_tests_for_arch arch)
56 set(MEMPROF_TEST_RUNTIME_OBJECTS
57 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
58 $<TARGET_OBJECTS:RTSanitizerCommonCoverage.${arch}>
59 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
60 $<TARGET_OBJECTS:RTSanitizerCommonSymbolizer.${arch}>
61 $<TARGET_OBJECTS:RTSanitizerCommonSymbolizerInternal.${arch}>
63 set(MEMPROF_TEST_RUNTIME RTMemProfTest.${arch})
64 add_library(${MEMPROF_TEST_RUNTIME} STATIC ${MEMPROF_TEST_RUNTIME_OBJECTS})
65 set_target_properties(${MEMPROF_TEST_RUNTIME} PROPERTIES
66 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
67 FOLDER "Compiler-RT/Tests/Runtime")
68 set(MEMPROF_TEST_OBJECTS)
69 generate_compiler_rt_tests(MEMPROF_TEST_OBJECTS
70 MemProfUnitTests "MemProf-${arch}-UnitTest" ${arch}
71 RUNTIME ${MEMPROF_TEST_RUNTIME}
72 DEPS ${MEMPROF_UNITTEST_DEPS}
73 SOURCES ${MEMPROF_UNITTESTS} ${MEMPROF_SOURCES} ${COMPILER_RT_GTEST_SOURCE}
74 COMPILE_DEPS ${MEMPROF_UNIT_TEST_HEADERS}
75 CFLAGS ${MEMPROF_UNITTEST_CFLAGS}
76 LINK_FLAGS ${MEMPROF_UNITTEST_LINK_FLAGS} ${MEMPROF_UNITTEST_LINK_LIBRARIES})
79 # MemProf unit tests testsuite.
80 add_custom_target(MemProfUnitTests)
81 set_target_properties(MemProfUnitTests PROPERTIES FOLDER "Compiler-RT/Tests")
82 if(COMPILER_RT_CAN_EXECUTE_TESTS AND COMPILER_RT_DEFAULT_TARGET_ARCH IN_LIST MEMPROF_SUPPORTED_ARCH)
83 # MemProf unit tests are only run on the host machine.
84 foreach(arch ${COMPILER_RT_DEFAULT_TARGET_ARCH})
85 add_memprof_tests_for_arch(${arch})