On Fri, 6 Dec 2024 15:04:42 GMT, Magnus Ihse Bursie <i...@openjdk.org> wrote:
> For various reasons, we have added some extra flags to the compiler command > line when compiling C/C++ for static libraries. This is a blocker for the > goal of compiling once, linking twice for static and dynamic library. > Fortunately, these extra flags are not needed. > > Note that `-DSTATIC_BUILD=1` is still kept, but set in > `SetupNativeCompilation`. Going forward, this flag should only be sent to the > very small set of files that actually need to know if we're creating a static > or dynamic library. (But that is a future follow-up.) > > The flags I removed, with rationales for removing them: > * (gcc/clang) `ffunction-sections -fdata-sections`: This forces the compiler > to create a separate section for each and every function and data entry. The > idea is that the linker can use this to get rid of dead code when creating > the static library, and hence saving space. The idea is perhaps good, but it > does not work. libjvm.so gets about 10% **larger** with these flags than > without them, so they are not only useless, but actually harmful. > * (gcc/clang) `-DJNIEXPORT='__attribute__((visibility("default")))'`: This is > default now anyway so it does not contribute anything. > * (microsoft)`-DJNIEXPORT=`: The static launcher still does not work fully > on Windows. (It is an ongoing project to get it to work) However, removing > this flag is an essential first step, since it otherwise removes the > `__declspec(dllexport)` annotation, and we are hence renders us unable to > lookup symbols in the static libraries. (I don't understand why this was > introduced in the first place.) > * (gcc) `-Xassembler -mrelax-relocations=no`: This was apparently added for > compatibility with "older" linkers. Unfortunately, no version was given, and > the original author of the code does not remember. I can build with no ill > effects without this flag, so I assume that in the years that has passed, our > toolchain version increments has made this unnecessary. > > There is a small risk of breakage for some old/odd gcc toolchain out there. > But I can see of no other realistic way of solving this than to remove the > flag, and if it breaks somewhere, we can re-introduce the flag, but with a > valid GCC version number attached to it. This pull request has now been integrated. Changeset: cbab40bc Author: Magnus Ihse Bursie <i...@openjdk.org> URL: https://git.openjdk.org/jdk/commit/cbab40bce45a2f58906be49c841178fa1dfd457e Stats: 20 lines in 3 files changed: 0 ins; 19 del; 1 mod 8345683: Remove special flags for files compiled for static libraries Reviewed-by: erikj ------------- PR: https://git.openjdk.org/jdk/pull/22606