Skip to content

Commit 5ff2c99

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 08b3517 commit 5ff2c99

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
@@ -272,12 +272,12 @@ foreach(python_module_name ${_py_trgts})
272272
target_compile_options(
273273
${python_module_name}
274274
PRIVATE
275-
-fsycl-targets=${_dpctl_sycl_targets}
275+
${_dpctl_sycl_target_compile_options}
276276
)
277277
target_link_options(
278278
${python_module_name}
279279
PRIVATE
280-
-fsycl-targets=${_dpctl_sycl_targets}
280+
${_dpctl_sycl_target_link_options}
281281
)
282282
endif()
283283
# 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
@@ -244,13 +244,13 @@ if(_dpctl_sycl_targets)
244244
target_compile_options(
245245
DPCTLSyclInterface
246246
PRIVATE
247-
-fsycl-targets=${_dpctl_sycl_targets}
247+
${_dpctl_sycl_target_compile_options}
248248
)
249249
target_link_options(
250250
DPCTLSyclInterface
251251
PRIVATE
252-
-fsycl-targets=${_dpctl_sycl_targets}
253-
)
252+
${_dpctl_sycl_target_link_options}
253+
)
254254
endif()
255255

256256
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)