1
1
find_package (Python REQUIRED COMPONENTS Development.Module NumPy )
2
2
3
+ # -t is to only Cythonize sources with timestamps newer than existing CXX files (if present)
4
+ # -w is to set working directory (and correctly set __pyx_f[] array of filenames)
3
5
set (CYTHON_FLAGS "-t -w \" ${CMAKE_SOURCE_DIR} \" " )
4
6
find_package (Cython REQUIRED )
5
7
@@ -74,64 +76,6 @@ endif()
74
76
75
77
# at build time create include/ directory and copy header files over
76
78
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
79
136
80
set (CMAKE_INSTALL_RPATH "$ORIGIN" )
137
81
@@ -140,29 +84,29 @@ function(build_dpctl_ext _trgt _src _dest)
140
84
cmake_parse_arguments (BUILD_DPCTL_EXT "${options} " "" "" ${ARGN} )
141
85
add_cython_target (${_trgt} ${_src} CXX OUTPUT_VAR _generated_src )
142
86
set (_cythonize_trgt "${_trgt} _cythonize_pyx" )
143
- add_custom_target (${_cythonize_trgt} DEPENDS ${_src} )
144
87
Python_add_library (${_trgt} MODULE WITH_SOABI ${_generated_src} )
145
88
if (BUILD_DPCTL_EXT_SYCL )
146
89
add_sycl_to_target (TARGET ${_trgt} SOURCES ${_generated_src} )
147
- if (_dpctl_sycl_targets )
148
- # make fat binary
90
+ if (_dpctl_sycl_targets )
91
+ # make fat binary
149
92
target_compile_options (
150
93
${_trgt}
151
94
PRIVATE
152
95
-fsycl-targets=${_dpctl_sycl_targets}
153
96
)
154
- target_link_options (
155
- ${_trgt}
156
- PRIVATE
157
- -fsycl-targets=${_dpctl_sycl_targets}
158
- )
159
- endif ()
97
+ target_link_options (
98
+ ${_trgt}
99
+ PRIVATE
100
+ -fsycl-targets=${_dpctl_sycl_targets}
101
+ )
102
+ endif ()
160
103
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} )
104
+ target_link_libraries (${_trgt} PRIVATE Python::NumPy )
163
105
if (DPCTL_GENERATE_COVERAGE )
164
106
target_compile_definitions (${_trgt} PRIVATE CYTHON_TRACE=1 CYTHON_TRACE_NOGIL=1 )
165
- # target_compile_options(${_trgt} PRIVATE -fno-sycl-use-footer)
107
+ if (BUILD_DPCTL_EXT_SYCL )
108
+ target_compile_options (${_trgt} PRIVATE -fno-sycl-use-footer )
109
+ endif ()
166
110
endif ()
167
111
target_link_libraries (${_trgt} PRIVATE DPCTLSyclInterface )
168
112
set (_linker_options "LINKER:${DPCTL_LDFLAGS} " )
@@ -171,49 +115,56 @@ function(build_dpctl_ext _trgt _src _dest)
171
115
get_filename_component (_generated_src_dir ${_generated_src} DIRECTORY )
172
116
set (_generated_public_h "${_generated_src_dir} /${_name_wle} .h" )
173
117
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
- )
118
+
119
+ # TODO: create separate folder inside build folder that contains only
120
+ # headers related to this target and appropriate folder structure to
121
+ # eliminate shadow dependencies
122
+ get_filename_component (_generated_src_dir_dir ${_generated_src_dir} DIRECTORY )
123
+ # TODO: do not set directory if we did not generate header
124
+ target_include_directories (${_trgt} INTERFACE ${_generated_src_dir_dir} )
125
+
126
+ install (TARGETS ${_trgt}
127
+ LIBRARY DESTINATION ${_dest} )
128
+ install (FILES
129
+ ${_generated_api_h}
130
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /dpctl/include/${_dest}
131
+ OPTIONAL )
132
+ install (FILES
133
+ ${_generated_public_h}
134
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /dpctl/include/${_dest}
135
+ OPTIONAL )
189
136
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
- )
137
+ get_filename_component (_original_src_dir ${_src} DIRECTORY )
138
+ file (RELATIVE_PATH _rel_dir ${CMAKE_SOURCE_DIR} ${_original_src_dir} )
139
+ install (FILES
140
+ ${_generated_src}
141
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /${_rel_dir}
142
+ )
201
143
endif ()
202
- install (TARGETS ${_trgt} LIBRARY DESTINATION ${_dest} )
144
+
145
+ # Create target with headers only, because python is managing all the
146
+ # library imports at runtime
147
+ set (_trgt_headers ${_trgt} _headers )
148
+ add_library (${_trgt_headers} INTERFACE )
149
+ add_dependencies (${_trgt_headers} ${_trgt} )
150
+ get_target_property (_trgt_headers_dir ${_trgt} INTERFACE_INCLUDE_DIRECTORIES )
151
+ target_include_directories (${_trgt_headers} INTERFACE ${_trgt_headers_dir} )
203
152
endfunction ()
204
153
205
154
file (GLOB _cython_sources ${CMAKE_CURRENT_SOURCE_DIR} /*.pyx )
206
155
list (REMOVE_ITEM _cython_sources ${CMAKE_CURRENT_SOURCE_DIR} /_sycl_queue.pyx )
207
156
foreach (_cy_file ${_cython_sources} )
208
157
get_filename_component (_trgt ${_cy_file} NAME_WLE )
209
158
build_dpctl_ext (${_trgt} ${_cy_file} "dpctl" )
159
+ target_link_libraries (DpctlCAPI INTERFACE ${_trgt} _headers )
210
160
endforeach ()
211
161
212
162
set (_cy_file ${CMAKE_CURRENT_SOURCE_DIR} /_sycl_queue.pyx )
213
163
get_filename_component (_trgt ${_cy_file} NAME_WLE )
214
164
build_dpctl_ext (${_trgt} ${_cy_file} "dpctl" SYCL )
215
165
# _sycl_queue include _host_task_util.hpp
216
166
target_include_directories (${_trgt} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
167
+ target_link_libraries (DpctlCAPI INTERFACE ${_trgt} _headers )
217
168
218
169
add_subdirectory (program )
219
170
add_subdirectory (memory )
0 commit comments