llvm-project/libc/lib/CMakeLists.txt
Joseph Huber f8cd4c505f
[libc] Fix building bitcode library for GPU (#100491)
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.
2024-07-26 13:17:17 -05:00

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")