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