#===-- unittests/CMakeLists.txt --------------------------------------------===# # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # #===------------------------------------------------------------------------===# # LLVM uses a modified version of GTest that uses LLVMSupport for console # output. Therefore it also needs to include files from LLVM. Unfortunately, # LLVM/GTest doesn't add the include search path itself. Limiting the scope # using target_include_directories does not work because with # LLVM_INSTALL_GTEST=ON, as llvm_gtest is an IMPORT library. include_directories("${LLVM_INCLUDE_DIR}" "${LLVM_MAIN_INCLUDE_DIR}") # Add GTest if not already present. # Using a function so LLVM_SUBPROJECT_TITLE does not propagate. function (build_gtest) set(LLVM_SUBPROJECT_TITLE "Third-Party/Google Test") add_subdirectory("${LLVM_THIRD_PARTY_DIR}/unittest" "${CMAKE_CURRENT_BINARY_DIR}/third-party/unittest") endfunction () if (NOT TARGET llvm_gtest) build_gtest() endif () if (CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG) add_compile_options("-Wno-suggest-override") endif() # Target that depends on all unittests add_custom_target(FlangRTUnitTests) set_target_properties(FlangRTUnitTests PROPERTIES FOLDER "Flang-RT/Meta") function(add_flangrt_unittest_offload_properties target) # Set CUDA_RESOLVE_DEVICE_SYMBOLS. if (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA") set_target_properties(${target} PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON ) endif() # Enable OpenMP offload during linking. We may need to replace # LINK_OPTIONS with COMPILE_OPTIONS when there are OpenMP offload # unittests. # # FIXME: replace 'native' in --offload-arch option with the list # of targets that Fortran Runtime was built for. if (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP") set_target_properties(${target} PROPERTIES LINK_OPTIONS "-fopenmp;--offload-arch=native" ) endif() endfunction() function(add_flangrt_unittest test_dirname) cmake_parse_arguments(ARG "" "" "LINK_LIBS" ${ARGN}) add_unittest(FlangRTUnitTests ${test_dirname} ${ARG_UNPARSED_ARGUMENTS}) target_link_libraries(${test_dirname} PRIVATE ${ARG_LINK_LIBS}) add_flangrt_unittest_offload_properties(${test_dirname}) # Required because LLVMSupport is compiled with this option. # FIXME: According to CMake documentation, this is the default. Why is it # needed? LLVM's add_unittest doesn't set it either. set_target_properties(${test_dirname} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL" ) endfunction() function(add_flangrt_nongtest_unittest test_name) cmake_parse_arguments(ARG "SLOW_TEST" "" "LINK_LIBS" ${ARGN}) if(ARG_SLOW_TEST) set(suffix .slow) else() set(suffix .test) endif() add_executable(${test_name}${suffix} EXCLUDE_FROM_ALL ${ARG_UNPARSED_ARGUMENTS}) set_target_properties(${test_name}${suffix} PROPERTIES FOLDER "Flang-RT/Tests/Unit") target_link_libraries(${test_name}${suffix} PRIVATE NonGTestTesting ${ARG_LINK_LIBS}) if(NOT ARG_SLOW_TEST) add_dependencies(FlangRTUnitTests ${test_name}${suffix}) endif() add_flangrt_unittest_offload_properties(${test_name}${suffix}) endfunction() add_subdirectory(Evaluate) add_subdirectory(Runtime)