@@ -112,8 +112,89 @@ else()
112112endif ()
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
117117set (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+
119200add_subdirectory (tensor )
0 commit comments