<!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/jdk9/jdk9
                        <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 its 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>
                        <tr>
                            <td>
                                nashorn
                            </td>
                            <td>
                                source code for the OpenJDK JavaScript implementation
                            </td>
                        </tr>
                    </tbody>
                </table>
            </blockquote>

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

        </blockquote>

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

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

                        <b><i>Building JDK 9 requires JDK 8. JDK 9
                        developers should not use JDK 9 as the boot
                        JDK, to ensure that JDK 9 dependencies are
                        not introduced into the parts of the system
                        that are built with JDK 8.</i></b>

                        <br>&nbsp;<br>
                        The JDK 8 binaries can be downloaded from Oracle's 
                        <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"
                           target="_blank">JDK 8 download site</a>.
                        For build performance reasons it
                        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>
                        Ensure 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>
                                </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-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>generated-configure.sh</code> file looks horrible! 
                    How are you going to edit it?
                    <br>
                    <b>A:</b> The <code>generated-configure.sh</code> file is generated (think
                    "compiled") by the autoconf tools. The source code is
                    in <code>configure.ac</code> and various .m4 files in common/autoconf,
                    which are much more readable.
                </p>

                <p>
                    <b>Q:</b> 
                    Why is the <code>generated-configure.sh</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>generated-configure.sh</code>?
                    <br>
                    <b>A:</b>
                    Yes, version 2.69 is required and should be easy
                    enough to aquire on all supported operating
                    systems.  The reason for this is to avoid
                    large spurious changes in <code>generated-configure.sh</code>.
                </p>

                <p>
                    <b>Q:</b>
                    How do you regenerate <code>generated-configure.sh</code>
                    after making changes to the input files?
                    <br>
                    <b>A:</b>
                    Regnerating <code>generated-configure.sh</code>
                    should always be done using the
                    script <code>common/autoconf/autogen.sh</code> to
                    ensure that the correct files get updated. This
                    script should also be run after mercurial tries to
                    merge <code>generated-configure.sh</code> as a
                    merge of the generated file is not guaranteed to
                    be correct.
                </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 sources for other
                    libraries. In these cases it was simply easier to create include lists
                    rather than 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>--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. Others depend 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> 
                    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 neglected 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 fully supported.</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>
