On Tue, 20 Aug 2024 14:51:03 GMT, Jan Lahoda <jlah...@openjdk.org> wrote:

>> also interesting, but probably preexisting, and might be platform-specific 
>> (tested on Cygwin):
>> - compile benchmarks with `make test TEST=jaxp:tier1`
>> - edit `test/micro/org/openjdk/bench/javax/crypto/full/AESGCMBench.java`
>> - touch `test/micro/org/openjdk/bench/javax/crypto/full/BenchBase.java`
>> - compile again with `make test TEST=jaxp:tier1` - fails - cannot find 
>> CryptoBase
>> - touch `test/micro/org/openjdk/bench/javax/crypto/full/CryptoBase.java`
>> - run the modified benchmark with `make test TEST=micro:small.AESGCMBench` - 
>> succeeds, but uses the old AESGCMBench.class file
>> 
>> if you touch all 3 files at once (AESGCMBench, BenchBase, CryptoBase) and 
>> then make, the correct (new) file is used.
>> 
>> (I changed 128 to 129 in [this 
>> line](https://github.com/openjdk/jdk/blob/b9d49dcef22ab81a087d890bbac0329a5244a2ef/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMBench.java#L45).
>>  With that change the benchmark throws an exception, so it's easy to check 
>> if the file was recompiled or not)
>
> @djelinski (and others), thanks for finding the problem, and I apologize for 
> nor figuring this out myself. The problem is that when compiling (Java) named 
> modules, if javac needs to read something from a classfile, it will (also) 
> look into the output directory (besides system classes, etc.) So, the 
> incremental build works, because any class that is necessary, but its 
> compilation has been skipped, is load from output directory.
> 
> That is not the case when compiling code inside the unnamed module - javac 
> will not, by itself, look into the output directory for classfiles. And the 
> microbenchmarks are in the unnnamed module. So, when we skip compilation of 
> e.g. `BenchBase`, there's no place where javac could read it from. The 
> traditional way to solve this issue was to put the output directory to the 
> classpath. I have an update for this patch that adds the output directory to 
> the classpath, running tests on it now.
> 
> Sorry for not realizing/finding this myself.

@lahodaj no apologies necessary! I very much appreciate the effort you put into 
improving the build system. Thanks for making it better!

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

PR Comment: https://git.openjdk.org/jdk/pull/20616#issuecomment-2299092652

Reply via email to