1
1
add_custom_target (OffloadUnitTests )
2
2
set_target_properties (OffloadUnitTests PROPERTIES FOLDER "Tests/UnitTests" )
3
3
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 (PLATFORM_HAS_NVPTX )
18
+ set (nvptx_arch "native" )
19
+ elseif (OFFLOAD_TESTS_FORCE_NVIDIA_ARCH )
20
+ set (nvptx_arch "${OFFLOAD_TESTS_FORCE_NVIDIA_ARCH} " )
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 (PLATFORM_HAS_AMDGPU )
42
+ set (amdgpu_arch "native" )
43
+ elseif (OFFLOAD_TESTS_FORCE_AMDGPU_ARCH )
44
+ set (amdgpu_arch "${OFFLOAD_TESTS_FORCE_AMDGPU_ARCH} " )
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
+
4
70
function (add_offload_unittest test_dirname )
5
71
set (target_name "${test_dirname} .unittests" )
6
72
@@ -9,10 +75,15 @@ function(add_offload_unittest test_dirname)
9
75
add_unittest (OffloadUnitTests "${target_name} "
10
76
${CMAKE_CURRENT_SOURCE_DIR} /common/Environment.cpp
11
77
${files} )
12
- add_dependencies (${target_name} ${PLUGINS_TEST_COMMON} OffloadUnitTestsDeviceBins )
78
+ add_dependencies (${target_name} ${PLUGINS_TEST_COMMON} offload_device_binaries )
13
79
target_compile_definitions (${target_name} PRIVATE DEVICE_CODE_PATH= "${OFFLOAD_TEST_DEVICE_CODE_PATH} " )
14
80
target_link_libraries (${target_name} PRIVATE ${PLUGINS_TEST_COMMON} )
15
81
target_include_directories (${target_name} PRIVATE ${PLUGINS_TEST_INCLUDE} )
16
82
endfunction ()
17
83
84
+ set (OFFLOAD_TESTS_FORCE_NVIDIA_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
+
18
89
add_subdirectory (OffloadAPI )
0 commit comments