Hi Erik,
On 22/03/2012 12:07 AM, Erik Joelsson wrote:
As outlined in [1], the build-infra project would like to push the
current work into jdk8 in order to expose it to a wider audience. The
webrevs are made against the jdk8/build forest. In each repository,
there are two kinds of changes:
1. Changes to old makefiles and source code to be compatible with the
new build.
2. The new makefiles
My major concern with the transition here is being able to take existing
knowledge of the build system and be able to figure out where in the new
system certain things are handled. How can I tell if a Makefile is part
of the old build or the new build? Are some both?
It is still unclear to me how cross-compilation is to be set up.
It is unclear to me how the src/closed and make/closed repositories are
supported/handled. Going forward much of what pertains to Oracle JDK
proprietary features, should be moved out of the OpenJDK repository in
my opinion.
Is there a cheat sheet for how to run configure? There are many options
that seems completely irrelevant to what would normally be part of a JDK
build; conversely some obvious flags seem to be missing eg ALT_OUTPUTDIR.
For corba, jaxp and jaxws, all changes of category 1 have already gone
in. For langtools, we are awaiting one more change for introducing the
GenerateNativeHeader annotation. For hotspot, all necessary changes have
been pushed into hotspot-rt. For jdk, there are two webrevs, one with
everything and one with just the category 1 changes, to make it easier
to see them. Finally for the root repository there are only new files in
the common subdir.
root, configure script and makefiles:
http://cr.openjdk.java.net/~erikj/build-infra-m1/webrev-root-new/
<http://cr.openjdk.java.net/%7Eerikj/build-infra-m1/webrev-root-new/>
Is it intended that any single person actually understand the contents
of configure and need to edit it? It has strange contents (like multiple
file copyright headers in places ???).
The BUILD_HEADLESS_ONLY option is not for what it has been used. A
normal JDK build will build a JDK that has both headful and headless
support (property: java.awt.headless=true). The BUILD_HEADLESS_ONLY flag
was an artifact from our embedded build systems for use on platforms
where it was simply not possible to build anything pertaining to the GUI
systems ie no X11 headers or libraries. As has been pointed out recently
BUILD_HEADLESS_ONLY doesn't actually work in current jdk8 (and likely
jdk7 too).
common/makefiles/Makefile
I may be misreading something but the help has
161 $(info make ALL # build images for all
configurations)
but the all: target only builds jdk, not images.
common/makefiles/compress.post
common/makefiles/compress.pre
??? These are just weird. What role do they serve? Were they autogenerated?
common/makefiles/uncompress.sed
??? what is this? Is it autogenerated? How do I know if I need to add
anything to it?
langtools, 1 new makefile:
http://cr.openjdk.java.net/~erikj/build-infra-m1/webrev-langtools-new/
<http://cr.openjdk.java.net/%7Eerikj/build-infra-m1/webrev-langtools-new/>
langtools, GenerateNativeHeader annotation (this is already going in
through tools, but adding it here for reference as the jdk changes
depend on it)
http://cr.openjdk.java.net/~erikj/build-infra-m1/webrev-langtools-nativeheader/
<http://cr.openjdk.java.net/%7Eerikj/build-infra-m1/webrev-langtools-nativeheader/>
Does this pertain only to the new javac server or is this a general
enhancement to javac for 8?
corba, 1 new makefile:
http://cr.openjdk.java.net/~erikj/build-infra-m1/webrev-corba-new/
<http://cr.openjdk.java.net/%7Eerikj/build-infra-m1/webrev-corba-new/>
jaxp, 1 new makefile
http://cr.openjdk.java.net/~erikj/build-infra-m1/webrev-jaxp-new/
<http://cr.openjdk.java.net/%7Eerikj/build-infra-m1/webrev-jaxp-new/>
jaxws, 1 new makefile
http://cr.openjdk.java.net/~erikj/build-infra-m1/webrev-jaxws-new/
<http://cr.openjdk.java.net/%7Eerikj/build-infra-m1/webrev-jaxws-new/>
jdk, just the changes to old files
http://cr.openjdk.java.net/~erikj/build-infra-m1/webrev-jdk-other/
<http://cr.openjdk.java.net/%7Eerikj/build-infra-m1/webrev-jdk-other/>
Most of these changes seem to be related to tool changes rather than
being build system changes.
jdk, all changes including a partial copy of the old makefiles.
http://cr.openjdk.java.net/~erikj/build-infra-m1/webrev-jdk-new/
<http://cr.openjdk.java.net/%7Eerikj/build-infra-m1/webrev-jdk-new/>
Of course, if you prefer you can look at the new makefiles directly in
the build-infra/jdk8 repository forest too.
These changes should not affect the old build at all. To build using the
new build system, change directory to "common/makefiles" and:
Why do I have to cd to common/makefiles ?
../autoconf/configure
make
(make images)
State of the new build (the old build should of course be unaffected):
* Linux 32bit: Works
* Linux 64bit: Works
I tried this today and got a javac error compiling a Java2D demo - as
report to the build-infra list.
Cheers,
David
------
* Windows 32bit: Works
* Windows 64bit: Works
* Solaris i586: Builds but launchers currently unusable
Some notes:
* The old and new build (on linux x64) produce very close to equal
results. There is a comparison script in common/bin/compareimage.sh
with which this can be checked.
* Not all makefiles in jdk have been converted yet, for those that
haven't been, a copy of the old files are used.
* Not all promised features in the java compilation are active and
ready in this milestone. Most notably, it's still not using more
than one cpu and the nifty new dependency tracking is disabled. A
clean build is still pretty fast, but incremental builds aren't as
good as they will be yet.
* On windows, only cygwin is currently supported.
Now please share your feedback!
/Erik
[1]
http://mail.openjdk.java.net/pipermail/build-infra-dev/2012-March/000571.html