On Thu, Jun 6, 2019 at 10:31 PM Erik Joelsson <erik.joels...@oracle.com> wrote:
>
> Hello,
>
> On 2019-06-05 20:28, Ao Qi wrote:
> > On Thu, Jun 6, 2019 at 10:49 AM Ao Qi <a...@loongson.cn> wrote:
> >> On Thu, Jun 6, 2019 at 4:46 AM Erik Joelsson <erik.joels...@oracle.com> 
> >> wrote:
> >>> Here is a new webrev: http://cr.openjdk.java.net/~erikj/8217739/webrev.03
> > Another question: should "[bootcycle] " be displayed during make
> > bootcycle-images? If yes, should we remove line 164 "LOG_PREFIX :=" of
> > http://cr.openjdk.java.net/~erikj/8217739/webrev.03/make/common/MakeBase.gmk.html
> > ?
>
> It seems you are right. I assumed that by setting LOG_PREFIX on the make
> command line, it would override. I think it's cleaner to initiate the
> variable to empty so that any accidental setting in the environment
> doesn't interfere. This works for the buildjdk call, which calls
> Main.gmk, but doesn't seem to work for bootcycle, which calls Init.gmk.
>
> For now I will just refrain from initializing it in MakeBase.gmk.
>
> Webrev: http://cr.openjdk.java.net/~erikj/8217739/webrev.04

Looks good. Thanks for fixing this!

Cheers,
Ao Qi
>
> >> I (as an Author) am ok with this fix. mips64el zero cross build passed
> >> and javac (to test open a file) worked.
>
> Thanks!
>
> /Erik
>
> >>
> >> UnixConstants.java of build:
> >> .../usr/bin/cc -E -x c -I...
> >>
> >> UnixConstants.java of target:
> >> .../usr/bin/mips64el-linux-gnuabi64-gcc -E -x c
> >> --sysroot=/home/aoqi//chroots/mips64el_stretch/ -I...
> >>
> >> Thanks,
> >> Ao Qi
> >>> The change is in buildjdk-spec.gmk.in where CPP is now also overridden.
> >>>
> >>> /Erik
> >>>
> >>> On 2019-06-05 10:33, Erik Joelsson wrote:
> >>>> Never mind, I found the issue. The reason it worked for me was that we
> >>>> set SYSROOT_CFLAGS for both the target and the build compiler (from
> >>>> using devkits for them). The preprocessor for the target would then
> >>>> act correctly given the --sysroot parameter pointing to a sysroot for
> >>>> the build system.
> >>>>
> >>>> I'm working on a patch where PPC gets overridden with the build
> >>>> compiler in buildjdk-spec.gmk.
> >>>>
> >>>> /Erik
> >>>>
> >>>> On 2019-06-05 08:37, Erik Joelsson wrote:
> >>>>> Hello Ao Qi,
> >>>>>
> >>>>> In my testing, I tried building ppc64le (which I first identified as
> >>>>> generating a UnixConstants.java that differed from an x64 build).
> >>>>> With this patch, the buildjdk and target version of
> >>>>> UnixConstants.java differ the same way. How did you configure your
> >>>>> build? I'm suspecting something in the setup of the buildjdk
> >>>>> compilers is different from my configuration.
> >>>>>
> >>>>> /Erik
> >>>>>
> >>>>> On 2019-06-04 21:48, Ao Qi wrote:
> >>>>>> Hi Erik,
> >>>>>>
> >>>>>> Thank you a lot for taking care of this. I mainly like your approach.
> >>>>>> I tested the patch by cross building mips64-zero, by which we found
> >>>>>> this problem. However, it seems the problem still exists. The reason I
> >>>>>> found is that UnixConstants.java of buildjdk is generated by cross
> >>>>>> compiler, so the macro definitions are defined by the target. Here is
> >>>>>> a preliminary workaround for your reference only (only worked for
> >>>>>> gcc):
> >>>>>>
> >>>>>> $ hg diff make/gensrc/GensrcMisc.gmk
> >>>>>> diff -r f4df9d4201cc make/gensrc/GensrcMisc.gmk
> >>>>>> --- a/make/gensrc/GensrcMisc.gmk Tue Jun 04 16:50:25 2019 -0700
> >>>>>> +++ b/make/gensrc/GensrcMisc.gmk Wed Jun 05 12:39:43 2019 +0800
> >>>>>> @@ -61,6 +61,13 @@
> >>>>>>      CPP_FLAGS += -nologo
> >>>>>>    endif
> >>>>>>
> >>>>>> +ifeq ($(CREATING_BUILDJDK), true)
> >>>>>> +  # Only worked for gcc
> >>>>>> +  TEMP_CPP=gcc -E
> >>>>>> +else
> >>>>>> +  TEMP_CPP=$(CPP)
> >>>>>> +endif
> >>>>>> +
> >>>>>>    # Generate a java source file from a template through the C
> >>>>>> preprocessor for the
> >>>>>>    # target system. First extract the copyright notice at the start
> >>>>>> of the file.
> >>>>>>    # Run the preprocessor. Filter out the default compiler stderr
> >>>>>> output on
> >>>>>> @@ -71,7 +78,7 @@
> >>>>>>    define generate-preproc-src
> >>>>>>     $(call MakeDir, $(@D))
> >>>>>>     ( $(NAWK) '/@@END_COPYRIGHT@@/{exit}1' $< && \
> >>>>>> -   $(CPP) $(CPP_FLAGS) $(SYSROOT_CFLAGS) $(CFLAGS_JDKLIB) $< \
> >>>>>> +   $(TEMP_CPP) $(CPP_FLAGS) $(SYSROOT_CFLAGS) $(CFLAGS_JDKLIB) $< \
> >>>>>>           2> >($(GREP) -v '^$(<F)$$' >&2) \
> >>>>>>           | $(NAWK) '/@@START_HERE@@/,0' \
> >>>>>>           |  $(SED) -e 's/@@START_HERE@@/\/\/ AUTOMATICALLY GENERATED
> >>>>>> FILE - DO NOT EDIT/' \
> >>>>>>
> >>>>>>
> >>>>>> Cheers,
> >>>>>> Ao Qi
> >>>>>>
> >>>>>> On Wed, Jun 5, 2019 at 12:00 AM Erik Joelsson
> >>>>>> <erik.joels...@oracle.com> wrote:
> >>>>>>> Thanks!
> >>>>>>>
> >>>>>>> During testing, I found an intermittent race issue. The command line
> >>>>>>> that runs the interim langtools version of javac still always
> >>>>>>> points to
> >>>>>>> the buildtools/interim-langtools dir of the normal build. This
> >>>>>>> variable
> >>>>>>> also needs to be rewritten in buildjdk-spec.gmk.in. New webrev, only
> >>>>>>> changed in buildjdk-spec.gmk.in:
> >>>>>>>
> >>>>>>> http://cr.openjdk.java.net/~erikj/8217739/webrev.02/
> >>>>>>>
> >>>>>>> /Erik
> >>>>>>>
> >>>>>>> On 2019-06-04 07:53, Tim Bell wrote:
> >>>>>>>> Erik:
> >>>>>>>>
> >>>>>>>> Looks good.
> >>>>>>>>
> >>>>>>>> Tim
> >>>>>>>>
> >>>>>>>>> This is a fix for a problem brought up on this list [1]. The main
> >>>>>>>>> issue
> >>>>>>>>> is that when cross compiling, and creating a buildjdk during the
> >>>>>>>>> build,
> >>>>>>>>> the UnixConstants.java cannot necessarily be reused between the
> >>>>>>>>> target
> >>>>>>>>> JDK and the buildjdk. While investigating this, I came to the
> >>>>>>>>> conclusion
> >>>>>>>>> that we really should stop trying to reuse anything between the
> >>>>>>>>> buildjdk
> >>>>>>>>> and target JDK. It's just becoming too complex to maintain (due
> >>>>>>>>> to the
> >>>>>>>>> intricate interactions with the interim-image,
> >>>>>>>>> generate-link-opt-data
> >>>>>>>>> and exploded-image-optimize targets, causing circular
> >>>>>>>>> dependencies and
> >>>>>>>>> endless incremental rebuilds).
> >>>>>>>>>
> >>>>>>>>> So this fix simply removes all the reuse of buildtools, gensrc
> >>>>>>>>> and java
> >>>>>>>>> compilation when creating a buildjdk. Hopefully this is making
> >>>>>>>>> Main.gmk
> >>>>>>>>> a bit less convoluted.
> >>>>>>>>>
> >>>>>>>>> While working on this, I came up with the idea of adding a log
> >>>>>>>>> prefix
> >>>>>>>>> functionality, to more easily discern which log lines were
> >>>>>>>>> printed by
> >>>>>>>>> the buildjdk build and which were part of the normal build. I
> >>>>>>>>> liked this
> >>>>>>>>> a lot so including that in the same fix, and applied it to the
> >>>>>>>>> bootcycle
> >>>>>>>>> build as well.
> >>>>>>>>>
> >>>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8217739
> >>>>>>>>>
> >>>>>>>>> Webrev:
> >>>>>>>>> http://cr.openjdk.java.net/~erikj/8217739/webrev.01/index.html
> >>>>>>>>>
> >>>>>>>>> /Erik
> >>>>>>>>>
> >>>>>>>>> [1]
> >>>>>>>>> http://mail.openjdk.java.net/pipermail/build-dev/2019-January/024729.html
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>

Reply via email to