<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head><title>OpenJDK Build README</title></head>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<center>
    <h1>OpenJDK Build README</h1>
</center>

<!-- ------------------------------------------------------ --> 
<hr noshade="noshade" size="3">

<h2><a name="introduction">Introduction</a></h2>

<blockquote>
    <p>
    This README file contains build instructions for the 
    <a href="http://openjdk.java.net">OpenJDK</a>.
    Building the source code for the 
    OpenJDK
    requires
    a certain degree of technical expertise.
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h2><a name="contents">Contents</a></h2>

<blockquote>
    <ul>
        <li><a href="#introduction">Introduction</a></li>
        <li><a href="#MBE">Minimum Build Environments</a></li>
        <li><a href="#SDBE">Specific Developer Build Environments</a></li>
        <li><a href="#directories">Source Directory Structure</a> </li>
        <li><a href="#building">Build Information</a>
            <ul type="disc">
                <li><a href="#gmake">GNU Make (<tt><i>gmake</i></tt>)</a> </li>
                <li><a href="#linux">Basic Linux System Setup</a> </li>
                <li><a href="#solaris">Basic Solaris System Setup</a> </li>
                <li><a href="#windows">Basic Windows System Setup</a> </li>
                <li><a href="#dependencies">Build Dependencies</a> </li>
                <ul type="disc">
                    <li><a href="#bootjdk">Bootstrap JDK</a> </li>
                    <li><a href="#binaryplugs">Binary Plugs</a> </li>
                    <li><a href="#cacerts">Certificate Authority File (cacert)</a> </li>
                    <li><a href="#compilers">Compilers</a> 
                        <ul>
                            <li><a href="#msvc">Microsoft Visual Studio</a> </li>
                            <li><a href="#mssdk">Microsoft Platform SDK</a> </li>
                            <li><a href="#gcc">Linux gcc/binutils</a> </li>
                            <li><a href="#studio">Sun Studio</a> </li>
                        </ul>
                    </li>
                    <li>Linux and Solaris:
                        <ul>
                            <li><a href="#cups">CUPS Include files</a> </li>
                        </ul>
                    </li>
                    <li>Windows only:
                        <ul>
                            <li>Unix Command Tools (<a href="#cygwin">CYGWIN</a>)</li>
                            <li><a href="#dxsdk">DirectX 9.0 SDK</a> </li>
                        </ul>
                    </li>
                </ul>
            </ul>
        </li>
        <li><a href="#creating">Creating the Build</a> </li>
        <li><a href="#testing">Testing the Build</a> </li>
        <li><a href="#variables">Environment/Make Variables</a></li>
        <li><a href="#troubleshooting">Troubleshooting</a></li>
    </ul>
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h2><a name="MBE">Minimum Build Environments</a></h2>

<blockquote>
    <p>
    This file often describes specific requirements for what we call the
    "minimum build environments" (MBE) for the JDK.
    Building with the MBE will generate the most compatible
    bits that install on, and run correctly on, the most variations
    of the same base OS and hardware architecture.
    These usually represent what is often called the
    least common denominator platforms.
    It is understood that most developers will NOT be using these 
    specific platforms, and in fact creating these specific platforms
    may be difficult due to the age of some of this software.
    <p>
    
    <p>
    The minimum OS and C/C++ compiler versions needed for building the
    OpenJDK:
    <p>
    <center>
        <table border="1">
            <thead>
                <tr>
                    <th>Base OS and Architecture</th>
                    <th>OS</th>
                    <th>Compiler</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Linux X86 (32bit)</td>
                    <td>Red Hat Enterprise Linux 4 </td>
                    <td>gcc 4 </td>
                </tr>
                <tr>
                    <td>Linux X64 (64bit)</td>
                    <td>Red Hat Enterprise Linux 4 </td>
                    <td>gcc 4 </td>
                </tr>
                <tr>
                    <td>Solaris SPARC (32bit)</td>
                    <td>Solaris 10 + patches 
                        <br>
                        See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE">SunSolve</a> for patch downloads.
                    </td>
                    <td>Sun Studio 11 </td>
                </tr>
                <tr>
                    <td>Solaris SPARCV9 (64bit)</td>
                    <td>Solaris 10 + patches
                        <br>
                        See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE">SunSolve</a> for patch downloads.
                    </td>
                    <td>Sun Studio 11</td>
                </tr>
                <tr>
                    <td>Solaris X86 (32bit)</td>
                    <td>Solaris 10 + patches
                        <br>
                        See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE">SunSolve</a> for patch downloads.
                    </td>
                    <td>Sun Studio 11</td>
                </tr>
                <tr>
                    <td>Solaris X64 (64bit)</td>
                    <td>Solaris 10 + patches
                        <br>
                        See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE">SunSolve</a> for patch downloads.
                    </td>
                    <td>Sun Studio 11</td>
                </tr>
                <tr>
                    <td>Windows X86 (32bit)</td>
                    <td>Windows XP</td>
                    <td>Microsoft Visual Studio .NET 2003 Professional</td>
                </tr>
                <tr>
                    <td>Windows X64 (64bit)</td>
                    <td>Windows Server 2003 - Enterprise x64 Edition</td>
                    <td>Microsoft Platform SDK - April 2005</td>
                </tr>
            </tbody>
        </table>
    </center>
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h2><a name="SDBE">Specific Developer Build Environments</a></h2>

<blockquote>
    <p>
    We won't be listing all the possible environments, but
    we will try to provide what information we have available to us.
</blockquote>

<h3><a name="fedora">Fedora</a></h3>

<blockquote>
    TBD
</blockquote>

<h3><a name="debian">Debian</a></h3>

<blockquote>
    TBD
