RFR: 8339480: Build static-jdk image with a statically linked launcher
Magnus Ihse Bursie
ihse at openjdk.org
Thu Sep 5 10:05:56 UTC 2024
On Wed, 4 Sep 2024 23:24:13 GMT, Jiangli Zhou <jiangli at openjdk.org> wrote:
>> As a prerequisite for Hermetic Java, we need a statically linked `java` launcher. It should behave like the normal, dynamically linked `java` launcher, except that all JDK native libraries should be statically, not dynamically, linked.
>>
>> This patch is the first step towards this goal. It will generate a `static-jdk` image with a statically linked launcher. This launcher is missing several native libs, however, and does therefore not behave like a proper dynamic java. One of the reasons for this is that local symbol hiding in static libraries are not implemented yet, which causes symbol clashes when linking all static libraries together. This will be addressed in an upcoming patch.
>>
>> All changes in the `src` directory are copied from, or inspired by, changes made in [the hermetic-java-runtime branch in Project Leyden](https://github.com/openjdk/leyden/tree/hermetic-java-runtime).
>
> make/StaticLibs.gmk line 1:
>
>> 1: #
>
> Perhaps also consider adopting StaticLink.gmk file name from the https://github.com/openjdk/leyden/tree/hermetic-java-runtime/ branch, as we are mostly doing the static linking here. Creating the static libs is handled elsewhere.
My intention is to move all relevant handling of static linking into this file.
> make/StaticLibs.gmk line 118:
>
>> 116: OPTIMIZATION := HIGH, \
>> 117: STATIC_LAUNCHER := true, \
>> 118: LDFLAGS := $(JAVASTATIC_LINK_LDFLAGS), \
>
> I could be missing something, but I don't see where is $JAVASTATIC_LINK_LDFLAGS defined.
>
> On a related notes, I think we need to include $JVM_LDFLAGS when linking the static "java". See https://bugs.openjdk.org/browse/JDK-8339522?focusedId=14702923&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-14702923.
You are right, this is dead code. Thanks for spotting this.
During my experimentation, I tried passing along LDFLAGS from the individual libraries as well, but it turned out not to be a good idea -- the way we have used them were to modify some special properties on a single dynamic library, which did not apply to the static library as a whole.
However, there is a risk that we in the future need to add LDFLAGS to a library that also needs to be carried over to the static launcher. If this happens, I guess we need to separate between LDFLAGS_ONLY_FOR_THIS_DLL and LDFLAGS_ALSO_FOR_STATIC_LINKING.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20837#discussion_r1745180739
PR Review Comment: https://git.openjdk.org/jdk/pull/20837#discussion_r1745180044
More information about the build-dev
mailing list