[libc-commits] [libc] 9b4999c - [libc] Cleanup the CMake infrastructure to add startup objects.
Siva Chandra Reddy via libc-commits
libc-commits at lists.llvm.org
Tue Feb 7 08:35:56 PST 2023
Author: Siva Chandra Reddy
Date: 2023-02-07T16:35:46Z
New Revision: 9b4999cbea1755f06dd333916e05a52b0893b311
URL: https://github.com/llvm/llvm-project/commit/9b4999cbea1755f06dd333916e05a52b0893b311
DIFF: https://github.com/llvm/llvm-project/commit/9b4999cbea1755f06dd333916e05a52b0893b311.diff
LOG: [libc] Cleanup the CMake infrastructure to add startup objects.
Instead of using a custom target to copy the startup object file to a
file with the desired name, a normal object library with a special
property is used.
Follow up patches will do more cleanup wrt how the startup objects are
used in integration tests.
Reviewed By: jhuber6
Differential Revision: https://reviews.llvm.org/D143464
Added:
Modified:
libc/cmake/modules/LLVMLibCTestRules.cmake
libc/startup/linux/CMakeLists.txt
Removed:
################################################################################
diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake
index 6aa4286d36ecc..459eb57dd8623 100644
--- a/libc/cmake/modules/LLVMLibCTestRules.cmake
+++ b/libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -403,9 +403,6 @@ endfunction(add_libc_fuzzer)
# COMPILE_OPTIONS <list of special compile options for this target>
# )
#
-# The startup target should provide a property named STARTUP_OBJECT which is
-# the full path to the object file produced when the startup system is built.
-#
# The DEPENDS list can be empty. If not empty, it should be a list of
# targets added with add_entrypoint_object or add_object_library.
function(add_integration_test test_name)
@@ -464,22 +461,21 @@ function(add_integration_test test_name)
file(MAKE_DIRECTORY ${sysroot}/include)
set(sysroot_lib ${sysroot}/lib)
file(MAKE_DIRECTORY ${sysroot_lib})
- get_target_property(startup_object_file ${INTEGRATION_TEST_STARTUP} STARTUP_OBJECT)
- get_target_property(crti_object_file libc.startup.linux.crti STARTUP_OBJECT)
- get_target_property(crtn_object_file libc.startup.linux.crtn STARTUP_OBJECT)
+ set(startup_object_file $<TARGET_OBJECTS:${INTEGRATION_TEST_STARTUP}>)
+ set(crti_object_file $<TARGET_OBJECTS:libc.startup.linux.crti>)
+ set(crtn_object_file $<TARGET_OBJECTS:libc.startup.linux.crtn>)
set(dummy_archive $<TARGET_PROPERTY:libc_integration_test_dummy,ARCHIVE_OUTPUT_DIRECTORY>/lib$<TARGET_PROPERTY:libc_integration_test_dummy,ARCHIVE_OUTPUT_NAME>.a)
- if(NOT startup_object_file)
- message(FATAL_ERROR "Missing STARTUP_OBJECT property of ${INTEGRATION_TEST_STARTUP}.")
- endif()
- set(startup_dst ${sysroot_lib}/${LIBC_TARGET_ARCHITECTURE}-linux-gnu/crt1.o)
+ # TODO: Copy the startup files to the correct target-triple directory instead
+ # of to a partly hard-coded directory.
+ set(startup_dst ${sysroot_lib}/${LIBC_TARGET_ARCHITECTURE}-linux-gnu)
add_custom_command(
OUTPUT ${startup_dst} ${sysroot}/lib/crti.o ${sysroot}/lib/crtn.o ${sysroot}/lib/libm.a ${sysroot}/lib/libc++.a
- COMMAND cmake -E copy ${startup_object_file} ${startup_dst}
- COMMAND cmake -E copy ${crti_object_file} ${sysroot}/lib
- COMMAND cmake -E copy ${crtn_object_file} ${sysroot}/lib
+ COMMAND cmake -E copy ${startup_object_file} ${startup_dst}/$<TARGET_PROPERTY:${INTEGRATION_TEST_STARTUP},OUTPUT_NAME>
+ COMMAND cmake -E copy ${crti_object_file} ${sysroot_lib}/$<TARGET_PROPERTY:libc.startup.linux.crti,OUTPUT_NAME>
+ COMMAND cmake -E copy ${crtn_object_file} ${sysroot_lib}/$<TARGET_PROPERTY:libc.startup.linux.crtn,OUTPUT_NAME>
# We copy the dummy archive as libm.a and libc++.a as the compiler drivers expect them.
- COMMAND cmake -E copy ${dummy_archive} ${sysroot}/lib/libm.a
- COMMAND cmake -E copy ${dummy_archive} ${sysroot}/lib/libc++.a
+ COMMAND cmake -E copy ${dummy_archive} ${sysroot_lib}/libm.a
+ COMMAND cmake -E copy ${dummy_archive} ${sysroot_lib}/libc++.a
DEPENDS ${INTEGRATION_TEST_STARTUP} libc.startup.linux.crti libc.startup.linux.crtn libc_integration_test_dummy
)
add_custom_target(
diff --git a/libc/startup/linux/CMakeLists.txt b/libc/startup/linux/CMakeLists.txt
index 5b044b92406a8..007aa30c17d6a 100644
--- a/libc/startup/linux/CMakeLists.txt
+++ b/libc/startup/linux/CMakeLists.txt
@@ -8,53 +8,22 @@ function(add_startup_object name)
)
get_fq_target_name(${name} fq_target_name)
- get_fq_deps_list(fq_deps_list ${ADD_STARTUP_OBJECT_DEPENDS})
if(ADD_STARTUP_OBJECT_ALIAS)
- list(LENGTH ADD_STARTUP_OBJECT_DEPENDS deps_size)
- if(NOT (${deps_size} EQUAL "1"))
- message(FATAL_ERROR "A startup object alias should have exactly one dependency.")
- endif()
- list(GET ADD_STARTUP_OBJECT_DEPENDS 0 dep)
- get_fq_dep_name(fq_dep_name ${dep})
-
- add_custom_target(${fq_target_name})
- add_dependencies(${fq_target_name} ${fq_dep_name})
- get_target_property(startup_object ${fq_dep_name} STARTUP_OBJECT)
- set_target_properties(
- ${fq_target_name}
- PROPERTIES
- "TARGET_TYPE" "${OBJECT_LIBRARY_TARGET_TYPE}"
- "STARTUP_OBJECT" "${startup_object}"
- "OBJECT_FILES" ""
- "DEPS" "${fq_dep_name}"
- )
+ get_fq_deps_list(fq_dep_list ${ADD_STARTUP_OBJECT_DEPENDS})
+ add_library(${fq_target_name} ALIAS ${fq_dep_list})
return()
endif()
add_object_library(
- ${name}.__objects__
+ ${name}
SRCS ${ADD_STARTUP_OBJECT_SRC}
DEPENDS ${ADD_STARTUP_OBJECT_DEPENDS}
COMPILE_OPTIONS ${ADD_STARTUP_OBJECT_COMPILE_OPTIONS}
)
-
- set(objfile ${LIBC_BUILD_DIR}/lib/${name}.o)
- add_custom_command(
- OUTPUT ${objfile}
- COMMAND cp $<TARGET_OBJECTS:${fq_target_name}.__objects__> ${objfile}
- DEPENDS $<TARGET_OBJECTS:${fq_target_name}.__objects__>
- )
- add_custom_target(
- ${fq_target_name}
- DEPENDS ${objfile}
- )
set_target_properties(
${fq_target_name}
PROPERTIES
- "TARGET_TYPE" "${OBJECT_LIBRARY_TARGET_TYPE}"
- "STARTUP_OBJECT" "${objfile}"
- "OBJECT_FILES" ""
- "DEPS" "${fq_target_name}.__objects__"
+ OUTPUT_NAME ${name}.o
)
endfunction()
@@ -89,8 +58,8 @@ set(startup_components crt1 crti crtn)
foreach(target IN LISTS startup_components)
set(fq_target_name libc.startup.linux.${target})
add_dependencies(libc-startup ${fq_target_name})
- get_target_property(startup_object ${fq_target_name} STARTUP_OBJECT)
- install(FILES ${startup_object}
+ install(FILES $<TARGET_OBJECTS:${fq_target_name}>
DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RENAME $<TARGET_PROPERTY:${fq_target_name},OUTPUT_NAME>
COMPONENT libc)
endforeach()
More information about the libc-commits
mailing list