-
Notifications
You must be signed in to change notification settings - Fork 715
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enable CMake as the default build system for JDK11 #9195
Comments
I suggest that #8418 (or rather the OMR equivalent) be done before making cmake the default: as things stand, JDKs will balloon to about twice their current size (a (space-)performance regression in my mind). |
yes that is the intention. the extra size also causes startup/footprint regression on some platforms (I think AIX) |
@dnakamura What is the magnitude of the regressions on AIX due to cmake? Thanks |
Updated the title to clarify that this is a jdk11 statement. Once cmake is the default for jdk11, we'll roll it out to jdk.next (15?) and jdk8 as well |
I don't recall the numbers, but I should clarify. Its not CMake directly where there is a regression. The regression is from having the debug symbols present in the shared libs ( which is what you currently get in cmake without the above mentioned pr).
I was thinking about it this shouldn't block osx or windows, as the toolchain semantics there give you split debug info by default |
It is currently very common for some JIT developers to build the compiler component against a previously built JVM - this is done when you want to fix the base JVM you are using for performance work and then build a new JIT to drop in to that JVM for experimental purposes. This is also the way many JIT developers avoid having to do a full rebuild of the whole JVM (which is slow). Will the CMake system support this mode of building? If not how is it proposed to allow development compiler branches to be built against a known fixed VM level? Certainly happy to change processes, but a best practice for doing this would be necessary to maintain productivity of those doing performance work IMO. |
The build instructions need to be updated to specify that cmake is needed and explain how to get it. |
@keithc-ca - #9304 |
@dnakamura thanks for the info - if you could try to document the steps we might need to take to try and make a JIT out of tree build against an already built OpenJDK with openj9 that would be great - I (and likely a few others) can try it out to see how it works since that kind of build is the default way of doing performance work right now. If that procedure doesn't end up working then happy to try and brainstorm some workflow that a) fits the build system and b) achieves what the perf analysis folks want to do. |
@andrewcraik I'd be interested in your experience trying |
+1 |
Issues that need to be resolved before enabling cmake: (Please edit this comment to add items and mark them as resolved when appropriate) |
I suggest we also make any necessary changes so compile warnings in OMR are not ignored; see https://github.com/eclipse/openj9/blob/master/buildenv/jenkins/variables/defaults.yml#L117 and https://github.com/eclipse/openj9/blob/master/buildenv/travis/build-on-travis.sh#L98. |
From community call:
|
Andrew @andrewcraik, FYI: I tried out Devin's instructions from pull request #9376 without any difficulty. |
Edit: nvm, appears that is z/OS's cryptic way of telling you that assembly lines are > 80 chars. |
@dnakamura
tia |
I have changes that are intended to propagate the |
@jjohnst-us At present there isnt a good cross compile story for openj9. There is something there for omr. Basically you run the build twice once with just the native compiler to build native tooling. (tracegen, hookgen etc). On the second pass you use the cross compiler and point cmake to the previously built tools. However I'm not sure how well this will work with openj9/openjdk. I know llvm does allow cross compiling with a single pass using cmake, but I'm not sure if they are relying on compiling with clang, where the single binary can target all the supported platforms. Edit: for an example of a cross compile for omr, see https://github.com/eclipse/omr/blob/master/buildenv/jenkins/jobs/builds/Build-linux_riscv64_cross |
cmake is currently the default against all platforms |
Given that the last of the perf regressions have been fixed up. We can now begin moving to making cmake the default build and deprecating the uma build system.
Given that it has the least baggage in terms of internal builds, I'm proposing starting with osx. Once that is done, following up with the linuxes (x, p, then z), then aix, and finally windows. With each platform, use the following general template to migrate over:
--without-cmake
on the configure line, and my current draft of this functionality also informs the user of this if autoconf is unable to find cmake). Initially this would just be for jdk11 (as it is the most tested with respect to the cmake changes), but after waiting a suitable time to ensure nothing goes horribly wrong, it would be rolled out to the other jdks.Platforms:
Known Problems:
Jit is not build with split debug info, causing the jdk to be unnecessarily largeCurrently the cmake builds are run with warnings as errors disabled (CMake builds with -Werror disabled #9455)Intermitent failure while building ddr 'cannot find symbol generated.OmrBuildFlags' (Failure to build OMR error: cannot find symbol generated.OmrBuildFlags #9126)xlinux cmake builds hang on jsigjnitest (xlinux cmake builds hang on jsigjnitest #9430)Osx build failure on jdk8 (JDK8 Mac build ABORTED : FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL #9425)The text was updated successfully, but these errors were encountered: