On Fri, 22 Mar 2024 10:16:44 GMT, Magnus Ihse Bursie <i...@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

Reply via email to