1set(libc_archive_targets "") 2set(libc_archive_names "") 3set(libc_archive_entrypoint_lists "") 4if(LLVM_LIBC_FULL_BUILD) 5 list(APPEND libc_archive_names c m) 6 list(APPEND libc_archive_targets libc libm) 7 list(APPEND libc_archive_entrypoint_lists 8 TARGET_LIBC_ENTRYPOINTS TARGET_LIBM_ENTRYPOINTS) 9else() 10 list(APPEND libc_archive_names llvmlibc) 11 list(APPEND libc_archive_targets libc) 12 list(APPEND libc_archive_entrypoint_lists TARGET_LLVMLIBC_ENTRYPOINTS) 13endif() 14 15set(added_archive_targets "") 16foreach(archive IN ZIP_LISTS 17 libc_archive_names libc_archive_targets libc_archive_entrypoint_lists) 18 if(NOT ${archive_2}) 19 # If an entrypoint list is missing, then skip adding targets for it. 20 continue() 21 endif() 22 add_entrypoint_library( 23 ${archive_1} 24 DEPENDS 25 ${${archive_2}} 26 ) 27 set_target_properties( 28 ${archive_1} 29 PROPERTIES 30 ARCHIVE_OUTPUT_NAME ${archive_0} 31 ) 32 if(LLVM_LIBC_FULL_BUILD) 33 target_link_libraries(${archive_1} PUBLIC libc-headers) 34 if(TARGET libc-startup) 35 add_dependencies(${archive_1} libc-startup) 36 endif() 37 endif() 38 list(APPEND added_archive_targets ${archive_1}) 39 40 # Add the offloading version of the library for offloading languages. These 41 # are installed in the standard search path separate from the other libraries. 42 if(LIBC_TARGET_OS_IS_GPU) 43 add_bitcode_entrypoint_library( 44 ${archive_1}bitcode 45 ${archive_1} 46 DEPENDS 47 ${${archive_2}} 48 ) 49 set_target_properties( 50 ${archive_1}bitcode 51 PROPERTIES 52 OUTPUT_NAME ${archive_1}.bc 53 ) 54 list(APPEND added_bitcode_targets ${archive_1}bitcode) 55 endif() 56endforeach() 57 58install( 59 TARGETS ${added_archive_targets} 60 ARCHIVE DESTINATION ${LIBC_INSTALL_LIBRARY_DIR} 61 COMPONENT libc 62) 63 64foreach(file ${added_bitcode_targets}) 65 install(FILES $<TARGET_FILE:${file}> 66 DESTINATION ${LIBC_INSTALL_LIBRARY_DIR} 67 RENAME $<TARGET_PROPERTY:${file},OUTPUT_NAME> 68 COMPONENT libc 69 ) 70endforeach() 71 72if(NOT LIBC_TARGET_OS_IS_BAREMETAL) 73 # For now we will disable libc-startup installation for baremetal. The 74 # correct way to do it would be to make a hookable startup for baremetal 75 # and install it as part of the libc installation. 76 set(startup_target "libc-startup") 77endif() 78 79if(LLVM_LIBC_FULL_BUILD) 80 set(header_install_target install-libc-headers) 81endif() 82 83add_custom_target(install-libc 84 DEPENDS ${added_archive_targets} 85 ${added_bitcode_targets} 86 ${startup_target} 87 ${header_install_target} 88 COMMAND "${CMAKE_COMMAND}" 89 -DCMAKE_INSTALL_COMPONENT=libc 90 -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") 91add_custom_target(install-libc-stripped 92 DEPENDS ${added_archive_targets} 93 ${added_bitcode_targets} 94 ${startup_target} 95 ${header_install_target} 96 COMMAND "${CMAKE_COMMAND}" 97 -DCMAKE_INSTALL_COMPONENT=libc 98 -DCMAKE_INSTALL_DO_STRIP=1 99 -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") 100