<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>OpenJDK Build README</title>
    </head>
    <body style="background-color:aquamarine">

        <!-- ====================================================== -->
        <table width="100%">
            <tr>
                <td align="center">
                    <img alt="OpenJDK" 
                         src="http://openjdk.java.net/images/openjdk.png" 
                         width=256>
                </td>
            </tr>
            <tr>
                <td align=center>
                    <h1>OpenJDK Build README</h1>
                </td>
            </tr>
        </table>

        <!-- ====================================================== -->
        <hr>
        <h2><a name="introduction">Introduction</a></h2>
        <blockquote>
            This README file contains build instructions for the
            <a href="http://openjdk.java.net"  target="_blank">OpenJDK</a>.
            Building the source code for the
            OpenJDK
            requires
            a certain degree of technical expertise.

            <!-- ====================================================== -->
            <h3>!!!!!!!!!!!!!!! THIS IS A MAJOR RE-WRITE of this document. !!!!!!!!!!!!!</h3>
            <blockquote>
                Some Headlines:
                <ul>
                    <li>
                        The build is now a "<code>configure &amp;&amp; make</code>" style build
                    </li>
                    <li>
                        Any GNU make 3.81 or newer should work
                    </li>
                    <li>
                        The build should scale, i.e. more processors should
                        cause the build to be done in less wall-clock time
                    </li>
                    <li>
                        Nested or recursive make invocations have been significantly
                        reduced, as has the total fork/exec or spawning
                        of sub processes during the build
                    </li>
                    <li>
                        Windows MKS usage is no longer supported
                    </li>
                    <li>
                        Windows Visual Studio <code>vsvars*.bat</code> and 
                        <code>vcvars*.bat</code> files are run automatically
                    </li>
                    <li>
                        Ant is no longer used when building the OpenJDK
                    </li>
                    <li>
                        Use of ALT_* environment variables for configuring the
                        build is no longer supported
                    </li>
                </ul>
            </blockquote>
        </blockquote>

        <!-- ====================================================== -->
        <hr>
        <h2><a name="contents">Contents</a></h2>
        <blockquote>
            <ul>
                <li><a href="#introduction">Introduction</a></li>

                <li><a href="#hg">Use of Mercurial</a>
                    <ul>
                        <li><a href="#get_source">Getting the Source</a></li>
                        <li><a href="#repositories">Repositories</a></li>
                    </ul>
                </li>

                <li><a href="#building">Building</a>
                    <ul>
                        <li><a href="#setup">System Setup</a>
                            <ul>
                                <li><a href="#linux">Linux</a></li>
                                <li><a href="#solaris">Solaris</a></li>
                                <li><a href="#macosx">Mac OS X</a></li>
                                <li><a href="#windows">Windows</a></li>
                            </ul>
                        </li>
                        <li><a href="#configure">Configure</a></li>
                        <li><a href="#make">Make</a></li>
                    </ul>
                </li>
                <li><a href="#testing">Testing</a></li>
            </ul>
            <hr>
            <ul>
                <li><a href="#hints">Appendix A: Hints and Tips</a>
                    <ul>
                        <li><a href="#faq">FAQ</a></li>
                        <li><a href="#performance">Build Performance Tips</a></li>
                        <li><a href="#troubleshooting">Troubleshooting</a></li>
                    </ul>
                </li>
                <li><a href="#gmake">Appendix B: GNU Make Information</a></li>
                <li><a href="#buildenvironments">Appendix C: Build Environments</a></li>

                <!-- Leave out
                <li><a href="#mapping">Appendix D: Mapping Old Builds to the New Builds</a></li>    
                -->

            </ul>
        </blockquote>

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

            <h3><a name="get_source">Getting the Source</a></h3>
            <blockquote>
                To get the entire set of OpenJDK Mercurial repositories
                use the script <code>get_source.sh</code> located in the 
                root repository:
                <blockquote>
                    <code>
                        hg clone http://hg.openjdk.java.net/jdk8/jdk8 
                        <i>YourOpenJDK</i>
                        <br>
                        cd <i>YourOpenJDK</i>
                        <br>
                        bash ./get_source.sh
                    </code>
                </blockquote>
                Once you have all the repositories, keep in mind that each
                repository is it's own independent repository.
                You can also re-run <code>./get_source.sh</code> anytime to
                pull over all the latest changesets in all the repositories.
                This set of nested repositories has been given the term
                "forest" and there are various ways to apply the same
                <code>hg</code> command to each of the repositories.
                For example, the script <code>make/scripts/hgforest.sh</code>
                can be used to repeat the same <code>hg</code>
                command on every repository, e.g.
                <blockquote>
                    <code>
                        cd <i>YourOpenJDK</i>
                        <br>
                        bash ./make/scripts/hgforest.sh status
                    </code>
                </blockquote>
            </blockquote>

            <h3><a name="repositories">Repositories</a></h3>
            <blockquote>
                <p>The set of repositories and what they contain:</p>
                <table border="1">
                    <thead>
                        <tr>
                            <th>Repository</th>
                            <th>Contains</th>
                        </tr>
                    </thead>                   
                    <tbody>
                        <tr>
                            <td>
                                . (root)
                            </td>
                            <td>
                                common configure and makefile logic
                            </td>
                        </tr>
                        <tr>
                            <td>
                                hotspot
                            </td>
                            <td>
                                source code and make files for building
                                the OpenJDK Hotspot Virtual Machine                         
                            </td>
                        </tr>
                        <tr>
                            <td>
                                langtools
                            </td>
                            <td>
                                source code for the OpenJDK javac and language tools
                            </td>
                        </tr>
                        <tr>
                            <td>
                                jdk
                            </td>
                            <td>
                                source code and make files for building
                                the OpenJDK runtime libraries and misc files
                            </td>
                        </tr>
                        <tr>
                            <td>
                                jaxp
                            </td>
                            <td>
                                source code for the OpenJDK JAXP functionality
                            </td>
                        </tr>
                        <tr>
                            <td>
                                jaxws
                            </td>
                            <td>
                                source code for the OpenJDK JAX-WS functionality
                            </td>
                        </tr>
                        <tr>
                            <td>
                                corba
                            </td>
                            <td>
                                source code for the OpenJDK Corba functionality
                            </td>
                        </tr>
                    </tbody>
                </table>
            </blockquote>

            <h3><a name="guidelines">Repository Source Guidelines</a></h3>
            <blockquote>
                There are some very basic guidelines:
                <ul>
                    <li>
                        Use of whitespace in source files
                        (.java, .c, .h, .cpp, and .hpp files)
                        is restricted.
                        No TABs, no trailing whitespace on lines, and files
                        should not terminate in more than one blank line.
                    </li>
                    <li>
                        Files with execute permissions should not be added
                        to the source repositories.
                    </li>
                    <li>
                        All generated files need to be kept isolated from 
                        the files
                        maintained or managed by the source control system.
                        The standard area for generated files is the top level
                        <code>build/</code> directory.
                    </li>
                    <li>
                        The default build process should be to build the product
                        and nothing else, in one form, e.g. a product (optimized),
                        debug (non-optimized, -g plus assert logic), or
                        fastdebug (optimized, -g plus assert logic).
                    </li>
                    <li>
                        The <tt>.hgignore</tt> file in each repository
                        must exist and should
                        include <tt>^build/</tt>, <tt>^dist/</tt> and 
                        optionally any
                        <tt>nbproject/private</tt> directories.
                        <strong>It should NEVER</strong> include 
                        anything in the
                        <tt>src/</tt> or <tt>test/</tt>
                        or any managed directory area of a repository.
                    </li>
                    <li>
                        Directory names and file names should never contain
                        blanks or
                        non-printing characters.
                    </li>
                    <li>
                        Generated source or binary files should NEVER be added to
                        the repository (that includes <tt>javah</tt> output).
                        There are some exceptions to this rule, in particular
                        with some of the generated configure scripts.
                    </li>
                    <li>
                        Files not needed for typical building
                        or testing of the repository
                        should not be added to the repository.
                    </li>
                </ul>
            </blockquote>

        </blockquote>

        <!-- ====================================================== -->
        <hr>
        <h2><a name="building">Building</a></h2>
        <blockquote>
            The very first step in building the OpenJDK is making sure the
            system itself has everything it needs to do OpenJDK builds.
            Once a system is setup, it generally doesn't need to be done again.
            <br>
            Building the OpenJDK is now done with running a 
            <a href="#configure"><code>configure</code></a>
            script which will try and find and verify you have everything
            you need, followed by running
            <a href="#gmake"><code>make</code></a>, e.g.
            <blockquote>
                <b>
                    <code>
                        bash ./configure<br>
                        make all
                    </code>
                </b>
            </blockquote>
            Where possible the <code>configure</code> script will attempt to located the
            various components in the default locations or via component
            specific variable settings.
            When the normal defaults fail or components cannot be found,
            additional <code>configure</code> options may be necessary to help <code>configure</code>
            find the necessary tools for the build, or you may need to
            re-visit the setup of your system due to missing software
            packages.
            <br>
            <strong>NOTE:</strong> The <code>configure</code> script
            file does not have
            execute permissions and will need to be explicitly run with
            <code>bash</code>,
            see the <a href="#guidelines">source guidelines</a>.

            <!-- ====================================================== -->
            <hr>
            <h3><a name="setup">System Setup</a></h3>
            <blockquote>
                Before even attempting to use a system to build the OpenJDK
                there are some very basic system setups needed.
                For all systems:
                <ul>
                    <li>
                        Be sure the GNU make utility is version 3.81 or newer,
                        e.g. run "<code>make -version</code>"
                    </li>
                    <li>
                        Install a
                        <a name="bootjdk">Bootstrap JDK</a>.
                        All OpenJDK builds require access to a previously released
                        JDK called the <i>bootstrap JDK</i> or <i>boot JDK.</i>
                        The general rule is that the bootstrap JDK
                        must be an instance of the previous major
                        release of the JDK. In addition, there may be
                        a requirement to use a release at or beyond a
                        particular update level.
                        <br>&nbsp;<br>

                        <b><i>Building JDK 8 requires use of a version
                        of JDK 7 that is at Update 7 or newer. JDK 8
                        developers should not use JDK 8 as the boot
                        JDK, to ensure that JDK 8 dependencies are
                        not introduced into the parts of the system
                        that are built with JDK 7.</i></b>

                        <br>&nbsp;<br>
                        The JDK 7 binaries can be downloaded from Oracle's 
                        <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"
                           target="_blank">JDK 7 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 add its <code>bin</code> directory
                        to the <code>PATH</code> environment variable.
                        If <code>configure</code> has any issues finding this JDK, you may
                        need to use the <code>configure</code> option
                        <code>--with-boot-jdk</code>.
                    </li>
                    <li>
                        Insure that GNU make, the Bootstrap JDK,
                        and the compilers are all
                        in your PATH environment variable
                    </li>
                </ul>
                And for specific systems:
                <table border="1">
                    <thead>
                        <tr>
                            <th>Linux</th>
                            <th>Solaris</th>
                            <th>Windows</th>
                            <th>Mac OS X</th>
                        </tr>
                    </thead>                   
                    <tbody>
                        <tr>
                            <td>
                                Install all the software development
                                packages needed including
                                <a href="#alsa">alsa</a>,
                                <a href="#freetype">freetype</a>,
                                <a href="#cups">cups</a>, and
                                <a href="#xrender">xrender</a>.
                                <br>
                                See
                                <a href="#SDBE">specific system packages</a>.
                            </td>
                            <td>
                                Install all the software development
                                packages needed  including
                                <a href="#studio">Studio Compilers</a>,
                                <a href="#freetype">freetype</a>,
                                <a href="#cups">cups</a>, and
                                <a href="#xrender">xrender</a>.
                                <br>
                                See
                                <a href="#SDBE">specific system packages</a>.
                            </td>
                            <td>
                                <ul>
                                    <li>
                                        Install one of
                                        <a href="#cygwin">CYGWIN</a> or
                                        <a href="#msys">MinGW/MSYS</a>
                                    </li>
                                    <li>
                                        Install
                                        <a href="#vs2010">Visual Studio 2010</a>
                                    </li>
                                    <li>
                                        Install the
                                        <a href="#dxsdk">Microsoft DirectX SDK</a>
                                    </li>
                                </ul>
                            </td>
                            <td>
                                Install 
                                <a href="https://developer.apple.com/xcode/">XCode 4.5.2</a> 
                                and also install the "Command line tools" found under the
                                preferences pane "Downloads"
                            </td>
                        </tr>
                    </tbody>
                </table>

                <h4><a name="linux">Linux</a></h4>
                <blockquote>
                    With Linux, try and favor the system packages over 
                    building your own
                    or getting packages from other areas.
                    Most Linux builds should be possible with the system's
                    available packages.
                    <br>
                    Note that some Linux systems have a habit of pre-populating
                    your environment variables for you, for example <code>JAVA_HOME</code>
                    might get pre-defined for you to refer to the JDK installed on
                    your Linux system.
                    You will need to unset <code>JAVA_HOME</code>.
                    It's a good idea to run <code>env</code> and verify the
                    environment variables you are getting from the default system
                    settings make sense for building the OpenJDK.

                </blockquote>

                <h4><a name="solaris">Solaris</a></h4>
                <blockquote>
                    <h5><a name="studio">Studio Compilers</a></h5>
                    <blockquote>
                        At a minimum, the
                        <a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.htm" target="_blank">
                            Studio 12 Update 1 Compilers</a>
                        (containing version 5.10 of the C and C++ compilers) is required,
                        including specific patches.
                        <p>
                            The Solaris SPARC patch list is:
                        <ul>
                            <li>
                                118683-05: SunOS 5.10: Patch for profiling libraries and assembler
                            </li>
                            <li>
                                119963-21: SunOS 5.10: Shared library patch for C++
                            </li>
                            <li>
                                120753-08: SunOS 5.10: Microtasking libraries (libmtsk) patch
                            </li>
                            <li>
                                128228-09: Sun Studio 12 Update 1: Patch for Sun C++ Compiler
                            </li>
                            <li>
                                141860-03: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
                            </li>
                            <li>
                                141861-05: Sun Studio 12 Update 1: Patch for Sun C Compiler
                            </li>
                            <li>
                                142371-01: Sun Studio 12.1 Update 1: Patch for dbx
                            </li>
                            <li>
                                143384-02: Sun Studio 12 Update 1: Patch for debuginfo handling
                            </li>
                            <li>
                                143385-02: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
                            </li>
                            <li>
                                142369-01: Sun Studio 12.1: Patch for Performance Analyzer Tools
                            </li>
                        </ul>
                        <p>
                            The Solaris X86 patch list is:
                        <ul>
                            <li>
                                119961-07: SunOS 5.10_x86, x64, Patch for profiling libraries and assembler
                            </li>
                            <li>
                                119964-21: SunOS 5.10_x86: Shared library patch for C++_x86
                            </li>
                            <li>
                                120754-08: SunOS 5.10_x86: Microtasking libraries (libmtsk) patch
                            </li>
                            <li>
                                141858-06: Sun Studio 12 Update 1_x86: Sun Compiler Common patch for x86 backend
                            </li>
                            <li>
                                128229-09: Sun Studio 12 Update 1_x86: Patch for C++ Compiler
                            </li>
                            <li>
                                142363-05: Sun Studio 12 Update 1_x86: Patch for C Compiler
                            </li>
                            <li>
                                142368-01: Sun Studio 12.1_x86: Patch for Performance Analyzer Tools
                            </li>
                        </ul>
                        <p> 
                            Place the <code>bin</code> directory in <code>PATH</code>.
                        <p>
                            The Oracle Solaris Studio Express compilers at:
                            <a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index-jsp-142582.html" target="_blank">
                                Oracle Solaris Studio Express Download site</a>
                            are also an option, although these compilers have not
                            been extensively used yet.
                    </blockquote>

                </blockquote> <!-- Solaris -->

                <h4><a name="windows">Windows</a></h4>
                <blockquote>

                    <h5><a name="toolkit">Windows Unix Toolkit</a></h5>
                    <blockquote>
                        Building on Windows requires a Unix-like environment, notably a 
                        Unix-like shell.
                        There are several such environments available of which 
                        <a href="http://www.cygwin.com/">Cygwin</a> and 
                        <a href="http://www.mingw.org/wiki/MSYS">MinGW/MSYS</a> are 
                        currently supported for
                        the OpenJDK build. One of the differences of these 
                        systems from standard Windows tools is the way
                        they handle Windows path names, particularly path names which contain
                        spaces, backslashes as path separators and possibly drive letters. 
                        Depending
                        on the use case and the specifics of each environment these path 
                        problems can
                        be solved by a combination of quoting whole paths, translating 
                        backslashes to
                        forward slashes, escaping backslashes with additional backslashes and
                        translating the path names to their 
                        <a href="http://en.wikipedia.org/wiki/8.3_filename">
                            "8.3" version</a>.

                        <h6><a name="cygwin">CYGWIN</a></h6>
                        <blockquote>
                            CYGWIN is an open source, Linux-like environment which tries to emulate
                            a complete POSIX layer on Windows. It tries to be smart about path names
                            and can usually handle all kinds of paths if they are correctly quoted
                            or escaped although internally it maps drive letters <code>&lt;drive&gt;:</code> 
                            to a virtual directory <code>/cygdrive/&lt;drive&gt;</code>.
                            <p>
                                You can always use the <code>cygpath</code> utility to map pathnames with spaces
                                or the backslash character into the <code>C:/</code> style of pathname
                                (called 'mixed'), e.g. <code>cygpath -s -m "<i>path</i>"</code>.
                            </p>
                            <p>
                                Note that the use of CYGWIN creates a unique problem with regards to
                                setting <a href="#path"><code>PATH</code></a>. Normally on Windows
                                the <code>PATH</code> variable contains directories
                                separated with the ";" character (Solaris and Linux use ":").
                                With CYGWIN, it uses ":", but that means that paths like "C:/path"
                                cannot be placed in the CYGWIN version  of <code>PATH</code> and
                                instead CYGWIN uses something like <code>/cygdrive/c/path</code>
                                which CYGWIN understands, but only CYGWIN understands.
                            </p>
                            <p>
                                The OpenJDK build requires CYGWIN version 1.7.16 or newer.
                                Information about CYGWIN can
                                be obtained from the CYGWIN website at
                                <a href="http://www.cygwin.com" target="_blank">www.cygwin.com</a>.
                            </p>
                            <p>
                                By default CYGWIN doesn't install all the tools required for building
                                the OpenJDK.
                                Along with the default installation, you need to install
                                the following tools.
                            <blockquote>
                                <table border="1">
                                    <thead>
                                        <tr>
                                            <td>Binary Name</td>
                                            <td>Category</td>
                                            <td>Package</td>
                                            <td>Description</td>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <tr>
                                            <td>ar.exe</td>
                                            <td>Devel</td>
                                            <td>binutils</td>
                                            <td>
                                                The GNU assembler, linker and binary utilities
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>make.exe</td>
                                            <td>Devel</td>
                                            <td>make</td>
                                            <td>
                                                The GNU version of the 'make' utility built for CYGWIN
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>m4.exe</td>
                                            <td>Interpreters</td>
                                            <td>m4</td>
                                            <td>
                                                GNU implementation of the traditional Unix macro
                                                processor
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>cpio.exe</td>
                                            <td>Utils</td>
                                            <td>cpio</td>
                                            <td>
                                                A program to manage archives of files
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>gawk.exe</td>
                                            <td>Utils</td>
                                            <td>awk</td>
                                            <td>
                                                Pattern-directed scanning and processing language
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>file.exe</td>
                                            <td>Utils</td>
                                            <td>file</td>
                                            <td>
                                                Determines file type using 'magic' numbers
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>zip.exe</td>
                                            <td>Archive</td>
                                            <td>zip</td>
                                            <td>
                                                Package and compress (archive) files
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>unzip.exe</td>
                                            <td>Archive</td>
                                            <td>unzip</td>
                                            <td>
                                                Extract compressed files in a ZIP archive
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>free.exe</td>
                                            <td>System</td>
                                            <td>procps</td>
                                            <td>
                                                Display amount of free and used memory in the system
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>
                            </blockquote>
                            Note that the CYGWIN software can conflict with other non-CYGWIN
                            software on your Windows system.
                            CYGWIN provides a
                            <a href="http://cygwin.com/faq/faq.using.html" target="_blank">FAQ</a> for
                            known issues and problems, of particular interest is the
                            section on
                            <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
                                BLODA (applications that interfere with CYGWIN)</a>.
                        </blockquote>

                        <h6><a name="msys">MinGW/MSYS</a></h6> 
                        <blockquote>
                            MinGW ("Minimalist GNU for Windows") is a collection of free Windows
                            specific header files and import libraries combined with GNU toolsets that
                            allow one to produce native Windows programs that do not rely on any
                            3rd-party C runtime DLLs. MSYS is a supplement to MinGW which allows building
                            applications and programs which rely on traditional UNIX tools to
                            be present. Among others this includes tools like <code>bash</code>
                            and <code>make</code>.
                            See <a href="http://www.mingw.org/wiki/MSYS" target="_blank">MinGW/MSYS</a>
                            for more information.
                            <p>
                                Like Cygwin, MinGW/MSYS can handle different types of path formats. They
                                are internally converted to paths with forward slashes and drive letters
                                <code>&lt;drive&gt;:</code> replaced by a virtual
                                directory <code>/&lt;drive&gt;</code>.  Additionally, MSYS automatically
                                detects binaries compiled for the MSYS environment and feeds them with the
                                internal, Unix-style path names. If native Windows applications are called
                                from within MSYS programs their path arguments are automatically converted
                                back to Windows style path names with drive letters and backslashes as
                                path separators. This may cause problems for Windows applications which
                                use forward slashes as parameter separator (e.g. <code>cl /nologo /I</code>)
                                because MSYS may wrongly <a href="http://mingw.org/wiki/Posix_path_conversion">
                                    replace such parameters by drive letters</a>.
                            </p>
                            <p>
                                In addition to the tools which will be installed
                                by default, you have
                                to manually install the
                                <code>msys-zip</code> and
                                <code>msys-unzip</code> packages.
                                This can be easily done with the MinGW command line installer:
                            <blockquote> 
                                <code>mingw-get.exe install msys-zip</code>
                                <br>
                                <code>mingw-get.exe install msys-unzip</code>
                            </blockquote> 
                        </blockquote>

                    </blockquote>

                    <h5><a name="vs2010">Visual Studio 2010 Compilers</a></h5>
                    <blockquote>
                        <p>
                            The 32-bit and 64-bit OpenJDK Windows build requires
                            Microsoft Visual Studio C++ 2010 (VS2010) Professional
                            Edition or Express compiler.
                            The compiler and other tools are expected to reside
                            in the location defined by the variable
                            <code>VS100COMNTOOLS</code> which
                            is set by the Microsoft Visual Studio installer.
                        </p>
                        <p>
                            Only the C++ part of VS2010 is needed.
                            Try to let the installation go to the default 
                            install directory.
                            Always reboot your system after installing VS2010.
                            The system environment variable VS100COMNTOOLS 
                            should be
                            set in your environment.
                        </p>
                        <p>
                            Make sure that TMP and TEMP are also set 
                            in the environment
                            and refer to Windows paths that exist, 
                            like <code>C:\temp</code>,
                            not <code>/tmp</code>, not <code>/cygdrive/c/temp</code>, 
                            and not <code>C:/temp</code>.
                            <code>C:\temp</code> is just an example, 
                            it is assumed that this area is
                            private to the user, so by default 
                            after installs you should
                            see a unique user path in these variables.
                        </p>
                    </blockquote>


                </blockquote> <!-- Windows -->

                <h4><a name="macosx">Mac OS X</a></h4>
                <blockquote>
                    Make sure you get the right XCode version.
                </blockquote> <!-- Mac OS X -->

            </blockquote>

            <!-- ====================================================== -->
            <hr>
            <h3><a name="configure">Configure</a></h3>
            <blockquote>
                The basic invocation of the <code>configure</code> script
                looks like:
                <blockquote>
                    <b><code>bash ./configure [<i>options</i>]</code></b>
                </blockquote>
                This will create an output directory containing the
                "configuration" and setup an area for the build result.
                This directory typically looks like:
                <blockquote>
                    <b><code>build/linux-x64-normal-server-release</code></b>
                </blockquote>
                <code>configure</code> will try to figure out what system you are running on 
                and where all necessary build components are.
                If you have all prerequisites for building installed,
                it should find everything.
                If it fails to detect any component automatically,
                it will exit and inform you about the problem.
                When this happens, read more below in
                <a href="#configureoptions">the <code>configure</code> options</a>.
                <p>
                    Some examples:
                </p>
                <table border="1">
                    <thead>
                        <tr>
                            <th>Description</th>
                            <th>Configure Command Line</th>
                        </tr>
                    </thead>                   
                    <tbody>
                        <tr>
                            <td>Windows 32bit build with freetype specified</td>
                            <td>
                                <code>bash ./configure --with-freetype=/cygdrive/c/freetype-i586 --with-target-bits=32</code>   
                            </td>
                        </tr>
                        <tr>
                            <td>Debug 64bit Build</td>
                            <td>
                                <code>bash ./configure --enable-debug --with-target-bits=64</code>   
                            </td>
                        </tr>
                    </tbody>
                </table>

                <!-- ====================================================== -->
                <h4><a name="configureoptions">Configure Options</a></h4>
                <blockquote>
                    Complete details on all the OpenJDK <code>configure</code> options can
                    be seen with:
                    <blockquote>
                        <b><code>bash ./configure --help=short</code></b>
                    </blockquote>
                    Use <code>-help</code> to see all the <code>configure</code> options
                    available.

                    You can generate any number of different configurations,
                    e.g. debug, release, 32, 64, etc.

                    Some of the more commonly used <code>configure</code> options are:

                    <table border="1">
                        <thead>
                            <tr>
                                <th width="300">OpenJDK Configure Option</th>
                                <th>Description</th>
                            </tr>
                        </thead>                   
                        <tbody>
                            <tr>
                                <td><b><code>--enable-debug</code></b></td>
                                <td>
                                    set the debug level to fastdebug (this is a shorthand for
                                    <code>--with-debug-level=fastdebug</code>)
                                </td>
                            </tr>
                            <tr>
                                <td><b><code>--with-alsa=</code></b><i>path</i></td>
                                <td>
                                    select the location of the
                                    <a name="alsa">Advanced Linux Sound Architecture (ALSA)</a>
                                    <br>                        
                                    Version 0.9.1 or newer of the ALSA files are
                                    required for building the OpenJDK on Linux.
                                    These Linux files are usually available from an "alsa"
                                    of "libasound"
                                    development package,
                                    and it's highly recommended that you try and use
                                    the package provided by the particular version of Linux that
                                    you are using.
                                </td>
                            </tr>   
                            <tr>
                                <td><b><code>--with-boot-jdk=</code></b><i>path</i></td>
                                <td>
                                    select the <a href="#bootjdk">Bootstrap JDK</a>
                                </td>
                            </tr>                      
                            <tr>
                                <td><b><code>--with-boot-jdk-jvmargs=</code></b>"<i>args</i>"</td>
                                <td>
                                    provide the JVM options to be used to run the 
                                    <a href="#bootjdk">Bootstrap JDK</a>
                                </td>
                            </tr>
                            <tr>
                                <td><b><code>--with-cacerts=</code></b><i>path</i></td>
                                <td>
                                    select the path to the cacerts file.
                                    <br>
                                    See <a href="http://en.wikipedia.org/wiki/Certificate_Authority" target="_blank">
                                        http://en.wikipedia.org/wiki/Certificate_Authority</a>
                                    for a better understanding of the Certificate Authority (CA).
                                    A certificates file named "cacerts"
                                    represents a system-wide keystore with CA certificates. 
                                    In JDK and JRE
                                    binary bundles, the "cacerts" file contains root CA certificates from
                                    several public CAs (e.g., VeriSign, Thawte, and Baltimore).
                                    The source contain a cacerts file
                                    without CA root certificates. 
                                    Formal JDK builders will need to secure
                                    permission from each public CA and include the certificates into their
                                    own custom cacerts file. 
                                    Failure to provide a populated cacerts file
                                    will result in verification errors of a certificate chain during runtime.
                                    By default an empty cacerts file is provided and that should be
                                    fine for most JDK developers.
                                </td>
                            </tr>    
                            <tr>
                                <td><b><code>--with-cups=</code></b><i>path</i></td>
                                <td>
                                    select the CUPS install location
                                    <br>
                                    The
                                    <a name="cups">Common UNIX Printing System (CUPS) Headers</a>
                                    are required for building the 
                                    OpenJDK on Solaris and Linux.
                                    The Solaris header files can be obtained by installing 
                                    the package <strong>SFWcups</strong> from the Solaris Software
                                    Companion CD/DVD, these often will be installed into the
                                    directory <code>/opt/sfw/cups</code>.
                                    <br>
                                    The CUPS header files can always be downloaded from
                                    <a href="http://www.cups.org" target="_blank">www.cups.org</a>.
                                </td>
                            </tr>    
                            <tr>
                                <td><b><code>--with-cups-include=</code></b><i>path</i></td>
                                <td>
                                    select the CUPS include directory location
                                </td>
                            </tr>                           
                            <tr>
                                <td><b><code>--with-debug-level=</code></b><i>level</i></td>
                                <td>
                                    select the debug information level of release,
                                    fastdebug, or slowdebug
                                </td>
                            </tr>                          
                            <tr>
                                <td><b><code>--with-dev-kit=</code></b><i>path</i></td>
                                <td>
                                    select location of the compiler install or
                                    developer install location
                                </td>
                            </tr>       
                            <tr>
                                <td><b><code>--with-dxsdk=</code></b><i>path</i></td>
                                <td>
                                    select location of the Windows Direct X SDK install
                                    <br>
                                    The <a name="dxsdk">Microsoft DirectX 9.0 SDK</a>
                                    header files and libraries
                                    from the Summer 2004 edition
                                    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"). 
                                    Installation usually will set the environment variable
                                    <code>DXSDK_DIR</code> to it's install location.
                                </td>
                            </tr>       
                            <tr>
                                <td><b><code>--with-freetype=</code></b><i>path</i></td>
                                <td>
                                    select the freetype files to use.
                                    <br>
                                    Expecting the
                                    <a name="freetype">freetype</a> libraries under
                                    <code>lib/</code> and the
                                    headers under <code>include/</code>.
                                    <br>
                                    Version 2.3 or newer of FreeType is required.
                                    On Unix systems required files can be available as part of your
                                    distribution (while you still may need to upgrade them).
                                    Note that you need development version of package that 
                                    includes both the FreeType library and header files.
                                    <br>
                                    You can always download latest FreeType version from the
                                    <a href="http://www.freetype.org" target="_blank">FreeType website</a>.
                                    <br>
                                    Building the freetype 2 libraries from scratch is also possible,
                                    however on Windows refer to the
                                    <a href="http://freetype.freedesktop.org/wiki/FreeType_DLL">
                                        Windows FreeType DLL build instructions</a>.
                                    <br>
                                    Note that by default FreeType is built with byte code hinting
                                    support disabled due to licensing restrictions.
                                    In this case, text appearance and metrics are expected to
                                    differ from Sun's official JDK build.
                                    See
                                    <a href="http://freetype.sourceforge.net/freetype2/index.html">
                                        the SourceForge FreeType2 Home Page
                                    </a>
                                    for more information.
                                </td>
                            </tr>                          
                            <tr>
                                <td><b><code>--with-import-hotspot=</code></b><i>path</i></td>
                                <td>
                                    select the location to find hotspot
                                    binaries from a previous build to avoid building
                                    hotspot
                                </td>
                            </tr>                          
                            <tr>
                                <td><b><code>--with-target-bits=</code></b><i>arg</i></td>
                                <td>
                                    select 32 or 64 bit build
                                </td>
                            </tr>                           
                            <tr>
                                <td><b><code>--with-jvm-variants=</code></b><i>variants</i></td>
                                <td>
                                    select the JVM variants to build from, comma
                                    separated list that can include:
                                    server, client, kernel, zero and zeroshark
                                </td>
                            </tr>                           
                            <tr>
                                <td><b><code>--with-memory-size=</code></b><i>size</i></td>
                                <td>
                                    select the RAM size that GNU make will think
                                    this system has
                                </td>
                            </tr>                            
                            <tr>
                                <td><a name="msvcrNN"><b><code>--with-msvcr-dll=</code></b><i>path</i></a></td>
                                <td>
                                    select the <code>msvcr100.dll</code>
                                    file to include in the
                                    Windows builds (C/C++ runtime library for
                                    Visual Studio).
                                    <br>
                                    This is usually picked up automatically
                                    from the redist
                                    directories of Visual Studio 2010.
                                </td>
                            </tr>                            
                            <tr>
                                <td><b><code>--with-num-cores=</code></b><i>cores</i></td>
                                <td>
                                    select the number of cores to use (processor
                                    count or CPU count)
                                </td>
                            </tr>
                            <tr>
                                <td><b><code>--with-x=</code></b><i>path</i></td>
                                <td>
                                    select the location of the X11 and xrender files.
                                    <br>
                                    The
                                    <a name="xrender">XRender Extension Headers</a>
                                    are required for building the
                                    OpenJDK on Solaris and Linux.
                                    <br>
                                    The Linux header files are usually available from a "Xrender"
                                    development package, it's recommended that you try and use
                                    the package provided by the particular distribution of Linux that
                                    you are using.
                                    <br>
                                    The Solaris XRender header files is
                                    included with the other X11 header files
                                    in the package <strong>SFWxwinc</strong>
                                    on new enough versions of
                                    Solaris and will be installed in
                                    <code>/usr/X11/include/X11/extensions/Xrender.h</code> or
                                    <code>/usr/openwin/share/include/X11/extensions/Xrender.h</code>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </blockquote>

            </blockquote>

            <!-- ====================================================== -->
            <hr>
            <h3><a name="make">Make</a></h3>
            <blockquote>
                The basic invocation of the <code>make</code> utility
                looks like:
                <blockquote>
                    <b><code>make all</code></b>
                </blockquote>
                This will start the build to the output directory containing the
                "configuration" that was created by the <code>configure</code>
                script. Run <code>make help</code> for more information on
                the available targets.
                <br>
                There are some of the make targets that
                are of general interest:
                <table border="1">
                    <thead>
                        <tr>
                            <th>Make Target</th>
                            <th>Description</th>
                        </tr>
                    </thead>                   
                    <tbody>
                        <tr>
                            <td><i>empty</i></td>
                            <td>build everything but no images</td>
                        </tr>
                        <tr>
                            <td><b><code>all</code></b></td>
                            <td>build everything including images</td>
                        </tr>
                        <tr>
                            <td><b><code>all-conf</code></b></td>
                            <td>build all configurations</td>
                        </tr>
                        <tr>
                            <td><b><code>images</code></b></td>
                            <td>create complete j2sdk and j2re images</td>
                        </tr>
                        <tr>
                            <td><b><code>install</code></b></td>
                            <td>install the generated images locally, 
                                typically in <code>/usr/local</code></td>
                        </tr>
                        <tr>
                            <td><b><code>clean</code></b></td>
                            <td>remove all files generated by make, 
                                but not those generated by <code>configure</code></td>
                        </tr>
                        <tr>
                            <td><b><code>dist-clean</code></b></td>
                            <td>remove all files generated by both 
                                and <code>configure</code> (basically killing the configuration)</td>
                        </tr>
                        <tr>
                            <td><b><code>help</code></b></td>
                            <td>give some help on using <code>make</code>, 
                                including some interesting make targets</td>
                        </tr>
                    </tbody>
                </table>
            </blockquote>
        </blockquote>

        <!-- ====================================================== -->
        <hr>
        <h2><a name="testing">Testing</a></h2>
        <blockquote>
            When the build is completed, you should see the generated
            binaries and associated files in the <code>j2sdk-image</code> 
            directory in the output directory. 
            In particular, the 
            <code>build/<i>*</i>/images/j2sdk-image/bin</code>
            directory should contain executables for the 
            OpenJDK tools and utilities for that configuration.
            The testing tool <code>jtreg</code> will be needed
            and can be found at:
            <a href="http://openjdk.java.net/jtreg/" target="_blank">
                the jtreg site</a>.
            The provided regression tests in the repositories
            can be run with the command:
            <blockquote>
                <code><b>cd test &amp;&amp; make PRODUCT_HOME=`pwd`/../build/*/images/j2sdk-image all</b></code>
            </blockquote>
        </blockquote>

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

        <!-- ====================================================== -->
        <hr>
        <h2><a name="hints">Appendix A: Hints and Tips</a></h2>
        <blockquote>

            <h3><a name="faq">FAQ</a></h3>
            <blockquote>

                <p>
                    <b>Q:</b> The <code>configure</code> file looks horrible! 
                    How are you going to edit it?
                    <br>
                    <b>A:</b> The <code>configure</code> file is generated (think
                    "compiled") by the autoconf tools. The source code is
                    in <code>configure.ac</code> various .m4 files in common/autoconf,
                    which are
                    much more readable.
                </p>

                <p>
                    <b>Q:</b> 
                    Why is the <code>configure</code> file checked in, 
                    if it is generated?
                    <br>
                    <b>A:</b> 
                    If it was not generated, every user would need to have the autoconf 
                    tools installed, and re-generate the <code>configure</code> file
                    as the first step. 
                    Our goal is to minimize the work needed to be done by the user 
                    to start building OpenJDK, and to minimize
                    the number of external dependencies required.
                </p>

                <p>
                    <b>Q:</b>
                    Do you require a specific version of autoconf for regenerating
                    <code>configure</code>?
                    <br>
                    <b>A:</b>
                    Currently, no, but this will likely be the case when things have 
                    settled down a bit more. (The reason for this is to avoid
                    large spurious changes in <code>configure</code> 
                    in commits that made small changes to <code>configure.ac</code>).
                </p>

                <p>
                    <b>Q:</b> 
                    What are the files in <code>common/makefiles/support/*</code> for? 
                    They look like gibberish.
                    <br>
                    <b>A:</b>
                    They are a somewhat ugly hack to compensate for command line length
                    limitations on certain platforms (Windows, Solaris).
                    Due to a combination of limitations in make and the shell, 
                    command lines containing too many files will not work properly. 
                    These
                    helper files are part of an elaborate hack that will compress the
                    command line in the makefile and then uncompress it safely. 
                    We're
                    not proud of it, but it does fix the problem. 
                    If you have any better suggestions, we're all ears! :-)
                </p>

                <p>
                    <b>Q:</b> 
                    I want to see the output of the commands that make runs, 
                    like in the old build. How do I do that?
                    <br>
                    <b>A:</b> 
                    You specify the <code>LOG</code> variable to make. There are
                    several log levels:
                </p>
                <blockquote>
                    <ul>
                        <li>
                            <b><code>warn</code></b> &mdash; Default and very quiet.
                        </li>
                        <li>
                            <b><code>info</code></b> &mdash; Shows more progress information
                            than warn.
                        </li>
                        <li>
                            <b><code>debug</code></b> &mdash; Echos all command lines and
                            prints all macro calls for compilation definitions.
                        </li>
                        <li>
                            <b><code>trace</code></b> &mdash; Echos all $(shell) command
                            lines as well.
                        </li>
                    </ul>
                </blockquote>

                <p>
                    <b>Q:</b> 
                    When do I have to re-run <code>configure</code>?
                    <br>
                    <b>A:</b> 
                    Normally you will run <code>configure</code> only once for creating a 
                    configuration. 
                    You need to re-run configuration only if you want to change any
                    configuration options, 
                    or if you pull down changes to the <code>configure</code> script.
                </p>

                <p>
                    <b>Q:</b> 
                    I have added a new source file. Do I need to modify the makefiles?
                    <br>
                    <b>A:</b> 
                    Normally, no. If you want to create e.g. a new native
                    library, 
                    you will need to modify the makefiles. But for normal file
                    additions or removals, no changes are needed. There are certan
                    exceptions for some native libraries where the source files are spread
                    over many directories which also contain courses for other
                    libraries. In these cases it was simply easier to create include lists
                    rather thane excludes.
                </p>

                <p>
                    <b>Q:</b>
                    When I run <code>configure --help</code>, I see many strange options, 
                    like <code>--dvidir</code>. What is this?
                    <br>
                    <b>A:</b> 
                    Configure provides a slew of options by default, to all projects 
                    that use autoconf. Most of them are not used in OpenJDK,
                    so you can safely ignore them. To list only OpenJDK specific features, 
                    use <code>configure --help=short</code> instead.
                </p>

                <p>
                    <b>Q:</b> 
                    <code>configure</code> provides OpenJDK-specific features such as
                    <code>--enable-jigsaw</code> or <code>--with-builddeps-server</code>
                    that are not described in this document. What about those?
                    <br>
                    <b>A:</b>
                    Try them out if you like! But be aware that most of these are 
                    experimental features. 
                    Many of them don't do anything at all at the moment; the option 
                    is just a placeholder. Other depends on
                    pieces of code or infrastructure that is currently 
                    not ready for prime time.
                </p>

                <p>
                    <b>Q:</b> 
                    How will you make sure you don't break anything?
                    <br>
                    <b>A:</b> 
                    We have a script that compares the result of the new build system
                    with the result of the old. For most part, we aim for (and achieve)
                    byte-by-byte identical output. There are however technical issues 
                    with e.g. native binaries, which might differ in a byte-by-byte 
                    comparison, even
                    when building twice with the old build system. 
                    For these, we compare relevant aspects 
                    (e.g. the symbol table and file size). 
                    Note that we still don't have 100%
                    equivalence, but we're close.
                </p>

                <p>
                    <b>Q:</b> 
                    I noticed this thing X in the build that looks very broken by design. 
                    Why don't you fix it?
                    <br>
                    <b>A:</b>
                    Our goal is to produce a build output that is as close as 
                    technically possible to the old build output. 
                    If things were weird in the old build,
                    they will be weird in the new build. 
                    Often, things were weird before due to obscurity, 
                    but in the new build system the weird stuff comes up to the surface.
                    The plan is to attack these things at a later stage, 
                    after the new build system is established.
                </p>

                <p>
                    <b>Q:</b> 
                    The code in the new build system is not that well-structured.
                    Will you fix this?
                    <br>
                    <b>A:</b>
                    Yes! The new build system has grown bit by bit as we converted 
                    the old system. When all of the old build system is converted,
                    we can take a step back and clean up the structure of the new build
                    system. Some of this we plan to do before replacing the old build
                    system and some will need to wait until after.
                </p>

                <p>
                    <b>Q:</b> What is @GenerateNativeHeaders?
                    <br>
                    <b>A:</b> 
                    To speed up compilation, we added a flag to javac which makes it 
                    do the job of javah as well, as a by-product; that is, generating
                    native .h header files. These files are only generated 
                    if a class contains native methods. However, sometimes 
                    a class contains no native method,
                    but still contains constants that native code needs to use. 
                    The new GenerateNativeHeaders annotation tells javac to
                    force generation of a
                    header file in these cases. (We don't want to generate 
                    native headers for all classes that contains constants 
                    but no native methods, since
                    that would slow down the compilation process needlessly.)
                </p>

                <p>
                    <b>Q:</b> 
                    Is anything able to use the results of the new build's default make target?
                    <br>
                    <b>A:</b> 
                    Yes, this is the minimal (or roughly minimal) 
                    set of compiled output needed for a developer to actually 
                    execute the newly built JDK. The idea is that in an incremental 
                    development fashion, when doing a normal make, 
                    you should only spend time recompiling what's changed 
                    (making it purely incremental) and only do the work that's 
                    needed to actually run and test your code.
                    The packaging stuff that is part of the <code>images</code>
                    target is not needed for a normal developer who wants to
                    test his new code. Even if it's quite fast, it's still unnecessary. 
                    We're targeting sub-second incremental rebuilds! ;-) 
                    (Or, well, at least single-digit seconds...)
                </p>

                <p>
                    <b>Q:</b>
                    I usually set a specific environment variable when building, 
                    but I can't find the equivalent in the new build. 
                    What should I do?
                    <br>
                    <b>A:</b>
                    It might very well be that we have missed to add support for
                    an option that was actually used from outside the build system.
                    Email us and we will
                    add support for it!
                </p>

            </blockquote>

            <h3><a name="performance">Build Performance Tips</a></h3>
            <blockquote>

                <p>Building OpenJDK requires a lot of horsepower. 
                    Some of the build tools can be adjusted to utilize more or less
                    of resources such as
                    parallel threads and memory. 
                    The <code>configure</code> script analyzes your system and selects reasonable 
                    values for such options based on your hardware.
                    If you encounter resource problems, such as out of memory conditions, 
                    you can modify the detected values with:</p>

                <ul>
                    <li>
                        <b><code>--with-num-cores</code></b> 
                        &mdash; 
                        number of cores in the build system,
                        e.g. <code>--with-num-cores=8</code>
                    </li>
                    <li>
                        <b><code>--with-memory-size</code></b> 
                        &mdash; memory (in MB) available in the build system,
                        e.g. <code>--with-memory-size=1024</code>
                    </li>
                </ul>

                <p>It might also be necessary to specify the JVM arguments passed 
                    to the Bootstrap JDK, using e.g.
                    <code>--with-boot-jdk-jvmargs="-Xmx8G -enableassertions"</code>. 
                    Doing this will override the default JVM arguments 
                    passed to the Bootstrap JDK.</p>


                <p>One of the top goals of the new build system is to improve the
                    build performance and decrease the time needed to build. This will
                    soon also apply to the java compilation when the Smart Javac wrapper
                    is making its way into jdk8. It can be tried in the build-infra
                    repository already. You are likely to find that the new build system
                    is faster than the old one even without this feature.</p>

                <p>At the end of a successful execution of <code>configure</code>, 
                    you will get a performance summary, 
                    indicating how well the build will perform. Here you will
                    also get performance hints. 
                    If you want to build fast, pay attention to those!</p>

                <h4>Building with ccache</h4>

                <p>A simple way to radically speed up compilation of native code
                    (typically hotspot and native libraries in JDK) is to install
                    ccache. This will cache and reuse prior compilation results, if the
                    source code is unchanged. However, ccache versions prior to 3.1.4
                    does not work correctly with the precompiled headers used in
                    OpenJDK. So if your platform supports ccache at 3.1.4 or later, we
                    highly recommend installing it. This is currently only supported on
                    linux.</p> 

                <h4>Building on local disk</h4>

                <p>If you are using network shares, e.g. via NFS, for your source code, 
                    make sure the build directory is situated on local disk. 
                    The performance
                    penalty is extremely high for building on a network share, 
                    close to unusable.</p>

                <h4>Building only one JVM</h4>

                <p>The old build builds multiple JVMs on 32-bit systems (client and
                    server; and on Windows kernel as well). In the new build we have
                    changed this default to only build server when it's available. This
                    improves build times for those not interested in multiple JVMs. To
                    mimic the old behavior on platforms that support it, 
                    use <code>--with-jvm-variants=client,server</code>.</p>

                <h4>Selecting the number of cores to build on</h4>

                <p>By default, <code>configure</code> will analyze your machine and run the make
                    process in parallel with as many threads as you have cores. This
                    behavior can be overridden, either "permanently" (on a <code>configure</code>
                    basis) using <code>--with-num-cores=N</code> or for a single build
                    only (on a make basis), using <code>make JOBS=N</code>.</p>

                <p>If you want to make a slower build just this time, to save some CPU
                    power for other processes, you can run
                    e.g. <code>make JOBS=2</code>. This will force the makefiles
                    to only run 2 parallel processes, or even <code>make JOBS=1</code>
                    which will disable parallelism.</p>

                <p>If you want to have it the other way round, namely having slow 
                    builds default and override with fast if you're
                    impatient, you should call <code>configure</code> with 
                    <code>--with-num-cores=2</code>, making 2 the default. 
                    If you want to run with more
                    cores, run <code>make JOBS=8</code></p>

            </blockquote>

            <h3><a name="troubleshooting">Troubleshooting</a></h3>
            <blockquote>

                <h4>Solving build problems</h4>

                <blockquote>
                    If the build fails (and it's not due to a compilation error in 
                    a source file you've changed), the first thing you should do
                    is to re-run the build with more verbosity. 
                    Do this by adding <code>LOG=debug</code> to your make command line.
                    <br>
                    The build log (with both stdout and stderr intermingled,
                    basically the same as you see on your console) can be found as
                    <code>build.log</code> in your build directory.
                    <br>
                    You can ask for help on build problems with the new build system 
                    on either the
                    <a href="http://mail.openjdk.java.net/mailman/listinfo/build-dev">
                        build-dev</a>
                    or the
                    <a href="http://mail.openjdk.java.net/mailman/listinfo/build-infra-dev">
                        build-infra-dev</a>
                    mailing lists. Please include the relevant parts
                    of the build log.
                    <br>
                    A build can fail for any number of reasons. 
                    Most failures
                    are a result of trying to build in an environment in which all the
                    pre-build requirements have not been met. 
                    The first step in
                    troubleshooting a build failure is to recheck that you have satisfied
                    all the pre-build requirements for your platform.
                    Scanning the <code>configure</code> log is a good first step, making
                    sure that what it found makes sense for your system.
                    Look for strange error messages or any difficulties that
                    <code>configure</code> had in finding things.
                    <br>
                    Some of the more common problems with builds are briefly
                    described
                    below, with suggestions for remedies.
                    <ul>
                        <li>
                            <b>Corrupted Bundles on Windows:</b>
                            <blockquote>
                                Some virus scanning software has been known to 
                                corrupt the
                                downloading of zip bundles.
                                It may be necessary to disable the 'on access' or 
                                'real time'
                                virus scanning features to prevent this corruption.
                                This type of "real time" virus scanning can also 
                                slow down the
                                build process significantly.
                                Temporarily disabling the feature, or excluding the build
                                output directory may be necessary to get correct and
                                faster builds.
                            </blockquote>
                        </li>
                        <li>
                            <b>Slow Builds:</b>
                            <blockquote>
                                If your build machine seems to be overloaded from too many
                                simultaneous C++ compiles, try setting the 
                                <code>JOBS=1</code> on the <code>make</code> command line.
                                Then try increasing the count slowly to an acceptable
                                level for your system. Also:
                                <blockquote>
                                    Creating the javadocs can be very slow, 
                                    if you are running
                                    javadoc, consider skipping that step.
                                    <br>
                                    Faster CPUs, more RAM, and a faster DISK usually helps.
                                    The VM build tends to be CPU intensive 
                                    (many C++ compiles),
                                    and the rest of the JDK will often be disk intensive.
                                    <br>
                                    Faster compiles are possible using a tool called
                                    <a href="http://ccache.samba.org/" target="_blank">ccache</a>.
                                </blockquote>
                            </blockquote>
                        </li>
                        <li>
                            <b>File time issues:</b>
                            <blockquote>
                                If you see warnings that refer to file time stamps, e.g.
                                <blockquote>
                                    <i>Warning message:</i><code> 
                                        File `xxx' has modification time in
                                        the future.</code>
                                    <br>
                                    <i>Warning message:</i> <code> Clock skew detected. 
                                        Your build may
                                        be incomplete.</code>
                                </blockquote>
                                These warnings can occur when the clock on the build 
                                machine is out of
                                sync with the timestamps on the source files. 
                                Other errors, apparently
                                unrelated but in fact caused by the clock skew, 
                                can occur along with
                                the clock skew warnings. 
                                These secondary errors may tend to obscure the
                                fact that the true root cause of the problem 
                                is an out-of-sync clock.
                                <p>
                                    If you see these warnings, reset the clock on the
                                    build
                                    machine, run "<code><i>gmake</i> clobber</code>" 
                                    or delete the directory
                                    containing the build output, and restart the 
                                    build from the beginning.
                            </blockquote>
                        </li>
                        <li>
                            <b>Error message: 
                                <code>Trouble writing out table to disk</code></b>
                            <blockquote>
                                Increase the amount of swap space on your build machine.
                                This  could be caused by overloading the system and
                                it may be necessary to use:
                                <blockquote>
                                    <code>make JOBS=1</code>
                                </blockquote>
                                to reduce the load on the system.
                            </blockquote>
                        </li>
                        <li>
                            <b>Error Message: 
                                <code>libstdc++ not found:</code></b>
                            <blockquote>
                                This is caused by a missing libstdc++.a library.
                                This is installed as part of a specific package
                                (e.g. libstdc++.so.devel.386).
                                By default some 64-bit Linux versions (e.g. Fedora)
                                only install the 64-bit version of the libstdc++ package.
                                Various parts of the JDK build require a static
                                link of the C++ runtime libraries to allow for maximum
                                portability of the built images.
                            </blockquote>
                        </li>
                        <li>
                            <b>Linux Error Message:
                                <code>cannot restore segment prot after reloc</code></b>
                            <blockquote>
                                This is probably an issue with SELinux (See
                                <a href="http://en.wikipedia.org/wiki/SELinux" target="_blank">
                                    http://en.wikipedia.org/wiki/SELinux</a>).
                                Parts of the VM is built without the <code>-fPIC</code> for
                                performance reasons.
                                <p>
                                    To completely disable SELinux:
                                <ol>
                                    <li><code>$ su root</code></li>
                                    <li><code># system-config-securitylevel</code></li>
                                    <li><code>In the window that appears, select the SELinux tab</code></li>
                                    <li><code>Disable SELinux</code></li>
                                </ol>
                                <p>
                                    Alternatively, instead of completely disabling it you could
                                    disable just this one check.
                                <ol>
                                    <li>Select System->Administration->SELinux Management</li>
                                    <li>In the SELinux Management Tool which appears,
                                        select "Boolean" from the menu on the left</li>
                                    <li>Expand the "Memory Protection" group</li>
                                    <li>Check the first item, labeled
                                        "Allow all unconfined executables to use 
                                        libraries requiring text relocation ..."</li>
                                </ol>
                            </blockquote>
                        </li>
                        <li>
                            <b>Windows Error Messages:</b>
                            <br>
                            <code>*** fatal error - couldn't allocate heap, ... </code>
                            <br>
                            <code>rm fails with "Directory not empty"</code>
                            <br>
                            <code>unzip fails with "cannot create ... Permission denied"</code>
                            <br>
                            <code>unzip fails with "cannot create ... Error 50"</code>
                            <br>
                            <blockquote>
                                The CYGWIN software can conflict with other non-CYGWIN
                                software. See the CYGWIN FAQ section on
                                <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
                                    BLODA (applications that interfere with CYGWIN)</a>.
                            </blockquote>
                        </li>
                        <li>
                            <b>Windows Error Message: <code>spawn failed</code></b>
                            <blockquote>
                                Try rebooting the system, or there could be some kind of
                                issue with the disk or disk partition being used.
                                Sometimes it comes with a "Permission Denied" message.
                            </blockquote>
                        </li>
                    </ul>
                </blockquote>

            </blockquote> <!-- Troubleshooting -->

        </blockquote> <!-- Appendix A -->

        <!-- ====================================================== -->
        <hr>
        <h2><a name="gmake">Appendix B: GNU make</a></h2>
        <blockquote>

            The Makefiles in the OpenJDK are only valid when used with the 
            GNU version of the utility command <code>make</code>
            (usually called <code>gmake</code> on Solaris).
            A few notes about using GNU make:
            <ul>
                <li>
                    You need GNU make version 3.81 or newer.
                    If the GNU make utility on your systems is not
                    3.81 or newer,
                    see <a href="#buildgmake">"Building GNU make"</a>.
                </li>
                <li>
                    Place the location of the GNU make binary in the
                    <code>PATH</code>. 
                </li>
                <li>
                    <strong>Solaris:</strong>
                    Do NOT use <code>/usr/bin/make</code> on Solaris.
                    If your Solaris system has the software
                    from the Solaris Developer Companion CD installed, 
                    you should try and use <code>gmake</code>
                    which will be located in either the
                    <code>/usr/bin</code>, <code>/opt/sfw/bin</code> or 
                    <code>/usr/sfw/bin</code> directory.
                </li>
                <li>
                    <strong>Windows:</strong>
                    Make sure you start your build inside a bash shell.
                </li>
                <li>
                    <strong>Mac OS X:</strong>
                    The XCode "command line tools" must be installed on your Mac.
                </li>
            </ul>
            <p>
                Information on GNU make, and access to ftp download sites, are
                available on the
                <a href="http://www.gnu.org/software/make/make.html" target="_blank">
                    GNU make web site
                </a>.
                The latest source to GNU make is available at
                <a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
                    ftp.gnu.org/pub/gnu/make/</a>.
            </p>

            <h3><a name="buildgmake">Building GNU make</a></h3>
            <blockquote>
                First step is to get the GNU make 3.81 or newer source from
                <a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
                    ftp.gnu.org/pub/gnu/make/</a>.
                Building is a little different depending on the OS but is
                basically done with:
                <blockquote>
                    <code>bash ./configure</code>
                    <br>
                    <code>make</code>
                </blockquote>
            </blockquote>

        </blockquote> <!-- Appendix B -->

        <!-- ====================================================== -->
        <hr>
        <h2><a name="buildenvironments">Appendix C: Build Environments</a></h2>
        <blockquote>

            <h3><a name="MBE">Minimum Build Environments</a></h3>
            <blockquote>
                This file often describes specific requirements for what we 
                call the
                "minimum build environments" (MBE) for this 
                specific release of the JDK.
                What is listed below is what the Oracle Release
                Engineering Team will use to build the Oracle JDK product.
                Building with the MBE will hopefully generate the most compatible
                bits that install on, and run correctly on, the most variations
                of the same base OS and hardware architecture.
                In some cases, these represent what is often called the
                least common denominator, but each Operating System has different
                aspects to it.
                <p>
                    In all cases, the Bootstrap JDK version minimum is critical,
                    we cannot guarantee builds will work with older Bootstrap JDK's.
                    Also in all cases, more RAM and more processors is better,
                    the minimums listed below are simply recommendations.
                <p>
                    With Solaris and Mac OS X, the version listed below is the
                    oldest release we can guarantee builds and works, and the
                    specific version of the compilers used could be critical.
                <p>
                    With Windows the critical aspect is the Visual Studio compiler
                    used, which due to it's runtime, generally dictates what Windows
                    systems can do the builds and where the resulting bits can
                    be used.<br>
                    <b>NOTE: We expect a change here off these older Windows OS releases
                        and to a 'less older' one, probably Windows 2008R2 X64.</b>
                <p>
                    With Linux, it was just a matter of picking a
                    stable distribution that is a good representative for Linux
                    in general.<br>
                    <b>NOTE: We expect a change here from Fedora 9 to something else,
                        but it has not been completely determined yet, possibly
                        Ubuntu 12.04 X64, unbiased community feedback would be welcome on
                        what a good choice would be here.</b>
                <p>
                    It is understood that most developers will NOT be using these 
                    specific versions, and in fact creating these specific versions
                    may be difficult due to the age of some of this software.
                    It is expected that developers are more often using the more
                    recent releases and distributions of these operating systems.
                <p>
                    Compilation problems with newer or different C/C++ compilers is a
                    common problem.
                    Similarly, compilation problems related to changes to the
                    <code>/usr/include</code> or system header files is also a
                    common problem with older, newer, or unreleased OS versions.
                    Please report these types of problems as bugs so that they
                    can be dealt with accordingly.
                </p>
                <table border="1">
                    <thead>
                        <tr>
                            <th>Base OS and Architecture</th>
                            <th>OS</th>
                            <th>C/C++ Compiler</th>
                            <th>Bootstrap JDK</th>
                            <th>Processors</th>
                            <th>RAM Minimum</th>
                            <th>DISK Needs</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>Linux X86 (32-bit) and X64 (64-bit)</td>
                            <td>Fedora 9</td>
                            <td>gcc 4.3 </td>
                            <td>JDK 7u7</td>
                            <td>2 or more</td>
                            <td>1 GB</td>
                            <td>6 GB</td>
                        </tr>
                        <tr>
                            <td>Solaris SPARC (32-bit) and SPARCV9 (64-bit)</td>
                            <td>Solaris 10 Update 6</td>
                            <td>Studio 12 Update 1 + patches</td>
                            <td>JDK 7u7</td>
                            <td>4 or more</td>
                            <td>4 GB</td>
                            <td>8 GB</td>
                        </tr>
                        <tr>
                            <td>Solaris X86 (32-bit) and X64 (64-bit)</td>
                            <td>Solaris 10 Update 6</td>
                            <td>Studio 12 Update 1 + patches</td>
                            <td>JDK 7u7</td>
                            <td>4 or more</td>
                            <td>4 GB</td>
                            <td>8 GB</td>
                        </tr>
                        <tr>
                            <td>Windows X86 (32-bit)</td>
                            <td>Windows XP</td>
                            <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
                            <td>JDK 7u7</td>
                            <td>2 or more</td>
                            <td>2 GB</td>
                            <td>6 GB</td>
                        </tr>
                        <tr>
                            <td>Windows X64 (64-bit)</td>
                            <td>Windows Server 2003 - Enterprise x64 Edition</td>
                            <td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
                            <td>JDK 7u7</td>
                            <td>2 or more</td>
                            <td>2 GB</td>
                            <td>6 GB</td>
                        </tr>
                        <tr>
                            <td>Mac OS X X64 (64-bit)</td>
                            <td>Mac OS X 10.7 "Lion"</td>
                            <td>XCode 4.5.2 or newer</td>
                            <td>JDK 7u7</td>
                            <td>2 or more</td>
                            <td>4 GB</td>
                            <td>6 GB</td>
                        </tr>
                    </tbody>
                </table>
            </blockquote>

            <!-- ====================================================== -->
            <hr>
            <h3><a name="SDBE">Specific Developer Build Environments</a></h3>
            <blockquote>
                We won't be listing all the possible environments, but
                we will try to provide what information we have available to us.
                <p>
                    <strong>NOTE: The community can help out by updating
                        this part of the document.
                    </strong>

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


                <h4><a name="centos">CentOS 5.5</a></h4>
                <blockquote>
                    After installing
                    <a href="http://www.centos.org/">CentOS 5.5</a>
                    you need to make sure you have
                    the following Development bundles installed:
                    <blockquote>
                        <ul>
                            <li>Development Libraries</li>
                            <li>Development Tools</li>
                            <li>Java Development</li>
                            <li>X Software Development (Including XFree86-devel)</li>
                        </ul>
                    </blockquote>
                    <p>
                        Plus the following packages:
                    <blockquote>
                        <ul>
                            <li>cups devel: Cups Development Package</li>
                            <li>alsa devel: Alsa Development Package</li>
                            <li>Xi devel: libXi.so Development Package</li>
                        </ul>
                    </blockquote>
                    <p>
                        The freetype 2.3 packages don't seem to be available,
                        but the freetype 2.3 sources can be downloaded, built,
                        and installed easily enough from
                        <a href="http://downloads.sourceforge.net/freetype">
                            the freetype site</a>.
                        Build and install with something like:
                    <blockquote>
                        <code>bash ./configure</code>
                        <br>
                        <code>make</code>
                        <br>
                        <code>sudo -u root make install</code>
                    </blockquote>
                    <p>
                        Mercurial packages could not be found easily, but a Google
                        search should find ones, and they usually include Python if
                        it's needed.
                </blockquote>

                <h4><a name="debian">Debian 5.0 (Lenny)</a></h4>
                <blockquote>
                    After installing <a href="http://debian.org">Debian</a> 5 
                    you need to install several build dependencies. 
                    The simplest way to install the build dependencies is to 
                    execute the following commands as user <code>root</code>:
                    <blockquote>
                        <code>aptitude build-dep openjdk-7</code>
                        <br>
                        <code>aptitude install openjdk-7-jdk libmotif-dev</code>
                    </blockquote>
                    <p>
                        In addition, it's necessary to set a few environment 
                        variables for the build:
                    <blockquote>
                        <code>export LANG=C</code>
                        <br>
                        <code>export PATH="/usr/lib/jvm/java-7-openjdk/bin:${PATH}"</code>
                    </blockquote>
                </blockquote>

                <h4><a name="ubuntu">Ubuntu 12.04</a></h4>
                <blockquote>                       
                    After installing <a href="http://ubuntu.org">Ubuntu</a> 12.04 
                    you need to install several build dependencies. The simplest
                    way to do it is to execute the following commands:
                    <blockquote>
                        <code>sudo aptitude build-dep openjdk-7</code>
                        <br>
                        <code>sudo aptitude install openjdk-7-jdk</code>
                    </blockquote>
                    <p>
                        In addition, it's necessary to set a few environment 
                        variables for the build:
                    <blockquote>
                        <code>export LANG=C</code>
                        <br>
                        <code>export PATH="/usr/lib/jvm/java-7-openjdk/bin:${PATH}"</code>
                    </blockquote>
                </blockquote>

                <h4><a name="opensuse">OpenSUSE 11.1</a></h4>
                <blockquote>
                    After installing <a href="http://opensuse.org">OpenSUSE</a> 11.1 
                    you need to install several build dependencies. 
                    The simplest way to install the build dependencies is to 
                    execute the following commands:
                    <blockquote>
                        <code>sudo zypper source-install -d java-1_7_0-openjdk</code>
                        <br>
                        <code>sudo zypper install make</code>
                    </blockquote>
                    <p>
                        In addition, it is necessary to set a few environment 
                        variables for the build:
                    <blockquote>
                        <code>export LANG=C</code>
                        <br>
                        <code>export PATH="/usr/lib/jvm/java-1.7.0-openjdk/bin:$[PATH}"</code>
                    </blockquote>
                    <p>
                        Finally, you need to unset the <code>JAVA_HOME</code> 
                        environment variable:
                    <blockquote>
                        <code>export -n JAVA_HOME</code>
                    </blockquote>
                </blockquote>

                <h4><a name="mandriva">Mandriva Linux One 2009 Spring</a></h4>
                <blockquote>
                    After installing <a href="http://mandriva.org">Mandriva</a>
                    Linux One 2009 Spring 
                    you need to install several build dependencies. 
                    The simplest way to install the build dependencies is to 
                    execute the following commands as user <code>root</code>:
                    <blockquote>
                        <code>urpmi java-1.7.0-openjdk-devel make gcc gcc-c++ 
                            freetype-devel zip unzip libcups2-devel libxrender1-devel
                            libalsa2-devel libstc++-static-devel libxtst6-devel 
                            libxi-devel</code>
                    </blockquote>
                    <p>
                        In addition, it is necessary to set a few environment 
                        variables for the build:
                    <blockquote>
                        <code>export LANG=C</code>
                        <br>
                        <code>export PATH="/usr/lib/jvm/java-1.7.0-openjdk/bin:${PATH}"</code>
                    </blockquote>
                </blockquote>

                <h4><a name="opensolaris">OpenSolaris 2009.06</a></h4>
                <blockquote>
                    After installing <a href="http://opensolaris.org">OpenSolaris</a> 2009.06 
                    you need to install several build dependencies. 
                    The simplest way to install the build dependencies is to 
                    execute the following commands:
                    <blockquote>
                        <code>pfexec pkg install SUNWgmake SUNWj7dev 
                            sunstudioexpress SUNWcups SUNWzip SUNWunzip SUNWxwhl 
                            SUNWxorg-headers SUNWaudh SUNWfreetype2</code>
                    </blockquote>
                    <p>
                        In addition, it is necessary to set a few environment 
                        variables for the build:
                    <blockquote>
                        <code>export LANG=C</code>
                        <br>
                        <code>export PATH="/opt/SunStudioExpress/bin:${PATH}"</code>
                    </blockquote>
                </blockquote>

            </blockquote>

        </blockquote> <!-- Appendix C -->

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

        <!-- Leave out Appendix D --

<hr>
<h2><a name="mapping">Appendix D: Mapping Old to New</a></h2>
<blockquote>
    <p>This table will help you convert some idioms of the old build
        system to the new build system.</p>
    <table summary="Cheat sheet for converting from old to new build system">
        <tr valign="top">
            <th>In the old build system, you used to...</th>
            <th>In the new build system, you should ...</th>
        </tr>
        <tr valign="top">
            <td>run <code>make sanity</code></td>
            <td>run <code>bash ./configure</code></td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_OUTPUTDIR=build/my-special-output</code></td>
            <td>before building the first time:
                <br>
                <code>cd build/my-special-output</code>
                <br>
                <code>bash ../../configure</code>
                <br>
                to build:
                <br>
                <code>cd build/my-special-output</code>
                <br>
                <code>make</code>
            </td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_BOOTDIR=/opt/java/jdk7</code></td>
            <td>run <code>configure --with-boot-jdk=/opt/java/jdk7</code></td>
        </tr>
        <tr valign="top">
            <td>run <code>make ARCH_DATA_MODEL=32</code></td>
            <td>run <code>configure --with-target-bits=32</code></td>
        </tr>
        <tr valign="top">
            <td>set <code>BUILD_CLIENT_ONLY=true</code></td>
            <td>run <code>configure --with-jvm-variants=client</code></td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_FREETYPE_LIB_PATH=/opt/freetype/lib</code> 
                and <code>ALT_FREETYPE_HEADERS_PATH=/opt/freetype/include</code></td>
            <td>run <code>configure --with-freetype=/opt/freetype</code></td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_CUPS_HEADERS_PATH=/opt/cups/include</code></td>
            <td>run <code>configure --with-cups=/opt/cups</code></td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_OPENWIN_HOME=/opt/X11R6</code></td>
            <td>run <code>configure --with-x=/opt/X11R6</code></td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_MSVCRNN_DLL_PATH=c:/vc_redist</code></td>
            <td>run <code>configure --with-msvcr100dll=/cygdrive/c/vc_redist</code></td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_COMPILER_PATH=/opt/my-gcc/bin/gcc</code></td>
            <td>run <code>CC=/opt/my-gcc/bin/gcc configure</code> 
                or <code>CXX=/opt/my-gcc/bin/g++ configure</code>
            </td>
        </tr>
        <tr valign="top">
            <td>set <code>BUILD_HEADLESS_ONLY=true</code></td>
            <td>run <code>configure --disable-headful</code></td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_DEVTOOLS_PATH=/opt/mytools</code></td>
            <td>just run <code>configure</code>, 
                your tools should be detected automatically. 
                If you have an unusual configuration, 
                add the tools directory to your <code>PATH</code>.
            </td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_DROPS_DIR=/home/user/dropdir</code></td>
            <td>source drops are not used anymore</td>
        </tr>
        <tr valign="top">
            <td>set <code>USE_ONLY_BOOTDIR_TOOLS=true</code></td>
            <td>not needed, <code>configure</code> should always do the Right Thing automatically</td>
        </tr>
        <tr valign="top">
            <td>set <code>ALT_JDK_IMPORT_PATH=/opt/java/import-jdk</code>
                or <code>ALT_BUILD_JDK_IMPORT_PATH=/opt/java/import-jdk</code>
            </td>
            <td>Importing JDKs is no longer possible, 
                but hotspot can be imported using 
                <code>--with-import-hotspot</code>. 
                Documentation on how to achieve a 
                similar solution will come soon!
            </td>
        </tr>
        <tr valign="top">
            <td>set <code>EXTRA_CFLAGS=-Xfoo</code></td>
            <td>run <code>CFLAGS=-Xfoo configure</code></td>
        </tr>
        <tr valign="top">
            <td>set <code>CROSS_COMPILE_ARCH=i586</code></td>
            <td>see <a href="#sec7.3"> section 7.3, Cross-compilation</a></td>
        </tr>
        <tr valign="top">
            <td>set <code>SKIP_BOOT_CYCLE=false</code></td>
            <td>Run <code>make bootcycle-images</code>.</td>
        </tr>
    </table>

    <h3><a name="variables">Environment/Make Variables</a></h3>
    <p>
        Some of the
        environment or make variables (just called <b>variables</b> in this
        document) that can impact the build are:
    <blockquote>
        <dl>
            <dt><a name="path"><code>PATH</code></a> </dt>
            <dd>Typically you want to set the <code>PATH</code> to include:
                <ul>
                    <li>The location of the GNU make binary</li>
                    <li>The location of the Bootstrap JDK <code>java</code> 
                        (see <a href="#bootjdk">Bootstrap JDK</a>)</li>
                    <li>The location of the C/C++ compilers 
                        (see <a href="#compilers"><code>compilers</code></a>)</li>
                    <li>The location or locations for the Unix command utilities
                        (e.g. <code>/usr/bin</code>)</li>
                </ul>
            </dd>
            <dt><code>MILESTONE</code> </dt>
            <dd>
                The milestone name for the build (<i>e.g.</i>"beta"). 
                The default value is "internal".
            </dd>
            <dt><code>BUILD_NUMBER</code> </dt>
            <dd>
                The build number for the build (<i>e.g.</i> "b27"). 
                The default value is "b00".
            </dd>
            <dt><a name="arch_data_model"><code>ARCH_DATA_MODEL</code></a></dt>
            <dd>The <code>ARCH_DATA_MODEL</code> variable
                is used to specify whether the build is to generate 32-bit or 64-bit
                binaries. 
                The Solaris build supports either 32-bit or 64-bit builds, but
                Windows and Linux will support only one, depending on the specific
                OS being used.
                Normally, setting this variable is only necessary on Solaris.
                Set <code>ARCH_DATA_MODEL</code> to <code>32</code> for generating 32-bit binaries, 
                or to <code>64</code> for generating 64-bit binaries.
            </dd>
            <dt><a name="ALT_BOOTDIR"><code>ALT_BOOTDIR</code></a></dt>
            <dd>
                The location of the bootstrap JDK installation. 
                See <a href="#bootjdk">Bootstrap JDK</a> for more information.
                You should always install your own local Bootstrap JDK and
                always set <code>ALT_BOOTDIR</code> explicitly.
            </dd>
            <dt><a name="ALT_OUTPUTDIR"><code>ALT_OUTPUTDIR</code></a> </dt>
            <dd>
                An override for specifying the (absolute) path of where the
                build output is to go.
                The default output directory will be build/<i>platform</i>.
            </dd>
            <dt><a name="ALT_COMPILER_PATH"><code>ALT_COMPILER_PATH</code></a> </dt>
            <dd>
                The location of the C/C++ compiler.
                The default varies depending on the platform. 
            </dd>
            <dt><code><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></code></dt>
            <dd>
                The location of the <a href="#cacerts">cacerts</a> file.
                The default will refer to 
                <code>jdk/src/share/lib/security/cacerts</code>.
            </dd>
            <dt><a name="ALT_CUPS_HEADERS_PATH"><code>ALT_CUPS_HEADERS_PATH</code></a> </dt>
            <dd>
                The location of the CUPS header files.
                See <a href="#cups">CUPS information</a> for more information.
                If this path does not exist the fallback path is 
                <code>/usr/include</code>.
            </dd>
            <dt><a name="ALT_FREETYPE_LIB_PATH"><code>ALT_FREETYPE_LIB_PATH</code></a></dt>
            <dd>
                The location of the FreeType shared library. 
                See <a href="#freetype">FreeType information</a> for details. 
            </dd>
            <dt><a name="ALT_FREETYPE_HEADERS_PATH"><code>ALT_FREETYPE_HEADERS_PATH</code></a></dt>
            <dd>
                The location of the FreeType header files.
                See <a href="#freetype">FreeType information</a> for details. 
            </dd>
            <dt><a name="ALT_JDK_DEVTOOLS_PATH"><code>ALT_JDK_DEVTOOLS_PATH</code></a></dt>
            <dd>
                The default root location of the devtools.
                The default value is 
                <code>$(ALT_SLASH_JAVA)/devtools</code>.
            </dd>
            <dt><code><a name="ALT_DEVTOOLS_PATH">ALT_DEVTOOLS_PATH</a></code> </dt>
            <dd>
                The location of tools like the 
                <a href="#zip"><code>zip</code> and <code>unzip</code></a>
                binaries, but might also contain the GNU make utility
                (<code><i>gmake</i></code>).
                So this area is a bit of a grab bag, especially on Windows.
                The default value depends on the platform and
                Unix Commands being used.
                On Linux the default will be 
                <code>$(ALT_JDK_DEVTOOLS_PATH)/linux/bin</code>, 
                on Solaris
                <code>$(ALT_JDK_DEVTOOLS_PATH)/<i>{sparc,i386}</i>/bin</code>, 
                and on Windows with CYGWIN
                <code>/usr/bin</code>.
            </dd>
            <dt><a name="ALT_UNIXCCS_PATH"><code>ALT_UNIXCCS_PATH</code></a></dt>
            <dd>
                <strong>Solaris only:</strong>
                An override for specifying where the Unix CCS
                command set are located.
                The default location is <code>/usr/ccs/bin</code> 
            </dd>
            <dt><a name="ALT_SLASH_JAVA"><code>ALT_SLASH_JAVA</code></a></dt>
            <dd>
                The default root location for many of the ALT path locations
                of the following ALT variables.
                The default value is 
                <code>"/java"</code> on Solaris and Linux, 
                <code>"J:"</code> on Windows.
            </dd>

            <dt><a name="ALT_OPENWIN_HOME"><code>ALT_OPENWIN_HOME</code></a></dt>
            <dd>
                The top-level directory of the libraries and include files 
                for the platform's 
                graphical programming environment. 
                The default location is platform specific. 
                For example, on Linux it defaults to <code>/usr/X11R6/</code>.
            </dd>
            <dt><strong>Windows specific:</strong></dt>
            <dd>
                <dl>
                    <dt><a name="ALT_WINDOWSSDKDIR"><code>ALT_WINDOWSSDKDIR</code></a> </dt>
                    <dd>
                        The location of the 
                        Microsoft Windows SDK where some tools will be
                        located.
                        The default is whatever WINDOWSSDKDIR is set to
                        (or WindowsSdkDir) or the path
                        <br>
                        <code>c:\Program Files\Microsoft SDKs\Windows\v7.0a</code>
                    </dd>
                    <dt><code><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></code> </dt>
                    <dd>
                        The location of the 
                        <a href="#dxsdk">Microsoft DirectX 9 SDK</a>.
                        The default will be to try and use the DirectX environment
                        variable <code>DXSDK_DIR</code>,
                        failing that, look in <code>C:/DXSDK</code>.
                    </dd>
                    <dt><code><a name="ALT_MSVCRNN_DLL_PATH">ALT_MSVCRNN_DLL_PATH</a></code> </dt>
                    <dd>
                        The location of the 
                        <a href="#msvcrNN"><code>MSVCR100.DLL</code></a>. 
                    </dd>
                </dl>
            </dd>
            <dt><strong>Cross-Compilation Support:</strong></dt>
            <dd>
                <dl>
                    <dt><a name="CROSS_COMPILE_ARCH"><code>CROSS_COMPILE_ARCH</code></a> </dt>
                    <dd>
                        Set to the target architecture of a 
                        cross-compilation build. If set, this
                        variable is used to signify that we are 
                        cross-compiling. The expectation
                        is that
                        <a href="#ALT_COMPILER_PATH"><code>ALT_COMPILER_PATH</code></a> 
                        is set
                        to point to the cross-compiler and that any
                        cross-compilation specific flags
                        are passed using 
                        <a href="#EXTRA_CFLAGS"><code>EXTRA_CFLAGS</code></a>.
                        The <a href="#ALT_OPENWIN_HOME"><code>ALT_OPENWIN_HOME</code></a>
                        variable should 
                        also be set to point to the graphical header files
                        (e.g. X11) provided with 
                        the cross-compiler.
                        When cross-compiling we skip execution of any demos 
                        etc that may be built, and
                        also skip binary-file verification.
                    </dd>
                    <dt><code><a name="EXTRA_CFLAGS">EXTRA_CFLAGS</a></code> </dt>
                    <dd>
                        Used to pass cross-compilation options to the 
                        cross-compiler.
                        These are added to the <code>CFLAGS</code> 
                        and <code>CXXFLAGS</code> variables. 
                    </dd>
                    <dt><code><a name="USE_ONLY_BOOTDIR_TOOLS">USE_ONLY_BOOTDIR_TOOLS</a></code> </dt>
                    <dd>
                        Used primarily for cross-compilation builds
                        (and always set in that case)
                        this variable indicates that tools from the
                        boot JDK should be used during
                        the build process, not the tools
                        (<code>javac</code>, <code>javah</code>, <code>jar</code>)
                        just built (which can't execute on the build host).
                    </dd>
                    <dt><code><a name="HOST_CC">HOST_CC</a></code> </dt>
                    <dd>
                        The location of the C compiler to generate programs 
                        to run on the build host.
                        Some parts of the build generate programs that are
                        then compiled and executed
                        to produce other parts of the build. Normally the 
                        primary C compiler is used
                        to do this, but when cross-compiling that would be
                        the cross-compiler and the
                        resulting program could not be executed. 
                        On Linux this defaults to <code>/usr/bin/gcc</code>; 
                        on other platforms it must be
                        set explicitly.
                    </dd>
                </dl>
            <dt><strong>Specialized Build Options:</strong></dt>
            <dd>
                Some build variables exist to support specialized build 
                environments and/or specialized
                build products. Their use is only supported in those contexts:
                <dl>
                    <dt><code><a name="BUILD_CLIENT_ONLY">BUILD_CLIENT_ONLY</a></code> </dt>
                    <dd>
                        Indicates this build will only contain the 
                        Hotspot client VM. In addition to
                        controlling the Hotspot build target, 
                        it ensures that we don't try to copy
                        any server VM files/directories, 
                        and defines a default <code>jvm.cfg</code> file
                        suitable for a client-only environment. 
                        Using this in a 64-bit build will
                        generate a sanity warning as 64-bit client 
                        builds are not directly supported.
                    </dd>
                    <dt><code><a name="BUILD_HEADLESS_ONLY"></a>BUILD_HEADLESS_ONLY</code> </dt>
                    <dd>
                        Used when the build environment has no graphical 
                        capabilities at all. This
                        excludes building anything that requires graphical 
                        libraries to be available.
                    </dd>
                    <dt><code><a name="JAVASE_EMBEDDED"></a>JAVASE_EMBEDDED</code> </dt>
                    <dd>
                        Used to indicate this is a build of the Oracle 
                        Java SE Embedded product. 
                        This will enable the directives included in the 
                        SE-Embedded specific build 
                        files.
                    </dd>
                    <dt><code><a name="LIBZIP_CAN_USE_MMAP">LIBZIP_CAN_USE_MMAP</a></code> </dt>
                    <dd>
                        If set to false, disables the use of mmap by the
                        zip utility. Otherwise,
                        mmap will be used.
                    </dd>
                    <dt><code><a name="COMPRESS_JARS"></a>COMPRESS_JARS</code> </dt>
                    <dd>
                        If set to true, causes certain jar files that 
                        would otherwise be built without
                        compression, to use compression.
                    </dd>
                </dl>
            </dd>
        </dl>
    </blockquote>

</blockquote> <!-- Appendix D -->

        <!-- ====================================================== -->
        <hr>
        <p>End of OpenJDK README-builds.html document.<br>Please come again!
        <hr>

    </body>
</html>
