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

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

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

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

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

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

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

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

            </ul>
        </blockquote>

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

            <h3><a name="get_source">Getting the Source</a></h3>
            <blockquote>
                To get the entire set of OpenJDK Mercurial repositories
                use the script <code>get_source.sh</code> located in the 
                root repository:
                <blockquote>
                    <code>
                        hg clone http://hg.openjdk.java.net/jdk8/jdk8 
                        <i>YourOpenJDK</i>
                        <br>
                        cd <i>YourOpenJDK</i>
                        <br>
                        bash ./get_source.sh
                    </code>
                </blockquote>
                Once you have all the repositories, keep in mind that each
                repository is 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 8 requires use of a version
                        of JDK 7 that is at Update 7 or newer. JDK 8
                        developers should not use JDK 8 as the boot
                        JDK, to ensure that JDK 8 dependencies are
                        not introduced into the parts of the system
                        that are built with JDK 7.</i></b>

                        <br>&nbsp;<br>
                        The JDK 7 binaries can be downloaded from Oracle's 
                        <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"
                           target="_blank">JDK 7 download site</a>.
                        For build performance reasons
                        is very important that this bootstrap JDK be made available 
                        on the local disk of the machine doing the build.
                        You should add its <code>bin</code> directory
                        to the <code>PATH</code> environment variable.
                        If <code>configure</code> has any issues finding this JDK, you may
                        need to use the <code>configure</code> option
                        <code>--with-boot-jdk</code>.
                    </li>
                    <li>
                        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 making its way into jdk8. It can be tried in the build-infra
                    repository already. You are likely to find that the new build system
                    is faster than the old one even without this feature.</p>

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

                <h4>Building with ccache</h4>

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

                <h4>Building on local disk</h4>

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

                <h4>Building only one JVM</h4>

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

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

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

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

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

            </blockquote>

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

                <h4>Solving build problems</h4>

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

            </blockquote>

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

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

        <!-- Leave out Appendix D --

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

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

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

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

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

    </body>
</html>
