[libc-commits] [libc] [libc] [startup] add cmake function to merge separated crt1 objects (PR #75413)

via libc-commits libc-commits at lists.llvm.org
Thu Dec 14 14:04:26 PST 2023


================
@@ -1,19 +1,64 @@
+# This function merges multiple objects into a single relocatable object
+#                     cc -r obj1.o obj2.o -o obj.o
+# A relocatable object is an object file that is not fully linked into an
+# executable or a shared library. It is an intermediate file format that can
+# be passed into the linker.
+# A crt object has arch-specific code and arch-agnostic code. To reduce code
+# cohesion, the implementation is splitted into multiple units. As a result,
+# we need to merge them into a single relocatable object.
+function(merge_relocatable_object name)
+  set(obj_list "")
+  set(fq_link_libraries "")
+  get_fq_deps_list(fq_dep_list ${ARGN})
+  foreach(target IN LISTS fq_dep_list)
+    list(APPEND obj_list "$<TARGET_OBJECTS:${target}>")
+    get_target_property(libs ${target} DEPS)
+    list(APPEND fq_link_libraries "${libs}")
+  endforeach()
+  list(REMOVE_DUPLICATES obj_list)
+  list(REMOVE_DUPLICATES fq_link_libraries)
+  get_fq_target_name(${name} fq_name)
+  add_executable(
+    ${fq_name}.relocatable
----------------
lntue wrote:

Can you make the internal target `${fq_name}.__relocatable__` instead?
And this target name is used in several places, so maybe define a variable for it:
```
set(relocatable_target "${fq_name}.__relocatable__")
```

https://github.com/llvm/llvm-project/pull/75413


More information about the libc-commits mailing list