On Fri, 14 Mar 2025 15:41:56 GMT, Joachim Kern <[email protected]> wrote:
> After "JDK-8339480: Build static-jdk image with a statically linked launcher"
> AIX was not able to build the new target. Therefore with "JDK-8345590 AIX
> 'make all' fails after JDK-8339480" the new target was disabled again.
>
> Now with this change we can enable the statically linked launcher target
> again.
> There are 3 things to do.
> 1. Modify `dladdr()`. Because this API does not exist on AIX it is
> implemented based on the `loadquery()` API. Unfortunately, this API does only
> return the name of the executable, but not its path. Beforehand this was no
> problem, because we asked for a loaded library, for which the API provides
> the path. But now we are asking for the executable itself.
> 2. `dladdr()` is differently implemented three times in the openjdk code.
> In the static case I supressed now the usage of the additional modules
> containing version two and three. I know this shouldn't be the final version.
> Magnus mentioned that they have discussed from time to time to have a "basic
> JDK utility lib" that can be shared between hotspot and the JDK libraries. I
> think this is a good idea for the future, but far beyond the scope of this
> PR. The second best thing Magnus proposed is to only have the `dladdr()`
> functionality in Hotspot and then export it. Let's see how the community
> decides.
> 3. Because we lack a linker flag like `whole-archive`, I had to force the
> export of all symbols by creating export files containing all symbols of the
> static libs. I introduced the new rule for the export file generation as
> "raw" make recipes. Magnus claimed to use the `SetupExecute`. Unfortunately I
> was not able to make it function. So I still have my "raw" solution in place,
> but my last try with `SetupExecute` as comment beneath. Help is welcome.
make/StaticLibs.gmk line 116:
> 114: # DEPS := $(STATIC_LIB_FILE), \
> 115: # OUTPUT_FILE := $(STATIC_LIB_EXPORT_FILES), \
> 116: # COMMAND := $(AR) $(ARFLAGS) -w $(patsubst %.exp, %, $@) | $(GREP)
> -v '^\.' | $(AWK) '{print $$1}' | sort -u >$@, \
The problem with using SetupExecute here is using `$@` variables in the command
line. To get this to work you need to delay resolving such variables. It may
work by adding an adequate number of extra `$`, but I'm not sure how many would
be needed or if it would actually work. You could try this, but it's probably
trickier to get right than just doubling:
Suggestion:
# COMMAND := $(AR) $(ARFLAGS) -w $$(patsubst %.exp, %, $$@) | $(GREP) -v
'^.' | $(AWK) '{print $$$$1}' | sort -u >$$@, \
You are probably better off using the explicit output file variable
`$(STATIC_LIB_EXPORT_FILES)`.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/24062#discussion_r1996001131