@@ -74,64 +74,6 @@ endif()
74
74
75
75
# at build time create include/ directory and copy header files over
76
76
set (DPCTL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /include )
77
- add_custom_target (_build_time_create_dpctl_include ALL
78
- COMMAND ${CMAKE_COMMAND} -E make_directory ${DPCTL_INCLUDE_DIR}
79
- COMMAND ${CMAKE_COMMAND} -E make_directory ${DPCTL_INCLUDE_DIR} /syclinterface
80
- COMMAND ${CMAKE_COMMAND} -E make_directory ${DPCTL_INCLUDE_DIR} /syclinterface/Support
81
- COMMAND ${CMAKE_COMMAND} -E make_directory ${DPCTL_INCLUDE_DIR} /syclinterface/Config
82
- DEPENDS DPCTLSyclInterface
83
- )
84
-
85
- set (_copied_header_files )
86
- file (GLOB _syclinterface_h ${CMAKE_SOURCE_DIR} /libsyclinterface/include/*.h* )
87
- foreach (hf ${_syclinterface_h} )
88
- get_filename_component (_header_name ${hf} NAME )
89
- set (_target_header_file ${DPCTL_INCLUDE_DIR} /syclinterface/${_header_name} )
90
- list (APPEND _copied_header_files ${_target_header_file} )
91
- add_custom_command (OUTPUT ${_target_header_file}
92
- COMMAND ${CMAKE_COMMAND} -E copy_if_different ${hf} ${_target_header_file}
93
- DEPENDS ${hf} _build_time_create_dpctl_include
94
- VERBATIM
95
- )
96
- endforeach ()
97
-
98
- file (GLOB _syclinterface_Support_h ${CMAKE_SOURCE_DIR} /libsyclinterface/include/Support/*.h )
99
- foreach (hf ${_syclinterface_Support_h} )
100
- get_filename_component (_header_name ${hf} NAME )
101
- set (_target_header_file ${DPCTL_INCLUDE_DIR} /syclinterface/Support/${_header_name} )
102
- list (APPEND _copied_header_files ${_target_header_file} )
103
- add_custom_command (OUTPUT ${_target_header_file}
104
- COMMAND ${CMAKE_COMMAND} -E copy_if_different ${hf} ${_target_header_file}
105
- DEPENDS ${hf} _build_time_create_dpctl_include
106
- )
107
- endforeach ()
108
-
109
- file (GLOB _syclinterface_Config_h ${CMAKE_SOURCE_DIR} /libsyclinterface/include/Config/*.h )
110
- foreach (hf ${_syclinterface_Config_h} )
111
- get_filename_component (_header_name ${hf} NAME )
112
- set (_target_header_file ${DPCTL_INCLUDE_DIR} /syclinterface/Config/${_header_name} )
113
- list (APPEND _copied_header_files ${_target_header_file} )
114
- add_custom_command (OUTPUT ${_target_header_file}
115
- COMMAND ${CMAKE_COMMAND} -E copy_if_different ${hf} ${_target_header_file}
116
- DEPENDS ${hf} _build_time_create_dpctl_include
117
- )
118
- endforeach ()
119
-
120
- file (GLOB _apis_h ${CMAKE_CURRENT_SOURCE_DIR} /apis/include/* )
121
- foreach (hf ${_apis_h} )
122
- get_filename_component (_header_name ${hf} NAME )
123
- set (_target_header_file ${DPCTL_INCLUDE_DIR} /${_header_name} )
124
- list (APPEND _copied_header_files ${_target_header_file} )
125
- add_custom_command (OUTPUT ${_target_header_file}
126
- COMMAND ${CMAKE_COMMAND} -E copy_if_different ${hf} ${_target_header_file}
127
- DEPENDS ${hf} _build_time_create_dpctl_include
128
- )
129
- endforeach ()
130
-
131
- add_custom_target (
132
- _build_time_create_dpctl_include_copy ALL
133
- DEPENDS ${_copied_header_files}
134
- )
135
77
136
78
set (CMAKE_INSTALL_RPATH "$ORIGIN" )
137
79
@@ -140,7 +82,6 @@ function(build_dpctl_ext _trgt _src _dest)
140
82
cmake_parse_arguments (BUILD_DPCTL_EXT "${options} " "" "" ${ARGN} )
141
83
add_cython_target (${_trgt} ${_src} CXX OUTPUT_VAR _generated_src )
142
84
set (_cythonize_trgt "${_trgt} _cythonize_pyx" )
143
- add_custom_target (${_cythonize_trgt} DEPENDS ${_src} )
144
85
Python_add_library (${_trgt} MODULE WITH_SOABI ${_generated_src} )
145
86
if (BUILD_DPCTL_EXT_SYCL )
146
87
add_sycl_to_target (TARGET ${_trgt} SOURCES ${_generated_src} )
@@ -158,8 +99,7 @@ function(build_dpctl_ext _trgt _src _dest)
158
99
)
159
100
endif ()
160
101
endif ()
161
- target_include_directories (${_trgt} PRIVATE ${NumPy_INCLUDE_DIR} ${DPCTL_INCLUDE_DIR} )
162
- add_dependencies (${_trgt} _build_time_create_dpctl_include_copy ${_cythonize_trgt} )
102
+ target_link_libraries (${_trgt} PRIVATE Python::NumPy )
163
103
if (DPCTL_GENERATE_COVERAGE )
164
104
target_compile_definitions (${_trgt} PRIVATE CYTHON_TRACE=1 CYTHON_TRACE_NOGIL=1 )
165
105
# target_compile_options(${_trgt} PRIVATE -fno-sycl-use-footer)
@@ -171,49 +111,48 @@ function(build_dpctl_ext _trgt _src _dest)
171
111
get_filename_component (_generated_src_dir ${_generated_src} DIRECTORY )
172
112
set (_generated_public_h "${_generated_src_dir} /${_name_wle} .h" )
173
113
set (_generated_api_h "${_generated_src_dir} /${_name_wle} _api.h" )
174
- set (_copy_trgt "${_trgt} _copy_capi_include" )
175
- add_custom_target (
176
- ${_copy_trgt} ALL
177
- COMMAND ${CMAKE_COMMAND}
178
- -DSOURCE_FILE=${_generated_public_h}
179
- -DDEST=${CMAKE_CURRENT_SOURCE_DIR}
180
- -P ${CMAKE_SOURCE_DIR} /dpctl/cmake/copy_existing.cmake
181
- COMMAND ${CMAKE_COMMAND}
182
- -DSOURCE_FILE=${_generated_api_h}
183
- -DDEST=${CMAKE_CURRENT_SOURCE_DIR}
184
- -P ${CMAKE_SOURCE_DIR} /dpctl/cmake/copy_existing.cmake
185
- DEPENDS ${_trgt}
186
- VERBATIM
187
- COMMENT "Copying Cython-generated headers to dpctl"
188
- )
189
- if (DPCTL_GENERATE_COVERAGE )
190
- set (_copy_cxx_trgt "${_trgt} _copy_cxx" )
191
- add_custom_target (
192
- ${_copy_cxx_trgt} ALL
193
- COMMAND ${CMAKE_COMMAND}
194
- -DSOURCE_FILE=${_generated_src}
195
- -DDEST=${CMAKE_CURRENT_SOURCE_DIR}
196
- -P ${CMAKE_SOURCE_DIR} /dpctl/cmake/copy_existing.cmake
197
- DEPENDS ${_trgt}
198
- VERBATIM
199
- COMMENT "Copying Cython-generated source to dpctl"
200
- )
201
- endif ()
202
- install (TARGETS ${_trgt} LIBRARY DESTINATION ${_dest} )
114
+
115
+ # TODO: create separate folder inside build folder that contains only
116
+ # headers related to this target and appropriate folder structure to
117
+ # eliminate shadow dependencies
118
+ get_filename_component (_generated_src_dir_dir ${_generated_src_dir} DIRECTORY )
119
+ # TODO: do not set directory if we did not generate header
120
+ target_include_directories (${_trgt} INTERFACE ${_generated_src_dir_dir} )
121
+
122
+ install (TARGETS ${_trgt}
123
+ LIBRARY DESTINATION ${_dest} )
124
+ install (FILES
125
+ ${_generated_api_h}
126
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /dpctl/include/${_dest}
127
+ OPTIONAL )
128
+ install (FILES
129
+ ${_generated_public_h}
130
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /dpctl/include/${_dest}
131
+ OPTIONAL )
132
+
133
+ # Create target with headers only, because python is managing all the
134
+ # library imports at runtime
135
+ set (_trgt_headers ${_trgt} _headers )
136
+ add_library (${_trgt_headers} INTERFACE )
137
+ add_dependencies (${_trgt_headers} ${_trgt} )
138
+ get_target_property (_trgt_headers_dir ${_trgt} INTERFACE_INCLUDE_DIRECTORIES )
139
+ target_include_directories (${_trgt_headers} INTERFACE ${_trgt_headers_dir} )
203
140
endfunction ()
204
141
205
142
file (GLOB _cython_sources ${CMAKE_CURRENT_SOURCE_DIR} /*.pyx )
206
143
list (REMOVE_ITEM _cython_sources ${CMAKE_CURRENT_SOURCE_DIR} /_sycl_queue.pyx )
207
144
foreach (_cy_file ${_cython_sources} )
208
145
get_filename_component (_trgt ${_cy_file} NAME_WLE )
209
146
build_dpctl_ext (${_trgt} ${_cy_file} "dpctl" )
147
+ target_link_libraries (DpctlCAPI INTERFACE ${_trgt} _headers )
210
148
endforeach ()
211
149
212
150
set (_cy_file ${CMAKE_CURRENT_SOURCE_DIR} /_sycl_queue.pyx )
213
151
get_filename_component (_trgt ${_cy_file} NAME_WLE )
214
152
build_dpctl_ext (${_trgt} ${_cy_file} "dpctl" SYCL )
215
153
# _sycl_queue include _host_task_util.hpp
216
154
target_include_directories (${_trgt} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
155
+ target_link_libraries (DpctlCAPI INTERFACE ${_trgt} _headers )
217
156
218
157
add_subdirectory (program )
219
158
add_subdirectory (memory )
0 commit comments