include(CompilerRTCompile) include_directories(..) # Unit tests target. add_custom_target(OrcRTUnitTests) set_target_properties(OrcRTUnitTests PROPERTIES FOLDER "OrcRT unittests") # Testing tools target. add_custom_target(OrcRTTools) set_target_properties(OrcRTTools PROPERTIES FOLDER "OrcRT tools") set(ORC_UNITTEST_CFLAGS # FIXME: This should be set for all unit tests. -std=c++17 ${ORC_CFLAGS} ${COMPILER_RT_UNITTEST_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/lib/orc ) function(add_orc_lib library) add_library(${library} STATIC ${ARGN}) set_target_properties(${library} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} FOLDER "Compiler-RT Runtime tests") endfunction() function(get_orc_lib_for_arch arch lib) if(APPLE) if("osx" IN_LIST ORC_SUPPORTED_OS) set(tgt_name "RTOrc.test.osx") endif() else() set(tgt_name "RTOrc.test.${arch}") endif() set(${lib} "${tgt_name}" PARENT_SCOPE) endfunction() set(ORC_TEST_ARCH ${ORC_SUPPORTED_ARCH}) set(ORC_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS} ${CMAKE_THREAD_LIBS_INIT} ${COMPILER_RT_UNWINDER_LINK_LIBS} ${COMPILER_RT_CXX_LINK_LIBS}) if(APPLE) darwin_filter_host_archs(ORC_SUPPORTED_ARCH ORC_TEST_ARCH) list(APPEND ORC_UNITTEST_CFLAGS ${DARWIN_osx_CFLAGS}) list(APPEND ORC_UNITTEST_LINK_FLAGS ${DARWIN_osx_LINK_FLAGS}) else() append_list_if(COMPILER_RT_HAS_LIBM -lm ORC_UNITTEST_LINK_FLAGS) append_list_if(COMPILER_RT_HAS_LIBRT -lrt ORC_UNITTEST_LINK_FLAGS) append_list_if(COMPILER_RT_HAS_LIBDL -ldl ORC_UNITTEST_LINK_FLAGS) append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread ORC_UNITTEST_LINK_FLAGS) append_list_if(COMPILER_RT_HAS_LIBEXECINFO -lexecinfo ORC_UNITTEST_LINK_FLAGS) endif() set(ORC_DEPS orc) # ORC uses C++ standard library headers. if (TARGET cxx-headers OR HAVE_LIBCXX) list(APPEND ORC_DEPS cxx-headers) endif() macro(add_orc_unittest testname) cmake_parse_arguments(TEST "" "" "SOURCES;HEADERS" ${ARGN}) if(UNIX) foreach(arch ${ORC_TEST_ARCH}) set(TEST_OBJECTS) get_orc_lib_for_arch(${arch} ORC_RUNTIME_LIBS) if(ORC_RUNTIME_LIBS) generate_compiler_rt_tests(TEST_OBJECTS OrcRTUnitTests "${testname}-${arch}-Test" "${arch}" SOURCES ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE} RUNTIME "${ORC_RUNTIME_LIBS}" COMPILE_DEPS ${TEST_HEADERS} ${ORC_HEADERS} DEPS llvm_gtest ${ORC_DEPS} CFLAGS ${ORC_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} LINK_FLAGS ${ORC_UNITTEST_LINK_FLAGS}) endif() endforeach() endif() endmacro() macro(add_orc_tool toolname) cmake_parse_arguments(TOOL "" "" "SOURCES;HEADERS" ${ARGN}) if(UNIX) foreach(arch ${ORC_TEST_ARCH}) set(TOOL_OBJECTS) get_orc_lib_for_arch(${arch} ORC_RUNTIME_LIBS) if(ORC_RUNTIME_LIBS) generate_compiler_rt_tests(TOOL_OBJECTS OrcRTTools "${toolname}-${arch}" "${arch}" SOURCES ${TOOL_SOURCES} RUNTIME "${ORC_RUNTIME_LIBS}" COMPILE_DEPS ${TOOL_HEADERS} ${ORC_HEADERS} DEPS ${ORC_DEPS} CFLAGS ${ORC_UNITTEST_CFLAGS} LINK_FLAGS ${ORC_UNITTEST_LINK_FLAGS}) endif() endforeach() endif() endmacro() if (APPLE) if("osx" IN_LIST ORC_SUPPORTED_OS) add_orc_lib("RTOrc.test.osx" $) endif() else() foreach(arch ${ORC_SUPPORTED_ARCH}) add_orc_lib("RTOrc.test.${arch}" $) endforeach() endif() if(COMPILER_RT_INCLUDE_TESTS) add_subdirectory(unit) endif() add_subdirectory(tools)