On Thu, 9 Nov 2023 00:01:26 GMT, Erik Joelsson <[email protected]> wrote:
>> Consider a simple module, like:
>>
>> module test {}
>>
>>
>> And compile it with JDK 22 and JDK 21 using:
>> javac --release 21
>>
>> The results of the compilations will differ: when compiling with JDK 21, the
>> mandated java.base dependency will get a version, possibly like
>> "21-internal". When compiling with JDK 22, the version of the java.base
>> dependency will be empty.
>>
>> This is a) because `module-info.class`es in `ct.sym` do not have any module
>> version set; b) for JDK N, `--release N` is not using `ct.sym`, but rather
>> `lib/modules`, which may contain a range of version specifiers.
>>
>> This patch does two changes:
>> a) tweaks the `module-info.class`es in `ct.sym`, so that they contain a
>> simple version. For `--release N`, the version is `N`.
>> b) tweaks the whole build so that `ct.sym` is used always for `--release`, a
>> `lib/modules` is never used. I.e. the appropriate classfiles are copied into
>> `ct.sym`. This not only allows for a general approach to module versions,
>> but simplifies the `--release` handling in javac, and should enable future
>> improvements. This is, however, a relatively big change.
>>
>> The use of `lib/modules` for `--release <current>` was made to improve build
>> performance, but the build has been updated since this has been introduced,
>> so the slowdown caused by rebuilding `ct.sym` should be much lower now.
>>
>> With these changes, compiling with `--release N` should record the same
>> dependency versions in `module-info` on JDK N and JDK N + 1.
>
> I have updated the build changes in a branch here:
> https://github.com/erikj79/jdk/commits/pull/16400
>
> In Main.gmk I'm trying to clarify the BUILD_JDK things with comments and
> correcting one of the cases with another conditional. In Gendata.gmk I
> removed some dead code (including the lines I commented on myself) and
> reorganized the prerequisites list as suggested by Magnus. I have also
> introduced a `BUILD_JAVA_SMALL`, we already had the args ready (just with a
> weird name which I corrected). In my testing it reduces the `user` time by
> more than half, so seems worth it.
>
> I'm still verifying the patch across all our build configs.
@erikj79 Thanks for making these changes! That looks great. I think when Jan
has incorporated those changes, the PR looks fine from a build perspective.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/16400#issuecomment-1804296653