brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 308849a Raw
154 lines · plain
1add_custom_target(OffloadUnitTests)2set_target_properties(OffloadUnitTests PROPERTIES FOLDER "Tests/UnitTests")3 4if (CMAKE_CROSSCOMPILING)5  # TODO: It is possible that LLVM_GTEST_RUN_UNDER defines an emulator or6  #       ssh remote command invocation; for this case provide an option to7  #       enable unittests.8  message(STATUS "Offload unittests disabled because we are cross-compiling")9  return ()10endif ()11 12if (NOT TARGET llvm_gtest)13  message(WARNING "Offload unittests disabled due to GTest being unavailable; "14                  "Try LLVM_INSTALL_GTEST=ON for the LLVM build")15  return ()16endif ()17 18set(OFFLOAD_UNITTESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR})19 20function(add_offload_test_device_code test_filename test_name)21  cmake_parse_arguments(22    "OFFLOAD_TESTS" "WITH_DEVICE_MATH_LIBS" "" "" ${ARGN})23 24  set(SRC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/${test_filename})25  set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)26 27  # Try to build with support for NVPTX devices.28  if("cuda" IN_LIST LIBOMPTARGET_PLUGINS_TO_BUILD)29    find_package(CUDAToolkit QUIET)30    if(CUDAToolkit_FOUND)31      get_filename_component(cuda_path "${CUDAToolkit_BIN_DIR}" DIRECTORY ABSOLUTE)32    endif()33    check_cxx_compiler_flag(34      "--target=nvptx64-nvidia-cuda -march=native --cuda-path=${cuda_path}" PLATFORM_HAS_NVPTX)35 36    if(OFFLOAD_TESTS_FORCE_NVPTX_ARCH)37      set(nvptx_arch "${OFFLOAD_TESTS_FORCE_NVPTX_ARCH}")38    elseif(PLATFORM_HAS_NVPTX)39      set(nvptx_arch "native")40    endif()41 42    if(nvptx_arch AND CUDAToolkit_FOUND)43      set(nvptx_compile_flags ${OFFLOAD_TESTS_UNPARSED_ARGUMENTS})44 45      if(OFFLOAD_TESTS_WITH_DEVICE_MATH_LIBS)46        file(GLOB libdevice_paths "${CUDAToolkit_LIBRARY_ROOT}/nvvm/libdevice/libdevice.*.bc")47        if(libdevice_paths)48          list(GET libdevice_paths 0 libdevice_path)49          list(APPEND nvptx_compile_flags "-Xclang" "-mlink-builtin-bitcode")50          list(APPEND nvptx_compile_flags "-Xclang" "${libdevice_path}")51          list(APPEND nvptx_compile_flags "-DCUDA_MATH_FOUND=1")52        endif()53      endif()54 55      set(output_file "${CMAKE_CURRENT_BINARY_DIR}/${test_name}.nvptx64.bin")56      add_custom_command(57        OUTPUT ${output_file}58        COMMAND ${CMAKE_CXX_COMPILER}59        -I${OFFLOAD_UNITTESTS_DIR}60        --target=nvptx64-nvidia-cuda -march=${nvptx_arch}61        -nogpulib --cuda-path=${cuda_path} -flto ${nvptx_compile_flags}62        ${SRC_PATH} -o ${output_file}63        DEPENDS ${SRC_PATH}64      )65      add_custom_target(${test_name}.nvptx64 DEPENDS ${output_file})66    endif()67  endif()68 69  # Try to build with support for AMDGPU devices.70  if("amdgpu" IN_LIST LIBOMPTARGET_PLUGINS_TO_BUILD)71    check_cxx_compiler_flag("--target=amdgcn-amd-amdhsa -mcpu=native" PLATFORM_HAS_AMDGPU)72 73    if(OFFLOAD_TESTS_FORCE_AMDGPU_ARCH)74      set(amdgpu_arch "${OFFLOAD_TESTS_FORCE_AMDGPU_ARCH}")75    elseif(PLATFORM_HAS_AMDGPU)76      set(amdgpu_arch "native")77    endif()78 79    if(amdgpu_arch)80      set(amdgpu_compile_flags ${OFFLOAD_TESTS_UNPARSED_ARGUMENTS})81 82      if(OFFLOAD_TESTS_WITH_DEVICE_MATH_LIBS)83        find_package(AMDDeviceLibs QUIET HINTS ${CMAKE_INSTALL_PREFIX} PATHS /opt/rocm)84        if(AMDDeviceLibs_FOUND)85          get_target_property(ocml_path ocml IMPORTED_LOCATION)86          list(APPEND amdgpu_compile_flags "-Xclang" "-mlink-builtin-bitcode")87          list(APPEND amdgpu_compile_flags "-Xclang" "${ocml_path}")88          list(APPEND amdgpu_compile_flags "-DHIP_MATH_FOUND=1")89        endif()90      endif()91 92      set(output_file "${CMAKE_CURRENT_BINARY_DIR}/${test_name}.amdgpu.bin")93      add_custom_command(94        OUTPUT ${output_file}95        COMMAND ${CMAKE_CXX_COMPILER}96        -I${OFFLOAD_UNITTESTS_DIR}97        --target=amdgcn-amd-amdhsa -mcpu=${amdgpu_arch}98        -nogpulib -flto ${amdgpu_compile_flags} ${SRC_PATH} -o ${output_file}99        DEPENDS ${SRC_PATH}100      )101      add_custom_target(${test_name}.amdgpu DEPENDS ${output_file})102    endif()103  endif()104 105  # Create a single dependency target for the device code.106  add_custom_target(${test_name}.bin)107  if(TARGET ${test_name}.amdgpu)108    add_dependencies(${test_name}.bin ${test_name}.amdgpu)109  endif()110  if(TARGET ${test_name}.nvptx64)111    add_dependencies(${test_name}.bin ${test_name}.nvptx64)112  endif()113endfunction()114 115function(add_offload_unittest test_dirname)116  set(target_name "${test_dirname}.unittests")117 118  list(TRANSFORM ARGN PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/" OUTPUT_VARIABLE files)119 120  add_unittest(OffloadUnitTests "${target_name}"121    ${CMAKE_CURRENT_SOURCE_DIR}/common/Environment.cpp122    ${files})123  add_dependencies(${target_name} ${PLUGINS_TEST_COMMON} offload_device_binaries)124  target_compile_definitions(${target_name} PRIVATE DEVICE_CODE_PATH="${OFFLOAD_TEST_DEVICE_CODE_PATH}")125  target_link_libraries(${target_name} PRIVATE ${PLUGINS_TEST_COMMON})126  target_include_directories(${target_name} PRIVATE ${PLUGINS_TEST_INCLUDE})127endfunction()128 129function(add_conformance_test test_name)130  set(target_name "${test_name}.conformance")131 132  list(TRANSFORM ARGN PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/" OUTPUT_VARIABLE files)133 134  add_executable(${target_name} ${files})135  add_dependencies(${target_name} conformance_device_binaries)136  target_compile_definitions(${target_name}137    PRIVATE DEVICE_BINARY_DIR="${OFFLOAD_CONFORMANCE_DEVICE_BINARY_DIR}")138  target_link_libraries(${target_name} PRIVATE ${PLUGINS_TEST_COMMON} libc)139  set_target_properties(${target_name} PROPERTIES EXCLUDE_FROM_ALL TRUE)140 141  add_custom_target(offload.conformance.${test_name}142    COMMAND $<TARGET_FILE:${target_name}>143    DEPENDS ${target_name})144  add_dependencies(offload.conformance offload.conformance.${test_name})145endfunction()146 147set(OFFLOAD_TESTS_FORCE_NVPTX_ARCH "" CACHE STRING148  "Force building of NVPTX device code for Offload unit tests with the given arch, e.g. sm_61")149set(OFFLOAD_TESTS_FORCE_AMDGPU_ARCH "" CACHE STRING150  "Force building of AMDGPU device code for Offload unit tests with the given arch, e.g. gfx1030")151 152add_subdirectory(OffloadAPI)153add_subdirectory(Conformance)154