Skip to content

Commit 93013ad

Browse files
committed
Enable CMake options for building for AMD
Add DPCTL_TARGET_AMD cmake variable which is a string referring to the architecture to build for
1 parent f8cfaa7 commit 93013ad

File tree

6 files changed

+72
-30
lines changed

6 files changed

+72
-30
lines changed

CMakeLists.txt

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,65 @@ option(DPCTL_TARGET_CUDA
2929
"Build DPCTL to target CUDA devices"
3030
OFF
3131
)
32+
set(DPCTL_TARGET_AMD
33+
""
34+
CACHE STRING
35+
"Build DPCTL to target an AMD device architecture"
36+
)
3237

3338
find_package(IntelSYCL REQUIRED PATHS ${CMAKE_SOURCE_DIR}/cmake NO_DEFAULT_PATH)
3439

40+
set(_dpctl_sycl_target_compile_options)
41+
set(_dpctl_sycl_target_link_options)
42+
3543
set(_dpctl_sycl_targets)
44+
set(_dpctl_amd_targets)
3645
if ("x${DPCTL_SYCL_TARGETS}" STREQUAL "x")
37-
if(DPCTL_TARGET_CUDA)
46+
if (DPCTL_TARGET_CUDA)
3847
set(_dpctl_sycl_targets "nvptx64-nvidia-cuda,spir64-unknown-unknown")
3948
else()
40-
if(DEFINED ENV{DPCTL_TARGET_CUDA})
49+
if (DEFINED ENV{DPCTL_TARGET_CUDA})
4150
set(_dpctl_sycl_targets "nvptx64-nvidia-cuda,spir64-unknown-unknown")
4251
endif()
4352
endif()
53+
if (NOT "x${DPCTL_TARGET_AMD}" STREQUAL "x")
54+
if(_dpctl_sycl_targets)
55+
set(_dpctl_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown")
56+
set(_dpctl_amd_targets ${DPCTL_TARGET_AMD})
57+
else()
58+
set(_dpctl_sycl_targets "amdgcn-amd-amdhsa,${_dpctl_sycl_targets}")
59+
set(_dpctl_amd_targets ${DPCTL_TARGET_AMD})
60+
endif()
61+
else()
62+
if (DEFINED ENV{DPCTL_TARGET_AMD})
63+
if(_dpctl_sycl_targets)
64+
set(_dpctl_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown")
65+
set(_dpctl_amd_targets $ENV{DPCTL_TARGET_AMD})
66+
else()
67+
set(_dpctl_sycl_targets "amdgcn-amd-amdhsa,${_dpctl_sycl_targets}")
68+
set(_dpctl_amd_targets $ENV{DPCTL_TARGET_AMD})
69+
endif()
70+
endif()
71+
endif()
4472
else()
4573
set(_dpctl_sycl_targets ${DPCTL_SYCL_TARGETS})
74+
if (NOT "x${DPCTL_TARGET_AMD}" STREQUAL "x")
75+
set(_dpctl_amd_targets ${DPCTL_TARGET_AMD})
76+
else()
77+
if (DEFINED ENV{DPCTL_TARGET_AMD})
78+
set(_dpctl_amd_targets $ENV{DPCTL_TARGET_AMD})
79+
endif()
80+
endif()
4681
endif()
4782

48-
if(_dpctl_sycl_targets)
83+
if (_dpctl_sycl_targets)
4984
message(STATUS "Compiling for -fsycl-targets=${_dpctl_sycl_targets}")
85+
list(APPEND _dpctl_sycl_target_compile_options -fsycl-targets=${_dpctl_sycl_targets})
86+
list(APPEND _dpctl_sycl_target_link_options -fsycl-targets=${_dpctl_sycl_targets})
87+
if(_dpctl_amd_targets)
88+
list(APPEND _dpctl_sycl_target_compile_options -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=${_dpctl_amd_targets})
89+
list(APPEND _dpctl_sycl_target_link_options -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=${_dpctl_amd_targets})
90+
endif()
5091
endif()
5192

5293
add_subdirectory(libsyclinterface)

dpctl/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,12 @@ function(build_dpctl_ext _trgt _src _dest)
116116
target_compile_options(
117117
${_trgt}
118118
PRIVATE
119-
-fsycl-targets=${_dpctl_sycl_targets}
119+
${_dpctl_sycl_target_compile_options}
120120
)
121121
target_link_options(
122122
${_trgt}
123123
PRIVATE
124-
-fsycl-targets=${_dpctl_sycl_targets}
124+
${_dpctl_sycl_target_link_options}
125125
)
126126
endif()
127127
endif()

dpctl/tensor/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,12 +271,12 @@ foreach(python_module_name ${_py_trgts})
271271
target_compile_options(
272272
${python_module_name}
273273
PRIVATE
274-
-fsycl-targets=${_dpctl_sycl_targets}
274+
${_dpctl_sycl_target_compile_options}
275275
)
276276
target_link_options(
277277
${python_module_name}
278278
PRIVATE
279-
-fsycl-targets=${_dpctl_sycl_targets}
279+
${_dpctl_sycl_target_link_options}
280280
)
281281
endif()
282282
# TODO: update source so they refernece individual libraries instead of

dpctl/utils/CMakeLists.txt

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,21 @@ if(DPCTL_GENERATE_COVERAGE)
2121
PRIVATE -fprofile-instr-generate -fcoverage-mapping
2222
)
2323
endif()
24-
if(_dpctl_sycl_targets)
25-
# make fat binary
26-
target_compile_options(
27-
${python_module_name}
28-
PRIVATE
29-
-fsycl-targets=${_dpctl_sycl_targets}
30-
)
31-
target_link_options(
32-
${python_module_name}
33-
PRIVATE
34-
-fsycl-targets=${_dpctl_sycl_targets}
35-
)
24+
if (BUILD_DPCTL_EXT_SYCL)
25+
add_sycl_to_target(TARGET ${_trgt} SOURCES ${_generated_src})
26+
if(_dpctl_sycl_targets)
27+
# make fat binary
28+
target_compile_options(
29+
${python_module_name}
30+
PRIVATE
31+
${_dpctl_sycl_target_compile_options}
32+
)
33+
target_link_options(
34+
${python_module_name}
35+
PRIVATE
36+
${_dpctl_sycl_target_link_options}
37+
)
38+
endif()
3639
endif()
3740
target_link_libraries(${python_module_name} PRIVATE DpctlCAPI)
3841
install(TARGETS ${python_module_name} DESTINATION "dpctl/utils")
@@ -60,12 +63,12 @@ if(_dpctl_sycl_targets)
6063
target_compile_options(
6164
${python_module_name}
6265
PRIVATE
63-
-fsycl-targets=${_dpctl_sycl_targets}
66+
${_dpctl_sycl_target_compile_options}
6467
)
6568
target_link_options(
6669
${python_module_name}
6770
PRIVATE
68-
-fsycl-targets=${_dpctl_sycl_targets}
71+
${_dpctl_sycl_target_link_options}
6972
)
7073
endif()
7174
target_link_libraries(${python_module_name} PRIVATE DpctlCAPI)

libsyclinterface/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,13 +238,13 @@ if(_dpctl_sycl_targets)
238238
target_compile_options(
239239
DPCTLSyclInterface
240240
PRIVATE
241-
-fsycl-targets=${_dpctl_sycl_targets}
241+
${_dpctl_sycl_target_compile_options}
242242
)
243243
target_link_options(
244244
DPCTLSyclInterface
245245
PRIVATE
246-
-fsycl-targets=${_dpctl_sycl_targets}
247-
)
246+
${_dpctl_sycl_target_link_options}
247+
)
248248
endif()
249249

