Skip to content

Commit ab7cf09

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 ea6ae0b commit ab7cf09

File tree

6 files changed

+57
-18
lines changed

6 files changed

+57
-18
lines changed

CMakeLists.txt

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,66 @@ 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
option(DPCTL_WITH_REDIST "Build DPCTL assuming DPC++ redistributable is installed into Python prefix" OFF)
3338

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

41+
set(_dpctl_sycl_target_compile_options)
42+
set(_dpctl_sycl_target_link_options)
43+
3644
set(_dpctl_sycl_targets)
45+
set(_dpctl_amd_targets)
3746
if ("x${DPCTL_SYCL_TARGETS}" STREQUAL "x")
38-
if(DPCTL_TARGET_CUDA)
47+
if (DPCTL_TARGET_CUDA)
3948
set(_dpctl_sycl_targets "nvptx64-nvidia-cuda,spir64-unknown-unknown")
4049
else()
41-
if(DEFINED ENV{DPCTL_TARGET_CUDA})
50+
if (DEFINED ENV{DPCTL_TARGET_CUDA})
4251
set(_dpctl_sycl_targets "nvptx64-nvidia-cuda,spir64-unknown-unknown")
4352
endif()
4453
endif()
54+
if (NOT "x${DPCTL_TARGET_AMD}" STREQUAL "x")
55+
if(_dpctl_sycl_targets)
56+
set(_dpctl_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown")
57+
set(_dpctl_amd_targets ${DPCTL_TARGET_AMD})
58+
else()
59+
set(_dpctl_sycl_targets "amdgcn-amd-amdhsa,${_dpctl_sycl_targets}")
60+
set(_dpctl_amd_targets ${DPCTL_TARGET_AMD})
61+
endif()
62+
else()
63+
if (DEFINED ENV{DPCTL_TARGET_AMD})
64+
if(_dpctl_sycl_targets)
65+
set(_dpctl_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown")
66+
set(_dpctl_amd_targets $ENV{DPCTL_TARGET_AMD})
67+
else()
68+
set(_dpctl_sycl_targets "amdgcn-amd-amdhsa,${_dpctl_sycl_targets}")
69+
set(_dpctl_amd_targets $ENV{DPCTL_TARGET_AMD})
70+
endif()
71+
endif()
72+
endif()
4573
else()
4674
set(_dpctl_sycl_targets ${DPCTL_SYCL_TARGETS})
75+
if (NOT "x${DPCTL_TARGET_AMD}" STREQUAL "x")
76+
set(_dpctl_amd_targets ${DPCTL_TARGET_AMD})
77+
else()
78+
if (DEFINED ENV{DPCTL_TARGET_AMD})
79+
set(_dpctl_amd_targets $ENV{DPCTL_TARGET_AMD})
80+
endif()
81+
endif()
4782
endif()
4883

49-
if(_dpctl_sycl_targets)
84+
if (_dpctl_sycl_targets)
5085
message(STATUS "Compiling for -fsycl-targets=${_dpctl_sycl_targets}")
86+
list(APPEND _dpctl_sycl_target_compile_options -fsycl-targets=${_dpctl_sycl_targets})
87+
list(APPEND _dpctl_sycl_target_link_options -fsycl-targets=${_dpctl_sycl_targets})
88+
if(_dpctl_amd_targets)
89+
list(APPEND _dpctl_sycl_target_compile_options -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=${_dpctl_amd_targets})
90+
list(APPEND _dpctl_sycl_target_link_options -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=${_dpctl_amd_targets})
91+
endif()
5192
endif()
5293

5394
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
@@ -300,12 +300,12 @@ foreach(python_module_name ${_py_trgts})
300300
target_compile_options(
301301
${python_module_name}
302302
PRIVATE
303-
-fsycl-targets=${_dpctl_sycl_targets}
303+
${_dpctl_sycl_target_compile_options}
304304
)
305305
target_link_options(
306306
${python_module_name}
307307
PRIVATE
308-
-fsycl-targets=${_dpctl_sycl_targets}
308+
${_dpctl_sycl_target_link_options}
309309
)
310310
endif()
311311
# TODO: update source so they refernece individual libraries instead of

dpctl/utils/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ foreach(python_module_name ${_pybind11_targets})
5050
target_compile_options(
5151
${python_module_name}
5252
PRIVATE
53-
-fsycl-targets=${_dpctl_sycl_targets}
53+
${_dpctl_sycl_target_compile_options}
5454
)
5555
target_link_options(
5656
${python_module_name}
5757
PRIVATE
58-
-fsycl-targets=${_dpctl_sycl_targets}
58+
${_dpctl_sycl_target_link_options}
5959
)
6060
endif()
6161
# TODO: update source so they refernece individual libraries instead of

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)