@@ -143,21 +143,25 @@ function(compileDeviceRTLLibrary target_cpu target_name target_triple)
143
143
get_filename_component (outfile ${src} NAME )
144
144
set (outfile "${outfile} -${target_cpu} .bc" )
145
145
146
- add_custom_target ( ${outfile}
146
+ add_custom_command ( OUTPUT ${outfile}
147
147
COMMAND ${CLANG_TOOL}
148
148
${bc_flags}
149
149
--offload-arch=${target_cpu}
150
150
${target_bc_flags}
151
151
${infile} -o ${outfile}
152
152
DEPENDS ${infile} ${include_files}
153
+ IMPLICIT_DEPENDS CXX ${infile}
153
154
COMMENT "Building LLVM bitcode ${outfile} "
154
155
VERBATIM
155
156
)
156
157
if ("${CLANG_TOOL} " STREQUAL "$<TARGET_FILE:clang>" )
157
- # Add a target -level dependency to ensure that clang is up-to-date.
158
- # By default, add_custom_target only builds clang if the
158
+ # Add a file -level dependency to ensure that clang is up-to-date.
159
+ # By default, add_custom_command only builds clang if the
159
160
# executable is missing.
160
- add_dependencies (${outfile} clang )
161
+ add_custom_command (OUTPUT ${outfile}
162
+ DEPENDS clang
163
+ APPEND
164
+ )
161
165
endif ()
162
166
set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${outfile} )
163
167
@@ -167,91 +171,99 @@ function(compileDeviceRTLLibrary target_cpu target_name target_triple)
167
171
set (bclib_name "libomptarget-${target_name} -${target_cpu} .bc" )
168
172
169
173
# Link to a bitcode library.
170
- add_custom_target ( linked_${bclib_name}
174
+ add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR} / linked_${bclib_name}
171
175
COMMAND ${LINK_TOOL}
172
176
-o ${CMAKE_CURRENT_BINARY_DIR} /linked_${bclib_name} ${bc_files}
177
+ DEPENDS ${bc_files}
173
178
COMMENT "Linking LLVM bitcode ${bclib_name} "
174
179
)
175
- add_dependencies (linked_${bclib_name} ${bc_files} )
180
+ if ("${LINK_TOOL} " STREQUAL "$<TARGET_FILE:llvm-link>" )
181
+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /linked_${bclib_name}
182
+ DEPENDS llvm-link
183
+ APPEND )
184
+ endif ()
176
185
177
- add_custom_target ( internalized_${bclib_name}
186
+ add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR} / internalized_${bclib_name}
178
187
COMMAND ${OPT_TOOL} ${link_export_flag} ${CMAKE_CURRENT_BINARY_DIR} /linked_${bclib_name}
179
188
-o ${CMAKE_CURRENT_BINARY_DIR} /internalized_${bclib_name}
180
- DEPENDS ${source_directory} /exports
189
+ DEPENDS ${source_directory} /exports ${CMAKE_CURRENT_BINARY_DIR} /linked_${bclib_name}
181
190
COMMENT "Internalizing LLVM bitcode ${bclib_name} "
182
191
)
183
- add_dependencies (internalized_${bclib_name} linked_${bclib_name} )
192
+ if ("${OPT_TOOL} " STREQUAL "$<TARGET_FILE:opt>" )
193
+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /internalized_${bclib_name}
194
+ DEPENDS opt
195
+ APPEND )
196
+ endif ()
184
197
185
- add_custom_target ( ${bclib_name}
198
+ add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR} / ${bclib_name}
186
199
COMMAND ${OPT_TOOL} ${link_opt_flags} ${CMAKE_CURRENT_BINARY_DIR} /internalized_${bclib_name}
187
200
-o ${CMAKE_CURRENT_BINARY_DIR} /${bclib_name}
201
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /internalized_${bclib_name}
188
202
COMMENT "Optimizing LLVM bitcode ${bclib_name} "
189
203
)
190
- add_dependencies (${bclib_name} internalized_${bclib_name} )
204
+ if ("${OPT_TOOL} " STREQUAL "$<TARGET_FILE:opt>" )
205
+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /${bclib_name}
206
+ DEPENDS opt
207
+ APPEND )
208
+ endif ()
191
209
192
- add_custom_target (extracted_${bclib_name}
210
+ set (bclib_target_name "omptarget-${target_name} -${target_cpu} -bc" )
211
+ add_custom_target (${bclib_target_name} DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${bclib_name} )
212
+
213
+ # Copy library to destination.
214
+ add_custom_command (TARGET ${bclib_target_name} POST_BUILD
215
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR} /${bclib_name}
216
+ ${LIBOMPTARGET_LIBRARY_DIR} )
217
+ add_dependencies (omptarget.devicertl.${target_name} ${bclib_target_name} )
218
+
219
+ set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${bclib_name} ${LIBOMPTARGET_LIBRARY_DIR} /${bclib_name} )
220
+
221
+ # Install bitcode library under the lib destination folder.
222
+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /${bclib_name} DESTINATION "${OPENMP_INSTALL_LIBDIR} " )
223
+
224
+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /extracted_${bclib_name}
193
225
COMMAND ${EXTRACT_TOOL} ${link_extract_flag} ${CMAKE_CURRENT_BINARY_DIR} /${bclib_name}
194
226
-o ${CMAKE_CURRENT_BINARY_DIR} /extracted_${bclib_name}
227
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${bclib_name} ${bclib_target_name}
195
228
COMMENT "Extracting LLVM bitcode ${bclib_name} "
196
229
)
197
- add_dependencies (extracted_${bclib_name} ${bclib_name} )
230
+ if ("${EXTRACT_TOOL} " STREQUAL "$<TARGET_FILE:llvm-extract>" )
231
+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /extracted_${bclib_name}
232
+ DEPENDS llvm-extract
233
+ APPEND )
234
+ endif ()
198
235
199
236
# Package the bitcode in the bitcode and embed it in an ELF for the static library
200
- add_custom_target ( packaged_${bclib_name}
237
+ add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR} / packaged_${bclib_name}
201
238
COMMAND ${PACKAGER_TOOL} -o ${CMAKE_CURRENT_BINARY_DIR} /packaged_${bclib_name}
202
239
"--image=file=${CMAKE_CURRENT_BINARY_DIR} /extracted_${bclib_name} ,triple=${target_triple} ,arch=${target_cpu} ,kind=openmp"
240
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /extracted_${bclib_name}
203
241
COMMENT "Packaging LLVM offloading binary ${bclib_name} .out"
204
242
)
205
- add_dependencies (packaged_${bclib_name} extracted_${bclib_name} )
243
+ if ("${PACKAGER_TOOL} " STREQUAL "$<TARGET_FILE:clang-offload-packager>" )
244
+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /packaged_${bclib_name}
245
+ DEPENDS clang-offload-packager
246
+ APPEND )
247
+ endif ()
206
248
207
249
set (output_name "${CMAKE_CURRENT_BINARY_DIR} /devicertl-${target_name} -${target_cpu} .o" )
208
- add_custom_target ( embedded_${target_name}-${target_cpu }
250
+ add_custom_command ( OUTPUT ${output_name }
209
251
COMMAND ${CLANG_TOOL} --std=c++17 -c -nostdlib
210
252
-Xclang -fembed-offload-object=${CMAKE_CURRENT_BINARY_DIR}/packaged_${bclib_name}
211
253
-o ${output_name}
212
254
${source_directory} /Stub.cpp
213
- BYPRODUCTS ${output_name}
214
- COMMENT "Embedding LLVM offloading binary in ${output_name} "
255
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /packaged_${bclib_name} ${source_directory} /Stub.cpp
256
+ COMMENT "Embedding LLVM offloading binary in devicertl- ${target_name} - ${target_cpu} .o "
215
257
VERBATIM
216
258
)
217
- add_dependencies (embedded_${target_name}-${target_cpu} packaged_${bclib_name} )
218
-
219
- set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${output_name} )
220
- add_dependencies (omptarget.devicertl.all_objs embedded_${target_name}-${target_cpu} )
221
- set_property (TARGET omptarget.devicertl.all_objs APPEND PROPERTY IMPORTED_OBJECTS ${output_name} )
222
-
223
- # Add a target-level dependency to ensure that llvm-link and opt are up-to-date.
224
- # By default, add_custom_target only builds the tool if the executable is missing
225
- if ("${LINK_TOOL} " STREQUAL "$<TARGET_FILE:llvm-link>" )
226
- add_dependencies (linked_${bclib_name} llvm-link )
227
- endif ()
228
- if ("${OPT_TOOL} " STREQUAL "$<TARGET_FILE:opt>" )
229
- add_dependencies (${bclib_name} opt )
230
- endif ()
231
- if ("${EXTRACT_TOOL} " STREQUAL "$<TARGET_FILE:llvm-extract>" )
232
- add_dependencies (extracted_${bclib_name} llvm-extract )
233
- endif ()
234
- if ("${PACKAGER_TOOL} " STREQUAL "$<TARGET_FILE:clang-offload-packager>" )
235
- add_dependencies (packaged_${bclib_name} clang-offload-packager )
236
- endif ()
237
259
if ("${CLANG_TOOL} " STREQUAL "$<TARGET_FILE:clang>" )
238
- add_dependencies (embedded_${target_name}-${target_cpu} clang )
260
+ add_custom_command (OUTPUT ${output_name}
261
+ DEPENDS clang
262
+ APPEND )
239
263
endif ()
240
264
241
- set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${bclib_name} )
242
-
243
- set (bclib_target_name "omptarget-${target_name} -${target_cpu} -bc" )
244
- add_custom_target (${bclib_target_name} ALL )
245
- add_dependencies (${bclib_target_name} ${bclib_name} )
246
-
247
- # Copy library to destination.
248
- add_custom_command (TARGET ${bclib_target_name} POST_BUILD
249
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR} /${bclib_name}
250
- ${LIBOMPTARGET_LIBRARY_DIR} )
251
- add_dependencies ("omptarget.devicertl.${target_name} " "${bclib_target_name} " )
252
-
253
- # Install bitcode library under the lib destination folder.
254
- install (FILES ${CMAKE_CURRENT_BINARY_DIR} /${bclib_name} DESTINATION "${OPENMP_INSTALL_LIBDIR} " )
265
+ set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${output_name} )
266
+ set_property (TARGET omptarget.devicertl.all_objs APPEND PROPERTY IMPORTED_OBJECTS ${output_name} )
255
267
endfunction ()
256
268
257
269
# Generate a Bitcode library for all the compute capabilities the user requested
0 commit comments