<!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>
                        <br>
                        All OpenJDK builds require access to a previously released
                        JDK, this is often called a bootstrap JDK.
                        Currently, for this JDK release we require
                        JDK 7 Update 7 or newer.
                        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>
