mirror of
https://github.com/darlinghq/darling-openjdk.git
synced 2024-11-27 06:10:37 +00:00
24bc773808
Reviewed-by: ihse
2492 lines
126 KiB
HTML
2492 lines
126 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<title>OpenJDK Build README</title>
|
|
</head>
|
|
<body style="background-color:aquamarine">
|
|
|
|
<!-- ====================================================== -->
|
|
<table width="100%">
|
|
<tr>
|
|
<td align="center">
|
|
<img alt="OpenJDK"
|
|
src="http://openjdk.java.net/images/openjdk.png"
|
|
width=256>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align=center>
|
|
<h1>OpenJDK Build README</h1>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h2><a name="introduction">Introduction</a></h2>
|
|
<blockquote>
|
|
This README file contains build instructions for the
|
|
<a href="http://openjdk.java.net" target="_blank">OpenJDK</a>.
|
|
Building the source code for the
|
|
OpenJDK
|
|
requires
|
|
a certain degree of technical expertise.
|
|
|
|
<!-- ====================================================== -->
|
|
<h3>!!!!!!!!!!!!!!! THIS IS A MAJOR RE-WRITE of this document. !!!!!!!!!!!!!</h3>
|
|
<blockquote>
|
|
Some Headlines:
|
|
<ul>
|
|
<li>
|
|
The build is now a "<code>configure && make</code>" style build
|
|
</li>
|
|
<li>
|
|
Any GNU make 3.81 or newer should work
|
|
</li>
|
|
<li>
|
|
The build should scale, i.e. more processors should
|
|
cause the build to be done in less wall-clock time
|
|
</li>
|
|
<li>
|
|
Nested or recursive make invocations have been significantly
|
|
reduced, as has the total fork/exec or spawning
|
|
of sub processes during the build
|
|
</li>
|
|
<li>
|
|
Windows MKS usage is no longer supported
|
|
</li>
|
|
<li>
|
|
Windows Visual Studio <code>vsvars*.bat</code> and
|
|
<code>vcvars*.bat</code> files are run automatically
|
|
</li>
|
|
<li>
|
|
Ant is no longer used when building the OpenJDK
|
|
</li>
|
|
<li>
|
|
Use of ALT_* environment variables for configuring the
|
|
build is no longer supported
|
|
</li>
|
|
</ul>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h2><a name="contents">Contents</a></h2>
|
|
<blockquote>
|
|
<ul>
|
|
<li><a href="#introduction">Introduction</a></li>
|
|
|
|
<li><a href="#hg">Use of Mercurial</a>
|
|
<ul>
|
|
<li><a href="#get_source">Getting the Source</a></li>
|
|
<li><a href="#repositories">Repositories</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li><a href="#building">Building</a>
|
|
<ul>
|
|
<li><a href="#setup">System Setup</a>
|
|
<ul>
|
|
<li><a href="#linux">Linux</a></li>
|
|
<li><a href="#solaris">Solaris</a></li>
|
|
<li><a href="#macosx">Mac OS X</a></li>
|
|
<li><a href="#windows">Windows</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#configure">Configure</a></li>
|
|
<li><a href="#make">Make</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#testing">Testing</a></li>
|
|
</ul>
|
|
<hr>
|
|
<ul>
|
|
<li><a href="#hints">Appendix A: Hints and Tips</a>
|
|
<ul>
|
|
<li><a href="#faq">FAQ</a></li>
|
|
<li><a href="#performance">Build Performance Tips</a></li>
|
|
<li><a href="#troubleshooting">Troubleshooting</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#gmake">Appendix B: GNU Make Information</a></li>
|
|
<li><a href="#buildenvironments">Appendix C: Build Environments</a></li>
|
|
|
|
<!-- Leave out
|
|
<li><a href="#mapping">Appendix D: Mapping Old Builds to the New Builds</a></li>
|
|
-->
|
|
|
|
</ul>
|
|
</blockquote>
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h2><a name="hg">Use of Mercurial</a></h2>
|
|
<blockquote>
|
|
The OpenJDK sources are maintained with the revision control system
|
|
<a href="http://mercurial.selenic.com/wiki/Mercurial">Mercurial</a>.
|
|
If you are new to Mercurial, please see the
|
|
<a href="http://mercurial.selenic.com/wiki/BeginnersGuides">
|
|
Beginner Guides</a>
|
|
or refer to the <a href="http://hgbook.red-bean.com/">
|
|
Mercurial Book</a>.
|
|
The first few chapters of the book provide an excellent overview of
|
|
Mercurial, what it is and how it works.
|
|
<br>
|
|
For using Mercurial with the OpenJDK refer to the
|
|
<a href="http://openjdk.java.net/guide/repositories.html#installConfig">
|
|
Developer Guide: Installing and Configuring Mercurial</a>
|
|
section for more information.
|
|
|
|
<h3><a name="get_source">Getting the Source</a></h3>
|
|
<blockquote>
|
|
To get the entire set of OpenJDK Mercurial repositories
|
|
use the script <code>get_source.sh</code> located in the
|
|
root repository:
|
|
<blockquote>
|
|
<code>
|
|
hg clone http://hg.openjdk.java.net/jdk9/jdk9
|
|
<i>YourOpenJDK</i>
|
|
<br>
|
|
cd <i>YourOpenJDK</i>
|
|
<br>
|
|
bash ./get_source.sh
|
|
</code>
|
|
</blockquote>
|
|
Once you have all the repositories, keep in mind that each
|
|
repository is its own independent repository.
|
|
You can also re-run <code>./get_source.sh</code> anytime to
|
|
pull over all the latest changesets in all the repositories.
|
|
This set of nested repositories has been given the term
|
|
"forest" and there are various ways to apply the same
|
|
<code>hg</code> command to each of the repositories.
|
|
For example, the script <code>make/scripts/hgforest.sh</code>
|
|
can be used to repeat the same <code>hg</code>
|
|
command on every repository, e.g.
|
|
<blockquote>
|
|
<code>
|
|
cd <i>YourOpenJDK</i>
|
|
<br>
|
|
bash ./make/scripts/hgforest.sh status
|
|
</code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
<h3><a name="repositories">Repositories</a></h3>
|
|
<blockquote>
|
|
<p>The set of repositories and what they contain:</p>
|
|
<table border="1">
|
|
<thead>
|
|
<tr>
|
|
<th>Repository</th>
|
|
<th>Contains</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>
|
|
. (root)
|
|
</td>
|
|
<td>
|
|
common configure and makefile logic
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
hotspot
|
|
</td>
|
|
<td>
|
|
source code and make files for building
|
|
the OpenJDK Hotspot Virtual Machine
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
langtools
|
|
</td>
|
|
<td>
|
|
source code for the OpenJDK javac and language tools
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
jdk
|
|
</td>
|
|
<td>
|
|
source code and make files for building
|
|
the OpenJDK runtime libraries and misc files
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
jaxp
|
|
</td>
|
|
<td>
|
|
source code for the OpenJDK JAXP functionality
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
jaxws
|
|
</td>
|
|
<td>
|
|
source code for the OpenJDK JAX-WS functionality
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
corba
|
|
</td>
|
|
<td>
|
|
source code for the OpenJDK Corba functionality
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
nashorn
|
|
</td>
|
|
<td>
|
|
source code for the OpenJDK JavaScript implementation
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</blockquote>
|
|
|
|
<h3><a name="guidelines">Repository Source Guidelines</a></h3>
|
|
<blockquote>
|
|
There are some very basic guidelines:
|
|
<ul>
|
|
<li>
|
|
Use of whitespace in source files
|
|
(.java, .c, .h, .cpp, and .hpp files)
|
|
is restricted.
|
|
No TABs, no trailing whitespace on lines, and files
|
|
should not terminate in more than one blank line.
|
|
</li>
|
|
<li>
|
|
Files with execute permissions should not be added
|
|
to the source repositories.
|
|
</li>
|
|
<li>
|
|
All generated files need to be kept isolated from
|
|
the files
|
|
maintained or managed by the source control system.
|
|
The standard area for generated files is the top level
|
|
<code>build/</code> directory.
|
|
</li>
|
|
<li>
|
|
The default build process should be to build the product
|
|
and nothing else, in one form, e.g. a product (optimized),
|
|
debug (non-optimized, -g plus assert logic), or
|
|
fastdebug (optimized, -g plus assert logic).
|
|
</li>
|
|
<li>
|
|
The <tt>.hgignore</tt> file in each repository
|
|
must exist and should
|
|
include <tt>^build/</tt>, <tt>^dist/</tt> and
|
|
optionally any
|
|
<tt>nbproject/private</tt> directories.
|
|
<strong>It should NEVER</strong> include
|
|
anything in the
|
|
<tt>src/</tt> or <tt>test/</tt>
|
|
or any managed directory area of a repository.
|
|
</li>
|
|
<li>
|
|
Directory names and file names should never contain
|
|
blanks or
|
|
non-printing characters.
|
|
</li>
|
|
<li>
|
|
Generated source or binary files should NEVER be added to
|
|
the repository (that includes <tt>javah</tt> output).
|
|
There are some exceptions to this rule, in particular
|
|
with some of the generated configure scripts.
|
|
</li>
|
|
<li>
|
|
Files not needed for typical building
|
|
or testing of the repository
|
|
should not be added to the repository.
|
|
</li>
|
|
</ul>
|
|
</blockquote>
|
|
|
|
</blockquote>
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h2><a name="building">Building</a></h2>
|
|
<blockquote>
|
|
The very first step in building the OpenJDK is making sure the
|
|
system itself has everything it needs to do OpenJDK builds.
|
|
Once a system is setup, it generally doesn't need to be done again.
|
|
<br>
|
|
Building the OpenJDK is now done with running a
|
|
<a href="#configure"><code>configure</code></a>
|
|
script which will try and find and verify you have everything
|
|
you need, followed by running
|
|
<a href="#gmake"><code>make</code></a>, e.g.
|
|
<blockquote>
|
|
<b>
|
|
<code>
|
|
bash ./configure<br>
|
|
make all
|
|
</code>
|
|
</b>
|
|
</blockquote>
|
|
Where possible the <code>configure</code> script will attempt to located the
|
|
various components in the default locations or via component
|
|
specific variable settings.
|
|
When the normal defaults fail or components cannot be found,
|
|
additional <code>configure</code> options may be necessary to help <code>configure</code>
|
|
find the necessary tools for the build, or you may need to
|
|
re-visit the setup of your system due to missing software
|
|
packages.
|
|
<br>
|
|
<strong>NOTE:</strong> The <code>configure</code> script
|
|
file does not have
|
|
execute permissions and will need to be explicitly run with
|
|
<code>bash</code>,
|
|
see the <a href="#guidelines">source guidelines</a>.
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h3><a name="setup">System Setup</a></h3>
|
|
<blockquote>
|
|
Before even attempting to use a system to build the OpenJDK
|
|
there are some very basic system setups needed.
|
|
For all systems:
|
|
<ul>
|
|
<li>
|
|
Be sure the GNU make utility is version 3.81 or newer,
|
|
e.g. run "<code>make -version</code>"
|
|
</li>
|
|
<li>
|
|
Install a
|
|
<a name="bootjdk">Bootstrap JDK</a>.
|
|
All OpenJDK builds require access to a previously released
|
|
JDK called the <i>bootstrap JDK</i> or <i>boot JDK.</i>
|
|
The general rule is that the bootstrap JDK
|
|
must be an instance of the previous major
|
|
release of the JDK. In addition, there may be
|
|
a requirement to use a release at or beyond a
|
|
particular update level.
|
|
<br> <br>
|
|
|
|
<b><i>Building JDK 9 requires JDK 8. JDK 9
|
|
developers should not use JDK 9 as the boot
|
|
JDK, to ensure that JDK 9 dependencies are
|
|
not introduced into the parts of the system
|
|
that are built with JDK 8.</i></b>
|
|
|
|
<br> <br>
|
|
The JDK 8 binaries can be downloaded from Oracle's
|
|
<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"
|
|
target="_blank">JDK 8 download site</a>.
|
|
For build performance reasons it
|
|
is very important that this bootstrap JDK be made available
|
|
on the local disk of the machine doing the build.
|
|
You should add its <code>bin</code> directory
|
|
to the <code>PATH</code> environment variable.
|
|
If <code>configure</code> has any issues finding this JDK, you may
|
|
need to use the <code>configure</code> option
|
|
<code>--with-boot-jdk</code>.
|
|
</li>
|
|
<li>
|
|
Ensure that GNU make, the Bootstrap JDK,
|
|
and the compilers are all
|
|
in your PATH environment variable
|
|
</li>
|
|
</ul>
|
|
And for specific systems:
|
|
<table border="1">
|
|
<thead>
|
|
<tr>
|
|
<th>Linux</th>
|
|
<th>Solaris</th>
|
|
<th>Windows</th>
|
|
<th>Mac OS X</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>
|
|
Install all the software development
|
|
packages needed including
|
|
<a href="#alsa">alsa</a>,
|
|
<a href="#freetype">freetype</a>,
|
|
<a href="#cups">cups</a>, and
|
|
<a href="#xrender">xrender</a>.
|
|
<br>
|
|
See
|
|
<a href="#SDBE">specific system packages</a>.
|
|
</td>
|
|
<td>
|
|
Install all the software development
|
|
packages needed including
|
|
<a href="#studio">Studio Compilers</a>,
|
|
<a href="#freetype">freetype</a>,
|
|
<a href="#cups">cups</a>, and
|
|
<a href="#xrender">xrender</a>.
|
|
<br>
|
|
See
|
|
<a href="#SDBE">specific system packages</a>.
|
|
</td>
|
|
<td>
|
|
<ul>
|
|
<li>
|
|
Install one of
|
|
<a href="#cygwin">CYGWIN</a> or
|
|
<a href="#msys">MinGW/MSYS</a>
|
|
</li>
|
|
<li>
|
|
Install
|
|
<a href="#vs2010">Visual Studio 2010</a>
|
|
</li>
|
|
</ul>
|
|
</td>
|
|
<td>
|
|
Install
|
|
<a href="https://developer.apple.com/xcode/">XCode 4.5.2</a>
|
|
and also install the "Command line tools" found under the
|
|
preferences pane "Downloads"
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h4><a name="linux">Linux</a></h4>
|
|
<blockquote>
|
|
With Linux, try and favor the system packages over
|
|
building your own
|
|
or getting packages from other areas.
|
|
Most Linux builds should be possible with the system's
|
|
available packages.
|
|
<br>
|
|
Note that some Linux systems have a habit of pre-populating
|
|
your environment variables for you, for example <code>JAVA_HOME</code>
|
|
might get pre-defined for you to refer to the JDK installed on
|
|
your Linux system.
|
|
You will need to unset <code>JAVA_HOME</code>.
|
|
It's a good idea to run <code>env</code> and verify the
|
|
environment variables you are getting from the default system
|
|
settings make sense for building the OpenJDK.
|
|
|
|
</blockquote>
|
|
|
|
<h4><a name="solaris">Solaris</a></h4>
|
|
<blockquote>
|
|
<h5><a name="studio">Studio Compilers</a></h5>
|
|
<blockquote>
|
|
At a minimum, the
|
|
<a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.htm" target="_blank">
|
|
Studio 12 Update 1 Compilers</a>
|
|
(containing version 5.10 of the C and C++ compilers) is required,
|
|
including specific patches.
|
|
<p>
|
|
The Solaris SPARC patch list is:
|
|
<ul>
|
|
<li>
|
|
118683-05: SunOS 5.10: Patch for profiling libraries and assembler
|
|
</li>
|
|
<li>
|
|
119963-21: SunOS 5.10: Shared library patch for C++
|
|
</li>
|
|
<li>
|
|
120753-08: SunOS 5.10: Microtasking libraries (libmtsk) patch
|
|
</li>
|
|
<li>
|
|
128228-09: Sun Studio 12 Update 1: Patch for Sun C++ Compiler
|
|
</li>
|
|
<li>
|
|
141860-03: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
|
|
</li>
|
|
<li>
|
|
141861-05: Sun Studio 12 Update 1: Patch for Sun C Compiler
|
|
</li>
|
|
<li>
|
|
142371-01: Sun Studio 12.1 Update 1: Patch for dbx
|
|
</li>
|
|
<li>
|
|
143384-02: Sun Studio 12 Update 1: Patch for debuginfo handling
|
|
</li>
|
|
<li>
|
|
143385-02: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
|
|
</li>
|
|
<li>
|
|
142369-01: Sun Studio 12.1: Patch for Performance Analyzer Tools
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
The Solaris X86 patch list is:
|
|
<ul>
|
|
<li>
|
|
119961-07: SunOS 5.10_x86, x64, Patch for profiling libraries and assembler
|
|
</li>
|
|
<li>
|
|
119964-21: SunOS 5.10_x86: Shared library patch for C++_x86
|
|
</li>
|
|
<li>
|
|
120754-08: SunOS 5.10_x86: Microtasking libraries (libmtsk) patch
|
|
</li>
|
|
<li>
|
|
141858-06: Sun Studio 12 Update 1_x86: Sun Compiler Common patch for x86 backend
|
|
</li>
|
|
<li>
|
|
128229-09: Sun Studio 12 Update 1_x86: Patch for C++ Compiler
|
|
</li>
|
|
<li>
|
|
142363-05: Sun Studio 12 Update 1_x86: Patch for C Compiler
|
|
</li>
|
|
<li>
|
|
142368-01: Sun Studio 12.1_x86: Patch for Performance Analyzer Tools
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
Place the <code>bin</code> directory in <code>PATH</code>.
|
|
<p>
|
|
The Oracle Solaris Studio Express compilers at:
|
|
<a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index-jsp-142582.html" target="_blank">
|
|
Oracle Solaris Studio Express Download site</a>
|
|
are also an option, although these compilers have not
|
|
been extensively used yet.
|
|
</blockquote>
|
|
|
|
</blockquote> <!-- Solaris -->
|
|
|
|
<h4><a name="windows">Windows</a></h4>
|
|
<blockquote>
|
|
|
|
<h5><a name="toolkit">Windows Unix Toolkit</a></h5>
|
|
<blockquote>
|
|
Building on Windows requires a Unix-like environment, notably a
|
|
Unix-like shell.
|
|
There are several such environments available of which
|
|
<a href="http://www.cygwin.com/">Cygwin</a> and
|
|
<a href="http://www.mingw.org/wiki/MSYS">MinGW/MSYS</a> are
|
|
currently supported for
|
|
the OpenJDK build. One of the differences of these
|
|
systems from standard Windows tools is the way
|
|
they handle Windows path names, particularly path names which contain
|
|
spaces, backslashes as path separators and possibly drive letters.
|
|
Depending
|
|
on the use case and the specifics of each environment these path
|
|
problems can
|
|
be solved by a combination of quoting whole paths, translating
|
|
backslashes to
|
|
forward slashes, escaping backslashes with additional backslashes and
|
|
translating the path names to their
|
|
<a href="http://en.wikipedia.org/wiki/8.3_filename">
|
|
"8.3" version</a>.
|
|
|
|
<h6><a name="cygwin">CYGWIN</a></h6>
|
|
<blockquote>
|
|
CYGWIN is an open source, Linux-like environment which tries to emulate
|
|
a complete POSIX layer on Windows. It tries to be smart about path names
|
|
and can usually handle all kinds of paths if they are correctly quoted
|
|
or escaped although internally it maps drive letters <code><drive>:</code>
|
|
to a virtual directory <code>/cygdrive/<drive></code>.
|
|
<p>
|
|
You can always use the <code>cygpath</code> utility to map pathnames with spaces
|
|
or the backslash character into the <code>C:/</code> style of pathname
|
|
(called 'mixed'), e.g. <code>cygpath -s -m "<i>path</i>"</code>.
|
|
</p>
|
|
<p>
|
|
Note that the use of CYGWIN creates a unique problem with regards to
|
|
setting <a href="#path"><code>PATH</code></a>. Normally on Windows
|
|
the <code>PATH</code> variable contains directories
|
|
separated with the ";" character (Solaris and Linux use ":").
|
|
With CYGWIN, it uses ":", but that means that paths like "C:/path"
|
|
cannot be placed in the CYGWIN version of <code>PATH</code> and
|
|
instead CYGWIN uses something like <code>/cygdrive/c/path</code>
|
|
which CYGWIN understands, but only CYGWIN understands.
|
|
</p>
|
|
<p>
|
|
The OpenJDK build requires CYGWIN version 1.7.16 or newer.
|
|
Information about CYGWIN can
|
|
be obtained from the CYGWIN website at
|
|
<a href="http://www.cygwin.com" target="_blank">www.cygwin.com</a>.
|
|
</p>
|
|
<p>
|
|
By default CYGWIN doesn't install all the tools required for building
|
|
the OpenJDK.
|
|
Along with the default installation, you need to install
|
|
the following tools.
|
|
<blockquote>
|
|
<table border="1">
|
|
<thead>
|
|
<tr>
|
|
<td>Binary Name</td>
|
|
<td>Category</td>
|
|
<td>Package</td>
|
|
<td>Description</td>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>ar.exe</td>
|
|
<td>Devel</td>
|
|
<td>binutils</td>
|
|
<td>
|
|
The GNU assembler, linker and binary utilities
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>make.exe</td>
|
|
<td>Devel</td>
|
|
<td>make</td>
|
|
<td>
|
|
The GNU version of the 'make' utility built for CYGWIN
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>m4.exe</td>
|
|
<td>Interpreters</td>
|
|
<td>m4</td>
|
|
<td>
|
|
GNU implementation of the traditional Unix macro
|
|
processor
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>cpio.exe</td>
|
|
<td>Utils</td>
|
|
<td>cpio</td>
|
|
<td>
|
|
A program to manage archives of files
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>gawk.exe</td>
|
|
<td>Utils</td>
|
|
<td>awk</td>
|
|
<td>
|
|
Pattern-directed scanning and processing language
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>file.exe</td>
|
|
<td>Utils</td>
|
|
<td>file</td>
|
|
<td>
|
|
Determines file type using 'magic' numbers
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>zip.exe</td>
|
|
<td>Archive</td>
|
|
<td>zip</td>
|
|
<td>
|
|
Package and compress (archive) files
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>unzip.exe</td>
|
|
<td>Archive</td>
|
|
<td>unzip</td>
|
|
<td>
|
|
Extract compressed files in a ZIP archive
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>free.exe</td>
|
|
<td>System</td>
|
|
<td>procps</td>
|
|
<td>
|
|
Display amount of free and used memory in the system
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</blockquote>
|
|
Note that the CYGWIN software can conflict with other non-CYGWIN
|
|
software on your Windows system.
|
|
CYGWIN provides a
|
|
<a href="http://cygwin.com/faq/faq.using.html" target="_blank">FAQ</a> for
|
|
known issues and problems, of particular interest is the
|
|
section on
|
|
<a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
|
|
BLODA (applications that interfere with CYGWIN)</a>.
|
|
</blockquote>
|
|
|
|
<h6><a name="msys">MinGW/MSYS</a></h6>
|
|
<blockquote>
|
|
MinGW ("Minimalist GNU for Windows") is a collection of free Windows
|
|
specific header files and import libraries combined with GNU toolsets that
|
|
allow one to produce native Windows programs that do not rely on any
|
|
3rd-party C runtime DLLs. MSYS is a supplement to MinGW which allows building
|
|
applications and programs which rely on traditional UNIX tools to
|
|
be present. Among others this includes tools like <code>bash</code>
|
|
and <code>make</code>.
|
|
See <a href="http://www.mingw.org/wiki/MSYS" target="_blank">MinGW/MSYS</a>
|
|
for more information.
|
|
<p>
|
|
Like Cygwin, MinGW/MSYS can handle different types of path formats. They
|
|
are internally converted to paths with forward slashes and drive letters
|
|
<code><drive>:</code> replaced by a virtual
|
|
directory <code>/<drive></code>. Additionally, MSYS automatically
|
|
detects binaries compiled for the MSYS environment and feeds them with the
|
|
internal, Unix-style path names. If native Windows applications are called
|
|
from within MSYS programs their path arguments are automatically converted
|
|
back to Windows style path names with drive letters and backslashes as
|
|
path separators. This may cause problems for Windows applications which
|
|
use forward slashes as parameter separator (e.g. <code>cl /nologo /I</code>)
|
|
because MSYS may wrongly <a href="http://mingw.org/wiki/Posix_path_conversion">
|
|
replace such parameters by drive letters</a>.
|
|
</p>
|
|
<p>
|
|
In addition to the tools which will be installed
|
|
by default, you have
|
|
to manually install the
|
|
<code>msys-zip</code> and
|
|
<code>msys-unzip</code> packages.
|
|
This can be easily done with the MinGW command line installer:
|
|
<blockquote>
|
|
<code>mingw-get.exe install msys-zip</code>
|
|
<br>
|
|
<code>mingw-get.exe install msys-unzip</code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
</blockquote>
|
|
|
|
<h5><a name="vs2010">Visual Studio 2010 Compilers</a></h5>
|
|
<blockquote>
|
|
<p>
|
|
The 32-bit and 64-bit OpenJDK Windows build requires
|
|
Microsoft Visual Studio C++ 2010 (VS2010) Professional
|
|
Edition or Express compiler.
|
|
The compiler and other tools are expected to reside
|
|
in the location defined by the variable
|
|
<code>VS100COMNTOOLS</code> which
|
|
is set by the Microsoft Visual Studio installer.
|
|
</p>
|
|
<p>
|
|
Only the C++ part of VS2010 is needed.
|
|
Try to let the installation go to the default
|
|
install directory.
|
|
Always reboot your system after installing VS2010.
|
|
The system environment variable VS100COMNTOOLS
|
|
should be
|
|
set in your environment.
|
|
</p>
|
|
<p>
|
|
Make sure that TMP and TEMP are also set
|
|
in the environment
|
|
and refer to Windows paths that exist,
|
|
like <code>C:\temp</code>,
|
|
not <code>/tmp</code>, not <code>/cygdrive/c/temp</code>,
|
|
and not <code>C:/temp</code>.
|
|
<code>C:\temp</code> is just an example,
|
|
it is assumed that this area is
|
|
private to the user, so by default
|
|
after installs you should
|
|
see a unique user path in these variables.
|
|
</p>
|
|
</blockquote>
|
|
|
|
|
|
</blockquote> <!-- Windows -->
|
|
|
|
<h4><a name="macosx">Mac OS X</a></h4>
|
|
<blockquote>
|
|
Make sure you get the right XCode version.
|
|
</blockquote> <!-- Mac OS X -->
|
|
|
|
</blockquote>
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h3><a name="configure">Configure</a></h3>
|
|
<blockquote>
|
|
The basic invocation of the <code>configure</code> script
|
|
looks like:
|
|
<blockquote>
|
|
<b><code>bash ./configure [<i>options</i>]</code></b>
|
|
</blockquote>
|
|
This will create an output directory containing the
|
|
"configuration" and setup an area for the build result.
|
|
This directory typically looks like:
|
|
<blockquote>
|
|
<b><code>build/linux-x64-normal-server-release</code></b>
|
|
</blockquote>
|
|
<code>configure</code> will try to figure out what system you are running on
|
|
and where all necessary build components are.
|
|
If you have all prerequisites for building installed,
|
|
it should find everything.
|
|
If it fails to detect any component automatically,
|
|
it will exit and inform you about the problem.
|
|
When this happens, read more below in
|
|
<a href="#configureoptions">the <code>configure</code> options</a>.
|
|
<p>
|
|
Some examples:
|
|
</p>
|
|
<table border="1">
|
|
<thead>
|
|
<tr>
|
|
<th>Description</th>
|
|
<th>Configure Command Line</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Windows 32bit build with freetype specified</td>
|
|
<td>
|
|
<code>bash ./configure --with-freetype=/cygdrive/c/freetype-i586 --with-target-bits=32</code>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Debug 64bit Build</td>
|
|
<td>
|
|
<code>bash ./configure --enable-debug --with-target-bits=64</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<!-- ====================================================== -->
|
|
<h4><a name="configureoptions">Configure Options</a></h4>
|
|
<blockquote>
|
|
Complete details on all the OpenJDK <code>configure</code> options can
|
|
be seen with:
|
|
<blockquote>
|
|
<b><code>bash ./configure --help=short</code></b>
|
|
</blockquote>
|
|
Use <code>-help</code> to see all the <code>configure</code> options
|
|
available.
|
|
|
|
You can generate any number of different configurations,
|
|
e.g. debug, release, 32, 64, etc.
|
|
|
|
Some of the more commonly used <code>configure</code> options are:
|
|
|
|
<table border="1">
|
|
<thead>
|
|
<tr>
|
|
<th width="300">OpenJDK Configure Option</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><b><code>--enable-debug</code></b></td>
|
|
<td>
|
|
set the debug level to fastdebug (this is a shorthand for
|
|
<code>--with-debug-level=fastdebug</code>)
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-alsa=</code></b><i>path</i></td>
|
|
<td>
|
|
select the location of the
|
|
<a name="alsa">Advanced Linux Sound Architecture (ALSA)</a>
|
|
<br>
|
|
Version 0.9.1 or newer of the ALSA files are
|
|
required for building the OpenJDK on Linux.
|
|
These Linux files are usually available from an "alsa"
|
|
of "libasound"
|
|
development package,
|
|
and it's highly recommended that you try and use
|
|
the package provided by the particular version of Linux that
|
|
you are using.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-boot-jdk=</code></b><i>path</i></td>
|
|
<td>
|
|
select the <a href="#bootjdk">Bootstrap JDK</a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-boot-jdk-jvmargs=</code></b>"<i>args</i>"</td>
|
|
<td>
|
|
provide the JVM options to be used to run the
|
|
<a href="#bootjdk">Bootstrap JDK</a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-cacerts=</code></b><i>path</i></td>
|
|
<td>
|
|
select the path to the cacerts file.
|
|
<br>
|
|
See <a href="http://en.wikipedia.org/wiki/Certificate_Authority" target="_blank">
|
|
http://en.wikipedia.org/wiki/Certificate_Authority</a>
|
|
for a better understanding of the Certificate Authority (CA).
|
|
A certificates file named "cacerts"
|
|
represents a system-wide keystore with CA certificates.
|
|
In JDK and JRE
|
|
binary bundles, the "cacerts" file contains root CA certificates from
|
|
several public CAs (e.g., VeriSign, Thawte, and Baltimore).
|
|
The source contain a cacerts file
|
|
without CA root certificates.
|
|
Formal JDK builders will need to secure
|
|
permission from each public CA and include the certificates into their
|
|
own custom cacerts file.
|
|
Failure to provide a populated cacerts file
|
|
will result in verification errors of a certificate chain during runtime.
|
|
By default an empty cacerts file is provided and that should be
|
|
fine for most JDK developers.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-cups=</code></b><i>path</i></td>
|
|
<td>
|
|
select the CUPS install location
|
|
<br>
|
|
The
|
|
<a name="cups">Common UNIX Printing System (CUPS) Headers</a>
|
|
are required for building the
|
|
OpenJDK on Solaris and Linux.
|
|
The Solaris header files can be obtained by installing
|
|
the package <strong>SFWcups</strong> from the Solaris Software
|
|
Companion CD/DVD, these often will be installed into the
|
|
directory <code>/opt/sfw/cups</code>.
|
|
<br>
|
|
The CUPS header files can always be downloaded from
|
|
<a href="http://www.cups.org" target="_blank">www.cups.org</a>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-cups-include=</code></b><i>path</i></td>
|
|
<td>
|
|
select the CUPS include directory location
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-debug-level=</code></b><i>level</i></td>
|
|
<td>
|
|
select the debug information level of release,
|
|
fastdebug, or slowdebug
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-dev-kit=</code></b><i>path</i></td>
|
|
<td>
|
|
select location of the compiler install or
|
|
developer install location
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-freetype=</code></b><i>path</i></td>
|
|
<td>
|
|
select the freetype files to use.
|
|
<br>
|
|
Expecting the
|
|
<a name="freetype">freetype</a> libraries under
|
|
<code>lib/</code> and the
|
|
headers under <code>include/</code>.
|
|
<br>
|
|
Version 2.3 or newer of FreeType is required.
|
|
On Unix systems required files can be available as part of your
|
|
distribution (while you still may need to upgrade them).
|
|
Note that you need development version of package that
|
|
includes both the FreeType library and header files.
|
|
<br>
|
|
You can always download latest FreeType version from the
|
|
<a href="http://www.freetype.org" target="_blank">FreeType website</a>.
|
|
<br>
|
|
Building the freetype 2 libraries from scratch is also possible,
|
|
however on Windows refer to the
|
|
<a href="http://freetype.freedesktop.org/wiki/FreeType_DLL">
|
|
Windows FreeType DLL build instructions</a>.
|
|
<br>
|
|
Note that by default FreeType is built with byte code hinting
|
|
support disabled due to licensing restrictions.
|
|
In this case, text appearance and metrics are expected to
|
|
differ from Sun's official JDK build.
|
|
See
|
|
<a href="http://freetype.sourceforge.net/freetype2/index.html">
|
|
the SourceForge FreeType2 Home Page
|
|
</a>
|
|
for more information.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-import-hotspot=</code></b><i>path</i></td>
|
|
<td>
|
|
select the location to find hotspot
|
|
binaries from a previous build to avoid building
|
|
hotspot
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-target-bits=</code></b><i>arg</i></td>
|
|
<td>
|
|
select 32 or 64 bit build
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-jvm-variants=</code></b><i>variants</i></td>
|
|
<td>
|
|
select the JVM variants to build from, comma
|
|
separated list that can include:
|
|
server, client, kernel, zero and zeroshark
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-memory-size=</code></b><i>size</i></td>
|
|
<td>
|
|
select the RAM size that GNU make will think
|
|
this system has
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><a name="msvcrNN"><b><code>--with-msvcr-dll=</code></b><i>path</i></a></td>
|
|
<td>
|
|
select the <code>msvcr100.dll</code>
|
|
file to include in the
|
|
Windows builds (C/C++ runtime library for
|
|
Visual Studio).
|
|
<br>
|
|
This is usually picked up automatically
|
|
from the redist
|
|
directories of Visual Studio 2010.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-num-cores=</code></b><i>cores</i></td>
|
|
<td>
|
|
select the number of cores to use (processor
|
|
count or CPU count)
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>--with-x=</code></b><i>path</i></td>
|
|
<td>
|
|
select the location of the X11 and xrender files.
|
|
<br>
|
|
The
|
|
<a name="xrender">XRender Extension Headers</a>
|
|
are required for building the
|
|
OpenJDK on Solaris and Linux.
|
|
<br>
|
|
The Linux header files are usually available from a "Xrender"
|
|
development package, it's recommended that you try and use
|
|
the package provided by the particular distribution of Linux that
|
|
you are using.
|
|
<br>
|
|
The Solaris XRender header files is
|
|
included with the other X11 header files
|
|
in the package <strong>SFWxwinc</strong>
|
|
on new enough versions of
|
|
Solaris and will be installed in
|
|
<code>/usr/X11/include/X11/extensions/Xrender.h</code> or
|
|
<code>/usr/openwin/share/include/X11/extensions/Xrender.h</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</blockquote>
|
|
|
|
</blockquote>
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h3><a name="make">Make</a></h3>
|
|
<blockquote>
|
|
The basic invocation of the <code>make</code> utility
|
|
looks like:
|
|
<blockquote>
|
|
<b><code>make all</code></b>
|
|
</blockquote>
|
|
This will start the build to the output directory containing the
|
|
"configuration" that was created by the <code>configure</code>
|
|
script. Run <code>make help</code> for more information on
|
|
the available targets.
|
|
<br>
|
|
There are some of the make targets that
|
|
are of general interest:
|
|
<table border="1">
|
|
<thead>
|
|
<tr>
|
|
<th>Make Target</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><i>empty</i></td>
|
|
<td>build everything but no images</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>all</code></b></td>
|
|
<td>build everything including images</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>all-conf</code></b></td>
|
|
<td>build all configurations</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>images</code></b></td>
|
|
<td>create complete j2sdk and j2re images</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>install</code></b></td>
|
|
<td>install the generated images locally,
|
|
typically in <code>/usr/local</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>clean</code></b></td>
|
|
<td>remove all files generated by make,
|
|
but not those generated by <code>configure</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>dist-clean</code></b></td>
|
|
<td>remove all files generated by both
|
|
and <code>configure</code> (basically killing the configuration)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><b><code>help</code></b></td>
|
|
<td>give some help on using <code>make</code>,
|
|
including some interesting make targets</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h2><a name="testing">Testing</a></h2>
|
|
<blockquote>
|
|
When the build is completed, you should see the generated
|
|
binaries and associated files in the <code>j2sdk-image</code>
|
|
directory in the output directory.
|
|
In particular, the
|
|
<code>build/<i>*</i>/images/j2sdk-image/bin</code>
|
|
directory should contain executables for the
|
|
OpenJDK tools and utilities for that configuration.
|
|
The testing tool <code>jtreg</code> will be needed
|
|
and can be found at:
|
|
<a href="http://openjdk.java.net/jtreg/" target="_blank">
|
|
the jtreg site</a>.
|
|
The provided regression tests in the repositories
|
|
can be run with the command:
|
|
<blockquote>
|
|
<code><b>cd test && make PRODUCT_HOME=`pwd`/../build/*/images/j2sdk-image all</b></code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
<!-- ====================================================== -->
|
|
<!-- ====================================================== -->
|
|
<!-- ====================================================== -->
|
|
<!-- ====================================================== -->
|
|
<!-- ====================================================== -->
|
|
<!-- ====================================================== -->
|
|
<!-- ====================================================== -->
|
|
<!-- ====================================================== -->
|
|
<!-- ====================================================== -->
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h2><a name="hints">Appendix A: Hints and Tips</a></h2>
|
|
<blockquote>
|
|
|
|
<h3><a name="faq">FAQ</a></h3>
|
|
<blockquote>
|
|
|
|
<p>
|
|
<b>Q:</b> The <code>generated-configure.sh</code> file looks horrible!
|
|
How are you going to edit it?
|
|
<br>
|
|
<b>A:</b> The <code>generated-configure.sh</code> file is generated (think
|
|
"compiled") by the autoconf tools. The source code is
|
|
in <code>configure.ac</code> and various .m4 files in common/autoconf,
|
|
which are much more readable.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
Why is the <code>generated-configure.sh</code> file checked in,
|
|
if it is generated?
|
|
<br>
|
|
<b>A:</b>
|
|
If it was not generated, every user would need to have the autoconf
|
|
tools installed, and re-generate the <code>configure</code> file
|
|
as the first step.
|
|
Our goal is to minimize the work needed to be done by the user
|
|
to start building OpenJDK, and to minimize
|
|
the number of external dependencies required.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
Do you require a specific version of autoconf for regenerating
|
|
<code>generated-configure.sh</code>?
|
|
<br>
|
|
<b>A:</b>
|
|
Yes, version 2.69 is required and should be easy
|
|
enough to aquire on all supported operating
|
|
systems. The reason for this is to avoid
|
|
large spurious changes in <code>generated-configure.sh</code>.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
How do you regenerate <code>generated-configure.sh</code>
|
|
after making changes to the input files?
|
|
<br>
|
|
<b>A:</b>
|
|
Regnerating <code>generated-configure.sh</code>
|
|
should always be done using the
|
|
script <code>common/autoconf/autogen.sh</code> to
|
|
ensure that the correct files get updated. This
|
|
script should also be run after mercurial tries to
|
|
merge <code>generated-configure.sh</code> as a
|
|
merge of the generated file is not guaranteed to
|
|
be correct.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
What are the files in <code>common/makefiles/support/*</code> for?
|
|
They look like gibberish.
|
|
<br>
|
|
<b>A:</b>
|
|
They are a somewhat ugly hack to compensate for command line length
|
|
limitations on certain platforms (Windows, Solaris).
|
|
Due to a combination of limitations in make and the shell,
|
|
command lines containing too many files will not work properly.
|
|
These
|
|
helper files are part of an elaborate hack that will compress the
|
|
command line in the makefile and then uncompress it safely.
|
|
We're
|
|
not proud of it, but it does fix the problem.
|
|
If you have any better suggestions, we're all ears! :-)
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
I want to see the output of the commands that make runs,
|
|
like in the old build. How do I do that?
|
|
<br>
|
|
<b>A:</b>
|
|
You specify the <code>LOG</code> variable to make. There are
|
|
several log levels:
|
|
</p>
|
|
<blockquote>
|
|
<ul>
|
|
<li>
|
|
<b><code>warn</code></b> — Default and very quiet.
|
|
</li>
|
|
<li>
|
|
<b><code>info</code></b> — Shows more progress information
|
|
than warn.
|
|
</li>
|
|
<li>
|
|
<b><code>debug</code></b> — Echos all command lines and
|
|
prints all macro calls for compilation definitions.
|
|
</li>
|
|
<li>
|
|
<b><code>trace</code></b> — Echos all $(shell) command
|
|
lines as well.
|
|
</li>
|
|
</ul>
|
|
</blockquote>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
When do I have to re-run <code>configure</code>?
|
|
<br>
|
|
<b>A:</b>
|
|
Normally you will run <code>configure</code> only once for creating a
|
|
configuration.
|
|
You need to re-run configuration only if you want to change any
|
|
configuration options,
|
|
or if you pull down changes to the <code>configure</code> script.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
I have added a new source file. Do I need to modify the makefiles?
|
|
<br>
|
|
<b>A:</b>
|
|
Normally, no. If you want to create e.g. a new native
|
|
library,
|
|
you will need to modify the makefiles. But for normal file
|
|
additions or removals, no changes are needed. There are certan
|
|
exceptions for some native libraries where the source files are spread
|
|
over many directories which also contain sources for other
|
|
libraries. In these cases it was simply easier to create include lists
|
|
rather than excludes.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
When I run <code>configure --help</code>, I see many strange options,
|
|
like <code>--dvidir</code>. What is this?
|
|
<br>
|
|
<b>A:</b>
|
|
Configure provides a slew of options by default, to all projects
|
|
that use autoconf. Most of them are not used in OpenJDK,
|
|
so you can safely ignore them. To list only OpenJDK specific features,
|
|
use <code>configure --help=short</code> instead.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
<code>configure</code> provides OpenJDK-specific features such as
|
|
<code>--with-builddeps-server</code> that are not
|
|
described in this document. What about those?
|
|
<br>
|
|
<b>A:</b>
|
|
Try them out if you like! But be aware that most of these are
|
|
experimental features.
|
|
Many of them don't do anything at all at the moment; the option
|
|
is just a placeholder. Others depend on
|
|
pieces of code or infrastructure that is currently
|
|
not ready for prime time.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
How will you make sure you don't break anything?
|
|
<br>
|
|
<b>A:</b>
|
|
We have a script that compares the result of the new build system
|
|
with the result of the old. For most part, we aim for (and achieve)
|
|
byte-by-byte identical output. There are however technical issues
|
|
with e.g. native binaries, which might differ in a byte-by-byte
|
|
comparison, even
|
|
when building twice with the old build system.
|
|
For these, we compare relevant aspects
|
|
(e.g. the symbol table and file size).
|
|
Note that we still don't have 100%
|
|
equivalence, but we're close.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
I noticed this thing X in the build that looks very broken by design.
|
|
Why don't you fix it?
|
|
<br>
|
|
<b>A:</b>
|
|
Our goal is to produce a build output that is as close as
|
|
technically possible to the old build output.
|
|
If things were weird in the old build,
|
|
they will be weird in the new build.
|
|
Often, things were weird before due to obscurity,
|
|
but in the new build system the weird stuff comes up to the surface.
|
|
The plan is to attack these things at a later stage,
|
|
after the new build system is established.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
The code in the new build system is not that well-structured.
|
|
Will you fix this?
|
|
<br>
|
|
<b>A:</b>
|
|
Yes! The new build system has grown bit by bit as we converted
|
|
the old system. When all of the old build system is converted,
|
|
we can take a step back and clean up the structure of the new build
|
|
system. Some of this we plan to do before replacing the old build
|
|
system and some will need to wait until after.
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
Is anything able to use the results of the new build's default make target?
|
|
<br>
|
|
<b>A:</b>
|
|
Yes, this is the minimal (or roughly minimal)
|
|
set of compiled output needed for a developer to actually
|
|
execute the newly built JDK. The idea is that in an incremental
|
|
development fashion, when doing a normal make,
|
|
you should only spend time recompiling what's changed
|
|
(making it purely incremental) and only do the work that's
|
|
needed to actually run and test your code.
|
|
The packaging stuff that is part of the <code>images</code>
|
|
target is not needed for a normal developer who wants to
|
|
test his new code. Even if it's quite fast, it's still unnecessary.
|
|
We're targeting sub-second incremental rebuilds! ;-)
|
|
(Or, well, at least single-digit seconds...)
|
|
</p>
|
|
|
|
<p>
|
|
<b>Q:</b>
|
|
I usually set a specific environment variable when building,
|
|
but I can't find the equivalent in the new build.
|
|
What should I do?
|
|
<br>
|
|
<b>A:</b>
|
|
It might very well be that we have neglected to add support for
|
|
an option that was actually used from outside the build system.
|
|
Email us and we will add support for it!
|
|
</p>
|
|
|
|
</blockquote>
|
|
|
|
<h3><a name="performance">Build Performance Tips</a></h3>
|
|
<blockquote>
|
|
|
|
<p>Building OpenJDK requires a lot of horsepower.
|
|
Some of the build tools can be adjusted to utilize more or less
|
|
of resources such as
|
|
parallel threads and memory.
|
|
The <code>configure</code> script analyzes your system and selects reasonable
|
|
values for such options based on your hardware.
|
|
If you encounter resource problems, such as out of memory conditions,
|
|
you can modify the detected values with:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<b><code>--with-num-cores</code></b>
|
|
—
|
|
number of cores in the build system,
|
|
e.g. <code>--with-num-cores=8</code>
|
|
</li>
|
|
<li>
|
|
<b><code>--with-memory-size</code></b>
|
|
— memory (in MB) available in the build system,
|
|
e.g. <code>--with-memory-size=1024</code>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>It might also be necessary to specify the JVM arguments passed
|
|
to the Bootstrap JDK, using e.g.
|
|
<code>--with-boot-jdk-jvmargs="-Xmx8G -enableassertions"</code>.
|
|
Doing this will override the default JVM arguments
|
|
passed to the Bootstrap JDK.</p>
|
|
|
|
|
|
<p>One of the top goals of the new build system is to improve the
|
|
build performance and decrease the time needed to build. This will
|
|
soon also apply to the java compilation when the Smart Javac wrapper
|
|
is fully supported.</p>
|
|
|
|
<p>At the end of a successful execution of <code>configure</code>,
|
|
you will get a performance summary,
|
|
indicating how well the build will perform. Here you will
|
|
also get performance hints.
|
|
If you want to build fast, pay attention to those!</p>
|
|
|
|
<h4>Building with ccache</h4>
|
|
|
|
<p>The OpenJDK build supports building with ccache
|
|
when using gcc or clang. Using ccache can
|
|
radically speed up compilation of native code if
|
|
you often rebuild the same sources. Your milage
|
|
may vary however so we recommend evaluating it for
|
|
yourself. To enable it, make sure it's on the path
|
|
and configure with <code>--enable-ccache</code>.</p>
|
|
|
|
<h4>Building on local disk</h4>
|
|
|
|
<p>If you are using network shares, e.g. via NFS, for your source code,
|
|
make sure the build directory is situated on local disk.
|
|
The performance
|
|
penalty is extremely high for building on a network share,
|
|
close to unusable.</p>
|
|
|
|
<h4>Building only one JVM</h4>
|
|
|
|
<p>The old build builds multiple JVMs on 32-bit systems (client and
|
|
server; and on Windows kernel as well). In the new build we have
|
|
changed this default to only build server when it's available. This
|
|
improves build times for those not interested in multiple JVMs. To
|
|
mimic the old behavior on platforms that support it,
|
|
use <code>--with-jvm-variants=client,server</code>.</p>
|
|
|
|
<h4>Selecting the number of cores to build on</h4>
|
|
|
|
<p>By default, <code>configure</code> will analyze your machine and run the make
|
|
process in parallel with as many threads as you have cores. This
|
|
behavior can be overridden, either "permanently" (on a <code>configure</code>
|
|
basis) using <code>--with-num-cores=N</code> or for a single build
|
|
only (on a make basis), using <code>make JOBS=N</code>.</p>
|
|
|
|
<p>If you want to make a slower build just this time, to save some CPU
|
|
power for other processes, you can run
|
|
e.g. <code>make JOBS=2</code>. This will force the makefiles
|
|
to only run 2 parallel processes, or even <code>make JOBS=1</code>
|
|
which will disable parallelism.</p>
|
|
|
|
<p>If you want to have it the other way round, namely having slow
|
|
builds default and override with fast if you're
|
|
impatient, you should call <code>configure</code> with
|
|
<code>--with-num-cores=2</code>, making 2 the default.
|
|
If you want to run with more
|
|
cores, run <code>make JOBS=8</code></p>
|
|
|
|
</blockquote>
|
|
|
|
<h3><a name="troubleshooting">Troubleshooting</a></h3>
|
|
<blockquote>
|
|
|
|
<h4>Solving build problems</h4>
|
|
|
|
<blockquote>
|
|
If the build fails (and it's not due to a compilation error in
|
|
a source file you've changed), the first thing you should do
|
|
is to re-run the build with more verbosity.
|
|
Do this by adding <code>LOG=debug</code> to your make command line.
|
|
<br>
|
|
The build log (with both stdout and stderr intermingled,
|
|
basically the same as you see on your console) can be found as
|
|
<code>build.log</code> in your build directory.
|
|
<br>
|
|
You can ask for help on build problems with the new build system
|
|
on either the
|
|
<a href="http://mail.openjdk.java.net/mailman/listinfo/build-dev">
|
|
build-dev</a>
|
|
or the
|
|
<a href="http://mail.openjdk.java.net/mailman/listinfo/build-infra-dev">
|
|
build-infra-dev</a>
|
|
mailing lists. Please include the relevant parts
|
|
of the build log.
|
|
<br>
|
|
A build can fail for any number of reasons.
|
|
Most failures
|
|
are a result of trying to build in an environment in which all the
|
|
pre-build requirements have not been met.
|
|
The first step in
|
|
troubleshooting a build failure is to recheck that you have satisfied
|
|
all the pre-build requirements for your platform.
|
|
Scanning the <code>configure</code> log is a good first step, making
|
|
sure that what it found makes sense for your system.
|
|
Look for strange error messages or any difficulties that
|
|
<code>configure</code> had in finding things.
|
|
<br>
|
|
Some of the more common problems with builds are briefly
|
|
described
|
|
below, with suggestions for remedies.
|
|
<ul>
|
|
<li>
|
|
<b>Corrupted Bundles on Windows:</b>
|
|
<blockquote>
|
|
Some virus scanning software has been known to
|
|
corrupt the
|
|
downloading of zip bundles.
|
|
It may be necessary to disable the 'on access' or
|
|
'real time'
|
|
virus scanning features to prevent this corruption.
|
|
This type of "real time" virus scanning can also
|
|
slow down the
|
|
build process significantly.
|
|
Temporarily disabling the feature, or excluding the build
|
|
output directory may be necessary to get correct and
|
|
faster builds.
|
|
</blockquote>
|
|
</li>
|
|
<li>
|
|
<b>Slow Builds:</b>
|
|
<blockquote>
|
|
If your build machine seems to be overloaded from too many
|
|
simultaneous C++ compiles, try setting the
|
|
<code>JOBS=1</code> on the <code>make</code> command line.
|
|
Then try increasing the count slowly to an acceptable
|
|
level for your system. Also:
|
|
<blockquote>
|
|
Creating the javadocs can be very slow,
|
|
if you are running
|
|
javadoc, consider skipping that step.
|
|
<br>
|
|
Faster CPUs, more RAM, and a faster DISK usually helps.
|
|
The VM build tends to be CPU intensive
|
|
(many C++ compiles),
|
|
and the rest of the JDK will often be disk intensive.
|
|
<br>
|
|
Faster compiles are possible using a tool called
|
|
<a href="http://ccache.samba.org/" target="_blank">ccache</a>.
|
|
</blockquote>
|
|
</blockquote>
|
|
</li>
|
|
<li>
|
|
<b>File time issues:</b>
|
|
<blockquote>
|
|
If you see warnings that refer to file time stamps, e.g.
|
|
<blockquote>
|
|
<i>Warning message:</i><code>
|
|
File `xxx' has modification time in
|
|
the future.</code>
|
|
<br>
|
|
<i>Warning message:</i> <code> Clock skew detected.
|
|
Your build may
|
|
be incomplete.</code>
|
|
</blockquote>
|
|
These warnings can occur when the clock on the build
|
|
machine is out of
|
|
sync with the timestamps on the source files.
|
|
Other errors, apparently
|
|
unrelated but in fact caused by the clock skew,
|
|
can occur along with
|
|
the clock skew warnings.
|
|
These secondary errors may tend to obscure the
|
|
fact that the true root cause of the problem
|
|
is an out-of-sync clock.
|
|
<p>
|
|
If you see these warnings, reset the clock on the
|
|
build
|
|
machine, run "<code><i>gmake</i> clobber</code>"
|
|
or delete the directory
|
|
containing the build output, and restart the
|
|
build from the beginning.
|
|
</blockquote>
|
|
</li>
|
|
<li>
|
|
<b>Error message:
|
|
<code>Trouble writing out table to disk</code></b>
|
|
<blockquote>
|
|
Increase the amount of swap space on your build machine.
|
|
This could be caused by overloading the system and
|
|
it may be necessary to use:
|
|
<blockquote>
|
|
<code>make JOBS=1</code>
|
|
</blockquote>
|
|
to reduce the load on the system.
|
|
</blockquote>
|
|
</li>
|
|
<li>
|
|
<b>Error Message:
|
|
<code>libstdc++ not found:</code></b>
|
|
<blockquote>
|
|
This is caused by a missing libstdc++.a library.
|
|
This is installed as part of a specific package
|
|
(e.g. libstdc++.so.devel.386).
|
|
By default some 64-bit Linux versions (e.g. Fedora)
|
|
only install the 64-bit version of the libstdc++ package.
|
|
Various parts of the JDK build require a static
|
|
link of the C++ runtime libraries to allow for maximum
|
|
portability of the built images.
|
|
</blockquote>
|
|
</li>
|
|
<li>
|
|
<b>Linux Error Message:
|
|
<code>cannot restore segment prot after reloc</code></b>
|
|
<blockquote>
|
|
This is probably an issue with SELinux (See
|
|
<a href="http://en.wikipedia.org/wiki/SELinux" target="_blank">
|
|
http://en.wikipedia.org/wiki/SELinux</a>).
|
|
Parts of the VM is built without the <code>-fPIC</code> for
|
|
performance reasons.
|
|
<p>
|
|
To completely disable SELinux:
|
|
<ol>
|
|
<li><code>$ su root</code></li>
|
|
<li><code># system-config-securitylevel</code></li>
|
|
<li><code>In the window that appears, select the SELinux tab</code></li>
|
|
<li><code>Disable SELinux</code></li>
|
|
</ol>
|
|
<p>
|
|
Alternatively, instead of completely disabling it you could
|
|
disable just this one check.
|
|
<ol>
|
|
<li>Select System->Administration->SELinux Management</li>
|
|
<li>In the SELinux Management Tool which appears,
|
|
select "Boolean" from the menu on the left</li>
|
|
<li>Expand the "Memory Protection" group</li>
|
|
<li>Check the first item, labeled
|
|
"Allow all unconfined executables to use
|
|
libraries requiring text relocation ..."</li>
|
|
</ol>
|
|
</blockquote>
|
|
</li>
|
|
<li>
|
|
<b>Windows Error Messages:</b>
|
|
<br>
|
|
<code>*** fatal error - couldn't allocate heap, ... </code>
|
|
<br>
|
|
<code>rm fails with "Directory not empty"</code>
|
|
<br>
|
|
<code>unzip fails with "cannot create ... Permission denied"</code>
|
|
<br>
|
|
<code>unzip fails with "cannot create ... Error 50"</code>
|
|
<br>
|
|
<blockquote>
|
|
The CYGWIN software can conflict with other non-CYGWIN
|
|
software. See the CYGWIN FAQ section on
|
|
<a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
|
|
BLODA (applications that interfere with CYGWIN)</a>.
|
|
</blockquote>
|
|
</li>
|
|
<li>
|
|
<b>Windows Error Message: <code>spawn failed</code></b>
|
|
<blockquote>
|
|
Try rebooting the system, or there could be some kind of
|
|
issue with the disk or disk partition being used.
|
|
Sometimes it comes with a "Permission Denied" message.
|
|
</blockquote>
|
|
</li>
|
|
</ul>
|
|
</blockquote>
|
|
|
|
</blockquote> <!-- Troubleshooting -->
|
|
|
|
</blockquote> <!-- Appendix A -->
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h2><a name="gmake">Appendix B: GNU make</a></h2>
|
|
<blockquote>
|
|
|
|
The Makefiles in the OpenJDK are only valid when used with the
|
|
GNU version of the utility command <code>make</code>
|
|
(usually called <code>gmake</code> on Solaris).
|
|
A few notes about using GNU make:
|
|
<ul>
|
|
<li>
|
|
You need GNU make version 3.81 or newer.
|
|
If the GNU make utility on your systems is not
|
|
3.81 or newer,
|
|
see <a href="#buildgmake">"Building GNU make"</a>.
|
|
</li>
|
|
<li>
|
|
Place the location of the GNU make binary in the
|
|
<code>PATH</code>.
|
|
</li>
|
|
<li>
|
|
<strong>Solaris:</strong>
|
|
Do NOT use <code>/usr/bin/make</code> on Solaris.
|
|
If your Solaris system has the software
|
|
from the Solaris Developer Companion CD installed,
|
|
you should try and use <code>gmake</code>
|
|
which will be located in either the
|
|
<code>/usr/bin</code>, <code>/opt/sfw/bin</code> or
|
|
<code>/usr/sfw/bin</code> directory.
|
|
</li>
|
|
<li>
|
|
<strong>Windows:</strong>
|
|
Make sure you start your build inside a bash shell.
|
|
</li>
|
|
<li>
|
|
<strong>Mac OS X:</strong>
|
|
The XCode "command line tools" must be installed on your Mac.
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
Information on GNU make, and access to ftp download sites, are
|
|
available on the
|
|
<a href="http://www.gnu.org/software/make/make.html" target="_blank">
|
|
GNU make web site
|
|
</a>.
|
|
The latest source to GNU make is available at
|
|
<a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
|
|
ftp.gnu.org/pub/gnu/make/</a>.
|
|
</p>
|
|
|
|
<h3><a name="buildgmake">Building GNU make</a></h3>
|
|
<blockquote>
|
|
First step is to get the GNU make 3.81 or newer source from
|
|
<a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
|
|
ftp.gnu.org/pub/gnu/make/</a>.
|
|
Building is a little different depending on the OS but is
|
|
basically done with:
|
|
<blockquote>
|
|
<code>bash ./configure</code>
|
|
<br>
|
|
<code>make</code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
</blockquote> <!-- Appendix B -->
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h2><a name="buildenvironments">Appendix C: Build Environments</a></h2>
|
|
<blockquote>
|
|
|
|
<h3><a name="MBE">Minimum Build Environments</a></h3>
|
|
<blockquote>
|
|
This file often describes specific requirements for what we
|
|
call the
|
|
"minimum build environments" (MBE) for this
|
|
specific release of the JDK.
|
|
What is listed below is what the Oracle Release
|
|
Engineering Team will use to build the Oracle JDK product.
|
|
Building with the MBE will hopefully generate the most compatible
|
|
bits that install on, and run correctly on, the most variations
|
|
of the same base OS and hardware architecture.
|
|
In some cases, these represent what is often called the
|
|
least common denominator, but each Operating System has different
|
|
aspects to it.
|
|
<p>
|
|
In all cases, the Bootstrap JDK version minimum is critical,
|
|
we cannot guarantee builds will work with older Bootstrap JDK's.
|
|
Also in all cases, more RAM and more processors is better,
|
|
the minimums listed below are simply recommendations.
|
|
<p>
|
|
With Solaris and Mac OS X, the version listed below is the
|
|
oldest release we can guarantee builds and works, and the
|
|
specific version of the compilers used could be critical.
|
|
<p>
|
|
With Windows the critical aspect is the Visual Studio compiler
|
|
used, which due to it's runtime, generally dictates what Windows
|
|
systems can do the builds and where the resulting bits can
|
|
be used.<br>
|
|
<b>NOTE: We expect a change here off these older Windows OS releases
|
|
and to a 'less older' one, probably Windows 2008R2 X64.</b>
|
|
<p>
|
|
With Linux, it was just a matter of picking a
|
|
stable distribution that is a good representative for Linux
|
|
in general.<br>
|
|
<b>NOTE: We expect a change here from Fedora 9 to something else,
|
|
but it has not been completely determined yet, possibly
|
|
Ubuntu 12.04 X64, unbiased community feedback would be welcome on
|
|
what a good choice would be here.</b>
|
|
<p>
|
|
It is understood that most developers will NOT be using these
|
|
specific versions, and in fact creating these specific versions
|
|
may be difficult due to the age of some of this software.
|
|
It is expected that developers are more often using the more
|
|
recent releases and distributions of these operating systems.
|
|
<p>
|
|
Compilation problems with newer or different C/C++ compilers is a
|
|
common problem.
|
|
Similarly, compilation problems related to changes to the
|
|
<code>/usr/include</code> or system header files is also a
|
|
common problem with older, newer, or unreleased OS versions.
|
|
Please report these types of problems as bugs so that they
|
|
can be dealt with accordingly.
|
|
</p>
|
|
<table border="1">
|
|
<thead>
|
|
<tr>
|
|
<th>Base OS and Architecture</th>
|
|
<th>OS</th>
|
|
<th>C/C++ Compiler</th>
|
|
<th>Bootstrap JDK</th>
|
|
<th>Processors</th>
|
|
<th>RAM Minimum</th>
|
|
<th>DISK Needs</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Linux X86 (32-bit) and X64 (64-bit)</td>
|
|
<td>Fedora 9</td>
|
|
<td>gcc 4.3 </td>
|
|
<td>JDK 7u7</td>
|
|
<td>2 or more</td>
|
|
<td>1 GB</td>
|
|
<td>6 GB</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Solaris SPARC (32-bit) and SPARCV9 (64-bit)</td>
|
|
<td>Solaris 10 Update 6</td>
|
|
<td>Studio 12 Update 1 + patches</td>
|
|
<td>JDK 7u7</td>
|
|
<td>4 or more</td>
|
|
<td>4 GB</td>
|
|
<td>8 GB</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Solaris X86 (32-bit) and X64 (64-bit)</td>
|
|
<td>Solaris 10 Update 6</td>
|
|
<td>Studio 12 Update 1 + patches</td>
|
|
<td>JDK 7u7</td>
|
|
<td>4 or more</td>
|
|
<td>4 GB</td>
|
|
<td>8 GB</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Windows X86 (32-bit)</td>
|
|
<td>Windows XP</td>
|
|
<td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
|
|
<td>JDK 7u7</td>
|
|
<td>2 or more</td>
|
|
<td>2 GB</td>
|
|
<td>6 GB</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Windows X64 (64-bit)</td>
|
|
<td>Windows Server 2003 - Enterprise x64 Edition</td>
|
|
<td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
|
|
<td>JDK 7u7</td>
|
|
<td>2 or more</td>
|
|
<td>2 GB</td>
|
|
<td>6 GB</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Mac OS X X64 (64-bit)</td>
|
|
<td>Mac OS X 10.7 "Lion"</td>
|
|
<td>XCode 4.5.2 or newer</td>
|
|
<td>JDK 7u7</td>
|
|
<td>2 or more</td>
|
|
<td>4 GB</td>
|
|
<td>6 GB</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</blockquote>
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<h3><a name="SDBE">Specific Developer Build Environments</a></h3>
|
|
<blockquote>
|
|
We won't be listing all the possible environments, but
|
|
we will try to provide what information we have available to us.
|
|
<p>
|
|
<strong>NOTE: The community can help out by updating
|
|
this part of the document.
|
|
</strong>
|
|
|
|
<h4><a name="fedora">Fedora</a></h4>
|
|
<blockquote>
|
|
After installing the latest
|
|
<a href="http://fedoraproject.org">Fedora</a>
|
|
you need to install several build dependencies.
|
|
The simplest way to do it is to execute the
|
|
following commands as user <code>root</code>:
|
|
<blockquote>
|
|
<code>yum-builddep java-1.7.0-openjdk</code>
|
|
<br>
|
|
<code>yum install gcc gcc-c++</code>
|
|
</blockquote>
|
|
<p>
|
|
In addition, it's necessary to set a few environment
|
|
variables for the build:
|
|
<blockquote>
|
|
<code>export LANG=C</code>
|
|
<br>
|
|
<code>export PATH="/usr/lib/jvm/java-openjdk/bin:${PATH}"</code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
|
|
<h4><a name="centos">CentOS 5.5</a></h4>
|
|
<blockquote>
|
|
After installing
|
|
<a href="http://www.centos.org/">CentOS 5.5</a>
|
|
you need to make sure you have
|
|
the following Development bundles installed:
|
|
<blockquote>
|
|
<ul>
|
|
<li>Development Libraries</li>
|
|
<li>Development Tools</li>
|
|
<li>Java Development</li>
|
|
<li>X Software Development (Including XFree86-devel)</li>
|
|
</ul>
|
|
</blockquote>
|
|
<p>
|
|
Plus the following packages:
|
|
<blockquote>
|
|
<ul>
|
|
<li>cups devel: Cups Development Package</li>
|
|
<li>alsa devel: Alsa Development Package</li>
|
|
<li>Xi devel: libXi.so Development Package</li>
|
|
</ul>
|
|
</blockquote>
|
|
<p>
|
|
The freetype 2.3 packages don't seem to be available,
|
|
but the freetype 2.3 sources can be downloaded, built,
|
|
and installed easily enough from
|
|
<a href="http://downloads.sourceforge.net/freetype">
|
|
the freetype site</a>.
|
|
Build and install with something like:
|
|
<blockquote>
|
|
<code>bash ./configure</code>
|
|
<br>
|
|
<code>make</code>
|
|
<br>
|
|
<code>sudo -u root make install</code>
|
|
</blockquote>
|
|
<p>
|
|
Mercurial packages could not be found easily, but a Google
|
|
search should find ones, and they usually include Python if
|
|
it's needed.
|
|
</blockquote>
|
|
|
|
<h4><a name="debian">Debian 5.0 (Lenny)</a></h4>
|
|
<blockquote>
|
|
After installing <a href="http://debian.org">Debian</a> 5
|
|
you need to install several build dependencies.
|
|
The simplest way to install the build dependencies is to
|
|
execute the following commands as user <code>root</code>:
|
|
<blockquote>
|
|
<code>aptitude build-dep openjdk-7</code>
|
|
<br>
|
|
<code>aptitude install openjdk-7-jdk libmotif-dev</code>
|
|
</blockquote>
|
|
<p>
|
|
In addition, it's necessary to set a few environment
|
|
variables for the build:
|
|
<blockquote>
|
|
<code>export LANG=C</code>
|
|
<br>
|
|
<code>export PATH="/usr/lib/jvm/java-7-openjdk/bin:${PATH}"</code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
<h4><a name="ubuntu">Ubuntu 12.04</a></h4>
|
|
<blockquote>
|
|
After installing <a href="http://ubuntu.org">Ubuntu</a> 12.04
|
|
you need to install several build dependencies. The simplest
|
|
way to do it is to execute the following commands:
|
|
<blockquote>
|
|
<code>sudo aptitude build-dep openjdk-7</code>
|
|
<br>
|
|
<code>sudo aptitude install openjdk-7-jdk</code>
|
|
</blockquote>
|
|
<p>
|
|
In addition, it's necessary to set a few environment
|
|
variables for the build:
|
|
<blockquote>
|
|
<code>export LANG=C</code>
|
|
<br>
|
|
<code>export PATH="/usr/lib/jvm/java-7-openjdk/bin:${PATH}"</code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
<h4><a name="opensuse">OpenSUSE 11.1</a></h4>
|
|
<blockquote>
|
|
After installing <a href="http://opensuse.org">OpenSUSE</a> 11.1
|
|
you need to install several build dependencies.
|
|
The simplest way to install the build dependencies is to
|
|
execute the following commands:
|
|
<blockquote>
|
|
<code>sudo zypper source-install -d java-1_7_0-openjdk</code>
|
|
<br>
|
|
<code>sudo zypper install make</code>
|
|
</blockquote>
|
|
<p>
|
|
In addition, it is necessary to set a few environment
|
|
variables for the build:
|
|
<blockquote>
|
|
<code>export LANG=C</code>
|
|
<br>
|
|
<code>export PATH="/usr/lib/jvm/java-1.7.0-openjdk/bin:$[PATH}"</code>
|
|
</blockquote>
|
|
<p>
|
|
Finally, you need to unset the <code>JAVA_HOME</code>
|
|
environment variable:
|
|
<blockquote>
|
|
<code>export -n JAVA_HOME</code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
<h4><a name="mandriva">Mandriva Linux One 2009 Spring</a></h4>
|
|
<blockquote>
|
|
After installing <a href="http://mandriva.org">Mandriva</a>
|
|
Linux One 2009 Spring
|
|
you need to install several build dependencies.
|
|
The simplest way to install the build dependencies is to
|
|
execute the following commands as user <code>root</code>:
|
|
<blockquote>
|
|
<code>urpmi java-1.7.0-openjdk-devel make gcc gcc-c++
|
|
freetype-devel zip unzip libcups2-devel libxrender1-devel
|
|
libalsa2-devel libstc++-static-devel libxtst6-devel
|
|
libxi-devel</code>
|
|
</blockquote>
|
|
<p>
|
|
In addition, it is necessary to set a few environment
|
|
variables for the build:
|
|
<blockquote>
|
|
<code>export LANG=C</code>
|
|
<br>
|
|
<code>export PATH="/usr/lib/jvm/java-1.7.0-openjdk/bin:${PATH}"</code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
<h4><a name="opensolaris">OpenSolaris 2009.06</a></h4>
|
|
<blockquote>
|
|
After installing <a href="http://opensolaris.org">OpenSolaris</a> 2009.06
|
|
you need to install several build dependencies.
|
|
The simplest way to install the build dependencies is to
|
|
execute the following commands:
|
|
<blockquote>
|
|
<code>pfexec pkg install SUNWgmake SUNWj7dev
|
|
sunstudioexpress SUNWcups SUNWzip SUNWunzip SUNWxwhl
|
|
SUNWxorg-headers SUNWaudh SUNWfreetype2</code>
|
|
</blockquote>
|
|
<p>
|
|
In addition, it is necessary to set a few environment
|
|
variables for the build:
|
|
<blockquote>
|
|
<code>export LANG=C</code>
|
|
<br>
|
|
<code>export PATH="/opt/SunStudioExpress/bin:${PATH}"</code>
|
|
</blockquote>
|
|
</blockquote>
|
|
|
|
</blockquote>
|
|
|
|
</blockquote> <!-- Appendix C -->
|
|
|
|
<!-- ====================================================== -->
|
|
|
|
<!-- Leave out Appendix D --
|
|
|
|
<hr>
|
|
<h2><a name="mapping">Appendix D: Mapping Old to New</a></h2>
|
|
<blockquote>
|
|
<p>This table will help you convert some idioms of the old build
|
|
system to the new build system.</p>
|
|
<table summary="Cheat sheet for converting from old to new build system">
|
|
<tr valign="top">
|
|
<th>In the old build system, you used to...</th>
|
|
<th>In the new build system, you should ...</th>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>run <code>make sanity</code></td>
|
|
<td>run <code>bash ./configure</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_OUTPUTDIR=build/my-special-output</code></td>
|
|
<td>before building the first time:
|
|
<br>
|
|
<code>cd build/my-special-output</code>
|
|
<br>
|
|
<code>bash ../../configure</code>
|
|
<br>
|
|
to build:
|
|
<br>
|
|
<code>cd build/my-special-output</code>
|
|
<br>
|
|
<code>make</code>
|
|
</td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_BOOTDIR=/opt/java/jdk7</code></td>
|
|
<td>run <code>configure --with-boot-jdk=/opt/java/jdk7</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>run <code>make ARCH_DATA_MODEL=32</code></td>
|
|
<td>run <code>configure --with-target-bits=32</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>BUILD_CLIENT_ONLY=true</code></td>
|
|
<td>run <code>configure --with-jvm-variants=client</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_FREETYPE_LIB_PATH=/opt/freetype/lib</code>
|
|
and <code>ALT_FREETYPE_HEADERS_PATH=/opt/freetype/include</code></td>
|
|
<td>run <code>configure --with-freetype=/opt/freetype</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_CUPS_HEADERS_PATH=/opt/cups/include</code></td>
|
|
<td>run <code>configure --with-cups=/opt/cups</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_OPENWIN_HOME=/opt/X11R6</code></td>
|
|
<td>run <code>configure --with-x=/opt/X11R6</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_MSVCRNN_DLL_PATH=c:/vc_redist</code></td>
|
|
<td>run <code>configure --with-msvcr100dll=/cygdrive/c/vc_redist</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_COMPILER_PATH=/opt/my-gcc/bin/gcc</code></td>
|
|
<td>run <code>CC=/opt/my-gcc/bin/gcc configure</code>
|
|
or <code>CXX=/opt/my-gcc/bin/g++ configure</code>
|
|
</td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>BUILD_HEADLESS_ONLY=true</code></td>
|
|
<td>run <code>configure --disable-headful</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_DEVTOOLS_PATH=/opt/mytools</code></td>
|
|
<td>just run <code>configure</code>,
|
|
your tools should be detected automatically.
|
|
If you have an unusual configuration,
|
|
add the tools directory to your <code>PATH</code>.
|
|
</td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_DROPS_DIR=/home/user/dropdir</code></td>
|
|
<td>source drops are not used anymore</td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>USE_ONLY_BOOTDIR_TOOLS=true</code></td>
|
|
<td>not needed, <code>configure</code> should always do the Right Thing automatically</td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>ALT_JDK_IMPORT_PATH=/opt/java/import-jdk</code>
|
|
or <code>ALT_BUILD_JDK_IMPORT_PATH=/opt/java/import-jdk</code>
|
|
</td>
|
|
<td>Importing JDKs is no longer possible,
|
|
but hotspot can be imported using
|
|
<code>--with-import-hotspot</code>.
|
|
Documentation on how to achieve a
|
|
similar solution will come soon!
|
|
</td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>EXTRA_CFLAGS=-Xfoo</code></td>
|
|
<td>run <code>CFLAGS=-Xfoo configure</code></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>CROSS_COMPILE_ARCH=i586</code></td>
|
|
<td>see <a href="#sec7.3"> section 7.3, Cross-compilation</a></td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<td>set <code>SKIP_BOOT_CYCLE=false</code></td>
|
|
<td>Run <code>make bootcycle-images</code>.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h3><a name="variables">Environment/Make Variables</a></h3>
|
|
<p>
|
|
Some of the
|
|
environment or make variables (just called <b>variables</b> in this
|
|
document) that can impact the build are:
|
|
<blockquote>
|
|
<dl>
|
|
<dt><a name="path"><code>PATH</code></a> </dt>
|
|
<dd>Typically you want to set the <code>PATH</code> to include:
|
|
<ul>
|
|
<li>The location of the GNU make binary</li>
|
|
<li>The location of the Bootstrap JDK <code>java</code>
|
|
(see <a href="#bootjdk">Bootstrap JDK</a>)</li>
|
|
<li>The location of the C/C++ compilers
|
|
(see <a href="#compilers"><code>compilers</code></a>)</li>
|
|
<li>The location or locations for the Unix command utilities
|
|
(e.g. <code>/usr/bin</code>)</li>
|
|
</ul>
|
|
</dd>
|
|
<dt><code>MILESTONE</code> </dt>
|
|
<dd>
|
|
The milestone name for the build (<i>e.g.</i>"beta").
|
|
The default value is "internal".
|
|
</dd>
|
|
<dt><code>BUILD_NUMBER</code> </dt>
|
|
<dd>
|
|
The build number for the build (<i>e.g.</i> "b27").
|
|
The default value is "b00".
|
|
</dd>
|
|
<dt><a name="arch_data_model"><code>ARCH_DATA_MODEL</code></a></dt>
|
|
<dd>The <code>ARCH_DATA_MODEL</code> variable
|
|
is used to specify whether the build is to generate 32-bit or 64-bit
|
|
binaries.
|
|
The Solaris build supports either 32-bit or 64-bit builds, but
|
|
Windows and Linux will support only one, depending on the specific
|
|
OS being used.
|
|
Normally, setting this variable is only necessary on Solaris.
|
|
Set <code>ARCH_DATA_MODEL</code> to <code>32</code> for generating 32-bit binaries,
|
|
or to <code>64</code> for generating 64-bit binaries.
|
|
</dd>
|
|
<dt><a name="ALT_BOOTDIR"><code>ALT_BOOTDIR</code></a></dt>
|
|
<dd>
|
|
The location of the bootstrap JDK installation.
|
|
See <a href="#bootjdk">Bootstrap JDK</a> for more information.
|
|
You should always install your own local Bootstrap JDK and
|
|
always set <code>ALT_BOOTDIR</code> explicitly.
|
|
</dd>
|
|
<dt><a name="ALT_OUTPUTDIR"><code>ALT_OUTPUTDIR</code></a> </dt>
|
|
<dd>
|
|
An override for specifying the (absolute) path of where the
|
|
build output is to go.
|
|
The default output directory will be build/<i>platform</i>.
|
|
</dd>
|
|
<dt><a name="ALT_COMPILER_PATH"><code>ALT_COMPILER_PATH</code></a> </dt>
|
|
<dd>
|
|
The location of the C/C++ compiler.
|
|
The default varies depending on the platform.
|
|
</dd>
|
|
<dt><code><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></code></dt>
|
|
<dd>
|
|
The location of the <a href="#cacerts">cacerts</a> file.
|
|
The default will refer to
|
|
<code>jdk/src/share/lib/security/cacerts</code>.
|
|
</dd>
|
|
<dt><a name="ALT_CUPS_HEADERS_PATH"><code>ALT_CUPS_HEADERS_PATH</code></a> </dt>
|
|
<dd>
|
|
The location of the CUPS header files.
|
|
See <a href="#cups">CUPS information</a> for more information.
|
|
If this path does not exist the fallback path is
|
|
<code>/usr/include</code>.
|
|
</dd>
|
|
<dt><a name="ALT_FREETYPE_LIB_PATH"><code>ALT_FREETYPE_LIB_PATH</code></a></dt>
|
|
<dd>
|
|
The location of the FreeType shared library.
|
|
See <a href="#freetype">FreeType information</a> for details.
|
|
</dd>
|
|
<dt><a name="ALT_FREETYPE_HEADERS_PATH"><code>ALT_FREETYPE_HEADERS_PATH</code></a></dt>
|
|
<dd>
|
|
The location of the FreeType header files.
|
|
See <a href="#freetype">FreeType information</a> for details.
|
|
</dd>
|
|
<dt><a name="ALT_JDK_DEVTOOLS_PATH"><code>ALT_JDK_DEVTOOLS_PATH</code></a></dt>
|
|
<dd>
|
|
The default root location of the devtools.
|
|
The default value is
|
|
<code>$(ALT_SLASH_JAVA)/devtools</code>.
|
|
</dd>
|
|
<dt><code><a name="ALT_DEVTOOLS_PATH">ALT_DEVTOOLS_PATH</a></code> </dt>
|
|
<dd>
|
|
The location of tools like the
|
|
<a href="#zip"><code>zip</code> and <code>unzip</code></a>
|
|
binaries, but might also contain the GNU make utility
|
|
(<code><i>gmake</i></code>).
|
|
So this area is a bit of a grab bag, especially on Windows.
|
|
The default value depends on the platform and
|
|
Unix Commands being used.
|
|
On Linux the default will be
|
|
<code>$(ALT_JDK_DEVTOOLS_PATH)/linux/bin</code>,
|
|
on Solaris
|
|
<code>$(ALT_JDK_DEVTOOLS_PATH)/<i>{sparc,i386}</i>/bin</code>,
|
|
and on Windows with CYGWIN
|
|
<code>/usr/bin</code>.
|
|
</dd>
|
|
<dt><a name="ALT_UNIXCCS_PATH"><code>ALT_UNIXCCS_PATH</code></a></dt>
|
|
<dd>
|
|
<strong>Solaris only:</strong>
|
|
An override for specifying where the Unix CCS
|
|
command set are located.
|
|
The default location is <code>/usr/ccs/bin</code>
|
|
</dd>
|
|
<dt><a name="ALT_SLASH_JAVA"><code>ALT_SLASH_JAVA</code></a></dt>
|
|
<dd>
|
|
The default root location for many of the ALT path locations
|
|
of the following ALT variables.
|
|
The default value is
|
|
<code>"/java"</code> on Solaris and Linux,
|
|
<code>"J:"</code> on Windows.
|
|
</dd>
|
|
|
|
<dt><a name="ALT_OPENWIN_HOME"><code>ALT_OPENWIN_HOME</code></a></dt>
|
|
<dd>
|
|
The top-level directory of the libraries and include files
|
|
for the platform's
|
|
graphical programming environment.
|
|
The default location is platform specific.
|
|
For example, on Linux it defaults to <code>/usr/X11R6/</code>.
|
|
</dd>
|
|
<dt><strong>Windows specific:</strong></dt>
|
|
<dd>
|
|
<dl>
|
|
<dt><a name="ALT_WINDOWSSDKDIR"><code>ALT_WINDOWSSDKDIR</code></a> </dt>
|
|
<dd>
|
|
The location of the
|
|
Microsoft Windows SDK where some tools will be
|
|
located.
|
|
The default is whatever WINDOWSSDKDIR is set to
|
|
(or WindowsSdkDir) or the path
|
|
<br>
|
|
<code>c:\Program Files\Microsoft SDKs\Windows\v7.0a</code>
|
|
</dd>
|
|
<dt><code><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></code> </dt>
|
|
<dd>
|
|
The location of the
|
|
<a href="#dxsdk">Microsoft DirectX 9 SDK</a>.
|
|
The default will be to try and use the DirectX environment
|
|
variable <code>DXSDK_DIR</code>,
|
|
failing that, look in <code>C:/DXSDK</code>.
|
|
</dd>
|
|
<dt><code><a name="ALT_MSVCRNN_DLL_PATH">ALT_MSVCRNN_DLL_PATH</a></code> </dt>
|
|
<dd>
|
|
The location of the
|
|
<a href="#msvcrNN"><code>MSVCR100.DLL</code></a>.
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
<dt><strong>Cross-Compilation Support:</strong></dt>
|
|
<dd>
|
|
<dl>
|
|
<dt><a name="CROSS_COMPILE_ARCH"><code>CROSS_COMPILE_ARCH</code></a> </dt>
|
|
<dd>
|
|
Set to the target architecture of a
|
|
cross-compilation build. If set, this
|
|
variable is used to signify that we are
|
|
cross-compiling. The expectation
|
|
is that
|
|
<a href="#ALT_COMPILER_PATH"><code>ALT_COMPILER_PATH</code></a>
|
|
is set
|
|
to point to the cross-compiler and that any
|
|
cross-compilation specific flags
|
|
are passed using
|
|
<a href="#EXTRA_CFLAGS"><code>EXTRA_CFLAGS</code></a>.
|
|
The <a href="#ALT_OPENWIN_HOME"><code>ALT_OPENWIN_HOME</code></a>
|
|
variable should
|
|
also be set to point to the graphical header files
|
|
(e.g. X11) provided with
|
|
the cross-compiler.
|
|
When cross-compiling we skip execution of any demos
|
|
etc that may be built, and
|
|
also skip binary-file verification.
|
|
</dd>
|
|
<dt><code><a name="EXTRA_CFLAGS">EXTRA_CFLAGS</a></code> </dt>
|
|
<dd>
|
|
Used to pass cross-compilation options to the
|
|
cross-compiler.
|
|
These are added to the <code>CFLAGS</code>
|
|
and <code>CXXFLAGS</code> variables.
|
|
</dd>
|
|
<dt><code><a name="USE_ONLY_BOOTDIR_TOOLS">USE_ONLY_BOOTDIR_TOOLS</a></code> </dt>
|
|
<dd>
|
|
Used primarily for cross-compilation builds
|
|
(and always set in that case)
|
|
this variable indicates that tools from the
|
|
boot JDK should be used during
|
|
the build process, not the tools
|
|
(<code>javac</code>, <code>javah</code>, <code>jar</code>)
|
|
just built (which can't execute on the build host).
|
|
</dd>
|
|
<dt><code><a name="HOST_CC">HOST_CC</a></code> </dt>
|
|
<dd>
|
|
The location of the C compiler to generate programs
|
|
to run on the build host.
|
|
Some parts of the build generate programs that are
|
|
then compiled and executed
|
|
to produce other parts of the build. Normally the
|
|
primary C compiler is used
|
|
to do this, but when cross-compiling that would be
|
|
the cross-compiler and the
|
|
resulting program could not be executed.
|
|
On Linux this defaults to <code>/usr/bin/gcc</code>;
|
|
on other platforms it must be
|
|
set explicitly.
|
|
</dd>
|
|
</dl>
|
|
<dt><strong>Specialized Build Options:</strong></dt>
|
|
<dd>
|
|
Some build variables exist to support specialized build
|
|
environments and/or specialized
|
|
build products. Their use is only supported in those contexts:
|
|
<dl>
|
|
<dt><code><a name="BUILD_CLIENT_ONLY">BUILD_CLIENT_ONLY</a></code> </dt>
|
|
<dd>
|
|
Indicates this build will only contain the
|
|
Hotspot client VM. In addition to
|
|
controlling the Hotspot build target,
|
|
it ensures that we don't try to copy
|
|
any server VM files/directories,
|
|
and defines a default <code>jvm.cfg</code> file
|
|
suitable for a client-only environment.
|
|
Using this in a 64-bit build will
|
|
generate a sanity warning as 64-bit client
|
|
builds are not directly supported.
|
|
</dd>
|
|
<dt><code><a name="BUILD_HEADLESS_ONLY"></a>BUILD_HEADLESS_ONLY</code> </dt>
|
|
<dd>
|
|
Used when the build environment has no graphical
|
|
capabilities at all. This
|
|
excludes building anything that requires graphical
|
|
libraries to be available.
|
|
</dd>
|
|
<dt><code><a name="JAVASE_EMBEDDED"></a>JAVASE_EMBEDDED</code> </dt>
|
|
<dd>
|
|
Used to indicate this is a build of the Oracle
|
|
Java SE Embedded product.
|
|
This will enable the directives included in the
|
|
SE-Embedded specific build
|
|
files.
|
|
</dd>
|
|
<dt><code><a name="LIBZIP_CAN_USE_MMAP">LIBZIP_CAN_USE_MMAP</a></code> </dt>
|
|
<dd>
|
|
If set to false, disables the use of mmap by the
|
|
zip utility. Otherwise,
|
|
mmap will be used.
|
|
</dd>
|
|
<dt><code><a name="COMPRESS_JARS"></a>COMPRESS_JARS</code> </dt>
|
|
<dd>
|
|
If set to true, causes certain jar files that
|
|
would otherwise be built without
|
|
compression, to use compression.
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
</blockquote> <!-- Appendix D -->
|
|
|
|
<!-- ====================================================== -->
|
|
<hr>
|
|
<p>End of OpenJDK README-builds.html document.<br>Please come again!
|
|
<hr>
|
|
|
|
</body>
|
|
</html>
|