51 lines · plain
1# TODO: Use generic "add_startup_object" https://github.com/llvm/llvm-project/issues/1331562function(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_startup_object(33 crt134 SRCS35 crt1.cpp36 DEPENDS37 libc.config.app_h38 libc.src.__support.OSUtil.uefi.uefi_util39)40 41add_custom_target(libc-startup)42set(startup_components crt1)43foreach(target IN LISTS startup_components)44 set(fq_target_name libc.startup.uefi.${target})45 add_dependencies(libc-startup ${fq_target_name})46 install(FILES $<TARGET_OBJECTS:${fq_target_name}>47 DESTINATION ${LIBC_INSTALL_LIBRARY_DIR}48 RENAME $<TARGET_PROPERTY:${fq_target_name},OUTPUT_NAME>49 COMPONENT libc)50endforeach()51