On Thu, 30 May 2024 13:00:21 GMT, Magnus Ihse Bursie <i...@openjdk.org> wrote:

> This patch contains a set of changes to improve static builds. They will pave 
> the way for implementing a full static-only java launcher. The changes here 
> will:
> 
> 1) Make sure non-exported symbols are made local in the static libraries. 
> This means that the risk of symbol conflict is the same for static libraries 
> as for dynamic libraries (i.e. in practice zero, as long as a consistent 
> naming scheme is used for exported functions).
> 
> 2) Remove the work-arounds to exclude duplicated symbols.
> 
> 3) Fix some code in hotspot and the JDK libraries that did not work properly 
> with a static java launcher.
> 
> The latter fixes are copied from or inspired by the work done by @jianglizhou 
> and her team as part of the Project Leyden [Hermetic 
> Java](https://github.com/openjdk/leyden/tree/hermetic-java-runtime).

Some open questions:

* Do `os::lookup_function` need to be implemented on Windows too, for symmetry, 
even if it is only used on Unix platforms?

* Many of the changes in Hotspot boils down to `os::dll_load` doing the wrong 
thing when running with a static build. Perhaps we should provide a better 
function that knows how to find and load a symbol for both static and dynamic 
builds, and use that instead of making a lot of tests for static/dynamic on 
each location we need to look up a symbol from some other JDK library.

* I managed to replace most of the #ifdef STATIC_BUILD with runtime checks. 
There are some places remaining though. Apart from the #ifdefs needed for 
JNI/JVMTI, which will need spec changes to address, there are code in 
java_md_macosx.m, jio.c and awt_Mlib.c that I did not manage to turn into 
runtime checks. They will need some more thorough work than just changing an 
`#ifdef` to an `if () {`.

* And of course, the code in the build system to share all .o files except the 
two linktype files is still under development...

I moved this away from Draft state, since I think it needs some visibility, 
especially since it touches several different parts of the code base, and such 
reviews tend to take time.

I think the code here is good and basically okay to integrate. This patch will 
not on it's own solve the entire problem of building a proper static launcher, 
but it takes several important steps along the way. I think the changes here 
are reasonable to integrate into mainline at this point.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/19478#issuecomment-2140743300
PR Comment: https://git.openjdk.org/jdk/pull/19478#issuecomment-2168635393

Reply via email to