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

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

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

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

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

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

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

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

            </ul>
        </blockquote>

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

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

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

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

        </blockquote>

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

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

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

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

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

                </blockquote>

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

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

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

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

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

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

                    </blockquote>

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


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

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

            </blockquote>

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

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

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

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

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

            </blockquote>

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

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

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

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

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

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

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

                <p>
                    <b>Q:</b>
                    Do you require a specific version of autoconf for regenerating
                    <code>generated-configure.sh</code>?
                    <br>
                    <b>A:</b>
                    Yes, version 2.69 is required and should be easy
                    enough to aquire on all supported operating
                    systems.  The reason for this is to avoid
                    large spurious changes in <code>generated-configure.sh</code>.
                </p>

                <p>
                    <b>Q:</b>
                    How do you regenerate <code>generated-configure.sh</code>
                    after making changes to the input files?
                    <br>
                    <b>A:</b>
                    Regnerating <code>generated-configure.sh</code>
                    should always be done using the
                    script <code>common/autoconf/autogen.sh</code> to
                    ensure that the correct files get updated. This
                    script should also be run after mercurial tries to
                    merge <code>generated-configure.sh</code> as a
                    merge of the generated file is not guaranteed to
                    be correct.
                </p>

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

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

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

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

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

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

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

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

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

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

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

            </blockquote>

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

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

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

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


                <p>One of the top goals of the new build system is to improve the
                    build performance and decrease the time needed to build. This will
                    soon also apply to the java compilation when the Smart Javac wrapper
                    is fully supported.</p>

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

                <h4>Building with ccache</h4>

                <p>The OpenJDK build supports building with ccache 
                    when using gcc or clang. Using ccache can
                    radically speed up compilation of native code if
                    you often rebuild the same sources. Your milage
                    may vary however so we recommend evaluating it for
                    yourself. To enable it, make sure it's on the path
                    and configure with <code>--enable-ccache</code>.</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>
