brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · f348c35 Raw
130 lines · plain
1include(CompilerRTCompile)2 3filter_available_targets(INTERCEPTION_UNITTEST_SUPPORTED_ARCH x86_64 i386 mips64 mips64el)4 5set(INTERCEPTION_UNITTESTS6  interception_linux_test.cpp7  interception_linux_foreign_test.cpp8  interception_test_main.cpp9  interception_win_test.cpp10  )11 12set(INTERCEPTION_TEST_HEADERS)13 14set(INTERCEPTION_TEST_CFLAGS_COMMON15  ${COMPILER_RT_UNITTEST_CFLAGS}16  ${COMPILER_RT_GTEST_CFLAGS}17  ${SANITIZER_TEST_CXX_CFLAGS}18  -I${COMPILER_RT_SOURCE_DIR}/include19  -I${COMPILER_RT_SOURCE_DIR}/lib20  -I${COMPILER_RT_SOURCE_DIR}/lib/interception21  -DSANITIZER_COMMON_NO_REDEFINE_BUILTINS22  -fno-rtti23  -fno-builtin-isdigit24  -fno-builtin-isalpha25  -fno-builtin-isalnum26  -fno-builtin-islower27  -O228  -Werror=sign-compare)29 30set(INTERCEPTION_TEST_LINK_FLAGS_COMMON31  ${COMPILER_RT_UNITTEST_LINK_FLAGS}32  ${COMPILER_RT_UNWINDER_LINK_LIBS}33  ${SANITIZER_TEST_CXX_LIBRARIES})34 35# -gline-tables-only must be enough for these tests, so use it if possible.36if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang")37  list(APPEND INTERCEPTION_TEST_CFLAGS_COMMON -gline-tables-only)38else()39  list(APPEND INTERCEPTION_TEST_CFLAGS_COMMON -g)40endif()41if(MSVC)42  list(APPEND INTERCEPTION_TEST_CFLAGS_COMMON -gcodeview)43  list(APPEND INTERCEPTION_TEST_LINK_FLAGS_COMMON44    -Wl,-largeaddressaware45    -Wl,-nodefaultlib:libcmt,-defaultlib:msvcrt,-defaultlib:oldnames46    )47endif()48if(MINGW)49  list(APPEND INTERCEPTION_TEST_LINK_FLAGS_COMMON50    -Wl,--large-address-aware51    )52endif()53list(APPEND INTERCEPTION_TEST_LINK_FLAGS_COMMON -g)54 55if(NOT MSVC)56  list(APPEND INTERCEPTION_TEST_LINK_FLAGS_COMMON --driver-mode=g++)57endif()58 59if(ANDROID)60  list(APPEND INTERCEPTION_TEST_LINK_FLAGS_COMMON -pie)61endif()62 63set(INTERCEPTION_TEST_LINK_LIBS)64append_list_if(COMPILER_RT_HAS_LIBLOG log INTERCEPTION_TEST_LINK_LIBS)65 66append_list_if(COMPILER_RT_HAS_LIBDL -ldl INTERCEPTION_TEST_LINK_FLAGS_COMMON)67append_list_if(COMPILER_RT_HAS_LIBRT -lrt INTERCEPTION_TEST_LINK_FLAGS_COMMON)68append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread INTERCEPTION_TEST_LINK_FLAGS_COMMON)69# x86_64 FreeBSD 9.2 additionally requires libc++ to build the tests. Also,70# 'libm' shall be specified explicitly to build i386 tests.71if(CMAKE_SYSTEM MATCHES "FreeBSD-9.2-RELEASE")72  list(APPEND INTERCEPTION_TEST_LINK_FLAGS_COMMON "-lc++ -lm")73endif()74 75include_directories(..)76include_directories(../..)77 78# Adds static library which contains interception object file79# (universal binary on Mac and arch-specific object files on Linux).80macro(add_interceptor_lib library)81  add_library(${library} STATIC ${ARGN})82  set_target_properties(${library} PROPERTIES83    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}84    FOLDER "Compiler-RT/Tests/Runtime")85endmacro()86 87function(get_interception_lib_for_arch arch lib)88  if(APPLE)89    set(tgt_name "RTInterception.test.osx")90  else()91    set(tgt_name "RTInterception.test.${arch}")92  endif()93  set(${lib} "${tgt_name}" PARENT_SCOPE)94endfunction()95 96# Interception unit tests testsuite.97add_custom_target(InterceptionUnitTests)98set_target_properties(InterceptionUnitTests PROPERTIES99  FOLDER "Compiler-RT/Tests")100 101# Adds interception tests for architecture.102macro(add_interception_tests_for_arch arch)103  set(INTERCEPTION_TEST_OBJECTS)104  get_interception_lib_for_arch(${arch} INTERCEPTION_COMMON_LIB)105  generate_compiler_rt_tests(INTERCEPTION_TEST_OBJECTS106    InterceptionUnitTests "Interception-${arch}-Test" ${arch}107    RUNTIME ${INTERCEPTION_COMMON_LIB}108    SOURCES ${INTERCEPTION_UNITTESTS} ${COMPILER_RT_GTEST_SOURCE}109    COMPILE_DEPS ${INTERCEPTION_TEST_HEADERS}110    CFLAGS ${INTERCEPTION_TEST_CFLAGS_COMMON}111    LINK_FLAGS ${INTERCEPTION_TEST_LINK_FLAGS_COMMON})112endmacro()113 114if(COMPILER_RT_CAN_EXECUTE_TESTS AND NOT ANDROID AND NOT APPLE)115  # We use just-built clang to build interception unittests, so we must116  # be sure that produced binaries would work.117  if(APPLE)118    add_interceptor_lib("RTInterception.test.osx"119                        $<TARGET_OBJECTS:RTInterception.osx>)120  else()121    foreach(arch ${INTERCEPTION_UNITTEST_SUPPORTED_ARCH})122      add_interceptor_lib("RTInterception.test.${arch}"123                          $<TARGET_OBJECTS:RTInterception.${arch}>)124    endforeach()125  endif()126  foreach(arch ${INTERCEPTION_UNITTEST_SUPPORTED_ARCH})127    add_interception_tests_for_arch(${arch})128  endforeach()129endif()130