</blockquote>

<h3><a name="ubuntu">Ubuntu</a></h3>

<blockquote>
    <p>
    In addition to needing the Bootstrap JDK and the Binary Plugs, 
    when building on Ubuntu you will need to
    make sure certain packages are installed.
    In particular, certain X11 packages, make, m4, gawk, gcc 4, 
    binutils, cups, freetype
    and alsa.
    
    <h4>Ubuntu 6.06</h4>
    
    <p>
    The following list of packages for Ubuntu 6.06 is a working set that
    does appear to work. 
    
    <p>
    <b>Note that it's quite possible that some of these
        packages are not required, so anyone discovering that some of the
        packages listed below are NOT required,
        please let the
        OpenJDK
    team know.</b>
    <p>
    All the packages below can be installed with the
    Synaptic Package manager provided with the base Ubuntu 6.06 release.
    
    <blockquote>
        <ul>
            <li>binutils (2.16.1cvs20060117-1ubuntu2.1)</li>
            <li>cpp (4:4.0.3-1)</li>
            <li>cpp-4.0 (4.0.3-1ubuntu5)</li>
            <li>libfreetype6-dev</li>
            <li>g++ (4:4.0.3-1)</li>
            <li>g++-4.0 (4.0.3-1ubuntu5)</li>
            <li>gawk (1:3.1.5-2build1)</li>
            <li>gcc (4:4.0.3-1)</li>
            <li>gcc-4.0 (4.0.3-1ubuntu5)</li>
            <li>libasound2-dev (1.0.10-2ubuntu4)</li>
            <li>libc6 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li>
            <li>libc6-dev (2.3.6-0ubuntu20.4)</li>
            <li>libc6-i686 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li>
            <li>libcupsys2-dev (1.2.2-0ubuntu0.6.06)</li>
            <li>libgcrypt11-dev (1.2.2-1)</li>
            <li>libgnutls-dev (1.2.9-2ubuntu1.1)</li>
            <li>libgnutls12 (1.2.9-2ubuntu1) to 1.2.9-2ubuntu1.1</li>
            <li>libgpg-error-dev (1.1-4)</li>
            <li>libice-dev (2:1.0.0-0ubuntu2)</li>
            <li>liblockfile1 (1.06.1)</li>
            <li>libopencdk8-dev (0.5.7-2)</li>
            <li>libpopt-dev (1.7-5)</li>
            <li>libsm-dev (2:1.0.0-0ubuntu2)</li>
            <li>libstdc++6-4.0-dev (4.0.3-1ubuntu5)</li>
            <li>libtasn1-2-dev (0.2.17-1ubuntu1)</li>
            <li>libx11-dev (2:1.0.0-0ubuntu9)</li>
            <li>libxau-dev (1:1.0.0-0ubuntu4)</li>
            <li>libxaw-headers (2:1.0.1-0ubuntu3)</li>
            <li>libxaw7-dev (2:1.0.1-0ubuntu3)</li>
            <li>libxdmcp-dev (1:1.0.0-0ubuntu2)</li>
            <li>libxext-dev (2:1.0.0-0ubuntu4)</li>
            <li>libxi-dev (2:1.0.0-0ubuntu3) </li>
            <li>libxmu-dev (2:1.0.0-0ubuntu3)</li>
            <li>libxmu-headers (2:1.0.0-0ubuntu3)</li>
            <li>libxmuu-dev (2:1.0.0-0ubuntu3)</li>
            <li>libxp-dev (6.8.2-11ubuntu2)</li>
            <li>libxpm-dev (1:3.5.4.2-0ubuntu3)</li>
            <li>libxrandr-dev (1:1.1.0.2-0ubuntu4)</li>
            <li>libxt-dev (1:1.0.0-0ubuntu3)</li>
            <li>libxtrap-dev (2:1.0.0-0ubuntu2)</li>
            <li>libxtst-dev (2:1.0.1-0ubuntu2)</li>
            <li>libxv-dev (2:1.0.1-0ubuntu3)</li>
            <li>linux-kernel-headers (2.6.11.2-0ubuntu18)</li>
            <li>m4 (1.4.4-1)</li>
            <li>make (3.80+3.81.b4-1)</li>
            <li>ssl-cert (1.0.13)</li>
            <li>x-dev (7.0.4-0ubuntu2)</li>
            <li>x11proto-core-dev (7.0.4-0ubuntu2)</li>
            <li>x11proto-input-dev (1.3.2-0ubuntu2)</li>
            <li>x11proto-kb-dev (1.0.2-0ubuntu2)</li>
            <li>x11proto-randr-dev (1.1.2-0ubuntu2)</li>
            <li>x11proto-record-dev (1.13.2-0ubuntu2)</li>
            <li>x11proto-trap-dev (3.4.3-0ubuntu2)</li>
            <li>x11proto-video-dev (2.2.2-0ubuntu2)</li>
            <li>x11proto-xext-dev (7.0.2-0ubuntu2)</li>
            <li>xlibs-dev (7.0.0-0ubuntu45)</li>
            <li>zlib1g-dev (1:1.2.3-6ubuntu4)</li>
        </ul>
    </blockquote>
    
    <h4>Ubuntu 7.04</h4>
    
    <p>
    Using the Synaptic Package Manager, download the following
    packages (double indented packages are automatically aquired
    due to package dependencies):
    
    <blockquote>
        <ul>
            <li>build-essential</li>
            <ul>
                <li>dpkg-dev</li>
                <li>g++</li>
                <li>g++-4.1</li>
                <li>libc6-dev</li>
                <li>libstdc++6.4.1-dev</li>
                <li>linux-libc-dev</li>
            </ul>
            <li>gawk</li>
            <li>m4</li>
            <li>libasound2-dev</li>
            <li>libcupsys2-dev</li>
            <ul>
                <li>libgcrypt11-dev</li>
                <li>lgnutls-dev</li>
                <li>libgpg-error-dev</li>
                <li>liblzo-dev</li>
                <li>libopencdk8-dev</li>
                <li>libpopt-dev</li>
                <li>libtasn1-3-dev</li>
                <li>zlib1g-dev</li>
            </ul>
            <li>sun-java6-jdk</li>
            <ul>
                <li>java-common</li>
                <li>libltdl3</li>
                <li>odbcinst1debian1</li>
                <li>sun-java6-bin</li>
                <li>sun-java6-jre</li>
                <li>unixodbc</li>
            </ul>
            <li>xlibs-dev</li>
            <ul>
                <li>(many)</li>
            </ul>
            <li>x11proto-print-dev</li>
            <li>libxaw7-dev</li>
            <ul>
                <li>libxaw-headers</li>
            </ul>
            <li>libxp-dev</li>
            <li>libfreetype6-dev</li>
        </ul>
    </blockquote>
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h2><a name="directories">Source Directory Structure</a></h2>

