RFR: 8328680: Introduce JDK_LIB, and clean up module native compilation [v2]
Magnus Ihse Bursie
ihse at openjdk.org
Fri Mar 22 11:41:23 UTC 2024
On Fri, 22 Mar 2024 10:16:44 GMT, Magnus Ihse Bursie <ihse at openjdk.org> wrote:
>> This is the first step of several, in which I will clean up the native compilation code as used by modules. In this first step `java.base`, `java.deskop`, `jdk.accessibility` and `jdk.jpackage` are left out, since they require more work. The changes in the remaining modules are trivial by comparison.
>>
>> The changes done here are:
>>
>> 1) A new argument `JDK_LIB` has been introduced, that is used for linking with other libraries produced by the JDK build. As a follow-up, this will be further cleaned up and generalized, but the goal for this change is just to separate them out from external libraries.
>>
>> 2) The list of libraries given to `LIB` and `JDK_LIB` has been sorted in alphabetical order. Note that this change will affect the resulting binaries (since the order libraries are given are stored in the binary), but this change should only be superficial. (If we have symbol clashes between libraries, then we have problems on a whole other level...).
>>
>> 3) The code has been checked for inconsistencies and style guide errors, and a common programming style has been applied to all `Lib.gmk` and `Launcher.gmk` files, making sure that all parts follow best practices.
>>
>> This PR will be followed up by invidual PRs for the modules requiring not jsut trivial cleanup (`java.base`, `java.deskop`, `jdk.accessibility` and `jdk.jpackage`), and a PR which will unify `JDK_LIB` handling across platforms, and automatically apply proper dependencies.
>
> Magnus Ihse Bursie has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix indentation
I can give a spoiler to what the upcoming JDK_LIBS rewrite will do.
Currently, if you want to link with e.g. `jli`, this is what you need to do:
$(eval $(call SetupJdkLibrary, BUILD_LIBMYLIB, \
NAME := mylib, \
EXTRA_HEADER_DIRS := java.base:libjli, \
LDFLAGS_linux := -L$(call FindLibDirForModule, java.base), \
LDFLAGS_macosx := -L$(call FindLibDirForModule, java.base), \
JDK_LIBS_linux := -ljli, \
JDK_LIBS_macosx := -ljli, \
JDK_LIBS_windows := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib, \
))
$(BUILD_LIBMYLIB): $(call FindLib, java.base, jli)
This is cumbersome, and easy to forget (we almost never get it 100% right in any place...).
I intend to replace it with the following, and to have the build system generate the boiler plate automatically:
$(eval $(call SetupJdkLibrary, BUILD_LIBMYLIB, \
NAME := mylib, \
JDK_LIBS := jli, \
))
-------------
PR Comment: https://git.openjdk.org/jdk/pull/18430#issuecomment-2014900723
More information about the build-dev
mailing list