From 20bea3feff7f15f413b9b9d6610aef87efa32557 Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Thu, 28 Oct 2021 12:26:24 +0200 Subject: [PATCH] LibC: Fix huge libc.a file size due to the use of `llvm-ar -q` Before this change, we would generate the static C library by running the command `ar -qcs` to collect the various `*.o` files into a single archive. The `q` option stands for "quick append", which simply appends new files to the archive, without replacing any pre-existing entries for the same file. The problem with this is obvious: each LibC rebuild would add approximately 1 MB (the size of a cleanly built libc.a) to the size of the file. It got so bad on my machine that the total file size ended up being 3 gigabytes. Note that this did not affect the GNU toolchain, because, as the `ar(1)` manpage says: > Note - GNU ar treats the command qs as a synonym for r - replacing > already existing files in the archive and appending new ones at the > end. --- Userland/Libraries/LibC/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Userland/Libraries/LibC/CMakeLists.txt b/Userland/Libraries/LibC/CMakeLists.txt index 18469b4113..6df637cf86 100644 --- a/Userland/Libraries/LibC/CMakeLists.txt +++ b/Userland/Libraries/LibC/CMakeLists.txt @@ -139,7 +139,7 @@ add_custom_target(LibCStatic COMMAND ${CMAKE_AR} -x $ COMMAND ${CMAKE_AR} -x $ COMMAND ${CMAKE_AR} -x $ - COMMAND ${CMAKE_AR} -qcs ${CMAKE_CURRENT_BINARY_DIR}/libc.a *.o + COMMAND ${CMAKE_AR} -rcs ${CMAKE_CURRENT_BINARY_DIR}/libc.a *.o WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS LibCStaticWithoutDeps ssp LibSystemStatic LibUBSanitizerStatic )