<blockquote>
    <p>
    The source code for the 
    OpenJDK is
    delivered in <i>3</i> sibling directories:
    <tt>hotspot</tt>, 
    <tt>langtools</tt>, 
    <tt>corba</tt>, 
    <tt>jaxws</tt>, 
    <tt>jaxp</tt>, 
    <tt>jdk</tt>
    and
    The <tt>hotspot</tt> directory contains the source code and make
    files for
    building the 
    OpenJDK
    Hotspot Virtual Machine. 
    The <tt>jdk</tt>
    directory contains the source code and make files for
    building the 
    OpenJDK
    runtime libraries, tools and demos. 
    The top level Makefile is used to build the complete OpenJDK 
    release including building the hotspot
    VM, staging the VM binaries, and building the 
    OpenJDK 
    runtime libraries,
    tools and demos.
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h2><a name="building">Build Information</a></h2>

<blockquote>
    <p>
    Building the 
    OpenJDK
    is done with a <tt><i>gmake</i></tt>
    command line and various
    environment or make variable settings that direct the make rules
    to where various components have been installed.
    Where possible the makefiles will attempt to located the various
    components in the default locations or any component specific 
    variable settings.
    When the normal defaults fail or components cannot be found,
    the various
    <tt>ALT_*</tt> variables (alternates)
    can be used to help the makefiles locate components.
    <p>
    Refer to the bash/sh/ksh setup file
    <tt>jdk/make/jdk_generic_profile.sh</tt>
    if you need help in setting up your environment variables.
    A build could be as simple as:
    <blockquote>
        <pre><tt>
                bash
                . jdk/make/jdk_generic_profile.sh
                <i>gmake</i> sanity &amp;&amp; <i>gmake</i>
        </tt></pre>
    </blockquote>
    <p>
    Of course ksh or sh would work too.
    But some customization will probably be necessary.
    The <tt>sanity</tt> rule will make some basic checks on build
    dependencies and generate appropriate warning messages
    regarding missing, out of date, or newer than expected components
    found on your system.
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h3><a name="gmake">GNU make (<tt><i>gmake</i></tt>)</a></h3>

<blockquote>
    <p>
    The Makefiles in the 
    OpenJDK 
    are only valid when used with the 
    GNU version of the utility command <tt>make</tt>
    (<tt><i>gmake</i></tt>).
    A few notes about using GNU make:
    <ul>
        <li>
            In general, you need GNU make version 3.78.1 or newer.
        </li>
        <li>
            Place the location of the GNU make binary in the <tt>PATH</tt>. 
        </li>
        <li>
            <strong>Linux:</strong>
            The <tt>/usr/bin/make</tt> command should work fine for you.
        </li>
        <li>
            <strong>Solaris:</strong>
            Do NOT use <tt>/usr/bin/make</tt> on Solaris.
            If your Solaris system has the software
            from the Solaris Companion CD installed, 
            you should use <tt>gmake</tt>
            which will be located in either the <tt>/opt/sfw/bin</tt> or 
            <tt>/usr/sfw/bin</tt> directory.
        </li>
        <li>
            <strong>Windows:</strong>
            Make sure you start your build inside a bash/sh/ksh shell.
            <br>
            <b>WARNING:</b> Watch out for make version 3.81, it may
            not work due to a lack of support for drive letter paths
            like <tt>C:/</tt>. Use a 3.80 version, or find a newer
            version that has this problem fixed.
        </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">
        GNU make web site
    </a>.
    The latest source to GNU make is available at
    <a href="http://ftp.gnu.org/pub/gnu/make/">ftp.gnu.org/pub/gnu/make/</a>.
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h3><a name="linux">Basic Linux System Setup</a></h3>

<blockquote>
    <p>
    <strong>i586 only:</strong>
    The minimum recommended hardware for building the Linux version
    is a Pentium class processor or better, at least 256 MB of RAM, and
    approximately 1.5 GB of free disk space.
    <p> 
    <strong>X64 only:</strong>
    The minimum recommended hardware for building the Linux
    version is an AMD Opteron class processor, at least 512 MB of RAM, and
    approximately 4 GB of free disk space.
    <p> 
    The build will use the tools contained in 
    <tt>/bin</tt> and 
    <tt>/usr/bin</tt>
    of a standard installation of the Linux operating environment. 
    You should ensure that these directories are in your 
    <tt>PATH</tt>.
    <p>
    Note that some Linux systems have a habit of pre-populating
    your environment variables for you, for example <tt>JAVA_HOME</tt>
    might get pre-defined for you to refer to the JDK installed on
    your Linux system. 
    You will need to unset <tt>JAVA_HOME</tt>.
    It's a good idea to run <tt>env</tt> and verify the
    environment variables you are getting from the default system
    settings make sense for building the 
    OpenJDK.
