On Fri, 14 Mar 2025 17:35:02 GMT, Erik Joelsson <er...@openjdk.org> 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)`.

Thanks Eric, this might help with the command, but my problem is the 
dependency. The rules to generate the export files is not called, because in 
the build output I cannot find any line 'Generating export list for static 
libs'. Can you help out here too?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24062#discussion_r1998375442

Reply via email to