1include(CompilerRTCompile) 2 3include_directories(..) 4 5# Unit tests target. 6add_custom_target(OrcRTUnitTests) 7set_target_properties(OrcRTUnitTests PROPERTIES FOLDER "Compiler-RT/Tests") 8 9# Testing tools target. 10add_custom_target(OrcRTTools) 11set_target_properties(OrcRTTools PROPERTIES FOLDER "Compiler-RT/Tools") 12 13set(ORC_UNITTEST_CFLAGS 14# FIXME: This should be set for all unit tests. 15 -std=c++17 16 ${ORC_CFLAGS} 17 ${COMPILER_RT_UNITTEST_CFLAGS} 18 -I${COMPILER_RT_SOURCE_DIR}/lib/orc 19 ) 20 21function(add_orc_lib library) 22 add_library(${library} STATIC ${ARGN}) 23 set_target_properties(${library} PROPERTIES 24 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 25 FOLDER "Compiler-RT/Tests/Runtime") 26endfunction() 27 28function(get_orc_lib_for_arch arch lib) 29 if(APPLE) 30 if("osx" IN_LIST ORC_SUPPORTED_OS) 31 set(tgt_name "RTOrc.test.osx") 32 endif() 33 else() 34 set(tgt_name "RTOrc.test.${arch}") 35 endif() 36 set(${lib} "${tgt_name}" PARENT_SCOPE) 37endfunction() 38 39set(ORC_TEST_ARCH ${ORC_SUPPORTED_ARCH}) 40set(ORC_UNITTEST_LINK_FLAGS 41 ${COMPILER_RT_UNITTEST_LINK_FLAGS} 42 ${CMAKE_THREAD_LIBS_INIT} 43 ${COMPILER_RT_UNWINDER_LINK_LIBS} 44 ${COMPILER_RT_CXX_LINK_LIBS}) 45 46if(APPLE) 47 darwin_filter_host_archs(ORC_SUPPORTED_ARCH ORC_TEST_ARCH) 48 list(APPEND ORC_UNITTEST_CFLAGS ${DARWIN_osx_CFLAGS}) 49 list(APPEND ORC_UNITTEST_LINK_FLAGS ${DARWIN_osx_LINK_FLAGS}) 50else() 51 append_list_if(COMPILER_RT_HAS_LIBM -lm ORC_UNITTEST_LINK_FLAGS) 52 append_list_if(COMPILER_RT_HAS_LIBRT -lrt ORC_UNITTEST_LINK_FLAGS) 53 append_list_if(COMPILER_RT_HAS_LIBDL -ldl ORC_UNITTEST_LINK_FLAGS) 54 append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread ORC_UNITTEST_LINK_FLAGS) 55 append_list_if(COMPILER_RT_HAS_LIBEXECINFO -lexecinfo ORC_UNITTEST_LINK_FLAGS) 56endif() 57 58set(ORC_DEPS orc) 59# ORC uses C++ standard library headers. 60if (TARGET cxx-headers OR HAVE_LIBCXX) 61 list(APPEND ORC_DEPS cxx-headers) 62endif() 63 64macro(add_orc_unittest testname) 65 cmake_parse_arguments(TEST "" "" "SOURCES;HEADERS" ${ARGN}) 66 if(UNIX) 67 foreach(arch ${ORC_TEST_ARCH}) 68 set(TEST_OBJECTS) 69 get_orc_lib_for_arch(${arch} ORC_RUNTIME_LIBS) 70 if(ORC_RUNTIME_LIBS) 71 generate_compiler_rt_tests(TEST_OBJECTS 72 OrcRTUnitTests "${testname}-${arch}-Test" "${arch}" 73 SOURCES ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE} 74 RUNTIME "${ORC_RUNTIME_LIBS}" 75 COMPILE_DEPS ${TEST_HEADERS} ${ORC_HEADERS} 76 DEPS ${ORC_DEPS} 77 CFLAGS ${ORC_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} 78 LINK_FLAGS ${ORC_UNITTEST_LINK_FLAGS}) 79 endif() 80 endforeach() 81 endif() 82endmacro() 83 84macro(add_orc_tool toolname) 85 cmake_parse_arguments(TOOL "" "" "SOURCES;HEADERS" ${ARGN}) 86 if(UNIX) 87 foreach(arch ${ORC_TEST_ARCH}) 88 set(TOOL_OBJECTS) 89 get_orc_lib_for_arch(${arch} ORC_RUNTIME_LIBS) 90 if(ORC_RUNTIME_LIBS) 91 generate_compiler_rt_tests(TOOL_OBJECTS 92 OrcRTTools "${toolname}-${arch}" "${arch}" 93 SOURCES ${TOOL_SOURCES} 94 RUNTIME "${ORC_RUNTIME_LIBS}" 95 COMPILE_DEPS ${TOOL_HEADERS} ${ORC_HEADERS} 96 DEPS ${ORC_DEPS} 97 CFLAGS ${ORC_UNITTEST_CFLAGS} 98 LINK_FLAGS ${ORC_UNITTEST_LINK_FLAGS}) 99 endif() 100 endforeach() 101 endif() 102endmacro() 103 104if (APPLE) 105 if("osx" IN_LIST ORC_SUPPORTED_OS) 106 add_orc_lib("RTOrc.test.osx" 107 $<TARGET_OBJECTS:RTOrc.osx>) 108 endif() 109else() 110 foreach(arch ${ORC_SUPPORTED_ARCH}) 111 add_orc_lib("RTOrc.test.${arch}" 112 $<TARGET_OBJECTS:RTOrc.${arch}>) 113 endforeach() 114endif() 115 116if(COMPILER_RT_INCLUDE_TESTS) 117 add_subdirectory(unit) 118endif() 119add_subdirectory(tools) 120