llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
29.25k stars 12.07k forks source link

Absolutely massive+duplicate binaries in each clang build #117029

Open pps83 opened 2 days ago

pps83 commented 2 days ago

Hello Llvm,

why are all the clang/llvm builds ship these absolutely massive binaries that are almost binary exact copies of each other? Like intel's icx 2025 has clang.exe, clang++.exe, clang-cl.exe, clang-cpp.exe. These four binaries are each 110MB in size, by the diff between these is just like a few kilobytes. Similar story goes with 76MB sized ld.lld.exe, lld.exe, lld-link.exe. In the same manner, clang that ships with MS visual studio has these binaries at 119MB and 88MB and other smaller almost identical binaries.

Shouldn't all these be small binaries that simply link to a shared .dll/.so to avoid all that duplication?

nikic commented 2 days ago

These are all symlinks on Linux, which become copies on Windows...

There is ongoing work to allow linking against a common DLL on Windows, which is currently not possible due to platform limitations. See https://github.com/llvm/llvm-project/issues/109483.

Andarwinux commented 2 days ago

Windows symlinks are not enabled by default, otherwise LLVM_TOOL_LLVM_DRIVER_BUILD is a perfect choice.

pps83 commented 2 days ago

These are all symlinks on Linux, which become copies on Windows...

There is ongoing work to allow linking against a common DLL on Windows, which is currently not possible due to platform limitations. See #109483.

That's probably something else, as the binaries are clearly not identical. I read the meta post and I understand what it is, simply takes time to take care of proper visibilty tags for public vs private symbols. One other alternative workaround is to create a single dll/so that simply exports main_clang_cl(...), main_clang_cpp and then tiny executables that could simple forward their main(...) args to the dll/so