[libc] Build two different static archives libc.a and libm.a under full build.

We currently put everything in one single archive libc.a which breaks in
certain situations where the compiler drivers expect libm.a also. With
this change, we separate out libc.a and libm.a functions as is done
conventionally and put them in two different static archives.

One will now have to build two targets, `libc` and `libm` which produce
`libc.a` and `libm.a` respectively. Under default build, one still builds only
one target named `libc` which produces `libllvmlibc.a`.

Reviewed By: jhuber6

Differential Revision: https://reviews.llvm.org/D143005
This commit is contained in:
Siva Chandra Reddy 2023-01-31 05:31:18 +00:00
parent 3cd96a7309
commit b875defc55
3 changed files with 40 additions and 22 deletions

View File

@ -163,10 +163,7 @@ foreach(entrypoint IN LISTS TARGET_LLVMLIBC_ENTRYPOINTS)
list(APPEND TARGET_ENTRYPOINT_NAME_LIST ${entrypoint_name})
endforeach()
set(LIBC_TARGET)
set(LIBC_COMPONENT)
set(LIBC_INSTALL_DEPENDS)
set(LIBC_INSTALL_TARGET)
if(LLVM_LIBC_FULL_BUILD)
set(LIBC_INSTALL_DEPENDS "install-libc-static-archives;install-libc-headers")
if(NOT LIBC_TARGET_OS_IS_BAREMETAL)
@ -175,14 +172,8 @@ if(LLVM_LIBC_FULL_BUILD)
# and install it as part of the libc installation.
list(APPEND LIBC_INSTALL_DEPENDS "libc-startup")
endif()
if(LIBC_TARGET_ARCHITECTURE_IS_GPU)
set(LIBC_ARCHIVE_NAME cgpu)
else()
set(LIBC_ARCHIVE_NAME c)
endif()
else()
set(LIBC_INSTALL_DEPENDS install-libc-static-archives)
set(LIBC_ARCHIVE_NAME llvmlibc)
endif()
add_subdirectory(include)

View File

@ -1,13 +1,40 @@
add_entrypoint_library(
libc
DEPENDS
${TARGET_LLVMLIBC_ENTRYPOINTS}
)
set_target_properties(
libc
PROPERTIES
ARCHIVE_OUTPUT_NAME ${LIBC_ARCHIVE_NAME}
)
set(libc_archive_targets "")
set(libc_archive_names "")
set(libc_archive_entrypoint_lists "")
if(LLVM_LIBC_FULL_BUILD)
if(LIBC_TARGET_ARCHITECTURE_IS_GPU)
list(APPEND libc_archive_names cgpu mgpu)
else()
list(APPEND libc_archive_names c m)
endif()
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}
)
list(APPEND added_archive_targets ${archive_1})
endforeach()
if(LIBC_TARGET_TRIPLE)
set(LIBC_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LIBC_TARGET_TRIPLE})
@ -19,13 +46,13 @@ else()
endif()
install(
TARGETS libc
TARGETS ${added_archive_targets}
ARCHIVE DESTINATION ${LIBC_INSTALL_LIBRARY_DIR}
COMPONENT libc-static-archives
)
add_llvm_install_targets(
install-libc-static-archives
DEPENDS libc
DEPENDS ${added_archive_targets}
COMPONENT libc-static-archives
)

View File

@ -92,5 +92,5 @@ foreach(target IN LISTS startup_components)
get_target_property(startup_object ${fq_target_name} STARTUP_OBJECT)
install(FILES ${startup_object}
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT ${LIBC_COMPONENT})
COMPONENT libc)
endforeach()