85 lines · plain
1include(CheckCXXCompilerFlag)2include(CompilerRTCompile)3include(CompilerRTLink)4 5set(CTX_PROFILE_UNITTEST_CFLAGS6 ${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_BUILTINS12 -O213 -g14 -fno-rtti15 -Wno-pedantic16 -fno-omit-frame-pointer)17 18# Suppress warnings for gmock variadic macros for clang and gcc respectively.19append_list_if(SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG -Wno-gnu-zero-variadic-macro-arguments CTX_PROFILE_UNITTEST_CFLAGS)20append_list_if(COMPILER_RT_HAS_WVARIADIC_MACROS_FLAG -Wno-variadic-macros CTX_PROFILE_UNITTEST_CFLAGS)21 22file(GLOB CTX_PROFILE_HEADERS ../*.h)23 24set(CTX_PROFILE_SOURCES25 ../CtxInstrProfiling.cpp26 ../RootAutoDetector.cpp)27 28set(CTX_PROFILE_UNITTESTS29 CtxInstrProfilingTest.cpp30 RootAutoDetectorTest.cpp31 driver.cpp)32 33include_directories(../../../include)34 35set(CTX_PROFILE_UNITTEST_HEADERS36 ${CTX_PROFILE_HEADERS})37 38set(CTX_PROFILE_UNITTEST_LINK_FLAGS39 ${COMPILER_RT_UNITTEST_LINK_FLAGS})40 41list(APPEND CTX_PROFILE_UNITTEST_LINK_FLAGS -pthread)42 43set(CTX_PROFILE_UNITTEST_DEPS)44if (TARGET cxx-headers OR HAVE_LIBCXX)45 list(APPEND CTX_PROFILE_UNITTEST_DEPS cxx-headers)46endif()47 48set(CTX_PROFILE_UNITTEST_LINK_LIBRARIES49 ${COMPILER_RT_UNWINDER_LINK_LIBS}50 ${SANITIZER_TEST_CXX_LIBRARIES})51append_list_if(COMPILER_RT_HAS_LIBDL -ldl CTX_PROFILE_UNITTEST_LINK_LIBRARIES)52 53macro (add_ctx_profile_tests_for_arch arch)54 set(CTX_PROFILE_TEST_RUNTIME_OBJECTS55 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>56 $<TARGET_OBJECTS:RTSanitizerCommonCoverage.${arch}>57 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>58 $<TARGET_OBJECTS:RTSanitizerCommonSymbolizer.${arch}>59 $<TARGET_OBJECTS:RTSanitizerCommonSymbolizerInternal.${arch}>60 )61 set(CTX_PROFILE_TEST_RUNTIME RTCtxProfileTest.${arch})62 add_library(${CTX_PROFILE_TEST_RUNTIME} STATIC ${CTX_PROFILE_TEST_RUNTIME_OBJECTS})63 set_target_properties(${CTX_PROFILE_TEST_RUNTIME} PROPERTIES64 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}65 FOLDER "Compiler-RT Runtime tests")66 set(CTX_PROFILE_TEST_OBJECTS)67 generate_compiler_rt_tests(CTX_PROFILE_TEST_OBJECTS68 CtxProfileUnitTests "CtxProfile-${arch}-UnitTest" ${arch}69 RUNTIME ${CTX_PROFILE_TEST_RUNTIME}70 DEPS ${CTX_PROFILE_UNITTEST_DEPS}71 SOURCES ${CTX_PROFILE_UNITTESTS} ${CTX_PROFILE_SOURCES} ${COMPILER_RT_GTEST_SOURCE}72 COMPILE_DEPS ${CTX_PROFILE_UNITTEST_HEADERS}73 CFLAGS ${CTX_PROFILE_UNITTEST_CFLAGS}74 LINK_FLAGS ${CTX_PROFILE_UNITTEST_LINK_FLAGS} ${CTX_PROFILE_UNITTEST_LINK_LIBRARIES})75endmacro()76 77add_custom_target(CtxProfileUnitTests)78set_target_properties(CtxProfileUnitTests PROPERTIES FOLDER "Compiler-RT Tests")79if(COMPILER_RT_CAN_EXECUTE_TESTS AND COMPILER_RT_DEFAULT_TARGET_ARCH IN_LIST CTX_PROFILE_SUPPORTED_ARCH)80 # CtxProfile unit tests are only run on the host machine.81 foreach(arch ${COMPILER_RT_DEFAULT_TARGET_ARCH})82 add_ctx_profile_tests_for_arch(${arch})83 endforeach()84endif()85