suggesting fix: cross-compilation is requiring write permissions to bootstrap jdk

Claes Redestad claes.redestad at oracle.com
Tue May 26 15:39:52 UTC 2020


Hi,

I think the proposed flags should do the right thing here. It should be
straightforward to verify since the contents of the generated files
should ideally not change at all on a standard build.

/Claes

On 2020-05-26 17:25, Erik Joelsson wrote:
> Hello,
> 
> On 2020-05-26 08:00, Magnus Ihse Bursie wrote:
>>> On 26/05/2020 11:14 pm, Fedor wrote:
>>>> Hello all!
>>>>
>>>> I've tried to crossbuild jdk using current 
>>>> http://hg.openjdk.java.net/jdk/jdk/ sources and noticed that build 
>>>> requires write permissions to bootstrap jdk.
> 
> Your patch seems to be doing the right thing. I would just like to have 
> Claes verify that the JVM options you are setting are actually having 
> the desired effect. We really shouldn't be putting any files in the 
> INTERIM_IMAGE_DIR as that can possibly be located outside the build 
> directory. Only thing I would want to change is the suffix for the file 
> you call $@.classlist, since $@ is already named "classlist", I would 
> prefer something like $@.tmp or $@.interim, to signal that this is the 
> interim result between the two generation steps.
> 
> Then just to clarify, it's not the BOOT_JDK, but the BUILD_JDK, which is 
> a different concept. This can get tricky so it's important to keep the 
> definitions correct. The BOOT_JDK, which is required to be of version 
> N-1, or possibly N, is used to build a bootstrap version of the javac 
> compiler, which we can then run on the BOOT_JDK to compiler the JDK N 
> java code. We also use it to run most build tools in the build.
> 
> The BUILD_JDK is a concept introduced for cross compiling. In a native 
> build, certain build steps are required to be performed with the newly 
> built JDK. This includes running jmod and jlink as well as generating 
> data used to optimize the JDK image in the jlink step (which is where 
> you are seeing this issue). For a native build, the BUILD_JDK is simply 
> the exploded image jdk we just built. When cross compiling, the default 
> behavior is to just also build enough of the native parts of the JDK for 
> the build platform and use that. You may also supply a BUILD_JDK when 
> configuring a cross compilation build. When doing so you must ensure 
> that it's built from the exact same sources as the JDK you are cross 
> compiling, otherwise results are unpredictable.
> 
> In our internal build setups, we don't use the external BUILD_JDK 
> feature, which is why we have not run into the problem you are reporting 
> here.
> 
> /Erik
> 
>>>> The problem is it tries to write/rewrite class list into bootstrap 
>>>> jdk directory.
>>
>> No, it should write to the INTERIM_IMAGE_DIR.
>>
>> However, I now see that we replace INTERIM_IMAGE_DIR with BUILD_JDK in 
>> GenerateLinkOptData.gmk if we have an external build-jdk. I assume 
>> that is how you have configured. I also assume you are not 
>> cross-compiling.
>>
>> I'm not entirely sure about the thinking here. I can't say for certain 
>> that we really should run HelloClasslist if we have an external 
>> build-jdk. I think I need Erik or Claes to chime in.
>>
>> /Magnus
>>
>>
>>>> I would like to suggest the fix below to solve this problem:
>>>>
>>>>
>>>> diff --git a/make/GenerateLinkOptData.gmk 
>>>> b/make/GenerateLinkOptData.gmk
>>>> --- a/make/GenerateLinkOptData.gmk
>>>> +++ b/make/GenerateLinkOptData.gmk
>>>> @@ -69,10 +69,10 @@
>>>>              -Duser.language=en -Duser.country=US \
>>>>              -cp $(SUPPORT_OUTPUTDIR)/classlist.jar \
>>>>              build.tools.classlist.HelloClasslist $(LOG_DEBUG)
>>>> -       $(GREP) -v HelloClasslist $@.raw > 
>>>> $(INTERIM_IMAGE_DIR)/lib/classlist
>>>> -       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java -Xshare:dump \
>>>> +       $(GREP) -v HelloClasslist $@.raw > $@.classlist
>>>> +       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java -Xshare:dump 
>>>> -XX:SharedClassListFile=$@.classlist -XX:SharedArchiveFile=$@.jsa \
>>>>              -Xmx128M -Xms128M $(LOG_INFO)
>>>> -       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java 
>>>> -XX:DumpLoadedClassList=$@.raw \
>>>> +       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java 
>>>> -XX:DumpLoadedClassList=$@.raw -XX:SharedClassListFile=$@.classlist 
>>>> -XX:SharedArchiveFile=$@.jsa \
>>>> -Djava.lang.invoke.MethodHandle.TRACE_RESOLVE=true \
>>>>              -Duser.language=en -Duser.country=US \
>>>>              --module-path $(SUPPORT_OUTPUTDIR)/classlist.jar \
>>>>
>>>> Please correct me in case if it is wrong alias, or I need to file 
>>>> bug first, or something else.
>>>>
>>>> Best Regards,
>>>> Fedor
>>>>
>>



More information about the build-dev mailing list