> I'm not sure if I'm formally allowed to be a reviewer, since I've
> wrote the absolute majority of the code myself.

The way I've done this in the past is a "Contributed-by:" line listing
all of the folks that contributed and a "Reviewed-by:" line listing all
the reviewers. Magnus, you reviewed Erik's changes and vice versa...

Dan

On 4/7/16 3:57 AM, Magnus Ihse Bursie wrote:
On 2016-04-06 11:10, Erik Joelsson wrote:
Hello Dan and thank you for the review! I know it's a lot to chew through.

I have incorporated your changes and published a new webrev:
http://cr.openjdk.java.net/~erikj/8152666/webrev.02/

I'm not sure if I'm formally allowed to be a reviewer, since I've wrote the absolute majority of the code myself.

Nevertheless, I've looked through the webrev carefully, including the latest changes by you, and it looks good to me. Ship it! :-)

Just a few minor comments:

In compare.sh.in:
Why the added export of DEBUG_LEVEL? I can't find any reference to it in the changes in compare.sh. Was it references in some earlier change and we missed to export it?

In flags.m4/platform.m4:
It is unfortunate that we needed to make the build/target duplication in this change. It makes the messy addition of the JVM_CFLAGS even messier. :( But then again, we've always planned a follow-up restructuring of the flag handling after the integration of the new Hotspot build system. It just got a bit more urgent.

/Magnus



On 2016-04-05 20:10, Daniel D. Daugherty wrote:


> The new build supports the following variants:
>
>  * server (C1+C2)

The above "server" variant is the "tiered server". Does the new
build system support the "C2 server" variant? What about the
32-bit server and 64-bit server build variants? For example,
on Linux you can have:

  * C1/Client, 32-bit
  * C2/Server, 32-bit
  * Tiered (C1 & C2), 32-bit
  * C2/Server, 64-bit
  * Tiered (C1 + C2), 64-bit

The above wide range of variants is also true for Win*.

There is a way to achieve this even if it's not as straight forward. It's controlled through the new "jvm-feature" setting. To build a completely custom set of features for a jvm, you set the --with-jvm-variants=custom and then define the full feature set using --with-jvm-features=compiler2,... For "server, client, core, minimal, zero and zeroshark" there is a predefined set of features while the custom variant has no features by default.

General
Please make sure all the copyrights are updated.

Done

common/autoconf/basics.m4
    No comments.

common/autoconf/build-performance.m4
    No comments.

common/autoconf/buildjdk-spec.gmk.in
    No comments.

common/autoconf/compare.sh.in
    No comments.

common/autoconf/configure
    No comments.

common/autoconf/configure.ac
    No comments.

common/autoconf/flags.m4
L274: SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG"
    L275:         JVM_CFLAGS="$JVM_CFLAGS -fPIC"

        L275 is new, but seeing it next to L274 makes me wonder if
        $PICFLAG should be used instead of the literal '-fPIC'?
Fixed

    L303:         JVM_CFLAGS="$JVM_CFLAGS -fPIC"
        Same question about literal '-fPIC'.

Not sure, leaving for now. It seems we leave the PICFLAG empty for the JDK build and only add it to the hotspot build. This should be addressed in a followup where we try to align flag usage more between the different libraries.
    For most of the changes to flags.m4, I can't see how any of it
    relates to the new HotSpot build.

    Update: Now I'm wondering if this is one of those files that
        we typically don't review because it is auto generated.
        Sorry, don't remember for sure.
It's a file that should be reviewed, only generated-configure.sh can be ignored. The majority of the changes in here are related to cross compiling in the modular world. When cross compiling now, we need to also build a jvm for the build platform in order to run jlink and jmod when building images. With the old hotspot build, that was simpler, just invoke the hotspot build with some ARCH and compiler related variables set. For the rest of the JDK build, an approximation of flags used was enough so the problem was never fully solved.

In the new build, we derive all the compiler options in configure so I had to introduce a more proper solution. I did this by parameterizing some macros in flags.m4 and platform.m4 so that we can run them twice, once for the "target" toolchain" and one for the "build" toolchain. These are the majority of the changes you are seeing. I also removed the old hard coded "build" versions of certain flag and platform variables.
common/autoconf/generated-configure.sh
    2642 lines changed... I think this is one of those files
    you're supposed to skip in build-dev review... :-|
Yes, please do.

common/autoconf/help.m4
L179: $PRINTF "Which are valid to use depends on the target platform.\n "
    L180:     $PRINTF "%s " $VALID_JVM_FEATURES
        Why are there blanks after the last '\n' on L179 instead of
        at the beginning of L180?

If you do $PRINTF " %s " $VALID_JVM_FEATURES, it adds those spaces between every element in VALID_JVM_FEATURES.
common/autoconf/hotspot-spec.gmk.in
    No comments.

common/autoconf/hotspot.m4
L46: # Check if the specified JVM features are explicitely enabled. To be used in
        Typo: 'explicitely' -> 'explicitly'

    L59: #   server: normal interpreter, and a tiered C1/C2 compiler
        So no support for a C2-only server config?

    L77:   # Have the user listed more than one variant?
        Typo: 'Have' -> 'Has'

fixed
common/autoconf/jdk-options.m4
    No comments other than to say thanks for keeping support
    for 'optimized' builds.

common/autoconf/jdk-version.m4
    No comments.

common/autoconf/lib-std.m4
    No comments.

common/autoconf/libraries.m4
    No comments.

common/autoconf/platform.m4
    No comments, but mind numbing amount of diffs.

Same explanation as for flags.m4
common/autoconf/spec.gmk.in
    No comments.

common/autoconf/toolchain.m4
    No comments.

common/autoconf/version-numbers
    No comments.

common/bin/compare.sh
    No comments.

common/bin/compare_exceptions.sh.incl
    No comments.

make/Jprt.gmk
    No comments.

make/Main.gmk
    No comments other than the 'hotspot-ide-project' target
    looks interesting...

This is the replacement for the visual studio project generator. We currently only support VS here.
make/common/MakeBase.gmk
    No comments.

make/common/NativeCompilation.gmk
    L649:   else ifeq (LOW, $$($1_OPTIMIZATION))
    L650:     $1_OPT_CFLAGS := $(C_O_FLAG_NORM)
    L651:     $1_OPT_CXXFLAGS := $(CXX_O_FLAG_NORM)
        Instead of "_NORM", I was expecting "_LOW".

    L652:   else ifeq (HIGH, $$($1_OPTIMIZATION))
    L653:     $1_OPT_CFLAGS := $(C_O_FLAG_HI)
    L654:     $1_OPT_CXXFLAGS := $(CXX_O_FLAG_HI)
        Instead of "_HI" I was expecting "_HIGH".

The names here were defined way back when we did build infra for the JDK build. I wouldn't mind better alignment in naming the optimization levels.
make/jprt.properties
L136: # Don't disable precompiled headers on windows. It's simply too slow.
        This is a surprise. Not the slowness part, but not being
        able to do a non-PCH JPRT build on Win*. IMHO, it's a
        little  too much motherhood...

Actually, the old hotspot build does not allow disabling of PCH for windows at all. The flag is simply ignored. In the new build, we treat the flag the same on all platforms, so disabling precompiled headers works on Windows. In the current JPRT config, we disable precompiled headers on all fastdebug builds as a way of making sure we aren't breaking that build configuration. We noticed a major build time regression on Windows fastdebug builds in JPRT until we figured out it was caused by this. Since we aren't currently disabling precompiled header on Windows, I see no reason to start now. The build time regression for just building hotspot is around 2m->12m.
jdk/make/Import.gmk
    No comments.

jdk/make/copy/Copy-java.base.gmk
    No comments.

jdk/make/lib/CoreLibraries.gmk
    No comments.

hotspot/makefiles/BuildHotspot.gmk
    No comments.

hotspot/makefiles/Dist.gmk
    L52: define macosx_universalize
        I thought MacOS X universal support was going away?

        Update: OK, I see the mention of 8069540 ahead...

Yeah, we need to be binary the same as the old build for now. Hopefully we can get rid of the universal stuff soon.
L120: # these files are identical, and just pick one arbitrarily to use as souce.
        Typo: 'souce' -> 'source'

    L139: # This might have been defined in a custom extenstion
        Typo: 'extenstion' -> 'extension'

fixed
L168: # NOTE: In the old build, this file was not copied on Windows.
    L169: ifneq ($(OPENJDK_TARGET_OS), windows)
    L170:   $(eval $(call SetupCopyFiles, COPY_JVMTI_HTML, \
        I'm not quite sure why the jvmti.html work is done for
        more than a single platform.

        Update: Thinking about this more... I vaguely remember that
        JVM/TI tracing used to be disabled in Client VMs. Don't know
        if that's still the case.
The jvmti.html file is just copied into the docs bundle later. IMO, the docs bundle should be the same regardless of platform. In practice we only publish the bundle from one build platform anyway.

/Erik

hotspot/makefiles/HotspotCommon.gmk
    No comments.

hotspot/makefiles/gensrc/GenerateSources.gmk
    No comments.

hotspot/makefiles/gensrc/GensrcAdlc.gmk
L98: # NOTE: Windows adlc flags was different in the old build. Is this really
    L99:     # correct?
        John Rose may know the answer to this historical question.

hotspot/makefiles/gensrc/GensrcDtrace.gmk
    No comments.

hotspot/makefiles/gensrc/GensrcJvmti.gmk
    No comments.

hotspot/makefiles/ide/CreateVSProject.gmk
    No comments.

hotspot/makefiles/lib/CompileDtracePostJvm.gmk
    No comments.

hotspot/makefiles/lib/CompileDtracePreJvm.gmk
    No comments.

hotspot/makefiles/lib/CompileJvm.gmk
    No comments.

hotspot/makefiles/lib/CompileLibjsig.gmk
    No comments.

hotspot/makefiles/lib/CompileLibraries.gmk
    No comments.

hotspot/makefiles/lib/JvmFeatures.gmk
    No comments.

hotspot/makefiles/lib/JvmMapfile.gmk
    No comments.

hotspot/makefiles/lib/JvmOverrideFiles.gmk
    No comments.

hotspot/makefiles/mapfiles/libjsig/mapfile-vers-solaris
hotspot/makefiles/mapfiles/libjvm_db/mapfile-vers
hotspot/makefiles/mapfiles/libjvm_dtrace/mapfile-vers
    No comments on the mapfiles.

hotspot/makefiles/symbols/symbols-aix
hotspot/makefiles/symbols/symbols-aix-debug
hotspot/makefiles/symbols/symbols-linux
hotspot/makefiles/symbols/symbols-macosx
hotspot/makefiles/symbols/symbols-shared
hotspot/makefiles/symbols/symbols-solaris
hotspot/makefiles/symbols/symbols-solaris-dtrace-compiler1
hotspot/makefiles/symbols/symbols-solaris-dtrace-compiler2
hotspot/makefiles/symbols/symbols-unix
    No comments on the symbol files.


Thumbs up on this fix; I don't think that anything I noted
above is a show stopper for this changeset.

Dan



/Erik




Reply via email to