From 4d5839bf2897552dff371d5190d1f27ac5792f67 Mon Sep 17 00:00:00 2001 From: Joseph Huber <35342157+jhuber6@users.noreply.github.com> Date: Mon, 18 Sep 2023 10:15:02 -0500 Subject: [PATCH] [libc][GPU] Fix dependencies for externally installed stub files (#66653) Summary: The GPU build has a lot of magic around how we package the output. Generally, the GPU needs to exist as a secondary fatbinary image for offloading languages. This is because offloading languages pretend like offloading to an accelerator is a single file. This then needs to be put into a single file to make it mesh with the existing build infrastructure. To work with this, the `libc` makes an installed version of the library that simply embeds the GPU code into an empty stub file. This wasn't being updated correctly, which lead to the installed `libc` static library not being updated correctly when the underlying file was changed. The previous behaviour only updated when the entrypoint itself was modified, but not any of its headers. By adding a dependcy on the actual *object* file we should now capture the regular CMake semantics. --- libc/cmake/modules/LLVMLibCObjectRules.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libc/cmake/modules/LLVMLibCObjectRules.cmake b/libc/cmake/modules/LLVMLibCObjectRules.cmake index 891c298855e61..994437f55d274 100644 --- a/libc/cmake/modules/LLVMLibCObjectRules.cmake +++ b/libc/cmake/modules/LLVMLibCObjectRules.cmake @@ -210,7 +210,7 @@ function(_build_gpu_objects fq_target_name internal_target_name) list(APPEND packager_images --image=file=${input_file},arch=${gpu_arch},triple=${gpu_target_triple}) endif() - list(APPEND gpu_target_names ${gpu_target_name}) + list(APPEND gpu_target_objects ${input_file}) endforeach() # After building the target for the desired GPUs we must package the output @@ -222,7 +222,7 @@ function(_build_gpu_objects fq_target_name internal_target_name) add_custom_command(OUTPUT ${packaged_output_name} COMMAND ${LIBC_CLANG_OFFLOAD_PACKAGER} ${packager_images} -o ${packaged_output_name} - DEPENDS ${gpu_target_names} ${add_gpu_obj_src} ${ADD_GPU_OBJ_HDRS} + DEPENDS ${gpu_target_objects} ${add_gpu_obj_src} ${ADD_GPU_OBJ_HDRS} COMMENT "Packaging LLVM offloading binary") add_custom_target(${packaged_target_name} DEPENDS ${packaged_output_name}) list(APPEND packaged_gpu_names ${packaged_target_name}) @@ -242,7 +242,7 @@ function(_build_gpu_objects fq_target_name internal_target_name) OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/stubs/${stub_filename}" COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/stubs/ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/stubs/${stub_filename} - DEPENDS ${gpu_target_names} ${ADD_GPU_OBJ_SRCS} ${ADD_GPU_OBJ_HDRS} + DEPENDS ${gpu_target_objects} ${ADD_GPU_OBJ_SRCS} ${ADD_GPU_OBJ_HDRS} ) set(stub_target_name ${fq_target_name}.__stub__) add_custom_target(${stub_target_name} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/stubs/${stub_filename})