@@ -132,30 +132,38 @@ function(_build_gpu_objects fq_target_name internal_target_name)
132
132
add_custom_command (OUTPUT ${packaged_output_name}
133
133
COMMAND ${LIBC_CLANG_OFFLOAD_PACKAGER}
134
134
${packager_images} -o ${packaged_output_name}
135
- DEPENDS ${gpu_target_names}
135
+ DEPENDS ${gpu_target_names} ${ADD_GPU_OBJ_SRCS} ${ADD_GPU_OBJ_HDRS}
136
136
COMMENT "Packaging LLVM offloading binary" )
137
- add_custom_target (${packaged_target_name} DEPENDS ${packaged_output_name} )
137
+ add_custom_target (${packaged_target_name} DEPENDS ${packaged_output_name} ${gpu_target_name} )
138
138
139
139
# We create an empty 'stub' file for the host to contain the embedded device
140
140
# code. This will be packaged into 'libcgpu.a'.
141
141
# TODO: In the future we will want to combine every architecture for a target
142
142
# into a single bitcode file and use that. For now we simply build for
143
143
# every single one and let the offloading linker handle it.
144
144
get_filename_component (stub_filename ${ADD_GPU_OBJ_SRCS} NAME )
145
- file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /stubs )
146
- file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /stubs/${stub_filename} "// Empty file.\n " )
145
+ add_custom_command (
146
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR} /stubs/${stub_filename} "
147
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR} /stubs/
148
+ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR} /stubs/${stub_filename}
149
+ DEPENDS ${gpu_target_names} ${ADD_GPU_OBJ_SRCS} ${ADD_GPU_OBJ_HDRS}
150
+ )
151
+ set (stub_target_name ${fq_target_name} .__stub__ )
152
+ add_custom_target (${stub_target_name} DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /stubs/${stub_filename} )
153
+
147
154
add_library (
148
155
${fq_target_name}
149
156
# We want an object library as the objects will eventually get packaged into
150
157
# an archive (like libcgpu.a).
151
158
EXCLUDE_FROM_ALL
152
159
OBJECT
153
- " ${CMAKE_CURRENT_BINARY_DIR} /stubs/${stub_filename} "
160
+ ${CMAKE_CURRENT_BINARY_DIR} /stubs/${stub_filename}
154
161
)
155
162
target_compile_options (${fq_target_name} BEFORE PRIVATE ${common_compile_options}
156
163
-nostdlib -Xclang -fembed-offload-object=${packaged_output_name} )
157
164
target_include_directories (${fq_target_name} PRIVATE ${include_dirs} )
158
- add_dependencies (${fq_target_name} ${full_deps_list} ${packaged_target_name} )
165
+ add_dependencies (${fq_target_name}
166
+ ${full_deps_list} ${packaged_target_name} ${stub_target_name} )
159
167
160
168
# We only build the internal target for a single supported architecture.
161
169
set (include_dirs ${LIBC_BUILD_DIR} /include ${LIBC_SOURCE_DIR} ${LIBC_BUILD_DIR} )
@@ -561,7 +569,6 @@ function(create_entrypoint_object fq_target_name)
561
569
)
562
570
endif ()
563
571
564
-
565
572
if (LLVM_LIBC_ENABLE_LINTING AND TARGET ${internal_target_name} )
566
573
if (NOT LLVM_LIBC_CLANG_TIDY )
567
574
message (FATAL_ERROR "Something is wrong! LLVM_LIBC_ENABLE_LINTING is "
0 commit comments