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