| include(CompilerRTCompile) |
| |
| include_directories(..) |
| |
| add_custom_target(OrcRTUnitTests) |
| set_target_properties(OrcRTUnitTests PROPERTIES FOLDER "OrcRT unittests") |
| |
| set(ORC_UNITTEST_CFLAGS |
| ${ORC_CFLAGS} |
| ${COMPILER_RT_UNITTEST_CFLAGS} |
| ${COMPILER_RT_GTEST_CFLAGS} |
| -I${COMPILER_RT_SOURCE_DIR}/lib/orc |
| ) |
| |
| # We add the include directories one at a time in our CFLAGS. |
| foreach (DIR ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR}) |
| list(APPEND ORC_UNITTEST_CFLAGS -I${DIR}) |
| endforeach() |
| |
| 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) |
| set(tgt_name "RTOrc.test.osx") |
| 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} |
| ) |
| |
| 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() |
| |
| foreach(lib ${SANITIZER_TEST_CXX_LIBRARIES}) |
| list(APPEND ORC_UNITTEST_LINK_FLAGS -l${lib}) |
| endforeach() |
| |
| set(ORC_DEPS gtest orc) |
| # ORC uses C++ standard library headers. |
| if (TARGET cxx-headers OR HAVE_LIBCXX) |
| set(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) |
| 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} |
| DEPS ${ORC_DEPS} |
| CFLAGS ${ORC_UNITTEST_CFLAGS} |
| LINK_FLAGS ${ORC_UNITTEST_LINK_FLAGS}) |
| endforeach() |
| endif() |
| endmacro() |
| |
| set(UNITTEST_SOURCES |
| adt_test.cpp |
| c_api_test.cpp |
| endian_test.cpp |
| error_test.cpp |
| executor_address_test.cpp |
| extensible_rtti_test.cpp |
| orc_unit_test_main.cpp |
| stl_extras_test.cpp |
| wrapper_function_utils_test.cpp |
| simple_packed_serialization_test.cpp |
| ) |
| |
| if (COMPILER_RT_CAN_EXECUTE_TESTS) |
| |
| if (APPLE) |
| add_orc_lib("RTOrc.test.osx" |
| $<TARGET_OBJECTS:RTOrc.osx>) |
| else() |
| foreach(arch ${ORC_SUPPORTED_ARCH}) |
| add_orc_lib("RTOrc.test.${arch}" |
| $<TARGET_OBJECTS:RTOrc.${arch}>) |
| endforeach() |
| endif() |
| |
| add_orc_unittest(OrcUnitTest SOURCES ${UNITTEST_SOURCES}) |
| |
| endif() |