250250
if(DPCTL_GENERATE_COVERAGE)

libsyclinterface/tests/CMakeLists.txt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,15 @@ add_sycl_to_target(
5555
)
5656

5757
if(_dpctl_sycl_targets)
58-
# make fat binary
5958
target_compile_options(
6059
dpctl_c_api_tests
6160
PRIVATE
62-
-fsycl-targets=${_dpctl_sycl_targets}
61+
${_dpctl_sycl_target_compile_options}
6362
)
6463
target_link_options(
6564
dpctl_c_api_tests
6665
PRIVATE
67-
-fsycl-targets=${_dpctl_sycl_targets}
66+
${_dpctl_sycl_target_link_options}
6867
)
6968
endif()
7069

@@ -85,16 +84,15 @@ target_include_directories(dpctl_c_api_tests
8584
)
8685

8786
if(_dpctl_sycl_targets)
88-
# make fat binary
8987
target_compile_options(
9088
dpctl_c_api_tests
9189
PRIVATE
92-
-fsycl-targets=${_dpctl_sycl_targets}
90+
${_dpctl_sycl_target_compile_options}
9391
)
9492
target_link_options(
9593
dpctl_c_api_tests
9694
PRIVATE
97-
-fsycl-targets=${_dpctl_sycl_targets}
95+
${_dpctl_sycl_target_link_options}
9896
)
9997
endif()
10098

0 commit comments

Comments
 (0)