================ @@ -142,99 +125,40 @@ function(compileDeviceRTLLibrary target_name target_triple) endif() set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${outfile}) - list(APPEND bc_files ${outfile}) + list(APPEND obj_files ${CMAKE_CURRENT_BINARY_DIR}/${outfile}) endforeach() - - set(bclib_name "libomptarget-${target_name}.bc") - - # Link to a bitcode library. - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/linked_${bclib_name} - COMMAND ${LINK_TOOL} - -o ${CMAKE_CURRENT_BINARY_DIR}/linked_${bclib_name} ${bc_files} - DEPENDS ${bc_files} - COMMENT "Linking LLVM bitcode ${bclib_name}" - ) - - if(TARGET llvm-link) - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/linked_${bclib_name} - DEPENDS llvm-link - APPEND) - endif() - - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/internalized_${bclib_name} - COMMAND ${OPT_TOOL} ${link_export_flag} ${CMAKE_CURRENT_BINARY_DIR}/linked_${bclib_name} - -o ${CMAKE_CURRENT_BINARY_DIR}/internalized_${bclib_name} - DEPENDS ${source_directory}/exports ${CMAKE_CURRENT_BINARY_DIR}/linked_${bclib_name} - COMMENT "Internalizing LLVM bitcode ${bclib_name}" - ) - if(TARGET opt) - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/internalized_${bclib_name} - DEPENDS opt - APPEND) - endif() - - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${bclib_name} - COMMAND ${OPT_TOOL} ${link_opt_flags} ${CMAKE_CURRENT_BINARY_DIR}/internalized_${bclib_name} - -o ${CMAKE_CURRENT_BINARY_DIR}/${bclib_name} - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/internalized_${bclib_name} - COMMENT "Optimizing LLVM bitcode ${bclib_name}" - ) - if(TARGET opt) - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${bclib_name} - DEPENDS opt - APPEND) - endif() - - set(bclib_target_name "omptarget-${target_name}-bc") - add_custom_target(${bclib_target_name} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${bclib_name}) - - # Copy library to destination. - add_custom_command(TARGET ${bclib_target_name} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${bclib_name} - ${LIBOMPTARGET_LIBRARY_DIR}) - add_dependencies(omptarget.devicertl.${target_name} ${bclib_target_name}) - - set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${bclib_name} ${LIBOMPTARGET_LIBRARY_DIR}/${bclib_name}) - - # Install bitcode library under the lib destination folder. - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${bclib_name} DESTINATION "${OFFLOAD_INSTALL_LIBDIR}") - - set(target_feature "") - if("${target_triple}" STREQUAL "nvptx64-nvidia-cuda") - set(target_feature "feature=+ptx63") - endif() - - # Package the bitcode in the bitcode and embed it in an ELF for the static library - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/packaged_${bclib_name} - COMMAND ${PACKAGER_TOOL} -o ${CMAKE_CURRENT_BINARY_DIR}/packaged_${bclib_name} - "--image=file=${CMAKE_CURRENT_BINARY_DIR}/${bclib_name},${target_feature},triple=${target_triple},arch=generic,kind=openmp" - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${bclib_name} - COMMENT "Packaging LLVM offloading binary ${bclib_name}.out" - ) - if(TARGET clang-offload-packager) - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/packaged_${bclib_name} - DEPENDS clang-offload-packager - APPEND) - endif() - - set(output_name "${CMAKE_CURRENT_BINARY_DIR}/devicertl-${target_name}.o") - add_custom_command(OUTPUT ${output_name} - COMMAND ${CLANG_TOOL} --std=c++17 -c -nostdlib - -Xclang -fembed-offload-object=${CMAKE_CURRENT_BINARY_DIR}/packaged_${bclib_name} - -o ${output_name} - ${source_directory}/Stub.cpp - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/packaged_${bclib_name} ${source_directory}/Stub.cpp - COMMENT "Embedding LLVM offloading binary in devicertl-${target_name}.o" - VERBATIM + # Trick to combine these into a bitcode file via the linker's LTO pass. This + # is used to provide the legacy `libomptarget-<name>.bc` files. Hack this + # through as an executable to get it to use the relocatable link. + add_executable(libomptarget-${target_name} ${obj_files}) + set_target_properties(libomptarget-${target_name} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${LIBOMPTARGET_LLVM_LIBRARY_INTDIR} + LINKER_LANGUAGE CXX + BUILD_RPATH "" + INSTALL_RPATH "" + RUNTIME_OUTPUT_NAME libomptarget-${target_name}.bc) + target_compile_options(libomptarget-${target_name} PRIVATE "--target=${target_triple}") + target_link_options(libomptarget-${target_name} PRIVATE "--target=${target_triple}" + "-r" "-nostdlib" "-flto" "-Wl,--lto-emit-llvm") + install(TARGETS libomptarget-${target_name} + PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ + DESTINATION ${OFFLOAD_INSTALL_LIBDIR}) + + add_library(omptarget.${target_name}.all_objs OBJECT IMPORTED) + set_property(TARGET omptarget.${target_name}.all_objs APPEND PROPERTY IMPORTED_OBJECTS + ${LIBOMPTARGET_LLVM_LIBRARY_INTDIR}/libomptarget-${target_name}.bc) ---------------- ye-luo wrote:
Getting ``` make[5]: *** No rule to make target '/vast/users/yeluo/opt/llvm-clang/build_mirror_offload_nightly/lib/libomptarget-amdgpu.bc', needed by '/vast/users/yeluo/opt/llvm-clang/build_mirror_offload_nightly/lib/amdgcn-amd-amdhsa/libompdevice.a'. Stop. make[4]: *** [CMakeFiles/Makefile2:17388: offload/DeviceRTL/CMakeFiles/omptarget.amdgpu.dir/all] Error 2 ``` target files produced within the project, libomptarget-amdgpu.bc in this case, cannot be used as imported because such files may not exist when it is needed, in this case by `omptarget.amdgpu` target. https://github.com/llvm/llvm-project/pull/126143 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits