[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