138 lines · plain
1include_directories(..)2 3add_custom_target(XRayUnitTests)4set_target_properties(XRayUnitTests PROPERTIES FOLDER "Compiler-RT/Tests")5 6# Sanity check XRAY_ALL_SOURCE_FILES_ABS_PATHS7list(LENGTH XRAY_ALL_SOURCE_FILES_ABS_PATHS XASFAP_LENGTH)8if (${XASFAP_LENGTH} EQUAL 0)9 message(FATAL_ERROR "XRAY_ALL_SOURCE_FILES_ABS_PATHS cannot be empty")10endif()11unset(XASFAP_LENGTH)12foreach (src_file ${XRAY_ALL_SOURCE_FILES_ABS_PATHS})13 if (NOT EXISTS "${src_file}")14 message(FATAL_ERROR "Source file \"${src_file}\" does not exist")15 endif()16endforeach()17 18set(XRAY_UNITTEST_CFLAGS19 ${XRAY_CFLAGS}20 ${COMPILER_RT_UNITTEST_CFLAGS}21 ${COMPILER_RT_GTEST_CFLAGS}22 ${COMPILER_RT_GMOCK_CFLAGS}23 -I${COMPILER_RT_SOURCE_DIR}/include24 -I${COMPILER_RT_SOURCE_DIR}/lib/xray25 -I${COMPILER_RT_SOURCE_DIR}/lib26 )27 28# We add the include directories one at a time in our CFLAGS.29foreach (DIR ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR})30 list(APPEND XRAY_UNITTEST_CFLAGS -I${DIR})31endforeach()32 33function(add_xray_lib library)34 add_library(${library} STATIC ${ARGN})35 set_target_properties(${library} PROPERTIES36 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}37 FOLDER "Compiler-RT/Tests/Runtime")38endfunction()39 40function(get_xray_lib_for_arch arch lib)41 if(APPLE)42 set(tgt_name "RTXRay.test.osx")43 else()44 set(tgt_name "RTXRay.test.${arch}")45 endif()46 set(${lib} "${tgt_name}" PARENT_SCOPE)47endfunction()48 49set(XRAY_TEST_ARCH ${XRAY_SUPPORTED_ARCH})50set(XRAY_UNITTEST_LINK_FLAGS51 ${COMPILER_RT_UNITTEST_LINK_FLAGS}52 ${CMAKE_THREAD_LIBS_INIT}53 ${COMPILER_RT_UNWINDER_LINK_LIBS}54 ${COMPILER_RT_CXX_LINK_LIBS})55 56if (NOT APPLE)57 # We add the library directories one at a time in our CFLAGS.58 foreach (DIR ${LLVM_LIBRARY_DIR})59 list(APPEND XRAY_UNITTEST_LINK_FLAGS -L${DIR})60 endforeach()61 62 if (COMPILER_RT_STANDALONE_BUILD)63 if (COMPILER_RT_HAS_LLVMXRAY OR COMPILER_RT_HAS_LLVMTESTINGSUPPORT)64 if (LLVM_LINK_LLVM_DYLIB)65 list(APPEND XRAY_UNITTEST_LINK_FLAGS -lLLVM)66 endif()67 else()68 if (COMPILER_RT_HAS_LLVMXRAY)69 list(APPEND XRAY_UNITTEST_LINK_FLAGS -lLLVMXRay)70 endif()71 if (COMPILER_RT_HAS_TESTINGSUPPORT)72 list(APPEND XRAY_UNITTEST_LINK_FLAGS -lLLVMTestingSupport)73 endif()74 list(APPEND XRAY_UNITTEST_LINK_FLAGS -lLLVMSupport -lLLVMDemangle)75 endif()76 else()77 # We also add the actual libraries to link as dependencies.78 list(APPEND XRAY_UNITTEST_LINK_FLAGS -lLLVMXRay -lLLVMSupport -lLLVMDemangle -lLLVMTestingSupport)79 endif()80 81 append_list_if(COMPILER_RT_HAS_LIBM -lm XRAY_UNITTEST_LINK_FLAGS)82 append_list_if(COMPILER_RT_HAS_LIBRT -lrt XRAY_UNITTEST_LINK_FLAGS)83 append_list_if(COMPILER_RT_HAS_LIBDL -ldl XRAY_UNITTEST_LINK_FLAGS)84 append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread XRAY_UNITTEST_LINK_FLAGS)85 append_list_if(COMPILER_RT_HAS_LIBEXECINFO -lexecinfo XRAY_UNITTEST_LINK_FLAGS)86endif()87 88macro(add_xray_unittest testname)89 cmake_parse_arguments(TEST "" "" "SOURCES;HEADERS" ${ARGN})90 if(UNIX AND NOT APPLE)91 set(CMAKE_DL_LIBS_INIT "")92 foreach(arch ${XRAY_TEST_ARCH})93 set(TEST_OBJECTS)94 get_xray_lib_for_arch(${arch} XRAY_RUNTIME_LIBS)95 generate_compiler_rt_tests(TEST_OBJECTS96 XRayUnitTests "${testname}-${arch}-Test" "${arch}"97 SOURCES ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE}98 ${COMPILER_RT_GMOCK_SOURCE}99 100 # Note that any change in the implementations will cause all the unit101 # tests to be re-built. This is by design, but may be cumbersome during102 # the build/test cycle.103 COMPILE_DEPS ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE}104 ${XRAY_HEADERS} ${XRAY_ALL_SOURCE_FILES_ABS_PATHS}105 "test_helpers.h"106 RUNTIME "${XRAY_RUNTIME_LIBS}"107 DEPS xray llvm-xray LLVMXRay LLVMTestingSupport108 CFLAGS ${XRAY_UNITTEST_CFLAGS}109 LINK_FLAGS ${TARGET_LINK_FLAGS} ${XRAY_UNITTEST_LINK_FLAGS}110 )111 set_target_properties(XRayUnitTests112 PROPERTIES113 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})114 endforeach()115 endif()116endmacro()117 118if(COMPILER_RT_CAN_EXECUTE_TESTS)119 if (APPLE)120 add_xray_lib("RTXRay.test.osx"121 $<TARGET_OBJECTS:RTXray.osx>122 $<TARGET_OBJECTS:RTXrayFDR.osx>123 $<TARGET_OBJECTS:RTXrayPROFILING.osx>124 $<TARGET_OBJECTS:RTSanitizerCommon.osx>125 $<TARGET_OBJECTS:RTSanitizerCommonLibc.osx>)126 else()127 foreach(arch ${XRAY_SUPPORTED_ARCH})128 add_xray_lib("RTXRay.test.${arch}"129 $<TARGET_OBJECTS:RTXray.${arch}>130 $<TARGET_OBJECTS:RTXrayFDR.${arch}>131 $<TARGET_OBJECTS:RTXrayPROFILING.${arch}>132 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>133 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>)134 endforeach()135 endif()136 add_subdirectory(unit)137endif()138