Skip to content

Commit 39c0571

Browse files
Update CMakes files to build usm_ndarray
1 parent e114808 commit 39c0571

2 files changed

Lines changed: 90 additions & 1 deletion

File tree

dpctl_ext/CMakeLists.txt

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,89 @@ else()
112112
endif()
113113

114114
# at build time create include/ directory and copy header files over
115-
# set(DPCTL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
115+
set(DPCTL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
116116

117117
set(CMAKE_INSTALL_RPATH "$ORIGIN")
118118

119+
function(build_dpctl_ext _trgt _src _dest)
120+
set(options SYCL)
121+
cmake_parse_arguments(BUILD_DPCTL_EXT "${options}" "RELATIVE_PATH" "" ${ARGN})
122+
add_cython_target(${_trgt} ${_src} CXX OUTPUT_VAR _generated_src)
123+
set(_cythonize_trgt "${_trgt}_cythonize_pyx")
124+
python_add_library(${_trgt} MODULE WITH_SOABI ${_generated_src})
125+
if(BUILD_DPCTL_EXT_SYCL)
126+
add_sycl_to_target(TARGET ${_trgt} SOURCES ${_generated_src})
127+
target_compile_options(${_trgt} PRIVATE -fno-sycl-id-queries-fit-in-int)
128+
target_link_options(${_trgt} PRIVATE -fsycl-device-code-split=per_kernel)
129+
if(DPCTL_OFFLOAD_COMPRESS)
130+
target_link_options(${_trgt} PRIVATE --offload-compress)
131+
endif()
132+
if(_dpctl_sycl_targets)
133+
# make fat binary
134+
target_compile_options(
135+
${_trgt}
136+
PRIVATE ${_dpctl_sycl_target_compile_options}
137+
)
138+
target_link_options(${_trgt} PRIVATE ${_dpctl_sycl_target_link_options})
139+
endif()
140+
endif()
141+
target_link_libraries(${_trgt} PRIVATE Python::NumPy)
142+
if(DPCTL_GENERATE_COVERAGE)
143+
target_compile_definitions(${_trgt} PRIVATE CYTHON_TRACE=1 CYTHON_TRACE_NOGIL=1)
144+
if(BUILD_DPCTL_EXT_SYCL)
145+
target_compile_options(${_trgt} PRIVATE -fno-sycl-use-footer)
146+
endif()
147+
endif()
148+
# Dpctl
149+
target_include_directories(${_trgt} PRIVATE ${Dpctl_INCLUDE_DIR})
150+
target_link_directories(${_trgt} PRIVATE ${Dpctl_INCLUDE_DIR}/..)
151+
target_link_libraries(${_trgt} PRIVATE DPCTLSyclInterface)
152+
set(_linker_options "LINKER:${DPCTL_LDFLAGS}")
153+
target_link_options(${_trgt} PRIVATE ${_linker_options})
154+
get_filename_component(_name_wle ${_generated_src} NAME_WLE)
155+
get_filename_component(_generated_src_dir ${_generated_src} DIRECTORY)
156+
set(_generated_public_h "${_generated_src_dir}/${_name_wle}.h")
157+
set(_generated_api_h "${_generated_src_dir}/${_name_wle}_api.h")
158+
159+
# TODO: create separate folder inside build folder that contains only
160+
# headers related to this target and appropriate folder structure to
161+
# eliminate shadow dependencies
162+
get_filename_component(_generated_src_dir_dir ${_generated_src_dir} DIRECTORY)
163+
# TODO: do not set directory if we did not generate header
164+
target_include_directories(${_trgt} INTERFACE ${_generated_src_dir_dir})
165+
set(_rpath_value "$ORIGIN")
166+
if(BUILD_DPCTL_EXT_RELATIVE_PATH)
167+
set(_rpath_value "${_rpath_value}/${BUILD_DPCTL_EXT_RELATIVE_PATH}")
168+
endif()
169+
if(DPCTL_WITH_REDIST)
170+
set(_rpath_value "${_rpath_value}:${_rpath_value}/../../..")
171+
endif()
172+
set_target_properties(${_trgt} PROPERTIES INSTALL_RPATH ${_rpath_value})
173+
174+
install(TARGETS ${_trgt} LIBRARY DESTINATION ${_dest})
175+
install(
176+
FILES ${_generated_api_h}
177+
DESTINATION ${CMAKE_INSTALL_PREFIX}/dpctl_ext/include/${_dest}
178+
OPTIONAL
179+
)
180+
install(
181+
FILES ${_generated_public_h}
182+
DESTINATION ${CMAKE_INSTALL_PREFIX}/dpctl_ext/include/${_dest}
183+
OPTIONAL
184+
)
185+
if(DPCTL_GENERATE_COVERAGE)
186+
get_filename_component(_original_src_dir ${_src} DIRECTORY)
187+
file(RELATIVE_PATH _rel_dir ${CMAKE_SOURCE_DIR} ${_original_src_dir})
188+
install(FILES ${_generated_src} DESTINATION ${CMAKE_INSTALL_PREFIX}/${_rel_dir})
189+
endif()
190+
191+
# Create target with headers only, because python is managing all the
192+
# library imports at runtime
193+
set(_trgt_headers ${_trgt}_headers)
194+
add_library(${_trgt_headers} INTERFACE)
195+
add_dependencies(${_trgt_headers} ${_trgt})
196+
get_target_property(_trgt_headers_dir ${_trgt} INTERFACE_INCLUDE_DIRECTORIES)
197+
target_include_directories(${_trgt_headers} INTERFACE ${_trgt_headers_dir})
198+
endfunction()
199+
119200
add_subdirectory(tensor)

dpctl_ext/tensor/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929

3030
find_package(Python COMPONENTS Development.Module)
3131

32+
file(GLOB _cython_sources *.pyx)
33+
foreach(_cy_file ${_cython_sources})
34+
get_filename_component(_trgt ${_cy_file} NAME_WLE)
35+
build_dpctl_ext(${_trgt} ${_cy_file} "dpctl_ext/tensor" RELATIVE_PATH "..")
36+
target_include_directories(${_trgt} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
37+
# target_link_libraries(DpctlCAPI INTERFACE ${_trgt}_headers)
38+
endforeach()
39+
3240
if(WIN32)
3341
if(${CMAKE_VERSION} VERSION_LESS "3.27")
3442
# this is a work-around for target_link_options inserting option after -link option, cause

0 commit comments

Comments
 (0)