76 lines · plain
1# TODO: Use generic "add_startup_object" https://github.com/llvm/llvm-project/issues/133156 2function(add_startup_object name)3 cmake_parse_arguments(4 "ADD_STARTUP_OBJECT"5 "ALIAS" # Option argument6 "SRC" # Single value arguments7 "DEPENDS;COMPILE_OPTIONS" # Multi value arguments8 ${ARGN}9 )10 11 get_fq_target_name(${name} fq_target_name)12 if(ADD_STARTUP_OBJECT_ALIAS)13 get_fq_deps_list(fq_dep_list ${ADD_STARTUP_OBJECT_DEPENDS})14 add_library(${fq_target_name} ALIAS ${fq_dep_list})15 return()16 endif()17 18 add_object_library(19 ${name}20 SRCS ${ADD_STARTUP_OBJECT_SRC}21 COMPILE_OPTIONS ${ADD_STARTUP_OBJECT_COMPILE_OPTIONS}22 ${ADD_STARTUP_OBJECT_UNPARSED_ARGUMENTS}23 DEPENDS ${ADD_STARTUP_OBJECT_DEPENDS}24 )25 set_target_properties(26 ${fq_target_name}27 PROPERTIES28 OUTPUT_NAME ${name}.o29 )30endfunction()31 32add_entrypoint_object(33 init34 SRCS35 init.cpp36 DEPENDS37 libc.hdr.stdint_proxy38 libc.src.__support.common39 HDRS40 init.h41)42 43add_entrypoint_object(44 fini45 SRCS46 fini.cpp47 DEPENDS48 libc.hdr.stdint_proxy49 libc.src.__support.common50 HDRS51 fini.h52)53 54if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_ARCHITECTURE})55 add_subdirectory(${LIBC_TARGET_ARCHITECTURE})56else()57 message(WARNING "Cannot build 'crt1.o' for ${LIBC_TARGET_ARCHITECTURE} yet.")58 return()59endif()60 61add_startup_object(62 crt163 ALIAS64 DEPENDS65 .${LIBC_TARGET_ARCHITECTURE}.crt166)67 68add_custom_target(libc-startup)69 70set(fq_target_name libc.startup.baremetal.${LIBC_TARGET_ARCHITECTURE}.crt1)71add_dependencies(libc-startup ${fq_target_name})72install(FILES $<TARGET_OBJECTS:${fq_target_name}>73 DESTINATION ${LIBC_INSTALL_LIBRARY_DIR}74 RENAME $<TARGET_PROPERTY:${fq_target_name},OUTPUT_NAME>75 COMPONENT libc)76