</blockquote>

<!-- ------------------------------------------------------ -->

<h4><a name="linux_checklist">Basic Linux Check List</a></h4>

<blockquote>
    <ol>
        <li>
            Install the
            <a href="#bootjdk">Bootstrap JDK</a>, set
            <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
        </li>
        <li>
            Install the
            <a href="#binaryplugs">Binary Plugs</a>, set
            <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>.
        </li>
        <li>
            Install or upgrade the <a href="#freetype">FreeType development
            package</a>.
        </li>
    </ol>
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h3><a name="solaris">Basic Solaris System Setup</a></h3>

<blockquote>
    <p>
    The minimum recommended hardware for building the
    Solaris SPARC version is an UltraSPARC with 512 MB of RAM. 
    For building
    the Solaris x86 version, a Pentium class processor or better and at
    least 128 MB of RAM are recommended. 
    Approximately 1.4 GB of free disk
    space is needed for a 32-bit build.
    <p>
    If you are building the 64bit version, you should
    run the command "isainfo -v" to verify that you have a
    64-bit installation. 
    An additional 7 GB of free disk space is needed
    for a 64-bit build.
    <p> 
    The build uses the tools contained in <tt>/usr/ccs/bin</tt>
    and <tt>/usr/bin</tt> of a standard developer or full installation of
    the Solaris operating environment.
</blockquote>

<!-- ------------------------------------------------------ -->

<h4><a name="solaris_checklist">Basic Solaris Check List</a></h4>

<blockquote>
    <ol>
        <li>
            Install the
            <a href="#bootjdk">Bootstrap JDK</a>, set
            <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
        </li>
        <li>
            Install the
            <a href="#binaryplugs">Binary Plugs</a>, set
            <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>.
        </li>
        <li>
            Install the
            <a href="#studio">Sun Studio Compilers</a>, set
            <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>.
        </li>
        <li>
            Install the
            <a href="#cups">CUPS Include files</a>, set
            <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt>.
        </li>
    </ol>
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h3><a name="windows">Basic Windows System Setup</a></h3>

<blockquote> 
    <p>
    <strong>i586 only:</strong>
    The minimum recommended hardware for building the 32bit or X86
    Windows version is an Pentium class processor or better, at least
    512 MB of RAM, and approximately 600 MB of free disk space.
    <strong>
        NOTE: The Windows 2000 build machines need to use the
        file system NTFS. 
        Build machines formatted to FAT32 will not work 
        because FAT32 doesn't support case-sensitivity in file names.
    </strong>
    <p> 
    <strong>X64 only:</strong>
    The minimum recommended hardware for building
    the Windows X64 version is an AMD Opteron class processor, at least 1
    GB of RAM, and approximately 10 GB of free disk space.
</blockquote>

<!-- ------------------------------------------------------ -->

<h4><a name="paths">Windows Paths</a></h4>

<blockquote>
    <p>
    <strong>Windows:</strong>
    Note that GNU make is a historic utility and is based very
    heavily on shell scripting, so it does not tolerate the Windows habit
    of having spaces in pathnames or the use of the <tt>\</tt>characters in pathnames.
    Luckily on most Windows systems, you can use <tt>/</tt>instead of \, and
    there is always a 'short' pathname without spaces for any path that 
    contains spaces.
    Unfortunately, this short pathname can be somewhat dynamic and the
    formula is difficult to explain.
    You can use <tt>cygpath</tt> utility to map pathnames with spaces
    or the <tt>\</tt>character into the <tt>C:/</tt> style of pathname
    (called 'mixed'), e.g.
    <tt>cygpath -s -m "<i>path</i>"</tt>.
    <p>
    The makefiles will try to translate any pathnames supplied
    to it into the <tt>C:/</tt> style automatically.
    <p>
    Note that use of CYGWIN creates a unique problem with regards to
    setting <a href="#path"><tt>PATH</tt></a>. Normally on Windows
    the <tt>PATH</tt> variable contains directories
    separated with the ";" character (Solaris and Linux uses ":").
    With CYGWIN, it uses ":", but that means that paths like "C:/path"
    cannot be placed in the CYGWIN version  of <tt>PATH</tt> and
    instead CYGWIN uses something like <tt>/cygdrive/c/path</tt>
    which CYGWIN understands, but only CYGWIN understands.
    So be careful with paths on Windows.
</blockquote>

<!-- ------------------------------------------------------ -->

<h4><a name="windows_checklist">Basic Windows Check List</a></h4>

<blockquote>
    <ol>
        <li>
            Install the
            <a href="#cygwin">CYGWIN product</a>. 
        </li>
        <li>
            Install the 
            <a href="#bootjdk">Bootstrap JDK</a>, set
            <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
        </li>
        <li>
            Install the
            <a href="#binaryplugs">Binary Plugs</a>, set
            <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>..
        </li>
        <li>
            Install the
            <a href="#msvc">Microsoft Visual Studio .NET 2003 Professional</a> or the 
            <a href="#mssdk">Microsoft Platform SDK</a>.
        </li>
        <li>
            Setup all environment variables for compilers 
            (see <a href="#msvc">compilers</a>).
        </li>
        <li>
            Install 
            <a href="#dxsdk">Microsoft DirectX SDK</a>.
        </li>
    </ol>
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h3><a name="dependencies">Build Dependencies</a></h3>

