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

Fedor fedor.burdun at azul.com
Mon Jun 1 08:39:10 UTC 2020


Hi Claes,

The content of classlist files is the same in both cases (before and 
after change).

And the change with updated file name $@.classlist => $@.interim as 
suggested before.

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 > $@.interim
+       $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java -Xshare:dump 
-XX:SharedClassListFile=$@.interim -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=$@.interim 
-XX:SharedArchiveFile=$@.jsa \
             -Djava.lang.invoke.MethodHandle.TRACE_RESOLVE=true \
             -Duser.language=en -Duser.country=US \
             --module-path $(SUPPORT_OUTPUTDIR)/classlist.jar \



Thanks,
Fedor

On 26.05.2020 18:39, Claes Redestad wrote:
> 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