RFR: 8349953: Avoid editing AOTConfiguration file in "make test JTREG_AOT_JDK=true" [v5]

Erik Joelsson erikj at openjdk.org
Tue Feb 18 20:56:56 UTC 2025


On Tue, 18 Feb 2025 19:27:58 GMT, Ioi Lam <iklam at openjdk.org> wrote:

>> When running HotSpot jtreg tests in the "AOT mode", for example:
>> 
>> 
>> make test JTREG_AOT_JDK=true open/test/hotspot/jtreg/runtime/stringtable
>> 
>> 
>> Before this PR, in the test set up phase, we record several AOT configuration files by running a few separate Java tools (javac, javap, jlink, and jar), and then combine them together with sed, grep, sort and uniq:
>> 
>> https://github.com/openjdk/jdk/blob/adc3f53d2403cd414a91e71c079b4108b2346da0/make/RunTests.gmk#L723-L744
>> 
>> After [JDK-8348426](https://bugs.openjdk.org/browse/JDK-8348426), the AOT configuration file will change to a binary format and can no longer be edited this way. In preparation for [JDK-8348426](https://bugs.openjdk.org/browse/JDK-8348426), we should change the "JTREG_AOT_JDK=true" set up to run a single Java program that accomplishes the same effect as the current implementation.
>> 
>> ** Changes in this PR **
>> 
>> This PR combines the invocation of these Java tools into a single Java program, so we just have a single AOT configuration file. It also uses the `-XX:ExtraSharedClassListFile` option to include the default classlist from the JDK home directory,
>
> Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Move the contents of SetupAOT.gmk back to RunTests.gmk, as it is not necessary to have the definitions in a stand-alone file

Thank you for helping cleaning this up and moving the compilation of the tool to build time and the test image. Added some more comments.

make/Main.gmk line 757:

> 755: 
> 756: $(eval $(call SetupTarget, build-test-setup-aot, \
> 757:     MAKEFILE := test/BuildJtregSetupAOT, \

Maybe name the file to match the target (i.e. BuildTestSetupAot)? I don't think there is anything actually jtreg specific about this AOT tool we are building, is there?

make/Main.gmk line 758:

> 756: $(eval $(call SetupTarget, build-test-setup-aot, \
> 757:     MAKEFILE := test/BuildJtregSetupAOT, \
> 758:     DEPS := interim-langtools exploded-image build-test-lib, \

I don't think `build-test-lib` is needed.

make/PreInitSupport.gmk line 46:

> 44: # All known make control variables; these are handled in other makefiles
> 45: MAKE_CONTROL_VARIABLES += JDK_FILTER SPEC_FILTER \
> 46:     TEST TEST_JOBS JTREG JTREG_AOT_JDK GTEST MICRO TEST_OPTS TEST_VM_OPTS TEST_DEPS

This isn't how this filter is meant to be used. `JTREG_AOT_JDK` is the internal representation of setting `JTREG=AOT_JDK=...` on the make command line. While it is technically possible to directly set the internal variable, the intended way of setting this is through the `JTREG` control variable. This gives us the ability to validate the input to reduce the chance of typos messing up a test run. So `JTREG_AOT_JDK` should not be added here as we want to be warned when someone uses the internal form.

make/test/BuildJtregSetupAOT.gmk line 29:

> 27: 
> 28: include $(SPEC)
> 29: include MakeBase.gmk

This should be replaced with just `include MakeFileStart.gmk` since [JDK-8349515](https://bugs.openjdk.org/browse/JDK-8349515), and the file should end with `include MakeFileEnd.gmk`. This will declare `all` as the default target and declare `all: $(TARGETS)` at the bottom. You will need to retain the `images` target and the `.PHONY` declaration for `images`.

make/test/BuildJtregSetupAOT.gmk line 41:

> 39: SETUP_AOT_SUPPORT := $(SUPPORT_OUTPUTDIR)/test/jtreg_setup_aot
> 40: SETUP_AOT_JAR     := $(SETUP_AOT_SUPPORT)/jtregSetupAOT.jar
> 41: SETUP_AOT_CLASS   := $(SETUP_AOT_SUPPORT)/classes/ExerciseJDKClasses.class

We do not encourage aligning assignments like this in the makefiles.
https://openjdk.org/groups/build/doc/code-conventions.html

make/test/BuildJtregSetupAOT.gmk line 47:

> 45:     SRC := $(SETUP_AOT_BASEDIR), \
> 46:     BIN := $(SETUP_AOT_SUPPORT)/classes, \
> 47:     JAR := $(SETUP_AOT_JAR), \

If we aren't using the jar, no need to build it.

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

PR Review: https://git.openjdk.org/jdk/pull/23620#pullrequestreview-2624978833
PR Review Comment: https://git.openjdk.org/jdk/pull/23620#discussion_r1960561460
PR Review Comment: https://git.openjdk.org/jdk/pull/23620#discussion_r1960572020
PR Review Comment: https://git.openjdk.org/jdk/pull/23620#discussion_r1960558691
PR Review Comment: https://git.openjdk.org/jdk/pull/23620#discussion_r1960566324
PR Review Comment: https://git.openjdk.org/jdk/pull/23620#discussion_r1960567801
PR Review Comment: https://git.openjdk.org/jdk/pull/23620#discussion_r1960569143


More information about the build-dev mailing list