<blockquote>
    <p>
    Depending on the platform, the 
    OpenJDK 
    build process has some basic
    dependencies on components not part of the 
    OpenJDK 
    sources.
    Some of these are specific to a platform, some even specific to
    an architecture.
    Each dependency will have a set of ALT variables that can be set
    to tell the makefiles where to locate the component.
    In most cases setting these ALT variables may not be necessary
    and the makefiles will find defaults on the system in standard
    install locations or through component specific variables.
    
    <h4><a name="bootjdk">Bootstrap JDK</a></h4>
    
    <blockquote>
        <p>
        All 
        OpenJDK 
        builds require access to the previously released 
        JDK 6, this is often called a bootstrap JDK.
        The JDK 6 binaries can be downloaded from Sun's 
        <a href="http://java.sun.com/javase/1.6.0/download.html">JDK 6 download site</a>.
        For build performance reasons
        is very important that this bootstrap JDK be made available on the
        local disk of the machine doing the build.
        You should always set 
        <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>
        to point to the location of
        the bootstrap JDK installation, this is the directory pathname
        that contains a <tt>bin, lib, and include</tt>
        It's also a good idea to also place its <tt>bin</tt> directory
        in the <tt>PATH</tt> environment variable, although it's
        not required.
        <p>
        <strong>Solaris:</strong>
        Some pre-installed JDK images may be available to you in the
        directory <tt>/usr/jdk/instances</tt>.
        If you don't set
        <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>
        the makefiles will look in that location for a JDK it can use.
    </blockquote>
    
    <h4><a name="binaryplugs">Binary Plugs</a></h4>
    
    <blockquote>
        <p>
        Not all of the source code that makes up the JDK is available
        under an open-source license.
        In order to build an OpenJDK binary from source code,
        you must first download and install the appropriate
        binary plug bundles from the OpenJDK Download area.
        During the OpenJDK build process these "binary plugs"
        for the encumbered components will be copied into your
        resulting OpenJDK binary build image.
        These binary plug files are only for the purpose of
        building an OpenJDK binary.
        Download the Binary Plugs by selecting the <b>Downloads</b>
        link at
        <a href="http://openjdk.java.net/">the OpenJDK site</a>,
        install the bundle,
        and make sure you set
        <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>
        to the root of this installation.
    </blockquote>
    
    <h4><a name="cacerts">Certificate Authority File (cacert)</a></h4>
    
    <blockquote>
        <p>
        See <a href="http://en.wikipedia.org/wiki/CAcert">
        www.wikipedia.org/wiki/CAcert</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.
        The variable 
        <tt><a href="#ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt>
        can be used to override the default location of the
        cacerts file that will get placed in your build.
        By default an empty cacerts file is provided and that should be
        fine for most JDK developers.
    </blockquote>
    
    <h4><a name="compilers">Compilers</a></h4>
    
    <blockquote>
        
        <a name="gcc">
            <strong>Linux gcc/binutils</strong>
        </a>
        
        <blockquote>
            <p>
            The GNU gcc compiler version should be 3.2.2 or newer.
            The binutils package should be 2.11.93.0.2-11 or newer.
            The compiler used should be the default compiler installed
            in <tt>/usr/bin</tt>.
        </blockquote>
        
        <strong><a name="studio">Solaris: Sun Studio</a></strong>
        
        <blockquote>
            <p>
            At a minimum, the
            <a href="http://developers.sun.com/sunstudio/index.jsp">
            Sun Studio 11 Compilers</a>
            (containing version 5.8 of the C and C++ compilers) is required,
            with patches from the
            <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access">
            SunSolve web site</a>.
            <p> 
            Set 
            <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>
            to point to the location of
            the compiler binaries, and place this location in the <tt>PATH</tt>.
            <p>
            The Sun Studio Express compilers at:
            <a href="http://developers.sun.com/sunstudio/downloads/express.jsp">
            Sun Studio Express Download site</a>
            are also an option, although these compilers have not
            been extensively used yet.
        </blockquote>
        
        <a name="msvc">
            <strong>Windows i586: Microsoft Visual Studio .NET 2003 Professional</strong>
        </a>
        
        <blockquote>
            <p>
            The 32-bit 
            OpenJDK
            Windows build
            requires Microsoft Visual Studio .NET 2003 (VS2003) Professional
            Edition compiler. 
            The compiler and other tools are expected to reside
            in the location defined by the variable <tt>VS71COMNTOOLS</tt> which
            is set by the Microsoft Visual Studio .NET installer.
            <p> 
            Once the compiler is installed, 
            it is recommended that you run <tt>VCVARS32.BAT</tt> 
            to set the compiler environment variables
            <tt>MSVCDIR</tt>, 
            <tt>INCLUDE</tt>,
            <tt>LIB</tt>, and
            <tt>PATH</tt> 
            prior to building the 
            OpenJDK.
            The above environment variables <b>MUST</b> be set.
            <p>
            The Microsoft Visual Studio .NET 2005 (VS2005) compiler
            will not work at this time due to the new runtime dll
            and the manifest requirements.
        </blockquote>
        
        <a name="mssdk">
            <strong>Windows X64: Microsoft Platform SDK April 2005</strong>
        </a>
        
        <blockquote>
            <p>
            On <b>X64</b>,
            the Microsoft Platform Software
            Development Kit (SDK), April 2005 Edition compiler, is required for
            building the 
            OpenJDK
            because it contains the C/C++ compiler. 
            You will need to minimally install the Core SDK and
            the MDAC SDK features of this compiler.
            <p>
            Once the Platform SDK is installed,
            it is recommended that you run <tt>SetEnv.Cmd /X64</tt> 
            to set the compiler environment variables
            <tt>MSSDK</tt>, 
            <tt>MSTOOLS</tt>,
            <tt>INCLUDE</tt>,
            <tt>LIB</tt>, and
            <tt>PATH</tt> 
            prior to building the 
            OpenJDK.
            The above environment variables <b>MUST</b> be set.
            <p>
            Note that this compiler may say it's version is a
            Microsoft Visual Studio .NET 2005 (VS2005), but be careful,
            it will not match the official VS2005 product.
            This Platform SDK compiler is only used on X64 builds.
        </blockquote>
        
    </blockquote>
    
    <h4><a name="cups">Common UNIX Printing System (CUPS) Headers (Solaris &amp; Linux)</a></h4>
    
    <blockquote>
        <p>
        <strong>Solaris:</strong>
        CUPS header files are required for building the 
        OpenJDK on Solaris.
        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 
        <tt>/opt/sfw/cups</tt>.
        <p>
        <strong>Linux:</strong>
        CUPS header files are required for building the 
        OpenJDK on Linux.
        The Linux header files are usually available from a "cups"
        development package, it's recommended that you try and use
        the package provided by the particular version of Linux that
        you are using.
        <p>
        The CUPS header files can always be downloaded from 
        <a href="http://www.cups.org">www.cups.org</a>.
        The variable 
        <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt>
        can be used to override the default location of the
        CUPS Header files.
    </blockquote>
    
    <h4><a name="freetype">FreeType 2</a></h4>

    <blockquote>
        <p>
        Version 2.3 or newer of FreeType is required for building the OpenJDK.
        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 FreeType library and header files.
        </p>
        <p>
        You can always download latest FreeType version from the
        <a href="http://www.freetype.org">FreeType website</a>.
        </p>
        <p>
        Makefiles will try to pick FreeType from /usr/lib and /usr/include.
        In case it is installed elsewhere you will need to set environment
        variables 
        <tt><a href="#ALT_FREETYPE_LIB_PATH">ALT_FREETYPE_LIB_PATH</a></tt>
        and 
        <tt><a href="#ALT_FREETYPE_HEADERS_PATH">ALT_FREETYPE_HEADERS_PATH</a></tt>
        to refer to place where library and header files are installed.
        </p>
    </blockquote>    

    <h4><a name="alsa">Advanced Linux Sound Architecture (ALSA) (Linux only)</a></h4>
    
    <blockquote>
        <p>
        <strong>Linux only:</strong>
        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, it's recommended that you try and use
        the package provided by the particular version of Linux that
        you are using.
        The makefiles will check this emit a sanity error if it is
        missing or the wrong version.
        As a last resort you can go to the
        <a href="http://www.alsa-project.org" target="_blank">
        Advanced Linux Sound Architecture Site</a>.
    </blockquote>
    
    <h4>Windows Specific Dependencies</h4>
    
    <blockquote>
        
        <strong>Unix Command Tools (<a name="cygwin">CYGWIN</a>)</strong>
        
        <blockquote> 
            <p>
            The 
            OpenJDK
            requires access to a set of unix command tools
            on Windows which can be supplied by 
            <a href="http://www.cygwin.com">CYGWIN</a>. 
            <p>
            The 
            OpenJDK 
            build
            requires CYGWIN version 1.5.12 or newer. 
            Information about CYGWIN can
            be obtained from the CYGWIN website at 
            <a href="http://www.cygwin.com">www.cygwin.com</a>. 
            <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>Package</td>
                            <td>Description</td>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>ar.exe</td>
                            <td>Devel</td>
                            <td>binutils: The GNU assembler, linker and binary
                            utilities</td>
                        </tr>
                        <tr>
                            <td>make.exe</td>
                            <td>Devel</td>
                            <td>make: The GNU version of the 'make' utility</td>
                        </tr>
                        <tr>
                            <td>m4.exe</td>
                            <td>Interpreters</td>
                            <td>m4: GNU implementation of the traditional Unix macro
                            processor</td>
                        </tr>
                        <tr>
                            <td>cpio.exe</td>
                            <td>Utils</td>
                            <td>cpio: A program to manage archives of files</td>
                        </tr>
                        <tr>
                            <td>file.exe</td>
                            <td>Utils</td>
                            <td>file: Determines file type using 'magic' numbers</td>
                        </tr>
                    </tbody>
                </table>
            </blockquote>
        </blockquote>
        
        <a name="dxsdk">
            <strong>Microsoft DirectX 9.0 SDK header files and libraries</strong>
        </a>
        
        <blockquote>
            <p>
            Microsoft DirectX 9.0 SDK (Summer 2004)
            headers are required for building
            OpenJDK.
            This SDK can be downloaded from 
            <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FD044A42-9912-42A3-9A9E-D857199F888E&amp;displaylang=en">
            Microsoft DirectX 9.0 SDK (Summer 2004)</a>.
            If the link above becomes obsolete, the SDK can be found from 
            <a href="http://download.microsoft.com">the Microsoft Download Site</a>
            (search with "DirectX 9.0 SDK Update Summer 2004"). 
            The location of this SDK can be set with 
            <tt><a href="#ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt>
            but it's normally found via the DirectX environment variable
            <tt>DXSDK_DIR</tt>.
        </blockquote>
        
        <a name="msvcrt">
            <strong><tt>MSVCRT.DLL</tt></strong>
        </a>
        
        <blockquote> 
            <p>
            <strong>i586 only:</strong>
            The 
            OpenJDK
            32bit build requires
            access to <tt>MSVCRT.DLL</tt> 
            version 6.00.8337.0 or newer.
            If the <tt>MSVCRT.DLL</tt> is not installed in 
            the system32 directory set the 
            <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a>
            variable to the location.
            <p> 
            <strong>X64 only:</strong>
            The OpenJDK 64bit build requires access to
            <tt>MSVCRT.DLL</tt> version 7.0.3790.0 or newer, which is
            usually supplied by the
            <a href="#mssdk">Platform SDK</a>.
            If it is not available from the Platform SDK,
            set the 
            <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a>
            variable to the location.
        </blockquote>
        
        <a name="msvcr71">
            <strong><tt>MSVCR71.DLL</tt></strong>
        </a>
        
        <blockquote>
            <p>
            <strong>i586 only:</strong>
            The 
            OpenJDK
            build requires access to 
            MSVCR71.DLL version 7.10.3052.4 or newer which should be
            supplied by the
            <a href="#msvc">Visual Studio product</a>
            If the <tt>MSVCR71.DLL</tt> is not available from the
            Visual Studio product
            set the 
            <a href="#ALT_MSVCR71_DLL_PATH"><tt>ALT_MSVCR71_DLL_PATH</tt></a>
            variable to the location.
        </blockquote>
        
    </blockquote>
    
    
