@@ -86,11 +86,96 @@ function(build_dpnp_cython_ext _trgt _src _dest)
8686 install (TARGETS ${_trgt} LIBRARY DESTINATION ${_dest} )
8787endfunction ()
8888
89+ function (build_dpnp_tensor_ext _trgt _src _dest )
90+ set (options SYCL)
91+ cmake_parse_arguments (BUILD_DPNP_TENSOR "${options} " "RELATIVE_PATH" "" ${ARGN} )
92+ add_cython_target (${_trgt} ${_src} CXX OUTPUT_VAR _generated_src )
93+ set (_cythonize_trgt "${_trgt} _cythonize_pyx" )
94+ python_add_library (${_trgt} MODULE WITH_SOABI ${_generated_src} )
95+ if (BUILD_DPNP_SYCL)
96+ add_sycl_to_target (TARGET ${_trgt} SOURCES ${_generated_src} )
97+ target_compile_options (${_trgt} PRIVATE -fno-sycl-id-queries-fit-in-int )
98+ target_link_options (${_trgt} PRIVATE -fsycl-device-code-split=per_kernel )
99+ if (DPNP_TENSOR_OFFLOAD_COMPRESS)
100+ target_link_options (${_trgt} PRIVATE --offload-compress )
101+ endif ()
102+ if (_dpnp_sycl_targets)
103+ # make fat binary
104+ target_compile_options (
105+ ${_trgt}
106+ PRIVATE ${_dpnp_sycl_target_compile_options}
107+ )
108+ target_link_options (${_trgt} PRIVATE ${_dpnp_sycl_target_link_options} )
109+ endif ()
110+ endif ()
111+ target_link_libraries (${_trgt} PRIVATE Python::NumPy )
112+ if (DPNP_GENERATE_COVERAGE)
113+ target_compile_definitions (${_trgt} PRIVATE CYTHON_TRACE=1 CYTHON_TRACE_NOGIL=1 )
114+ if (BUILD_DPNP_TENSOR_SYCL)
115+ target_compile_options (${_trgt} PRIVATE -fno-sycl-use-footer )
116+ endif ()
117+ endif ()
118+ # Dpctl
119+ target_include_directories (${_trgt} PRIVATE ${Dpctl_INCLUDE_DIR} )
120+ target_link_directories (${_trgt} PRIVATE ${Dpctl_INCLUDE_DIR} /.. )
121+ target_link_libraries (${_trgt} PRIVATE DPCTLSyclInterface )
122+ set (_linker_options "LINKER:${DPNP_LDFLAGS} " )
123+ target_link_options (${_trgt} PRIVATE ${_linker_options} )
124+ get_filename_component (_name_wle ${_generated_src} NAME_WLE )
125+ get_filename_component (_generated_src_dir ${_generated_src} DIRECTORY )
126+ set (_generated_public_h "${_generated_src_dir} /${_name_wle} .h" )
127+ set (_generated_api_h "${_generated_src_dir} /${_name_wle} _api.h" )
128+
129+ # TODO: create separate folder inside build folder that contains only
130+ # headers related to this target and appropriate folder structure to
131+ # eliminate shadow dependencies
132+ # Go up two levels to build root for "dpnp/tensor/_usmarray.h" resolution
133+ get_filename_component (_parent_dir ${_generated_src_dir} DIRECTORY )
134+ get_filename_component (_build_root ${_parent_dir} DIRECTORY )
135+ # TODO: do not set directory if we did not generate header
136+ target_include_directories (${_trgt} INTERFACE ${_build_root} )
137+ set (_rpath_value "$ORIGIN" )
138+ if (BUILD_DPNP_TENSOR_RELATIVE_PATH)
139+ set (_rpath_value "${_rpath_value} /${BUILD_DPNP_TENSOR_RELATIVE_PATH} " )
140+ endif ()
141+ if (DPNP_WITH_REDIST)
142+ set (_rpath_value "${_rpath_value} :${_rpath_value} /../../.." )
143+ endif ()
144+ set_target_properties (${_trgt} PROPERTIES INSTALL_RPATH ${_rpath_value} )
145+
146+ install (TARGETS ${_trgt} LIBRARY DESTINATION ${_dest} )
147+ install (
148+ FILES ${_generated_api_h}
149+ DESTINATION ${CMAKE_INSTALL_PREFIX} /dpnp/include/${_dest}
150+ OPTIONAL
151+ )
152+ install (
153+ FILES ${_generated_public_h}
154+ DESTINATION ${CMAKE_INSTALL_PREFIX} /dpnp/include/${_dest}
155+ OPTIONAL
156+ )
157+ if (DPNP_GENERATE_COVERAGE)
158+ get_filename_component (_original_src_dir ${_src} DIRECTORY )
159+ file (RELATIVE_PATH _rel_dir ${CMAKE_SOURCE_DIR} ${_original_src_dir} )
160+ install (FILES ${_generated_src} DESTINATION ${CMAKE_INSTALL_PREFIX} /${_rel_dir} )
161+ endif ()
162+
163+ # Create target with headers only, because python is managing all the
164+ # library imports at runtime
165+ set (_trgt_headers ${_trgt} _headers)
166+ add_library (${_trgt_headers} INTERFACE )
167+ add_dependencies (${_trgt_headers} ${_trgt} )
168+ get_target_property (_trgt_headers_dir ${_trgt} INTERFACE_INCLUDE_DIRECTORIES )
169+ target_include_directories (${_trgt_headers} INTERFACE ${_trgt_headers_dir} )
170+ endfunction ()
171+
89172function (build_dpnp_cython_ext_with_backend _trgt _src _dest )
90173 build_dpnp_cython_ext (${_trgt} ${_src} ${_dest} )
91174 target_link_libraries (${_trgt} PRIVATE dpnp_backend_library )
92175endfunction ()
93176
177+ add_subdirectory (tensor )
178+
94179add_subdirectory (backend )
95180add_subdirectory (backend/extensions/blas )
96181add_subdirectory (backend/extensions/fft )
0 commit comments