> On Oct 24, 2016, at 9:01 PM, Doug Simon <doug.si...@oracle.com> wrote:
> 
>> 
>> On 24 Oct 2016, at 23:24, Christian Thalinger <cthalin...@twitter.com> wrote:
>> 
>> 
>>> On Oct 24, 2016, at 3:48 AM, Erik Joelsson <erik.joels...@oracle.com> wrote:
>>> 
>>> Adding build-dev, which should be included when discussing build issues. 
>>> For any new readers, please see [1] for the full discussion.
>>> In theory it is possible to compile against and run on the exploded image 
>>> during the build, but I do not recommend it. Igor is correct in the build 
>>> team being against that design. The rationale is that it adds a lot of 
>>> complexity to the build. The exploded image cannot be safely run until all 
>>> java modules have been compiled as it introduces races. Maintaining the 
>>> build with such a construct will be very brittle when other changes are 
>>> made. We did allow the gensrc for jdk.vm.ci to run in this way for a short 
>>> time, since it was only supported on Linux x64, where these races are 
>>> rarer, but if this would ever need to be built on Windows, we would be in 
>>> trouble quickly. Luckily, jdk.vm.ci was able to refactor away from needing 
>>> this annotation processing for that module. 
>>> I certainly prefer the reflection solution proposed here, but find it sad 
>>> that it's needed. 
>>> 
>> 
>> The problem I have with this solution is that jdk.vm.ci code is now 
>> restricted to JDK N-1 code.  This might be ok right now because we are able 
>> to work around that issue with reflection but when important features like 
>> Valhalla come around this is a problem.
>> 
>> Value types will be hugely important for JVMCI and its compilers and we 
>> simply cannot just skip one JDK release just because the build system can’t 
>> handle it.
> 
> I agree. However, I suspect large parts of the JDK will also want to leverage 
> Valhalla so I’m guessing the build problem will have to be solved anyway at 
> some point.

Not necessarily.  Java modules can and are using Java features of JDK N because 
they are compiled with a “new javac” that gets compiled before any Java modules 
are compiled:

# The generate old bytecode javac setup uses the new compiler to compile for the
# boot jdk to generate tools that need to be run with the boot jdk.
# Thus we force the target bytecode to the previous JDK version.
# Add -Xlint:-options to avoid the warning about not setting -bootclasspath. 
Since
# it's running on the boot jdk, the default bootclasspath is correct.
$(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE, \

# The generate new bytecode javac setup uses the new compiler to compile for the
# new jdk. This new bytecode might only be possible to run using the new jvm.
$(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE, \

So this will just work as it does already today.  Annotation processors need to 
be handled differently because their code is actually executed.

> Maybe it worth filing a tracking bug to revert these changes at that time.
> 
> -Doug
> 
>> 
>>> 
>>> /Erik
>>> 
>>> [1] 
>>> http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2016-October/024743.html
>>> 
>>> On 2016-10-19 21:54, Igor Veresov wrote:
>>>> 
>>>>> On Oct 19, 2016, at 12:47 PM, Christian Thalinger 
>>>>> <cthalin...@twitter.com> wrote:
>>>>> 
>>>>> 
>>>>>> On Oct 19, 2016, at 9:40 AM, Vladimir Kozlov 
>>>>>> <vladimir.koz...@oracle.com> wrote:
>>>>>> 
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8168317
>>>>>> 
>>>>>> webrev:
>>>>>> http://cr.openjdk.java.net/~kvn/8168317/webrev/
>>>>>> 
>>>>>> When Graal is built as part of JDK it requires first to build an 
>>>>>> annotation processor using boot jdk 8.
>>>>>> After JDK-8167180 changes Services class is referenced by annotation 
>>>>>> processor but the code is using jdk 9 Module API and it can't be used 
>>>>>> with jdk 8.
>>>>> 
>>>>> I left a comment in the bug: Permalink
>>>>> 
>>>>> Basically, it should be possible to use the newly built javac to compile 
>>>>> the annotation processors.  Erik?
>>>> 
>>>> It’s not only about compilation it’s about running it on the bootstrap 
>>>> JDK, which in currently 8.
>>>> 
>>>> igor
>>>> 
>>>>> 
>>>>> Can you paste or upload the .gmk file?
>>>>> 
>>>>>> 
>>>>>> Use reflection instead of Module API and use code only for running with 
>>>>>> jdk 9.
>>>>>> 
>>>>>> Testing with JPRT and JDK build of Graal.
>>>>>> 
>>>>>> Thanks,
>>>>>> Vladimir

Reply via email to