<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>OpenJDK Build README</title>
    </head>
    <body style="background-color:lightcyan">
        <!-- ====================================================== -->
        <table width="100%">
            <tr>
                <td align="center">
                    <img alt="OpenJDK" 
                         src="http://openjdk.java.net/images/openjdk.png" 
                         width=256 />
                </td>
            </tr>
            <tr>
                <td align=center>
                    <h1>OpenJDK Build README</h1>
                </td>
            </tr>
        </table>
        <!-- ------------------------------------------------------ --> 
        <hr>
        <h2><a name="introduction">Introduction</a></h2>
        <blockquote>
            <p>
                This README file contains build instructions for the
                <a href="http://openjdk.java.net"  target="_blank">OpenJDK</a>.
                Building the source code for the
                OpenJDK
                requires
                a certain degree of technical expertise.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="contents">Contents</a></h2>
        <blockquote>
            <ul>
                <li><a href="#introduction">Introduction</a></li>
                <li><a href="#hg">Use of Mercurial</a>
                    <ul>
                        <li><a href="#get_source">Getting the Source</a></li>
                    </ul>
                </li>
                <li><a href="#MBE">Minimum Build Environments</a></li>
                <li><a href="#SDBE">Specific Developer Build Environments</a>
                    <ul>
                        <li><a href="#fedora">Fedora Linux</a> </li>
                        <li><a href="#centos">CentOS Linux</a> </li>
                        <li><a href="#debian">Debian GNU/Linux</a></li>
                        <li><a href="#ubuntu">Ubuntu Linux</a> </li>
                        <li><a href="#opensuse">OpenSUSE</a></li>
                        <li><a href="#mandriva">Mandriva</a></li>
                        <li><a href="#opensolaris">OpenSolaris</a></li>
                    </ul>
                </li>
                <li><a href="#directories">Source Directory Structure</a> 
                    <ul>
                        <li><a href="#drops">Managing the Source Drops</a></li>
                    </ul>
                </li>
                <li><a href="#building">Build Information</a>
                    <ul>
                        <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="#macosx">Basic Mac OS X System Setup</a></li>
                        <li><a href="#dependencies">Build Dependencies</a>
                            <ul>
                                <li><a href="#bootjdk">Bootstrap JDK</a> </li>
                                <li><a href="#importjdk">Optional Import JDK</a> </li>
                                <li><a href="#ant">Ant 1.7.1</a> </li>
                                <li><a href="#cacerts">Certificate Authority File (cacert)</a> </li>
                                <li><a href="#compilers">Compilers</a>
                                    <ul>
                                        <li><a href="#msvc32">Microsoft Visual Studio Professional/Express for 32 bit</a> </li>
                                        <li><a href="#msvc64">Microsoft Visual Studio Professional for 64 bit</a> </li>
                                        <li><a href="#mssdk64">Microsoft Windows SDK for 64 bit</a> </li>
                                        <li><a href="#gcc">Linux gcc/binutils</a> </li>
                                        <li><a href="#studio">Sun Studio</a> </li>
                                    </ul>
                                </li>
                                <li><a href="#zip">Zip and Unzip</a> </li>
                                <li><a href="#freetype">FreeType2 Fonts</a> </li>
                                <li>Linux and Solaris:
                                    <ul>
                                        <li><a href="#cups">CUPS Include files</a> </li>
                                        <li><a href="#xrender">XRender Include files</a></li>
                                    </ul>
                                </li>
                                <li>Linux only:
                                    <ul>
                                        <li><a href="#alsa">ALSA files</a> </li>
                                    </ul>
                                </li>
                                <li>Windows only:
                                    <ul>
                                        <li>Unix Command Tools (<a href="#cygwin">CYGWIN</a>) <strong>or</strong></li>
                                        <li>Minimalist GNU for Windows (<a href="#msys">MinGW/MSYS</a>)</li>
                                        <li><a href="#dxsdk">DirectX 9.0 SDK</a> </li>
                                    </ul>
                                </li>
                            </ul>
                        </li>
                    </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>
                <li><a href="#newbuild">The New Build</a></li>
            </ul>
        </blockquote>

        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="hg">Use of Mercurial</a></h2>
        <blockquote>
            The OpenJDK sources are maintained with the revision control system
            <a href="http://mercurial.selenic.com/wiki/Mercurial">Mercurial</a>.
            If you are new to Mercurial, please see the
            <a href="http://mercurial.selenic.com/wiki/BeginnersGuides">Beginner Guides</a>
            or refer to the <a href="http://hgbook.red-bean.com/">Mercurial Book</a>.
            The first few chapters of the book provide an excellent overview of
            Mercurial, what it is and how it works.
            <br>
            For using Mercurial with the OpenJDK refer to the
            <a href="http://openjdk.java.net/guide/repositories.html#installConfig">
                Developer Guide: Installing and Configuring Mercurial</a>
            section for more information.

            <!-- ------------------------------------------------------ -->
            <h3><a name="get_source">Getting the Source</a></h3>
            <blockquote>
                To get the entire set of OpenJDK Mercurial repositories
                use the script <code>get_source.sh</code> located in the root repository:
                <blockquote>
                    <tt>
                        hg clone http://hg.openjdk.java.net/jdk8/jdk8 <i>YourOpenJDK</i>
                        <br>cd <i>YourOpenJDK</i>
                        <br>sh ./get_source.sh
                    </tt>
                </blockquote>
                Once you have all the repositories, the
                script <tt>make/scripts/hgforest.sh</tt>
                can be used to repeat the same <tt>hg</tt>
                command on every repository in the forest, e.g.
                <blockquote>
                    <tt>
                        cd <i>YourOpenJDK</i>
                        <br>sh ./make/scripts/hgforest.sh pull -u
                    </tt>
                </blockquote>
            </blockquote>

        </blockquote>

        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="MBE">Minimum Build Environments</a></h2>
        <blockquote>
            This file often describes specific requirements for what we call the
            "minimum build environments" (MBE) for this 
            specific release of 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>
                The minimum OS and C/C++ compiler versions needed for building the
                OpenJDK:
            <p>
            <table border="1">
                <thead>
                    <tr>
                        <th>Base OS and Architecture</th>
                        <th>OS</th>
                        <th>C/C++ Compiler</th>
                        <th>BOOT JDK</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Linux X86 (32-bit)</td>
                        <td>Fedora 9</td>
                        <td>gcc 4.3 </td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Linux X64 (64-bit)</td>
                        <td>Fedora 9</td>
                        <td>gcc 4.3 </td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Solaris SPARC (32-bit)</td>
                        <td>Solaris 10 Update 6</td>
                        <td>Sun Studio 12 Update 1 + patches</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Solaris SPARCV9 (64-bit)</td>
                        <td>Solaris 10 Update 6</td>
                        <td>Sun Studio 12 Update 1 + patches</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Solaris X86 (32-bit)</td>
                        <td>Solaris 10 Update 6</td>
                        <td>Sun Studio 12 Update 1 + patches</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Solaris X64 (64-bit)</td>
                        <td>Solaris 10 Update 6</td>
                        <td>Sun Studio 12 Update 1 + patches</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Windows X86 (32-bit)</td>
                        <td>Windows XP</td>
                        <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Windows X64 (64-bit)</td>
                        <td>Windows Server 2003 - Enterprise x64 Edition</td>
                        <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
                        <td>JDK 6u18</td>
                    </tr>
                    <tr>
                        <td>Mac OS X X64 (64-bit)</td>
                        <td>Mac OS X 10.7.3 "Lion"</td>
                        <td>XCode 4.1 or later</td>
                        <td>Java for OS X Lion Update 1</td>
                    </tr>
                </tbody>
            </table>
            <p>
            These same sources do indeed build on many more systems than the
            above older generation systems, again the above is just a minimum.
            <p>
            Compilation problems with newer or different C/C++ compilers is a
            common problem.
            Similarly, compilation problems related to changes to the
                <tt>/usr/include</tt> or system header files is also a
            common problem with newer or unreleased OS versions.
            Please report these types of problems as bugs so that they
            can be dealt with accordingly.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="SDBE">Specific Developer Build Environments</a></h2>
        <blockquote>
            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>
            <h4>Fedora 9</h4>
            <p>
            <blockquote>
                After installing <a href="http://fedoraproject.org">Fedora</a> 9
              you need to install several build dependencies. The simplest
              way to do it is to execute the following commands as user 
                <tt>root</tt>:
                <p/>
                <code>yum-builddep java-1.6.0-openjdk</code>
                <p/>
                <code>yum install gcc gcc-c++</code>
                <p/>
              In addition, it's necessary to set a few environment variables for the build:

                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
            </blockquote>
            <h4>Fedora 10</h4>
            <p>
            <blockquote>
                After installing <a href="http://fedoraproject.org">Fedora</a> 10
              you need to install several build dependencies. The simplest
              way to do it is to execute the following commands as user 
                <tt>root</tt>:
                <p/>
                <code>yum-builddep java-1.6.0-openjdk</code>
                <p/>
                <code>yum install gcc gcc-c++</code>
                <p/>
              In addition, it's necessary to set a few environment variables for the build:

                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
            </blockquote>
            <h4>Fedora 11</h4>
            <p>
            <blockquote>
                After installing <a href="http://fedoraproject.org">Fedora</a> 11
              you need to install several build dependencies. The simplest
              way to do it is to execute the following commands as user 
                <tt>root</tt>:
                <p/>
                <code>yum-builddep java-1.6.0-openjdk</code>
                <p/>
                <code>yum install gcc gcc-c++</code>
                <p/>
              In addition, it's necessary to set a few environment variables for the build:

                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
            </blockquote>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h3><a name="centos">CentOS 5.5</a></h3>
        <blockquote>
            After installing
            <a href="http://www.centos.org/">CentOS 5.5</a>
            you need to make sure you have
            the following Development bundles installed:
            <blockquote>
                <ul>
                    <li>Development Libraries</li>
                    <li>Development Tools</li>
                    <li>Java Development</li>
                    <li>X Software Development (Including XFree86-devel)</li>
                </ul>
            </blockquote>
            <p>
                Plus the following packages:
            <blockquote>
                <ul>
                    <li>cups devel: Cups Development Package</li>
                    <li>alsa devel: Alsa Development Package</li>
                    <li>ant: Ant Package</li>
                    <li>Xi devel: libXi.so Development Package</li>
                </ul>
            </blockquote>
            <p>
                The freetype 2.3 packages don't seem to be available,
                but the freetype 2.3 sources can be downloaded, built,
                and installed easily enough from
                <a href="http://downloads.sourceforge.net/freetype">
                    the freetype site</a>.
                Build and install with something like:
            <blockquote>
                <tt>./configure && make && sudo -u root make install</tt>
            </blockquote>
            <p>
                Mercurial packages could not be found easily, but a Google
                search should find ones, and they usually include Python if
                it's needed.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h3><a name="debian">Debian</a></h3>
        <blockquote>
            <h4>Debian 5.0 (Lenny)</h4>
            <p>
            <blockquote>
                After installing <a href="http://debian.org">Debian</a> 5 
                you need to install several build dependencies. 
                The simplest way to install the build dependencies is to 
                execute the following commands as user <tt>root</tt>:
                <p/>
                <code>aptitude build-dep openjdk-6</code>
                <p/>
                <code>aptitude install openjdk-6-jdk libmotif-dev</code>
                <p/>
                In addition, it's necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
            </blockquote>
        </blockquote>
        <!-- ====================================================== -->
        <h3><a name="ubuntu">Ubuntu</a></h3>
        <blockquote>
            <h4>Ubuntu 8.04</h4>
            <p>
            <blockquote>
                After installing <a href="http://ubuntu.org">Ubuntu</a> 8.04 
                you need to install several build dependencies. 
                <p/>
                First, you need to enable the universe repository in the 
                Software Sources application and reload the repository 
                information. The Software Sources application is available 
                under the System/Administration menu. 
                <p/>
                The simplest way to install the build dependencies is to 
                execute the following commands:
                <p/>
                <code>sudo aptitude build-dep openjdk-6</code>
                <p/>
                <code>sudo aptitude install openjdk-6-jdk</code>
                <p/>
                In addition, it's necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
            </blockquote>
            <h4>Ubuntu 8.10</h4>
            <p>
            <blockquote>
                After installing <a href="http://ubuntu.org">Ubuntu</a> 8.10 
                you need to install several build dependencies. The simplest
                way to do it is to execute the following commands:
                <p/>
                <code>sudo aptitude build-dep openjdk-6</code>
                <p/>
                <code>sudo aptitude install openjdk-6-jdk</code>
                <p/>
                In addition, it's necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
            </blockquote>
            <h4>Ubuntu 9.04</h4>
            <p>
            <blockquote>
                After installing <a href="http://ubuntu.org">Ubuntu</a> 9.04 
                you need to install several build dependencies. The simplest
                way to do it is to execute the following commands:
                <p/>
                <code>sudo aptitude build-dep openjdk-6</code>
                <p/>
                <code>sudo aptitude install openjdk-6-jdk</code>
                <p/>
                In addition, it's necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
            </blockquote>
        </blockquote>
        <!-- ====================================================== -->
        <h3><a name="opensuse">OpenSUSE</a></h3>
        <blockquote>
            <h4>OpenSUSE 11.1</h4>
            <p>
            <blockquote>
                After installing <a href="http://opensuse.org">OpenSUSE</a> 11.1 
                you need to install several build dependencies. 
                The simplest way to install the build dependencies is to 
                execute the following commands:
                <p/>
                <code>sudo zypper source-install -d java-1_6_0-openjdk</code>
                <p/>
                <code>sudo zypper install make</code>
                <p/>
                In addition, it is necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk</code>
                <p/>
                Finally, you need to unset the <code>JAVA_HOME</code> environment variable:
                <p/>
                <code>export -n JAVA_HOME</code>
            </blockquote>
        </blockquote>
        <!-- ====================================================== -->
        <h3><a name="mandriva">Mandriva</a></h3>
        <blockquote>
            <h4>Mandriva Linux One 2009 Spring</h4>
            <p>
            <blockquote>
                After installing <a href="http://mandriva.org">Mandriva</a> Linux One 2009 Spring 
                you need to install several build dependencies. 
                The simplest way to install the build dependencies is to 
                execute the following commands as user <tt>root</tt>:
                <p/>
                <code>urpmi java-1.6.0-openjdk-devel ant make gcc gcc-c++ freetype-devel zip unzip libcups2-devel libxrender1-devel libalsa2-devel libstc++-static-devel libxtst6-devel libxi-devel</code>
                <p/>
                In addition, it is necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk</code>
            </blockquote>
        </blockquote>
        <!-- ====================================================== -->
        <h3><a name="opensolaris">OpenSolaris</a></h3>
        <blockquote>
            <h4>OpenSolaris 2009.06</h4>
            <p>
            <blockquote>
                After installing <a href="http://opensolaris.org">OpenSolaris</a> 2009.06 
                you need to install several build dependencies. 
                The simplest way to install the build dependencies is to 
                execute the following commands:
                <p/>
                <code>pfexec pkg install SUNWgmake SUNWj6dev SUNWant sunstudioexpress SUNWcups SUNWzip SUNWunzip SUNWxwhl SUNWxorg-headers SUNWaudh SUNWfreetype2</code>
                <p/>
                In addition, it is necessary to set a few environment variables for the build:
                <p/>
                <code>export LANG=C ALT_COMPILER_PATH=/opt/SunStudioExpress/bin/ ALT_CUPS_HEADERS_PATH=/usr/include/</code>
                <p/>
                Finally, you need to make sure that the build process can find the Sun Studio compilers:
                <p/>
                <code>export PATH=$PATH:/opt/SunStudioExpress/bin/</code>
            </blockquote>
        </blockquote>
        <!-- ------------------------------------------------------ -->  
        <hr>
        <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.

            <h3><a name="drops">Managing the Source Drops</a></h3>
            <blockquote>
                <p>
                    The repositories <tt>jaxp</tt> and <tt>jaxws</tt> actually
                    do not contain the sources for JAXP or JAX-WS.
                    These products have their own open source procedures at their
                    <a href="http://jaxp.java.net/">JAXP</a> and
                    <a href="http://jax-ws.java.net/">JAX-WS</a> home pages.
                    The OpenJDK project does need access to these sources to build
                    a complete JDK image because JAXP and JAX-WS are part of the JDK.
                    The current process for delivery of the JAXP and JAX-WS sources
                    involves so called "source drop bundles" downloaded from a public
                    website.
                    There are many reasons for this current mechanism, and it is
                    understood that this is not ideal for the open source community.
                    It is possible this process could change in the future.
                    <br>
                    <b>NOTE:</b> The <a href="http://download.java.net/openjdk/jdk8/">
                        Complete OpenJDK Source Bundles</a> <u>will</u> contain the JAXP and
                    JAX-WS sources.
                </p>

                <h4><a name="dropcreation">Creation of New Source Drop Bundles</a></h4>
                <blockquote>
                    <ol>
                        <li>
                            The JAXP or JAX-WS team prepares a new zip bundle,
                            places a copy in a public download area on java.net,
                            sends us a link and a list of CRs (Change Request Numbers).
                            The older download bundles should not be deleted.
                            It is the responsibility of the JAXP and JAX-WS team to
                            place the proper GPL legal notices on the sources
                            and do any filtering or java re-packaging for the
                            OpenJDK instances of these classes.
                        </li>
                        <li>
                            The OpenJDK team copies this new bundle into shared
                            area (e.g. <tt>/java/devtools/share/jdk8-drops</tt>).
                            Older bundles are never deleted so we retain the history.
                        </li>
                        <li>
                            The OpenJDK team edits the ant property file
                            <tt>jaxp/jaxp.properties</tt> or
                            <tt>jaxws/jaxws.properties</tt> to update the
                            base URL, the zip bundle name, and the MD5 checksum
                            of the zip bundle
                            (on Solaris: <tt>sum -c md5 <i>bundlename</i></tt>)
                        </li>
                        <li>
                            OpenJDK team reviews and commits those changes with the
                            given CRs.
                        </li>
                    </ol>
                </blockquote>

                <h4><a name="dropusage">Using Source Drop Bundles</a></h4>
                <blockquote>
                    <p>
                        The ant scripts that build <tt>jaxp</tt> and <tt>jaxws</tt>
                        will attempt to locate these zip bundles from the directory
                        in the environment variable
                        <tt><a href="#ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt>.
                        The checksums protect from getting the wrong, corrupted, or
                        improperly modified sources.
                        Once the sources are made available, the population will not
                        happen again unless a <tt>make clobber</tt> is requested
                        or the <tt>jaxp/drop/</tt> or <tt>jaxws/drop/</tt>
                        directory is explicitly deleted.
                        <br>
                        <b>NOTE:</b> The default Makefile and ant script behavior
                        is to NOT download these bundles from the public http site.
                        In general, doing downloads
                        during the build process is not advised, it creates too much
                        unpredictability in the build process.
                        However, you can use <tt>make ALLOW_DOWNLOADS=true</tt> to
                        tell the ant script that the download of the zip bundle is
                        acceptable.
                    </p>
                    <p>
                        The recommended procedure for keeping a cache of these
                        source bundles would be to download them once, place them
                        in a directory outside the repositories, and then set
                        <tt><a href="#ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt> to refer
                        to that directory.
                        These drop bundles do change occasionally, so the newer
                        bundles may need to be added to this area from time to time.
                    </p>
                </blockquote>
            </blockquote>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="building">Build Information</a></h2>
        <blockquote>
            Building the OpenJDK
            is done with a <a href="#gmake">GNU <tt>make</tt></a> command line
            and various
            environment or make variable settings that direct the makefile 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
                <a href="#gmake"><tt>make</tt></a> sanity &amp;&amp; <a href="#gmake"><tt>make</tt></a>
                </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>
        <h3><a name="gmake">GNU make (<tt><i>gmake</i></tt>)</a></h3>
        <blockquote>
            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>
                    You need GNU make version 3.81 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> should be 3.81 or newer
                    and should work fine for you.
                    If this version is not 3.81 or newer,
                    see the <a href="#buildgmake">"Building GNU make"</a> section.
                </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 try and use <tt>gmake</tt>
                    which will be located in either the <tt>/opt/sfw/bin</tt> or 
                    <tt>/usr/sfw/bin</tt> directory.
                    In more recent versions of Solaris GNU make might be found
                    at <tt>/usr/bin/gmake</tt>.<br>
                    <b>NOTE:</b> It is very likely that this <tt>gmake</tt>
                    could be 3.80, you need 3.81, in which case,
                    see the <a href="#buildgmake">"Building GNU make"</a> section.
                </li>
                <li>
                    <strong>Windows:</strong>
                    Make sure you start your build inside a bash/sh/ksh shell and are
                    using a <tt>make.exe</tt> utility built for that environment.<br/>
                    <strong>MKS</strong> builds need a native Windows version of GNU make
                    (see <a href="#buildgmake">Building GNU make</a>).<br/>
                    <strong>Cygwin</strong> builds need
                    a make version which was specially compiled for the Cygwin environment
                    (see <a href="#buildgmake">Building GNU make</a>). <strong>WARNING:</strong>
                    the OpenJDK build with the make utility provided by Cygwin will <strong>not</strong>
                    work because it does not support drive letters in paths. Make sure that
                    your version of make will be found before the Cygwins default make by 
                    setting an appropriate <tt>PATH</tt> environment variable or by removing
                    Cygwin's make after you built your own make version.<br/>
                    <strong>MinGW/MSYS</strong> builds can use the default make which 
                    comes with the environment.
                </li>
            </ul>
            <p>
                Information on GNU make, and access to ftp download sites, are
                available on the
                <a href="http://www.gnu.org/software/make/make.html" target="_blank">
                    GNU make web site
                </a>.
                The latest source to GNU make is available at
                <a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
                    ftp.gnu.org/pub/gnu/make/</a>.
            </p>
            <!-- ------------------------------------------------------ -->
            <h4><a name="buildgmake">Building GNU make</a></h4>
            <blockquote>
                First step is to get the GNU make 3.81 (or newer) source from
                <a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
                    ftp.gnu.org/pub/gnu/make/</a>.
                Building is a little different depending on the OS and unix toolset
                on Windows:
                <ul>
                    <li>
                        <strong>Linux:</strong>
                        <tt>./configure && make</tt>
                    </li>
                    <li>
                        <strong>Solaris:</strong>
                        <tt>./configure && gmake CC=gcc</tt>
                    </li>
                    <li>
                        <strong>Windows for CYGWIN:</strong><br/>
                        <tt>./configure</tt><br/>
                        Add the line <tt>#define HAVE_CYGWIN_SHELL 1</tt> to the end of <tt>config.h</tt><br/>
                        <tt>make</tt><br/>
                        <br/>
                        This should produce <tt>make.exe</tt> in the current directory.
                    </li>
                    <li>
                        <strong>Windows for MKS:</strong><br/>
                        Edit <tt>config.h.W32</tt> and uncomment the line <tt>#define HAVE_MKS_SHELL 1</tt><br/>
                        Set the environment for your native compiler (e.g. by calling:<br/>
                        <tt>"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /Release /xp /x64)</tt>
                        <tt>nmake -f NMakefile.win32</tt>
                        <br/>
                        This should produce <tt>WinDebug/make.exe</tt> and <tt>WinRel/make.exe</tt>
                        <br/>
                        If you get the error: <tt>NMAKE : fatal error U1045: spawn failed : Permission denied</tt>
                        you have to set the <tt>Read &amp; execute</tt> permission for the file <tt>subproc.bat</tt>.
                    </li>
                </ul>
            </blockquote>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="linux">Basic Linux System Setup</a></h3>
        <blockquote>
            <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>
                    <a href="#importjdk">Optional Import JDK</a>, set
                    <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>.
                </li>
                <li>
                    Install or upgrade the <a href="#freetype">FreeType development
                        package</a>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant 1.7.1 or newer</a>,
                    make sure it is in your PATH.
                </li>
            </ol>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="solaris">Basic Solaris System Setup</a></h3>
        <blockquote>
            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 512 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 64-bit version, you should
                run the command "isainfo -v" to verify that you have a
                64-bit installation, it should say <tt>sparcv9</tt> or
                <tt>amd64</tt>.
                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.
            <p> 
                Solaris patches specific to the JDK can be downloaded from the
                <a href="http://sunsolve.sun.com/show.do?target=patches/JavaSE" target="_blank">
                    SunSolve JDK Solaris patches download page</a>.
                You should ensure that the latest patch cluster for
                your version of the Solaris operating environment has also
                been installed.
        </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>
                    <a href="#importjdk">Optional Import JDK</a>, set
                    <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_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>
                <li>
                    Install the <a href="#xrender">XRender Include files</a>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant 1.7.1 or newer</a>,
                    make sure it is in your PATH.
                </li>
            </ol>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="windows">Basic Windows System Setup</a></h3>
        <blockquote> 
            <strong>i586 only:</strong>
            The minimum recommended hardware for building the 32-bit 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 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>
            <strong>Windows:</strong>
            Note that GNU make, the shell and other Unix-tools required during the build
            do 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 <tt>\</tt>, and
            there is always a short <a href="http://en.wikipedia.org/wiki/8.3_filename">
	    "8.3" pathname</a> without spaces for any path that contains spaces.
            Unfortunately, this short pathname is somewhat dynamic (i.e. dependant on the
            other files and directories inside a given directory) and can not be 
            algorithmicly calculated by only looking at a specific path name.
            <p>
                The makefiles will try to translate any pathnames supplied
                to it into the <tt>C:/</tt> style automatically.
            </p>
            <p>
                Special care has to be taken if native Windows applications
                like <tt>nmake</tt> or <tt>cl</tt> are called with file arguments processed
                by Unix-tools like <tt>make</tt> or <tt>sh</tt>!
            </p>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h4><a name="paths">Windows build environments</a></h4>
        <blockquote>
            Building on Windows requires a Unix-like environment, notably a Unix-like shell.
            There are several such environments available of which 
            <a href="http://www.mkssoftware.com/products/tk/ds_tkdev.asp">MKS</a>, 
            <a href="http://www.cygwin.com/">Cygwin</a> and 
            <a href="http://www.mingw.org/wiki/MSYS">MinGW/MSYS</a> are currently supported for
            the OpenJDK build. One of the differences of these three systems is the way
            they handle Windows path names, particularly path names which contain
            spaces, backslashes as path separators and possibly drive letters. Depending
            on the use case and the specifics of each environment these path problems can
            be solved by a combination of quoting whole paths, translating backslashes to
            forward slashes, escaping backslashes with additional backslashes and
            translating the path names to their <a href="http://en.wikipedia.org/wiki/8.3_filename">
	    "8.3" version</a>.
            <p>
                As of this writing (MKS ver. 9.4, Cygwin ver. 1.7.9, MinGW/MSYS 1.0.17),
                MKS builds are known to be the fastest Windows builds while MingGW/MSYS
                builds are slightly slower (about 10%) than MKS builds and Cygwin builds
                require nearly twice the time (about 180%) of MKS builds (e.g. on a
                DualCore i7 notebook with 8GB of RAM, HDD and 64-bit Windows 7 operating system
                the complete OpenJDK 8 product build takes about 49min with MKS, 54min with
                MinGW/MSYS and 88min with Cygwin).
            </p>
            <p>
                Mixing tools from the different Unix emulation environments is not a good
                idea and will probably not work!
            </p>
            <p>
                <strong>MKS:</strong> is a commercial product which includes
                all the Unix utilities which are required to build the OpenJDK except GNU
                make. In pre-OpenJDK times it was the only supported build environment on
                Windows. The MKS tools support Windows paths with drive letters and
                forward slashes as path separator. Paths in environment variables like (for
                example) <tt>PATH</tt> are separated by semicolon '<tt>;</tt>'.
            </p>
            <p>
                Recent versions of MKS provide the <tt>dosname</tt> utility to convert paths
                with spaces to short (8.3) path names,e .g.
                <tt>dosname -s "<i>path</i>"</tt>.   
            </p>
            <p>
                If you are using the MKS environment, you need a native Windows version
                of Gnu make <a href="#buildgmake">which you can easily build yourself</a>. 
            </p>
            <p>
                <strong>Cygwin:</strong>
                is an open source, Linux-like environment which tries to emulate
                a complete POSIX layer on Windows. It tries to be smart about path names
                and can usually handle all kinds of paths if they are correctly quoted
                or escaped although internally it maps drive letters <tt>&lt;drive&gt;:</tt> 
                to a virtual directory <tt>/cygdrive/&lt;drive&gt;</tt>.
            </p>
            <p>
                You can always use the <tt>cygpath</tt> utility to map pathnames with spaces
                or the backslash character into the <tt>C:/</tt> style of pathname
                (called 'mixed'), e.g. <tt>cygpath -s -m "<i>path</i>"</tt>.
            </p>
            <p>
                Note that the 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 use ":").
                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.
            </p>
            <p>
                If you are using the Cygwin environment, you need to 
                <a href="#buildgmake">compile your own version</a>
                of GNU make because the default Cygwin make can not handle drive letters in paths. 
            </p>
            <p>
                <strong>MinGW/MSYS:</strong> 
                MinGW ("Minimalist GNU for Windows") is a collection of free Windows
                specific header files and import libraries combined with GNU toolsets that
                allow one to produce native Windows programs that do not rely on any
                3rd-party C runtime DLLs. MSYS is a supplement to MinGW which allows building
                applications and programs which rely on traditional UNIX tools to
                be present. Among others this includes tools like <tt>bash</tt> and <tt>make</tt>.
            </p>
            <p>
                Like Cygwin, MinGW/MSYS can handle different types of path formats. They
                are internally converted to paths with forward slashes and drive letters
                <tt>&lt;drive&gt;:</tt> replaced by a virtual
                directory <tt>/&lt;drive&gt;</tt>.  Additionally, MSYS automatically
                detects binaries compiled for the MSYS environment and feeds them with the
                internal, Unix-style path names. If native Windows applications are called
                from within MSYS programs their path arguments are automatically converted
                back to Windows style path names with drive letters and backslashes as
                path separators. This may cause problems for Windows applications which
                use forward slashes as parameter separator (e.g. <tt>cl /nologo /I</tt>)
                because MSYS may wrongly <a href="http://mingw.org/wiki/Posix_path_conversion">
                replace such parameters by drive letters</a>.
            </p>
            <p>
                If you are using the MinGW/MSYS system you can use the default make
                version supplied by the environment.
            </p>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h4><a name="windows_checklist">Basic Windows Check List</a></h4>
        <blockquote>
            <ol>
                <li>
                    Install one of the 
                    <a href="#cygwin">CYGWIN</a>, <a href="#msys">MinGW/MSYS</a> or 
                    <a href="http://www.mkssoftware.com/products/tk/ds_tkdev.asp">MKS</a> environments. 
                </li>
                <li>
                    Install the 
                    <a href="#bootjdk">Bootstrap JDK</a>, set
                    <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
                </li>
                <li>
                    <a href="#importjdk">Optional Import JDK</a>, set
                    <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>.
                </li>
                <li>
                    Install the
                    <a href="#msvc32">Microsoft Visual Studio Compilers</a>).
                </li>
                <li>
                    Setup all environment variables for compilers 
                    (see <a href="#msvc32">compilers</a>).
                </li>
                <li>
                    Install 
                    <a href="#dxsdk">Microsoft DirectX SDK</a>.
                </li>
                <li>
                    Install
                    <a href="#ant">Ant 1.7.1 or newer</a>,
                    make sure it is in your PATH and set
                    <tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
                </li>
            </ol>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="macosx">Basic Mac OS X System Setup</a></h3>
        <blockquote> 
            <strong>X64 only:</strong>
            The minimum recommended hardware for building
            the Mac OS X version is any 64-bit capable Intel processor, at least 2
            GB of RAM, and approximately 3 GB of free disk space. You should also
            have OS X Lion 10.7.3 installed.
        </blockquote>
        <!-- ------------------------------------------------------ -->

        <h4><a name="macosx_checklist">Basic Mac OS X Check List</a></h4>
        <blockquote>
            <ol>
                <li>
                    Install <a href="https://developer.apple.com/xcode/">XCode 4.1</a> or newer. 
		    If you install XCode 4.3 or newer, make sure you also install 
		    "Command line tools" found under the preferences pane "Downloads".
                </li>
                <li>
                    Install <a href="http://support.apple.com/kb/dl1421" target="_blank">"Java for OS X Lion Update 1"</a>, 
                    set <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a> to <code>`/usr/libexec/java_home -v 1.6`</code></tt>
                </li>
                <li>
                    <a href="#importjdk">Optional Import JDK</a>, set
                    <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>.
                </li>
            </ol>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h3><a name="dependencies">Build Dependencies</a></h3>
        <blockquote>
            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>
                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/downloads/index.jsp"
                   target="_blank">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="importjdk">Optional Import JDK</a></h4>
            <blockquote>
                The <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>
                setting is only needed if you are not building the entire
                JDK. For example, if you have built the entire JDK once, and
                wanted to avoid repeatedly building the Hotspot VM, you could
                set this to the location of the previous JDK install image
                and the build will copy the needed files from this import area.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="ant">Ant</a></h4>
            <blockquote>
                All OpenJDK builds require access to least Ant 1.7.1.
                The Ant tool is available from the 
                <a href="http://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.zip" target="_blank">
                    Ant 1.7.1 archive download site</a>.
                You should always make sure <tt>ant</tt> is in your PATH, and
                on Windows you may also need to set 
                <tt><a href="#ANT_HOME">ANT_HOME</a></tt>
                to point to the location of
                the Ant installation, this is the directory pathname
                that contains a <tt>bin and lib</tt>.
                <br>
                <b>WARNING:</b> Ant versions used from IDE tools like NetBeans
                or installed via system packages may not operate the same
                as the one obtained from the Ant download bundles.
                These system and IDE installers sometimes choose to change
                the ant installation enough to cause differences.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="cacerts">Certificate Authority File (cacert)</a></h4>
            <blockquote>
                See <a href="http://en.wikipedia.org/wiki/Certificate_Authority" target="_blank">
                    http://en.wikipedia.org/wiki/Certificate_Authority</a>
                for a better understanding of the Certificate Authority (CA).
                A certificates file named "cacerts"
                represents a system-wide keystore with CA certificates. 
                In JDK and JRE
                binary bundles, the "cacerts" file contains root CA certificates from
                several public CAs (e.g., VeriSign, Thawte, and Baltimore).
                The source contain a cacerts file
                without CA root certificates. 
                Formal JDK builders will need to secure
                permission from each public CA and include the certificates into their
                own custom cacerts file. 
                Failure to provide a populated cacerts file
                will result in verification errors of a certificate chain during runtime.
                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>
                <strong><a name="gcc">Linux gcc/binutils</a></strong>
                <blockquote>
                    The GNU gcc compiler version should be 4.3 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>
                    At a minimum, the
                    <a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.htm" target="_blank">
                        Sun Studio 12 Update 1 Compilers</a>
                    (containing version 5.10 of the C and C++ compilers) is required,
                    including specific patches.
                    <p>
                    The Solaris SPARC patch list is:
                    <ul>
                        <li>
                            118683-05: SunOS 5.10: Patch for profiling libraries and assembler
                        </li>
                        <li>
                            119963-21: SunOS 5.10: Shared library patch for C++
                        </li>
                        <li>
                            120753-08: SunOS 5.10: Microtasking libraries (libmtsk) patch
                        </li>
                        <li>
                            128228-09: Sun Studio 12 Update 1: Patch for Sun C++ Compiler
                        </li>
                        <li>
                            141860-03: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
                        </li>
                        <li>
                            141861-05: Sun Studio 12 Update 1: Patch for Sun C Compiler
                        </li>
                        <li>
                            142371-01: Sun Studio 12.1 Update 1: Patch for dbx
                        </li>
                        <li>
                            143384-02: Sun Studio 12 Update 1: Patch for debuginfo handling
                        </li>
                        <li>
                            143385-02: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
                        </li>
                        <li>
                            142369-01: Sun Studio 12.1: Patch for Performance Analyzer Tools
                        </li>
                    </ul>
                    <p>
                        The Solaris X86 patch list is:
                    <ul>
                        <li>
                            119961-07: SunOS 5.10_x86, x64, Patch for profiling libraries and assembler
                        </li>
                        <li>
                            119964-21: SunOS 5.10_x86: Shared library patch for C++_x86
                        </li>
                        <li>
                            120754-08: SunOS 5.10_x86: Microtasking libraries (libmtsk) patch
                        </li>
                        <li>
                            141858-06: Sun Studio 12 Update 1_x86: Sun Compiler Common patch for x86 backend
                        </li>
                        <li>
                            128229-09: Sun Studio 12 Update 1_x86: Patch for C++ Compiler
                        </li>
                        <li>
                            142363-05: Sun Studio 12 Update 1_x86: Patch for C Compiler
                        </li>
                        <li>
                            142368-01: Sun Studio 12.1_x86: Patch for Performance Analyzer Tools
                        </li>
                    </ul>
                    <p> 
                        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 Oracle Solaris Studio Express compilers at:
                        <a href="http://developers.sun.com/sunstudio/downloads/express.jsp" target="_blank">
                            Oracle Solaris Studio Express Download site</a>
                        are also an option, although these compilers have not
                        been extensively used yet.
                </blockquote>
                <strong><a name="msvc32">Windows i586: Microsoft Visual Studio 2010 Compilers</a></strong>
                <blockquote>
                    <p>
                        <b>BEGIN WARNING</b>: JDK 7 has transitioned to
                        use the newest VS2010 Microsoft compilers.
                        No other compilers are known to build the entire JDK,
                        including non-open portions.
                        Visual Studio 2010 Express compilers are now able to build all the
                        open source repositories, but this is 32 bit only. To build 64 bit
                        Windows binaries use the the 7.1 Windows SDK.
                        <b>END WARNING.</b>
                    <p>
                        The 32-bit OpenJDK Windows build requires
                        Microsoft Visual Studio C++ 2010 (VS2010) Professional
                        Edition or Express compiler.
                        The compiler and other tools are expected to reside
                        in the location defined by the variable
                        <tt>VS100COMNTOOLS</tt> which
                        is set by the Microsoft Visual Studio installer.
                    <p> 
                        Once the compiler is installed,
                        it is recommended that you run <tt>VCVARS32.BAT</tt>
                        to set the compiler environment variables
                        <tt>INCLUDE</tt>,
                        <tt>LIB</tt>, and
                        <tt>PATH</tt>
                        prior to building the
                        OpenJDK.
                        The above environment variables <b>MUST</b> be set.
                        This compiler also contains the Windows SDK v 7.0a,
                        which is an update to the Windows 7 SDK.
                    <p>
                        <b>WARNING:</b> Make sure you check out the
                        <a href="#cygwin">CYGWIN link.exe WARNING</a>.
                        The path <tt>/usr/bin</tt> must be after the path to the
                        Visual Studio product.
                </blockquote>
                <strong><a name="msvc64">Windows x64: Microsoft Visual Studio 2010 Professional Compiler</a></strong>
                <blockquote>
                    For <b>X64</b>, the set up is much the same as 32 bit
                    except that you run <tt>amd64\VCVARS64.BAT</tt>
                    to set the compiler environment variables.
                    Previously 64 bit builds had to use the 64 bit compiler in
                    an unbundled Windows SDK but this is no longer necessary if
                    you have VS2010 Professional.
                </blockquote>
                <strong><a name="mssdk64">Windows x64: Microsoft Windows 7.1 SDK 64 bit compilers.</a></strong>
                For a free alternative for 64 bit builds, use the 7.1 SDK.
                Microsoft say that to set up your paths for this run
                <pre>
    c:\Program Files\Microsoft SDKs\Windows\v7.1\bin\setenv.cmd /x64.
                </pre>
                What was tested is just directly setting up LIB, INCLUDE,
                PATH and based on the installation directories using the
                DOS short name appropriate for the system, (you will
                need to set them for yours, not just blindly copy this) eg :
                <pre>
    set VSINSTALLDIR=c:\PROGRA~2\MICROS~1.0
    set WindowsSdkDir=c:\PROGRA~1\MICROS~1\Windows\v7.1
    set PATH=%VSINSTALLDIR%\vc\bin\amd64;%VSINSTALLDIR%\Common7\IDE;%WindowsSdkDir%\bin;%PATH%
    set INCLUDE=%VSINSTALLDIR%\vc\include;%WindowsSdkDir%\include
    set LIB=%VSINSTALLDIR%\vc\lib\amd64;%WindowsSdkDir%\lib\x64
                </pre>
                <strong><a name="llvmgcc">OS X Lion 10.7.3: LLVM GCC</a></strong>
                <blockquote>
                   LLVM GCC is bundled with XCode. The version should be at least 4.2.1.
                </blockquote>
            </blockquote>
            <!-- ------------------------------------------------------ --> 
            <h4><a name="zip">Zip and Unzip</a></h4>
            <blockquote>
                Version 2.2 (November 3rd 1997) or newer of the zip utility 
                and version 5.12 or newer of the unzip utility is needed 
                to build the JDK.
                With Solaris, Linux, and Windows CYGWIN, the zip and unzip
                utilities installed on the system should be fine.
                Information and the source code for
                ZIP.EXE and UNZIP.EXE is available on the
                <a href="http://www.info-zip.org" 
                   target="_blank">info-zip web site</a>.
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="cups">Common UNIX Printing System (CUPS) Headers (Solaris &amp; Linux)</a></h4>
            <blockquote>
                <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" target="_blank">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="xrender">XRender Extension Headers (Solaris &amp; Linux)</a></h4>
            <blockquote>
                <p>
                    <strong>Solaris:</strong>
                    XRender header files are required for building the
                    OpenJDK on Solaris.
                    The XRender header file is included with the other X11 header files
                    in the package <strong>SFWxwinc</strong> on new enough versions of
                    Solaris and will be installed in
                    <tt>/usr/X11/include/X11/extensions/Xrender.h</tt> or
                    <tt>/usr/openwin/share/include/X11/extensions/Xrender.h</tt>
                </p><p>
                    <strong>Linux:</strong>
                    XRender header files are required for building the
                    OpenJDK on Linux.
                    The Linux header files are usually available from a "Xrender"
                    development package, it's recommended that you try and use
                    the package provided by the particular distribution of Linux that
                    you are using.
                </p>
            </blockquote>
            <!-- ------------------------------------------------------ -->
            <h4><a name="freetype">FreeType 2</a></h4>
            <blockquote>
                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>
                    You can always download latest FreeType version from the
                    <a href="http://www.freetype.org" target="_blank">FreeType website</a>.
                <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>
                    Building the freetype 2 libraries from scratch is also possible,
                    however on Windows refer to the
                    <a href="http://freetype.freedesktop.org/wiki/FreeType_DLL">
                        Windows FreeType DLL build instructions</a>.
                <p>
                    Note that by default FreeType is built with byte code hinting
                    support disabled due to licensing restrictions.
                    In this case, text appearance and metrics are expected to
                    differ from Sun's official JDK build.
                    See
                    <a href="http://freetype.sourceforge.net/freetype2/index.html">
                        the SourceForge FreeType2 Home Page
                    </a>
                    for more information.
            </blockquote>    
            <!-- ------------------------------------------------------ -->
            <h4><a name="alsa">Advanced Linux Sound Architecture (ALSA) (Linux only)</a></h4>
            <blockquote>
                <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 highly 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.
                <p>
                    In particular, older Linux systems will likely not have the
                    right version of ALSA installed, for example
                    Redhat AS 2.1 U2 and SuSE 8.1 do not include a sufficiently
                    recent ALSA distribution.
                    On rpm-based systems, you can see if ALSA is installed by
                    running this command:
                <pre>
                    <tt>rpm -qa | grep alsa</tt>
                </pre>
                Both <tt>alsa</tt> and <tt>alsa-devel</tt> packages are needed.
                <p> 
                    If your distribution does not come with ALSA, and you can't
                    find ALSA packages built for your particular system,
                    you can try to install the pre-built ALSA rpm packages from
                    <a href="http://www.freshrpms.net/" target="_blank">
                        <tt>www.freshrpms.net</tt></a>.
                    Note that installing a newer ALSA could
                    break sound output if an older version of ALSA was previously
                    installed on the system, but it will enable JDK compilation.
                <blockquote>
                    Installation: execute as root<br>
                    [i586]: <code>rpm -Uv --force alsa-lib-devel-0.9.1-rh61.i386.rpm</code><br>
                    [x64]: <code>rpm -Uv --force alsa-lib-devel-0.9.8-amd64.x86_64.rpm</code><br>
                    Uninstallation:<br>
                    [i586]: <code>rpm -ev alsa-lib-devel-0.9.1-rh61</code><br>
                    [x64]:<code>rpm -ev alsa-lib-devel-0.9.8-amd64</code><br>
                    Make sure that you do not link to the static library
                    (<tt>libasound.a</tt>),
                    by verifying that the dynamic library (<tt>libasound.so</tt>) is
                    correctly installed in <tt>/usr/lib</tt>.
                </blockquote>
                As a last resort you can go to the
                <a href="http://www.alsa-project.org" target="_blank">
                    Advanced Linux Sound Architecture Site</a> and build it from
                source.
                <blockquote>
                    Download driver and library
                    source tarballs from 
                    <a href="http://www.alsa-project.org" target="_blank">ALSA's homepage</a>. 
                    As root, execute the following
                    commands (you may need to adapt the version number):
                    <pre>
                        <tt>
                            $ tar xjf alsa-driver-0.9.1.tar.bz2
                            $ cd alsa-driver-0.9.1
                            $ ./configure
                            $ make install
                            $ cd ..
                            $ tar xjf alsa-lib-0.9.1.tar.bz2
                            $ cd alsa-lib-0.9.1
                            $ ./configure
                            $ make install
                        </tt>
                    </pre>
                    Should one of the above steps fail, refer to the documentation on
                    ALSA's home page.
                </blockquote>
                Note that this is a minimum install that enables
                building the JDK platform. To actually use ALSA sound drivers, more
                steps are necessary as outlined in the documentation on ALSA's homepage.
                <p>
                    ALSA can be uninstalled by executing <tt>make uninstall</tt> first in
                    the <tt>alsa-lib-0.9.1</tt> directory and then in
                    <tt>alsa-driver-0.9.1</tt>.
            </blockquote>
            There are no ALT* variables to change the assumed locations of ALSA,
            the makefiles will expect to find the ALSA include files and library at:
            <tt>/usr/include/alsa</tt> and <tt>/usr/lib/libasound.so</tt>.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h4>Windows Specific Dependencies</h4>
        <blockquote>
            <strong>Unix Command Tools (<a name="cygwin">CYGWIN</a>)</strong>
            <blockquote> 
                The OpenJDK requires access to a set of unix command tools
                on Windows which can be supplied by 
                <a href="http://www.cygwin.com" target="_blank">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" target="_blank">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>Category</td>
                                <td>Package</td>
                                <td>Description</td>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>ar.exe</td>
                                <td>Devel</td>
                                <td>binutils</td>
                                <td>The GNU assembler, linker and binary
                                    utilities</td>
                            </tr>
                            <tr>
                                <td>make.exe</td>
                                <td>Devel</td>
                                <td>make</td>
                                <td>The GNU version of the 'make' utility built for CYGWIN.<br>
                                    <b>NOTE</b>: the Cygwin make can not be used to build the 
                                    OpenJDK.  You only need it to build your own version of make 
                                    (see <a href="#gmake">the GNU make section</a>)</td>
                            </tr>
                            <tr>
                                <td>m4.exe</td>
                                <td>Interpreters</td>
                                <td>m4</td>
                                <td>GNU implementation of the traditional Unix macro
                                    processor</td>
                            </tr>
                            <tr>
                                <td>cpio.exe</td>
                                <td>Utils</td>
                                <td>cpio</td>
                                <td>A program to manage archives of files</td>
                            </tr>
                            <tr>
                                <td>gawk.exe</td>
                                <td>Utils</td>
                                <td>awk</td>
                                <td>Pattern-directed scanning and processing language</td>
                            </tr>
                            <tr>
                                <td>file.exe</td>
                                <td>Utils</td>
                                <td>file</td>
                                <td>Determines file type using 'magic' numbers</td>
                            </tr>
                            <tr>
                                <td>zip.exe</td>
                                <td>Archive</td>
                                <td>zip</td>
                                <td>Package and compress (archive) files</td>
                            </tr>
                            <tr>
                                <td>unzip.exe</td>
                                <td>Archive</td>
                                <td>unzip</td>
                                <td>Extract compressed files in a ZIP archive</td>
                            </tr>
                            <tr>
                                <td>free.exe</td>
                                <td>System</td>
                                <td>procps</td>
                                <td>Display amount of free and used memory in the system</td>
                            </tr>
                        </tbody>
                    </table>
                </blockquote>
                <p>
                    Note that the CYGWIN software can conflict with other non-CYGWIN
                    software on your Windows system.
                    CYGWIN provides a
                    <a href="http://cygwin.com/faq/faq.using.html" target="_blank">FAQ</a> for
                    known issues and problems, of particular interest is the
                    section on
                    <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
                        BLODA (applications that interfere with CYGWIN)</a>.
                <p>
                    <b>WARNING:</b>
                    Be very careful with <b><tt>link.exe</tt></b>, it will conflict
                    with the Visual Studio version. You need the Visual Studio
                    version of <tt>link.exe</tt>, not the CYGWIN one.
                    So it's important that the Visual Studio paths in PATH preceed
                    the CYGWIN path <tt>/usr/bin</tt>.
            </blockquote>
            <strong> Minimalist GNU for Windows (<a name="msys">MinGW/MSYS</a>)</strong>
            <blockquote> 
                Alternatively, the set of unix command tools for the OpenJDK build on 
                Windows can be supplied by 
                <a href="http://www.mingw.org/wiki/MSYS" target="_blank">MinGW/MSYS</a>.
                <p>
                    In addition to the tools which will be installed by default, you have
                    to manually install the <tt>msys-zip</tt> and <tt>msys-unzip</tt> packages.
                    This can be easily done with the MinGW command line installer:<br/>
                    <tt><br/>
                        mingw-get.exe install msys-zip<br/>
                        mingw-get.exe install msys-unzip<br/>
                    </tt>
                </p>
            </blockquote>
            <strong><a name="dxsdk">Microsoft DirectX 9.0 SDK header files and libraries</a></strong>
            <blockquote>
                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" target="_blank">
                    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" target="_blank">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>
            <strong><a name="msvcrNN"><tt>MSVCR100.DLL</tt></a></strong>
            <blockquote> 
                The OpenJDK build requires access to a redistributable
                <tt>MSVCR100.DLL</tt>.
                This is usually picked up automatically from the redist
                directories of Visual Studio 2010.
                If this cannot be found set the 
                <a href="#ALT_MSVCRNN_DLL_PATH"><tt>ALT_MSVCRNN_DLL_PATH</tt></a>
                variable to the location of this file.
                <p> 
            </blockquote>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="creating">Creating the Build</a></h2>
        <blockquote>
            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.
            <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>
        <h2><a name="testing">Testing the Build</a></h2>
        <blockquote>
            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
            <blockquote>
                <ul>
                    <li><tt>solaris-sparc</tt></li>
                    <li><tt>solaris-sparcv9</tt></li>
                    <li><tt>solaris-i586</tt></li>
                    <li><tt>solaris-amd64</tt></li>
                    <li><tt>linux-i586</tt></li>
                    <li><tt>linux-amd64</tt></li>
                    <li><tt>windows-i586</tt></li>
                    <li><tt>windows-amd64</tt></li>
                </ul>
            </blockquote>
            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/" target="_blank">the jtreg site</a>.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <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 Bootstrap JDK <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><tt>MILESTONE</tt> </dt>
                <dd>
                    The milestone name for the build (<i>e.g.</i>"beta"). 
                    The default value is "internal".
                </dd>
                <dt><tt>BUILD_NUMBER</tt> </dt>
                <dd>
                    The build number for the build (<i>e.g.</i> "b27"). 
                    The default value is "b00".
                </dd>
                <dt><a name="arch_data_model"><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_JDK_IMPORT_PATH"><tt>ALT_JDK_IMPORT_PATH</tt></a></dt>
                <dd>
                    The location of a previously built JDK installation. 
                    See <a href="#importjdk">Optional Import JDK</a> for more information.
                </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_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><a name="ALT_JDK_DEVTOOLS_PATH"><tt>ALT_JDK_DEVTOOLS_PATH</tt></a></dt>
                <dd>
                    The default root location of the devtools.
                    The default value is 
                    <tt>$(ALT_SLASH_JAVA)/devtools</tt>.
                </dd>
                <dt><tt><a name="ALT_DEVTOOLS_PATH">ALT_DEVTOOLS_PATH</a></tt> </dt>
                <dd>
                    The location of tools like the 
                    <a href="#zip"><tt>zip</tt> and <tt>unzip</tt></a>
                    binaries, but might also contain the GNU make utility
                    (<tt><i>gmake</i></tt>).
                    So this area is a bit of a grab bag, especially on Windows.
                    The default value depends on the platform and
                    Unix Commands being used.
                    On Linux the default will be 
                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/linux/bin</tt>, 
                    on Solaris
                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/<i>{sparc,i386}</i>/bin</tt>, 
                    and on Windows with CYGWIN
                    <tt>/usr/bin</tt>.
                </dd>
                <dt><tt><a name="ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt> </dt>
                <dd>
                    The location of any source drop bundles
                    (see <a href="#drops">Managing the Source Drops</a>).
                    The default will be
                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/share/jdk8-drops</tt>.
                </dd>
                <dt><a name="ALT_UNIXCCS_PATH"><tt>ALT_UNIXCCS_PATH</tt></a></dt>
                <dd>
                    <strong>Solaris only:</strong>
                    An override for specifying where the Unix CCS
                    command set are located.
                    The default location is <tt>/usr/ccs/bin</tt> 
                </dd>
                <dt><a name="ALT_SLASH_JAVA"><tt>ALT_SLASH_JAVA</tt></a></dt>
                <dd>
                    The default root location for many of the ALT path locations
                    of the following ALT variables.
                    The default value is 
                    <tt>"/java"</tt> on Solaris and Linux, 
                    <tt>"J:"</tt> on Windows.
                </dd>
                <dt><a name="ALT_BUILD_JDK_IMPORT_PATH"><tt>ALT_BUILD_JDK_IMPORT_PATH</tt></a></dt>
                <dd>
                    These are useful in managing builds on multiple platforms.
                    The default network location for all of the import JDK images
                    for all platforms. 
                    If <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>
                    is not set, this directory will be used and should contain 
                    the following directories:
                    <tt>solaris-sparc</tt>,
                    <tt>solaris-i586</tt>,
                    <tt>solaris-sparcv9</tt>,
                    <tt>solaris-amd64</tt>,
                    <tt>linux-i586</tt>,
                    <tt>linux-amd64</tt>,
                    <tt>windows-i586</tt>,
                    and
                    <tt>windows-amd64</tt>.
                    Where each of these directories contain the import JDK image
                    for that platform.
                </dd>
                <dt><a name="ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a></dt>
                <dd>
                    The top-level directory of the libraries and include files for the platform's 
                    graphical programming environment. The default location is platform specific. 
                    For example, on Linux it defaults to <tt>/usr/X11R6/</tt>.
                </dd>
                <dt><strong>Windows specific:</strong></dt>
                <dd>
                    <dl>
                        <dt><a name="ALT_WINDOWSSDKDIR"><tt>ALT_WINDOWSSDKDIR</tt></a> </dt>
                        <dd>
                            The location of the 
                            Microsoft Windows SDK where some tools will be
                            located.
                            The default is whatever WINDOWSSDKDIR is set to
                            (or WindowsSdkDir) or the path
                            <br>
                            <tt>c:\Program Files\Microsoft SDKs\Windows\v7.0a</tt>
                        </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_MSVCRNN_DLL_PATH">ALT_MSVCRNN_DLL_PATH</a></tt> </dt>
                        <dd>
                            The location of the 
                            <a href="#msvcrNN"><tt>MSVCR100.DLL</tt></a>. 
                        </dd>
                    </dl>
                </dd>
                <dt><strong>Cross-Compilation Support:</strong></dt>
                <dd>
                    <dl>
                        <dt><a name="CROSS_COMPILE_ARCH"><tt>CROSS_COMPILE_ARCH</tt></a> </dt>
                        <dd>
                            Set to the target architecture of a cross-compilation build. If set, this
                            variable is used to signify that we are cross-compiling. The expectation
                            is that <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> is set
                            to point to the cross-compiler and that any cross-compilation specific flags
                            are passed using <a href="#EXTRA_CFLAGS"><tt>EXTRA_CFLAGS</tt></a>.
                            The <a href="#ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a> variable should 
                            also be set to point to the graphical header files (e.g. X11) provided with 
                            the cross-compiler.
                            When cross-compiling we skip execution of any demos etc that may be built, and
                            also skip binary-file verification.
                        </dd>
                        <dt><tt><a name="EXTRA_CFLAGS">EXTRA_CFLAGS</a></tt> </dt>
                        <dd>
                           Used to pass cross-compilation options to the cross-compiler.
                           These are added to the <tt>CFLAGS</tt> and <tt>CXXFLAGS</tt> variables. 
                        </dd>
                        <dt><tt><a name="USE_ONLY_BOOTDIR_TOOLS">USE_ONLY_BOOTDIR_TOOLS</a></tt> </dt>
                        <dd>
                            Used primarily for cross-compilation builds (and always set in that case)
                            this variable indicates that tools from the boot JDK should be used during
                            the build process, not the tools (<tt>javac</tt>, <tt>javah</tt>, <tt>jar</tt>)
                            just built (which can't execute on the build host).
                        </dd>
                        <dt><tt><a name="HOST_CC">HOST_CC</a></tt> </dt>
                        <dd>
                            The location of the C compiler to generate programs to run on the build host.
                            Some parts of the build generate programs that are then compiled and executed
                            to produce other parts of the build. Normally the primary C compiler is used
                            to do this, but when cross-compiling that would be the cross-compiler and the
                            resulting program could not be executed. 
                            On Linux this defaults to <tt>/usr/bin/gcc</tt>; on other platforms it must be
                            set explicitly.
                        </dd>
                    </dl>
                <dt><strong>Specialized Build Options:</strong></dt>
                <dd>
                  Some build variables exist to support specialized build environments and/or specialized
                  build products. Their use is only supported in those contexts:
                    <dl>
                        <dt><tt><a name="BUILD_CLIENT_ONLY">BUILD_CLIENT_ONLY</a></tt> </dt>
                        <dd>
                            Indicates this build will only contain the Hotspot client VM. In addition to
                            controlling the Hotspot build target, it ensures that we don't try to copy
                            any server VM files/directories, and defines a default <tt>jvm.cfg</tt> file
                            suitable for a client-only environment. Using this in a 64-bit build will
                            generate a sanity warning as 64-bit client builds are not directly supported.
                        </dd>
                        <dt><tt><a name="BUILD_HEADLESS_ONLY"></a>BUILD_HEADLESS_ONLY</tt> </dt>
                        <dd>
                            Used when the build environment has no graphical capabilities at all. This
                            excludes building anything that requires graphical libraries to be available.
                        </dd>
                        <dt><tt><a name="JAVASE_EMBEDDED"></a>JAVASE_EMBEDDED</tt> </dt>
                        <dd>
                            Used to indicate this is a build of the Oracle Java SE Embedded product. 
                            This will enable the directives included in the SE-Embedded specific build 
                            files.
                        </dd>
                        <dt><tt><a name="LIBZIP_CAN_USE_MMAP">LIBZIP_CAN_USE_MMAP</a></tt> </dt>
                        <dd>
                            If set to false, disables the use of mmap by the zip utility. Otherwise,
                            mmap will be used.
                        </dd>
                        <dt><tt><a name="COMPRESS_JARS"></a>COMPRESS_JARS</tt> </dt>
                        <dd>
                          If set to true, causes certain jar files that would otherwise be built without
                          compression, to use compression.
                        </dd>
                    </dl>
                </dd>
            </dl>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="hints">Hints and Tips</a></h2>
        <blockquote>
            You don't have to use all these hints and tips, and in fact people do actually
            build with systems that contradict these, but they might prove to be
            helpful to some.
            <ul>
                <li>
                    If <tt>make sanity</tt> does not work, find out why, fix that
                    before going any further. Or at least understand what the
                    complaints are from it.
                </li>
                <li>
                    JDK: Keep in mind that you are building a JDK, but you need
                    a JDK (BOOTDIR JDK) to build this JDK.
                </li>
                <li>
                    Ant: The ant utility is a java application and besides having
                    ant available to you, it's important that ant finds the right
                    java to run with. Make sure you can type <tt>ant -version</tt>
                    and get clean results with no error messages.
                </li>
                <li>
                    Linux: Try and favor the system packages over building your own
                    or getting packages from other areas.
                    Most Linux builds should be possible with the system's
                    available packages.
                </li>
                <li>
                    Solaris: Typically you will need to get compilers on your systems
                    and occasionally GNU make 3.81 if a gmake binary is not available.
                    The gmake binary might not be 3.81, be careful.
                </li>
                <li>
                    Windows VS2010:
                    <ul>
                        <li>
                            Only the C++ part of VS2010 is needed.
                            Try to let the installation go to the default install directory.
                            Always reboot your system after installing VS2010.
                            The system environment variable VS100COMNTOOLS should be
                            set in your environment.
                        </li>
                        <li>
                            Make sure that TMP and TEMP are also set in the environment
                            and refer to Windows paths that exist, like <tt>C:\temp</tt>,
                            not <tt>/tmp</tt>, not <tt>/cygdrive/c/temp</tt>, and not <tt>C:/temp</tt>.
                            <tt>C:\temp</tt> is just an example, it is assumed that this area is
                            private to the user, so by default after installs you should
                            see a unique user path in these variables.
                        </li>
                        <li>
                            You need to use vsvars32.bat or vsvars64.bat to get the
                            PATH, INCLUDE, LIB, LIBPATH, and WINDOWSSDKDIR
                            variables set in your shell environment.
                            These bat files are not easy to use from a shell environment.
                            However, there is a script placed in the root jdk8 repository called
                            vsvars.sh that can help, it should only be done once in a shell
                            that will be doing the build, e.g.<br>
                            <tt>sh ./make/scripts/vsvars.sh -v10 > settings<br>
                                eval `cat settings`</tt><br>
                            Or just <tt>eval `sh ./make/scripts/vsvars.sh -v10`</tt>.
                        </li>
                    </ul>
                </li>
                <li>
                    Windows: PATH order is critical, see the
                    <a href="#paths">paths</a> section for more information.
                </li>
                <li>
                    Windows 64bit builds: Use ARCH_DATA_MODEL=64.
                </li>
            </ul>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="troubleshooting">Troubleshooting</a></h2>
        <blockquote>
            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>Corrupted Bundles on Windows:</b>
                    <blockquote>
                        Some virus scanning software has been known to corrupt the
                        downloading of zip bundles.
                        It may be necessary to disable the 'on access' or 'real time'
                        virus scanning features to prevent this corruption.
                        This type of "real time" virus scanning can also slow down the
                        build process significantly.
                        Temporarily disabling the feature, or excluding the build
                        output directory may be necessary to get correct and faster builds.
                    </blockquote>
                </li>
                <li>
                    <b>Slow Builds:</b>
                    <blockquote>
                        If your build machine seems to be overloaded from too many
                        simultaneous C++ compiles, try setting the <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/" target="_blank">ccache</a>.
                    </blockquote>
                </li>
                <li>
                    <b>File time issues:</b>
                    <blockquote>
                        If you see warnings that refer to file time stamps, e.g.
                        <blockquote>
                            <i>Warning message:</i><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>
                        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>
                        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 64-bit Linux versions (e.g. Fedora)
                        only install the 64-bit version of the libstdc++ package.
                        Various parts of the JDK build require a static
                        link of the C++ runtime libraries to allow for maximum
                        portability of the built images.
                    </blockquote>
                </li>
                <li>
                    <b>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" target="_blank">
                            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>
                            <li><tt>$ su root</tt></li>
                            <li><tt># system-config-securitylevel</tt></li>
                            <li><tt>In the window that appears, select the SELinux tab</tt></li>
                            <li><tt>Disable SELinux</tt></li>
                        </ol>
                        <p>
                            Alternatively, instead of completely disabling it you could
                            disable just this one check.
                        <ol>
                            <li>Select System->Administration->SELinux Management</li>
                            <li>In the SELinux Management Tool which appears,
                                select "Boolean" from the menu on the left</li>
                            <li>Expand the "Memory Protection" group</li>
                            <li>Check the first item, labeled
                                "Allow all unconfined executables to use libraries requiring text relocation ..."</li>
                        </ol>
                    </blockquote>
                </li>
                <li>
                    <b>Windows Error Messages:</b><br>
                    <tt>*** fatal error - couldn't allocate heap, ... </tt><br>
                    <tt>rm fails with "Directory not empty"</tt><br>
                    <tt>unzip fails with "cannot create ... Permission denied"</tt><br>
                    <tt>unzip fails with "cannot create ... Error 50"</tt><br>
                    <blockquote>
                        The CYGWIN software can conflict with other non-CYGWIN
                        software. See the CYGWIN FAQ section on
                        <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
                            BLODA (applications that interfere with CYGWIN)</a>.
                    </blockquote>
                </li>
                <li>
                    <b>Windows Error Message: <tt>spawn failed</tt></b>
                    <blockquote>
                        Try rebooting the system, or there could be some kind of
                        issue with the disk or disk partition being used.
                        Sometimes it comes with a "Permission Denied" message.
                    </blockquote>
                </li>
            </ul>
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <hr>
        <h2><a name="newbuild">The New Build</a></h2>
        <blockquote>
            The <a href="http://openjdk.java.net/projects/build-infra/">
            Build Infrastructure project</a> is working on a new 
            build. For information on how to try it out, please see the
            <a href="http://openjdk.java.net/projects/build-infra/guide.html">
            Build Infra User Guide</a> 
        </blockquote>
        <hr>
    </body>
</html>
