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

Erik Joelsson erik.joelsson at oracle.com
Tue May 26 15:25:15 UTC 2020


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