mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 02:56:37 +00:00

Summary: The GPU build provides a bitcode version of the library to mimic how NVIDIA and AMD provide their libraries. Previously we had the fatbinary archive that created the necessary dependency for this to actually build. Since it was removed we no longer had anything triggering this to build. I have no idea if there's a better way to force a custom command to actually be run in the same space as libraries, but the only thing I could come up with was a dummy target.
100 lines
3.2 KiB
CMake
100 lines
3.2 KiB
CMake
set(libc_archive_targets "")
|
|
set(libc_archive_names "")
|
|
set(libc_archive_entrypoint_lists "")
|
|
if(LLVM_LIBC_FULL_BUILD)
|
|
list(APPEND libc_archive_names c m)
|
|
list(APPEND libc_archive_targets libc libm)
|
|
list(APPEND libc_archive_entrypoint_lists
|
|
TARGET_LIBC_ENTRYPOINTS TARGET_LIBM_ENTRYPOINTS)
|
|
else()
|
|
list(APPEND libc_archive_names llvmlibc)
|
|
list(APPEND libc_archive_targets libc)
|
|
list(APPEND libc_archive_entrypoint_lists TARGET_LLVMLIBC_ENTRYPOINTS)
|
|
endif()
|
|
|
|
set(added_archive_targets "")
|
|
foreach(archive IN ZIP_LISTS
|
|
libc_archive_names libc_archive_targets libc_archive_entrypoint_lists)
|
|
if(NOT ${archive_2})
|
|
# If an entrypoint list is missing, then skip adding targets for it.
|
|
continue()
|
|
endif()
|
|
add_entrypoint_library(
|
|
${archive_1}
|
|
DEPENDS
|
|
${${archive_2}}
|
|
)
|
|
set_target_properties(
|
|
${archive_1}
|
|
PROPERTIES
|
|
ARCHIVE_OUTPUT_NAME ${archive_0}
|
|
)
|
|
if(LLVM_LIBC_FULL_BUILD)
|
|
target_link_libraries(${archive_1} PUBLIC libc-headers)
|
|
if(TARGET libc-startup)
|
|
add_dependencies(${archive_1} libc-startup)
|
|
endif()
|
|
endif()
|
|
list(APPEND added_archive_targets ${archive_1})
|
|
|
|
# Add the offloading version of the library for offloading languages. These
|
|
# are installed in the standard search path separate from the other libraries.
|
|
if(LIBC_TARGET_OS_IS_GPU)
|
|
add_bitcode_entrypoint_library(
|
|
${archive_1}bitcode
|
|
${archive_1}
|
|
DEPENDS
|
|
${${archive_2}}
|
|
)
|
|
set_target_properties(
|
|
${archive_1}bitcode
|
|
PROPERTIES
|
|
OUTPUT_NAME ${archive_1}.bc
|
|
)
|
|
list(APPEND added_bitcode_targets ${archive_1}bitcode)
|
|
endif()
|
|
endforeach()
|
|
|
|
install(
|
|
TARGETS ${added_archive_targets}
|
|
ARCHIVE DESTINATION ${LIBC_INSTALL_LIBRARY_DIR}
|
|
COMPONENT libc
|
|
)
|
|
|
|
foreach(file ${added_bitcode_targets})
|
|
install(FILES $<TARGET_FILE:${file}>
|
|
DESTINATION ${LIBC_INSTALL_LIBRARY_DIR}
|
|
RENAME $<TARGET_PROPERTY:${file},OUTPUT_NAME>
|
|
COMPONENT libc
|
|
)
|
|
endforeach()
|
|
|
|
if(NOT LIBC_TARGET_OS_IS_BAREMETAL)
|
|
# For now we will disable libc-startup installation for baremetal. The
|
|
# correct way to do it would be to make a hookable startup for baremetal
|
|
# and install it as part of the libc installation.
|
|
set(startup_target "libc-startup")
|
|
endif()
|
|
|
|
if(LLVM_LIBC_FULL_BUILD)
|
|
set(header_install_target install-libc-headers)
|
|
endif()
|
|
|
|
add_custom_target(install-libc
|
|
DEPENDS ${added_archive_targets}
|
|
${added_bitcode_targets}
|
|
${startup_target}
|
|
${header_install_target}
|
|
COMMAND "${CMAKE_COMMAND}"
|
|
-DCMAKE_INSTALL_COMPONENT=libc
|
|
-P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
|
|
add_custom_target(install-libc-stripped
|
|
DEPENDS ${added_archive_targets}
|
|
${added_bitcode_targets}
|
|
${startup_target}
|
|
${header_install_target}
|
|
COMMAND "${CMAKE_COMMAND}"
|
|
-DCMAKE_INSTALL_COMPONENT=libc
|
|
-DCMAKE_INSTALL_DO_STRIP=1
|
|
-P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
|