Skip to content

Commit 4a87241

Browse files
committed
[libc] Fix dependencies for generating the GPU binary file
This patch adjusts the way dependencies are handled in the packaed version of the GPU libc runtime. Previously the files were not getting updated properly in the install when they changed. Depends on D144214 Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D144280
1 parent d51d2b5 commit 4a87241

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

libc/cmake/modules/LLVMLibCObjectRules.cmake

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,30 +132,38 @@ function(_build_gpu_objects fq_target_name internal_target_name)
132132
add_custom_command(OUTPUT ${packaged_output_name}
133133
COMMAND ${LIBC_CLANG_OFFLOAD_PACKAGER}
134134
${packager_images} -o ${packaged_output_name}
135-
DEPENDS ${gpu_target_names}
135+
DEPENDS ${gpu_target_names} ${ADD_GPU_OBJ_SRCS} ${ADD_GPU_OBJ_HDRS}
136136
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})
138138

139139
# We create an empty 'stub' file for the host to contain the embedded device
140140
# code. This will be packaged into 'libcgpu.a'.
141141
# TODO: In the future we will want to combine every architecture for a target
142142
# into a single bitcode file and use that. For now we simply build for
143143
# every single one and let the offloading linker handle it.
144144
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+
147154
add_library(
148155
${fq_target_name}
149156
# We want an object library as the objects will eventually get packaged into
150157
# an archive (like libcgpu.a).
151158
EXCLUDE_FROM_ALL
152159
OBJECT
153-
"${CMAKE_CURRENT_BINARY_DIR}/stubs/${stub_filename}"
160+
${CMAKE_CURRENT_BINARY_DIR}/stubs/${stub_filename}
154161
)
155162
target_compile_options(${fq_target_name} BEFORE PRIVATE ${common_compile_options}
156163
-nostdlib -Xclang -fembed-offload-object=${packaged_output_name})
157164
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})
159167

160168
# We only build the internal target for a single supported architecture.
161169
set(include_dirs ${LIBC_BUILD_DIR}/include ${LIBC_SOURCE_DIR} ${LIBC_BUILD_DIR})
@@ -561,7 +569,6 @@ function(create_entrypoint_object fq_target_name)
561569
)
562570
endif()
563571

564-
565572
if(LLVM_LIBC_ENABLE_LINTING AND TARGET ${internal_target_name})
566573
if(NOT LLVM_LIBC_CLANG_TIDY)
567574
message(FATAL_ERROR "Something is wrong! LLVM_LIBC_ENABLE_LINTING is "

0 commit comments

Comments
 (0)