</blockquote>


<hr noshade="noshade" size="3">

<h2><a name="creating">Creating the Build</a></h2>

<blockquote>
    <p>
    Once a machine is setup to build the 
    OpenJDK,
    the steps to create the
    build are fairly simple.
    The various ALT settings can either be made into  variables
    or can be supplied on the 
    <a href="#gmake"><tt><i>gmake</i></tt></a> 
    command.
    <p>
    <ol>
        <li>Use the sanity rule to double check all the ALT settings:
            <blockquote>
                <tt>
                    <i>gmake</i> 
                    sanity
                    [ARCH_DATA_MODEL=<i>32 or 64</i>]
                    [other "ALT_" overrides]
                </tt>
            </blockquote>
        </li>
        <li>Start the build with the command:
            <blockquote>
                <tt>
                    <i>gmake</i> 
                    [ARCH_DATA_MODEL=<i>32 or 64</i>]
                    [ALT_OUTPUTDIR=<i>output_directory</i>] 
                    [other "ALT_" overrides] 
                </tt>
            </blockquote>
        </li>
    </ol>
    <p>
    <strong>Solaris:</strong>
    Note that ARCH_DATA_MODEL is really only needed on Solaris to
    indicate you want to built the 64-bit version.
    And before the Solaris 64-bit binaries can be used, they
    must be merged with the binaries from a separate 32-bit build. 
    The merged binaries may then be used in either 32-bit or 64-bit mode, with
    the selection occurring at runtime 
    with the <tt>-d32</tt> or <tt>-d64</tt> options. 
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h2><a name="testing">Testing the Build</a></h2>

