<!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 a set of
    directories:
    <tt>hotspot</tt>, 
    <tt>langtools</tt>, 
    <tt>corba</tt>, 
    <tt>jaxws</tt>, 
    <tt>jaxp</tt>, 
    and
    <tt>jdk</tt>.
    The <tt>hotspot</tt> directory contains the source code and make
    files for building the OpenJDK Hotspot Virtual Machine. 
    The <tt>langtools</tt> directory contains the source code and make
    files for building the OpenJDK javac and language tools.
    The <tt>corba</tt> directory contains the source code and make
    files for building the OpenJDK Corba files.
    The <tt>jaxws</tt> directory contains the source code and make
    files for building the OpenJDK JAXWS files.
    The <tt>jaxp</tt> directory contains the source code and make
    files for building the OpenJDK JAXP files.
    The <tt>jdk</tt> directory contains the source code and make files for
    building the OpenJDK runtime libraries and misc files.
    The top level <tt>Makefile</tt>
    is used to build the entire OpenJDK.
</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, go to the
	<a href="http://openjdk.java.net">OpenJDK</a> site and select
	the "<b>Bundles(7)</b>" link.
        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.
        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">
