On Thu, Sep 20, 2018 at 7:36 PM Magnus Ihse Bursie <magnus.ihse.bur...@oracle.com> wrote: > > On 2018-09-20 12:41, Ao Qi wrote: > > On Thu, Sep 20, 2018 at 4:10 PM Magnus Ihse Bursie > <magnus.ihse.bur...@oracle.com> wrote: > > On 2018-09-20 09:26, Ao Qi wrote: > > Hi, > > Is there any options or methods that I can pass additional jdk options > to the boot jdk when I configure jdk/jdk? I found > --with-boot-jdk-jvmargs, but I think it is effective during building > the jdk, not configuring the jdk. > > You are correct, the additional arguments in --with-boot-jdk-jvmargs is only > used during the build, not during configure. > > I used _JAVA_OPTIONS, but it failed to configure (fail to detect jdk > version). I made a patch: > > $ hg diff > diff -r feb4c9e03aed make/autoconf/basics.m4 > --- a/make/autoconf/basics.m4 Tue Sep 18 19:44:27 2018 -0700 > +++ b/make/autoconf/basics.m4 Wed Sep 19 11:44:54 2018 +0800 > @@ -168,7 +168,7 @@ > [ > $ECHO "Check if jvm arg is ok: $1" >&AS_MESSAGE_LOG_FD > $ECHO "Command: $3 $1 -version" >&AS_MESSAGE_LOG_FD > - OUTPUT=`$3 $1 -version 2>&1` > + OUTPUT=`$3 $1 -version 2>&1 | $GREP -v "^Picked up _JAVA_OPTIONS:"` > FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn` > FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""` > if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then > diff -r feb4c9e03aed make/autoconf/boot-jdk.m4 > --- a/make/autoconf/boot-jdk.m4 Tue Sep 18 19:44:27 2018 -0700 > +++ b/make/autoconf/boot-jdk.m4 Wed Sep 19 11:44:54 2018 +0800 > @@ -74,7 +74,7 @@ > BOOT_JDK_FOUND=no > else > # Oh, this is looking good! We probably have found a proper > JDK. Is it the correct version? > - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $HEAD -n 1` > + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | > $GREP -v "^Picked up _JAVA_OPTIONS:" | $HEAD -n 1` > > # Extra M4 quote needed to protect [] in grep expression. > [FOUND_CORRECT_VERSION=`$ECHO $BOOT_JDK_VERSION \ > @@ -90,7 +90,7 @@ > AC_MSG_CHECKING([for Boot JDK]) > AC_MSG_RESULT([$BOOT_JDK]) > AC_MSG_CHECKING([Boot JDK version]) > - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | > $TR '\n\r' ' '` > + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | > $GREP -v "^Picked up _JAVA_OPTIONS:" | $TR '\n\r' ' '` > AC_MSG_RESULT([$BOOT_JDK_VERSION]) > fi # end check jdk version > fi # end check javac > > > > This works for me. The _JAVA_OPTIONS is effective during configure. Is > there some other way to do that (without changing the code)? Or > otherwise is it possible to accept this patch? > > Hm. Using _JAVA_OPTIONS is really not good. It's a very hidden way to > influence the behavior of a running Java process. It might fail if it is not > accepted on both the boot JDK and the newly built JDK. > > I think a better solution would be to add the --with-boot-jdk-jvmargs to the > boot JDK version check. > > Here's an alternative patch. Please try it out and see if it works for you. > It will apply the --with-boot-jdk-jvmargs at all calls to Java. > > This patch works for me, and it passed my test script. Thanks! If this > patch is intended to push into jdk/jdk, just one minor thing: is > JAVA_TOOL_OPTIONS also needed to be considered? > > I didn't even know there was a JAVA_TOOL_OPTIONS. :) Yes, we should handle > that as well. I'll update the patch and put it out for review. Thanks! >
I didn't know it either. I was cruise and grep _JAVA_OPTIONS in hotspot, and found that there is a JAVA_TOOL_OPTIONS. :) Ao Qi > /Magnus > > > Cheers, > Ao Qi > > diff --git a/make/autoconf/basics.m4 b/make/autoconf/basics.m4 > --- a/make/autoconf/basics.m4 > +++ b/make/autoconf/basics.m4 > @@ -168,7 +168,7 @@ > [ > $ECHO "Check if jvm arg is ok: $1" >&AS_MESSAGE_LOG_FD > $ECHO "Command: $3 $1 -version" >&AS_MESSAGE_LOG_FD > - OUTPUT=`$3 $1 -version 2>&1` > + OUTPUT=`$3 $1 $USER_BOOT_JDK_OPTIONS -version 2>&1` > FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn` > FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""` > if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then > diff --git a/make/autoconf/boot-jdk.m4 b/make/autoconf/boot-jdk.m4 > --- a/make/autoconf/boot-jdk.m4 > +++ b/make/autoconf/boot-jdk.m4 > @@ -74,7 +74,17 @@ > BOOT_JDK_FOUND=no > else > # Oh, this is looking good! We probably have found a proper JDK. > Is it the correct version? > - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $HEAD -n 1` > + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" $USER_BOOT_JDK_OPTIONS > -version 2>&1 | $HEAD -n 1` > + if [ [[ "$BOOT_JDK_VERSION" =~ "Picked up _JAVA_OPTIONS" ]] ]; then > + AC_MSG_NOTICE([You have _JAVA_OPTIONS set. This can mess up the > build. Please use --with-boot-jdk-jvmargs instead.]) > + AC_MSG_ERROR([Cannot continue]) > + fi > + if [ [[ "$BOOT_JDK_VERSION" =~ "Unrecognized option" ]] ]; then > + AC_MSG_NOTICE([The specified --with-boot-jdk-jvmargs is invalid > for the tested java]) > + AC_MSG_NOTICE([Error message: "$BOOT_JDK_VERSION".]) > + AC_MSG_NOTICE([Please fix arguments, or point to an explicit > boot JDK which accept these arguments]) > + AC_MSG_ERROR([Cannot continue]) > + fi > > # Extra M4 quote needed to protect [] in grep expression. > [FOUND_CORRECT_VERSION=`$ECHO $BOOT_JDK_VERSION \ > @@ -90,7 +100,7 @@ > AC_MSG_CHECKING([for Boot JDK]) > AC_MSG_RESULT([$BOOT_JDK]) > AC_MSG_CHECKING([Boot JDK version]) > - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR > '\n\r' ' '` > + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" $USER_BOOT_JDK_OPTIONS > -version 2>&1 | $TR '\n\r' ' '` > AC_MSG_RESULT([$BOOT_JDK_VERSION]) > fi # end check jdk version > fi # end check javac > @@ -283,6 +293,11 @@ > AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk], > [path to Boot JDK (used to bootstrap build) @<:@probed@:>@])]) > > + AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs], > + [specify additional arguments to be passed to Boot JDK tools > @<:@none@:>@])]) > + > + USER_BOOT_JDK_OPTIONS="$with_boot_jdk_jvmargs" > + > # We look for the Boot JDK through various means, going from more certain > to > # more of a guess-work. After each test, BOOT_JDK_FOUND is set to "yes" if > # we detected something (if so, the path to the jdk is in BOOT_JDK). But we > @@ -372,10 +387,6 @@ > # Specify jvm options for anything that is run with the Boot JDK. > # Not all JVM:s accept the same arguments on the command line. > # > - AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs], > - [specify JVM arguments to be passed to all java invocations of boot JDK, > overriding the default values, > - e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])]) > - > AC_MSG_CHECKING([flags for boot jdk java command] ) > > # Force en-US environment > @@ -389,8 +400,8 @@ > ADD_JVM_ARG_IF_OK([-Xshare:auto],boot_jdk_jvmargs,[$JAVA]) > fi > > - # Apply user provided options. > - ADD_JVM_ARG_IF_OK([$with_boot_jdk_jvmargs],boot_jdk_jvmargs,[$JAVA]) > + # Finally append user provided options to allow them to override. > + ADD_JVM_ARG_IF_OK([$USER_BOOT_JDK_OPTIONS],boot_jdk_jvmargs,[$JAVA]) > > AC_MSG_RESULT([$boot_jdk_jvmargs]) > > /Magnus > > Cheers, > Ao Qi > > >