<blockquote>
    <p>
    When the build is completed, you should see the generated
    binaries and associated files in the <tt>j2sdk-image</tt> 
    directory in the output directory. 
    The default output directory is
    <tt>build/<i>platform</i></tt>,
    where <tt><i>platform</i></tt> is one of
    <tt><ul>
            <li>solaris-sparc</li>
            <li>solaris-sparcv9</li>
            <li>solaris-i586</li>
            <li>solaris-amd64</li>
            <li>linux-i586</li>
            <li>linux-amd64</li>
            <li>windows-i586</li>
            <li>windows-amd64</li>
    </ul></tt>
    In particular, the 
    <tt>build/<i>platform</i>/j2sdk-image/bin</tt>
    directory should contain executables for the 
    OpenJDK
    tools and utilities.
    <p>
    You can test that the build completed properly by using the build
    to run the various demos that you will find in the 
    <tt>build/<i>platform</i>/j2sdk-image/demo</tt>
    directory.
    <p>
    The provided regression tests can be run with the <tt>jtreg</tt>
    utility from 
    <a href="http://openjdk.java.net/jtreg/">the jtreg site</a>.
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h2><a name="variables">Environment/Make Variables</a></h2>

<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"><tt>PATH</tt></a> </dt>
        <dd>Typically you want to set the <tt>PATH</tt> to include:
            <ul>
                <li>The location of the GNU make binary</li>
                <li>The location of the JDK 6 <tt>java</tt> 
                (see <a href="#bootjdk">Bootstrap JDK</a>)</li>
                <li>The location of the C/C++ compilers 
                (see <a href="#compilers"><tt>compilers</tt></a>)</li>
                <li>The location or locations for the Unix command utilities
                (e.g. <tt>/usr/bin</tt>)</li>
            </ul>
        </dd>
        
        <dt><a name="arch_data_model"><tt>ARCH_DATA_MODEL</tt></a></dt>
        <dd>The <tt>ARCH_DATA_MODEL</tt> 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 <tt>ARCH_DATA_MODEL</tt> to <tt>32</tt> for generating 32-bit binaries, 
            or to <tt>64</tt> for generating 64-bit binaries.
        </dd>
        
        <dt><a name="ALT_BOOTDIR"><tt>ALT_BOOTDIR</tt></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 <tt>ALT_BOOTDIR</tt> explicitly.
        </dd>
        
        <dt><a name="ALT_OUTPUTDIR"><tt>ALT_OUTPUTDIR</tt></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"><tt>ALT_COMPILER_PATH</tt></a> </dt>
        <dd>
            The location of the C/C++ compiler.
            The default varies depending on the platform. 
        </dd>
        
        <dt><tt><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt></dt>
        <dd>
            The location of the <a href="#cacerts">cacerts</a> file.
            The default will refer to 
            <tt>jdk/src/share/lib/security/cacerts</tt>.
        </dd>
        
        <dt><a name="ALT_BINARY_PLUGS_PATH"><tt>ALT_BINARY_PLUGS_PATH</tt></a></dt>
        <dd>
            The location of the binary plugs installation.
            See <a href="#binaryplugs">Binary Plugs</a> for more information.
            You should always have a local copy of a
            recent Binary Plugs install image
            and set this variable to that location.
        </dd>
        
        <dt><a name="ALT_CUPS_HEADERS_PATH"><tt>ALT_CUPS_HEADERS_PATH</tt></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 
            <tt>/usr/include</tt>.
        </dd>
        
        
        <dt><a name="ALT_FREETYPE_LIB_PATH"><tt>ALT_FREETYPE_LIB_PATH</tt></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"><tt>ALT_FREETYPE_HEADERS_PATH</tt></a></dt>
        <dd>
            The location of the FreeType header files.
            See <a href="#freetype">FreeType information</a> for details. 
        </dd>
        
        <dt><strong>Windows specific:</strong></dt>
        <dd>
            <dl>
                <dt><a name="ALT_MSDEVTOOLS_PATH"><tt>ALT_MSDEVTOOLS_PATH</tt></a> </dt>
                <dd>
                    The location of the Microsoft Visual Studio .NET 2003
                    tools 'bin' directory.
                    The default is usually derived from
                    <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>.
                </dd>
                
                <dt><tt><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </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 <tt>DXSDK_DIR</tt>,
                    failing that, look in <tt>C:/DXSDK</tt>.
                </dd>
                
                <dt><tt><a name="ALT_MSVCRT_DLL_PATH">ALT_MSVCRT_DLL_PATH</a></tt> </dt>
                <dd>
                    The location of the 
                    <a href="#msvcrt"><tt>MSVCRT.DLL</tt></a>. 
                </dd>
                
                <dt><tt><a name="ALT_MSVCR71_DLL_PATH">ALT_MSVCR71_DLL_PATH</a></tt> </dt>
                <dd>
                    <strong>i586 only:</strong>
                    The location of the 
                    <a href="#msvcr71"><tt>MSVCR71.DLL</tt></a>. 
                </dd>
            </dl>
        </dd>
        
    </dl>
