[libc-commits] [libc] [libc][uefi] add crt1 (PR #132150)
Petr Hosek via libc-commits
libc-commits at lists.llvm.org
Fri Mar 21 19:46:49 PDT 2025
================
@@ -0,0 +1,48 @@
+function(add_startup_object name)
+ cmake_parse_arguments(
+ "ADD_STARTUP_OBJECT"
+ "ALIAS" # Option argument
+ "SRC" # Single value arguments
+ "DEPENDS;COMPILE_OPTIONS" # Multi value arguments
+ ${ARGN}
+ )
+
+ get_fq_target_name(${name} fq_target_name)
+ if(ADD_STARTUP_OBJECT_ALIAS)
+ 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}
+ SRCS ${ADD_STARTUP_OBJECT_SRC}
+ COMPILE_OPTIONS ${ADD_STARTUP_OBJECT_COMPILE_OPTIONS}
+ ${ADD_STARTUP_OBJECT_UNPARSED_ARGUMENTS}
+ DEPENDS ${ADD_STARTUP_OBJECT_DEPENDS}
+ )
+ set_target_properties(
+ ${fq_target_name}
+ PROPERTIES
+ OUTPUT_NAME ${name}.o
+ )
+endfunction()
+
+add_startup_object(
+ crt1
+ SRCS
+ crt1.cpp
+ DEPENDS
+ libc.src.__support.OSUtil.uefi.uefi_util
----------------
petrhosek wrote:
To have an object file depend on object files (or a library), you'd need to use relocatable linking, see https://maskray.me/blog/2022-11-21-relocatable-linking. We use this approach for Linux `crt0.o`, see: https://github.com/llvm/llvm-project/blob/3840f787a21a66686f5d8bf61877d41f3a65f205/libc/startup/linux/CMakeLists.txt#L114-L119
Unfortunately, as far as I'm aware COFF linkers don't support relocatable linking so that approach isn't going to work. The most straightforward alternative is probably to move `errno_to_uefi_status` definition to the header.
https://github.com/llvm/llvm-project/pull/132150
More information about the libc-commits
mailing list