diff options
author | Daniel Bertalan <dani@danielbertalan.dev> | 2021-10-28 12:26:24 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-11-08 01:39:07 +0100 |
commit | 20bea3feff7f15f413b9b9d6610aef87efa32557 (patch) | |
tree | f04b35638befb40be2aecfef9f035884d21269bd | |
parent | 05cb72e2c32c7535fec0bfce71256f2d958ebf73 (diff) | |
download | serenity-20bea3feff7f15f413b9b9d6610aef87efa32557.zip |
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.
-rw-r--r-- | Userland/Libraries/LibC/CMakeLists.txt | 2 |
1 files changed, 1 insertions, 1 deletions
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 $<TARGET_FILE:ssp> COMMAND ${CMAKE_AR} -x $<TARGET_FILE:LibSystemStatic> COMMAND ${CMAKE_AR} -x $<TARGET_FILE:LibUBSanitizerStatic> - 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 ) |