</blockquote>

<!-- ------------------------------------------------------ -->
<hr noshade="noshade" size="3">

<h2><a name="troubleshooting">Troubleshooting</a></h2>

<blockquote>
    <p>
    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.
    Look for the check list of the platform you are building on in the
    <a href="#contents">Table of Contents</a>.
    
    <p>
    You can validate your build environment by using the <tt>sanity</tt>
    target.
    Any errors listed
    will stop the build from starting, and any warnings may result in
    a flawed product build.
    We strongly encourage you to evaluate every
    sanity check warning and fix it if required, before you proceed
    further with your build.
    
    <p>
    Some of the more common problems with builds are briefly described
    below, with suggestions for remedies.
    
    <ul>
        <li>
            <b>Slow Builds:</b>
            <blockquote>
                <p>
                If your build machine seems to be overloaded from too many
                simultaneous C++ compiles, try setting the <tt>HOTSPOT_BUILD_JOBS</tt>
                variable to <tt>1</tt> (if you're using a multiple CPU
                machine, setting it to more than the the number of CPUs is probably
                not a good idea).
                <p>
                Creating the javadocs can be very slow, if you are running
                javadoc, consider skipping that step.
                <p>
                Faster hardware and more RAM always helps too.
                The VM build tends to be CPU intensive (many C++ compiles),
                and the rest of the JDK will often be disk intensive.
                <p>
                Faster compiles are possible using a tool called
                <a href="http://ccache.samba.org/">ccache</a>.
            </blockquote>
        </li>
        <li>
            <b>File time issues:</b>
            <blockquote>
                <p>
                If you see warnings that refer to file time stamps, e.g.
                <blockquote>
                    <i>Warning message:</i><tt> File `xxx' has modification time in
                    the future.</tt>
                    <br>
                    <i>Warning message:</i> <tt> Clock skew detected. Your build may
                    be incomplete.</tt> 
                </blockquote>
                <p>
                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.
                For example, an out-of-sync clock has been known to cause an old
                version of javac to be used to compile some files, resulting in errors
                when the pre-1.4 compiler ran across the new <tt>assert</tt> keyword
                in the 1.4 source code.
                <p>
                If you see these warnings, reset the clock on the build
                machine, run "<tt><i>gmake</i> clobber</tt>" or delete the directory
                containing the build output, and restart the build from the beginning.
            </blockquote>
        </li>
        <li>
            <b>Error message: <tt>Trouble writing out table to disk</tt></b>
            <blockquote>
                <p>
                Increase the amount of swap space on your build machine.
            </blockquote>
        </li>
        <li>
            <b>Error Message: <tt>libstdc++ not found:</tt></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 64bit Linux versions (e.g. Fedora)
                only install the 64bit 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>Error Message: <tt>cannot restore segment prot after reloc</tt></b>
            <blockquote>
                This is probably an issue with SELinux (See
                <a href="http://en.wikipedia.org/wiki/SELinux">http://en.wikipedia.org/wiki/SELinux</a>).
                Parts of the VM is built without the <tt>-fPIC</tt> for
                performance reasons.
                <p>
                To completely disable SELinux:
                <ol><tt>
                    
                    <li>$ su root</li>
                    <li># system-config-securitylevel</li>
                    <li>In the window that appears, select the SELinux tab</li>
                    <li>Disable SELinux</li>
                </ol></tt>
                <p>
                Alternatively, instead of completely disabling it you could
                disable just this one check.
                <ol><tt>
                    <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></tt>
            </blockquote>
        </li>
    </ul>
</blockquote>

<hr noshade="noshade" size="3">
