11add_custom_target (OffloadUnitTests)
22set_target_properties (OffloadUnitTests PROPERTIES FOLDER "Tests/UnitTests" )
33
4+ function (add_offload_test_device_code test_filename test_name)
5+ set (SRC_PATH ${CMAKE_CURRENT_SOURCE_DIR} /${test_filename} )
6+ set (CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
7+
8+ # Try to build with support for NVPTX devices.
9+ if ("cuda" IN_LIST LIBOMPTARGET_PLUGINS_TO_BUILD)
10+ find_package (CUDAToolkit QUIET )
11+ if (CUDAToolkit_FOUND)
12+ get_filename_component (cuda_path "${CUDAToolkit_BIN_DIR} " DIRECTORY ABSOLUTE )
13+ endif ()
14+ check_cxx_compiler_flag(
15+ "--target=nvptx64-nvidia-cuda -march=native --cuda-path=${cuda_path} " PLATFORM_HAS_NVPTX)
16+
17+ if (OFFLOAD_TESTS_FORCE_NVPTX_ARCH)
18+ set (nvptx_arch "${OFFLOAD_TESTS_FORCE_NVPTX_ARCH} " )
19+ elseif (PLATFORM_HAS_NVPTX)
20+ set (nvptx_arch "native" )
21+ endif ()
22+
23+ if (nvptx_arch AND CUDAToolkit_FOUND)
24+ set (output_file "${CMAKE_CURRENT_BINARY_DIR} /${test_name} .nvptx64.bin" )
25+ add_custom_command (
26+ OUTPUT ${output_file}
27+ COMMAND ${CMAKE_C_COMPILER}
28+ --target =nvptx64-nvidia-cuda -march=${nvptx_arch}
29+ -nogpulib --cuda-path =${CUDA_ROOT} -flto ${ARGN}
30+ -c ${SRC_PATH} -o ${output_file}
31+ DEPENDS ${SRC_PATH}
32+ )
33+ add_custom_target (${test_name} .nvptx64 DEPENDS ${output_file} )
34+ endif ()
35+ endif ()
36+
37+ # Try to build with support for AMDGPU devices.
38+ if ("amdgpu" IN_LIST LIBOMPTARGET_PLUGINS_TO_BUILD)
39+ check_cxx_compiler_flag("--target=amdgcn-amd-amdhsa -mcpu=native" PLATFORM_HAS_AMDGPU)
40+
41+ if (OFFLOAD_TESTS_FORCE_AMDGPU_ARCH)
42+ set (amdgpu_arch "${OFFLOAD_TESTS_FORCE_AMDGPU_ARCH} " )
43+ elseif (PLATFORM_HAS_AMDGPU)
44+ set (amdgpu_arch "native" )
45+ endif ()
46+
47+ if (amdgpu_arch)
48+ set (output_file "${CMAKE_CURRENT_BINARY_DIR} /${test_name} .amdgpu.bin" )
49+ add_custom_command (
50+ OUTPUT ${output_file}
51+ COMMAND ${CMAKE_C_COMPILER}
52+ --target =amdgcn-amd-amdhsa -mcpu=${amdgpu_arch}
53+ -nogpulib -flto ${ARGN} -c ${SRC_PATH} -o ${output_file}
54+ DEPENDS ${SRC_PATH}
55+ )
56+ add_custom_target (${test_name} .amdgpu DEPENDS ${output_file} )
57+ endif ()
58+ endif ()
59+
60+ # Create a single dependency target for the device code.
61+ add_custom_target (${test_name} .bin)
62+ if (TARGET ${test_name} .amdgpu)
63+ add_dependencies (${test_name} .bin ${test_name} .amdgpu)
64+ endif ()
65+ if (TARGET ${test_name} .nvptx64)
66+ add_dependencies (${test_name} .bin ${test_name} .nvptx64)
67+ endif ()
68+ endfunction ()
69+
470function (add_offload_unittest test_dirname)
571 set (target_name "${test_dirname} .unittests" )
672
@@ -9,10 +75,15 @@ function(add_offload_unittest test_dirname)
975 add_unittest(OffloadUnitTests "${target_name} "
1076 ${CMAKE_CURRENT_SOURCE_DIR} /common/Environment .cpp
1177 ${files} )
12- add_dependencies (${target_name} ${PLUGINS_TEST_COMMON} OffloadUnitTestsDeviceBins )
78+ add_dependencies (${target_name} ${PLUGINS_TEST_COMMON} offload_device_binaries )
1379 target_compile_definitions (${target_name} PRIVATE DEVICE_CODE_PATH="${OFFLOAD_TEST_DEVICE_CODE_PATH} " )
1480 target_link_libraries (${target_name} PRIVATE ${PLUGINS_TEST_COMMON} )
1581 target_include_directories (${target_name} PRIVATE ${PLUGINS_TEST_INCLUDE} )
1682endfunction ()
1783
84+ set (OFFLOAD_TESTS_FORCE_NVPTX_ARCH "" CACHE STRING
85+ "Force building of NVPTX device code for Offload unit tests with the given arch, e.g. sm_61" )
86+ set (OFFLOAD_TESTS_FORCE_AMDGPU_ARCH "" CACHE STRING
87+ "Force building of AMDGPU device code for Offload unit tests with the given arch, e.g. gfx1030" )
88+
1889add_subdirectory (OffloadAPI)
0 commit comments