<!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>)</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>
            </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.
            The Forest Extension is not part of the Mercurial install,
            and is optional,
            but can be obtained with the following commands:
            <blockquote>
                <tt>
                    hg clone https://bitbucket.org/pmezard/hgforest-crew/overview/ <i>YourHgForest</i>
                </tt>
            </blockquote>
            Once you have the file <tt>forest.py</tt>, you need to add these
            lines to your <tt>${HOME}/.hgrc</tt> file:
            <blockquote>
                <tt>
                    [extensions]
                    <br>forest = <i>YourHgForest</i>/forest.py
                </tt>
            </blockquote>

            <!-- ------------------------------------------------------ -->
            <h3><a name="get_source">Getting the Source</a></h3>
            <blockquote>
                To get the entire set of OpenJDK Mercurial repositories
                using the Forest Extension:
                <blockquote>
                    <tt>
                        hg fclone http://hg.openjdk.java.net/jdk7/jdk7 <i>YourOpenJDK</i>
                    </tt>
                </blockquote>
                To get the entire set of OpenJDK Mercurial repositories
                without using the Forest Extension:
                <blockquote>
                    <tt>
                        hg clone http://hg.openjdk.java.net/jdk7/jdk7 <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>
                You may find this script <tt>make/scripts/hgforest.sh</tt> faster
                than the <tt>hg</tt> forest commands provided by the
                Forest Extension.
            </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/jdk7/">
                        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/jdk7-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 (a cygwin <tt>make.exe</tt> is not the same
                    as a <tt>make.exe</tt> built for something like
                    <a href="http://www.mkssoftware.com/">MKS</a>). 
                    <br>
                    <b>WARNING:</b> Watch out on some make 3.81 versions, it may
                    not work due to a lack of support for MS-DOS drive letter paths
                    like <tt>C:/</tt> or <tt>C:\</tt>.
                    <br>
                    You may be able to use the information at the
                    <a href="http://developer.mozilla.org/en/docs/Windows_build_prerequisites_using_cygwin#make" target="_blank">
                        mozilla developer center</a>
                    on this topic.
                    <br>
                    It's hoped that when make 3.82 starts shipping in a future cygwin
                    release that this MS-DOS path issue will be fixed.
                    <br>
                    It may be possible to download the version at
                    <a href="http://www.cmake.org/files/cygwin/make.exe">
                        www.cmake.org make.exe</a>.
                    <br>
                    It might be necessary for you to build your own GNU make 3.81,
                    see the <a href="#buildgmake">"Building GNU make"</a> section
                    in that case.
                </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 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>
                        <tt>./configure && make</tt>
                    </li>
                    <li>
                        <strong>Windows for MKS: (CYGWIN is recommended)</strong>
                        <tt>./configure && make -f Makefile.win32</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 is a historic utility and is based very
            heavily on shell scripting, so it does not tolerate the Windows habit
            of having spaces in pathnames or the use of the <tt>\</tt>characters in pathnames.
            Luckily on most Windows systems, you can use <tt>/</tt>instead of \, and
            there is always a 'short' pathname without spaces for any path that 
            contains spaces.
            Unfortunately, this short pathname can be somewhat dynamic and the
            formula is difficult to explain.
            You can use <tt>cygpath</tt> utility to map pathnames with spaces
            or the <tt>\</tt>character into the <tt>C:/</tt> style of pathname
            (called 'mixed'), e.g.
            <tt>cygpath -s -m "<i>path</i>"</tt>.
            <p>
                The makefiles will try to translate any pathnames supplied
                to it into the <tt>C:/</tt> style automatically.
            <p>
                Note that use of CYGWIN creates a unique problem with regards to
                setting <a href="#path"><tt>PATH</tt></a>. Normally on Windows
                the <tt>PATH</tt> variable contains directories
                separated with the ";" character (Solaris and Linux uses ":").
                With CYGWIN, it uses ":", but that means that paths like "C:/path"
                cannot be placed in the CYGWIN version  of <tt>PATH</tt> and
                instead CYGWIN uses something like <tt>/cygdrive/c/path</tt>
                which CYGWIN understands, but only CYGWIN understands.
                So be careful with paths on Windows.
        </blockquote>
        <!-- ------------------------------------------------------ -->
        <h4><a name="windows_checklist">Basic Windows Check List</a></h4>
        <blockquote>
            <ol>
                <li>
                    Install the
                    <a href="#cygwin">CYGWIN product</a>. 
                </li>
                <li>
                    Install the 
                    <a href="#bootjdk">Bootstrap JDK</a>, set
                    <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
                </li>
                <li>
                    <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>
                </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>: 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><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/jdk7-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 jdk7 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>
    </body>
</html>
