|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
|
<html> |
|
<head><script src="//archive.org/includes/analytics.js?v=cf34f82" type="text/javascript"></script> |
|
<script type="text/javascript">window.addEventListener('DOMContentLoaded',function(){var v=archive_analytics.values;v.service='wb';v.server_name='wwwb-app201.us.archive.org';v.server_ms=560;archive_analytics.send_pageview({});});</script> |
|
<script type="text/javascript" src="https://web-static.archive.org/_static/js/bundle-playback.js?v=qM_6omlu" charset="utf-8"></script> |
|
<script type="text/javascript" src="https://web-static.archive.org/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> |
|
<script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> |
|
<script type="text/javascript" src="https://web-static.archive.org/_static/js/ruffle/ruffle.js"></script> |
|
<script type="text/javascript"> |
|
__wm.pc(0.001); |
|
__wm.init("https://web.archive.org/web"); |
|
__wm.wombat("http://hg.openjdk.java.net:80/jdk8/jdk8/raw-file/tip/README-builds.html","20150506042716","https://web.archive.org/","web","https://web-static.archive.org/_static/", |
|
"1430886436"); |
|
</script> |
|
<link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/banner-styles.css?v=S1zqJCYt" /> |
|
<link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/iconochive.css?v=qtvMKcIJ" /> |
|
|
|
|
|
<title>OpenJDK Build README</title> |
|
</head> |
|
<body style="background-color:aquamarine"> |
|
<script>__wm.rw(0);</script> |
|
<div id="wm-ipp-base" lang="en" style="display:none;direction:ltr;"> |
|
<div id="wm-ipp" style="position:fixed;left:0;top:0;right:0;"> |
|
<div id="donato" style="position:relative;width:100%;"> |
|
<div id="donato-base"> |
|
<iframe id="donato-if" src="https://archive.org/includes/donate.php?as_page=1&platform=wb&referer=https%3A//web.archive.org/web/20150506042716/http%3A//hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html" |
|
scrolling="no" frameborder="0" style="width:100%; height:100%"> |
|
</iframe> |
|
</div> |
|
</div><div id="wm-ipp-inside"> |
|
<div id="wm-toolbar" style="position:relative;display:flex;flex-flow:row nowrap;justify-content:space-between;"> |
|
<div id="wm-logo" style="/*width:110px;*/padding-top:12px;"> |
|
<a href="/web/" title="Wayback Machine home page"><img src="https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-200.png" srcset="https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-100.png, https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-150.png 1.5x, https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-200.png 2x" alt="Wayback Machine" style="width:100px" border="0" /></a> |
|
</div> |
|
<div class="c" style="display:flex;flex-flow:column nowrap;justify-content:space-between;flex:1;"> |
|
<form class="u" style="display:flex;flex-direction:row;flex-wrap:nowrap;" target="_top" method="get" action="/web/submit" name="wmtb" id="wmtb"><input type="text" name="url" id="wmtbURL" value="http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html" onfocus="this.focus();this.select();" style="flex:1;"/><input type="hidden" name="type" value="replay" /><input type="hidden" name="date" value="20150506042716" /><input type="submit" value="Go" /> |
|
</form> |
|
<div style="display:flex;flex-flow:row nowrap;align-items:flex-end;"> |
|
<div class="s" id="wm-nav-captures" style="flex:1;"> |
|
<a class="t" href="/web/20150506042716*/http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html" title="See a list of every capture for this URL">43 captures</a> |
|
<div class="r" title="Timespan for captures of this URL">08 Mar 2013 - 03 Jun 2024</div> |
|
</div> |
|
<div class="k"> |
|
<a href="" id="wm-graph-anchor"> |
|
<div id="wm-ipp-sparkline" title="Explore captures for this URL" style="position: relative"> |
|
<canvas id="wm-sparkline-canvas" width="725" height="27" border="0"></canvas> |
|
</div> |
|
</a> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="n"> |
|
<table> |
|
<tbody> |
|
|
|
<tr class="m"> |
|
<td class="b" nowrap="nowrap"><a href="https://web.archive.org/web/20150404100549/http://hg.openjdk.java.net:80/jdk8/jdk8/raw-file/tip/README-builds.html" title="04 Apr 2015"><strong>Apr</strong></a></td> |
|
<td class="c" id="displayMonthEl" title="You are here: 04:27:16 May 06, 2015">MAY</td> |
|
<td class="f" nowrap="nowrap"><a href="https://web.archive.org/web/20150905214525/http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html" title="05 Sep 2015"><strong>Sep</strong></a></td> |
|
</tr> |
|
|
|
<tr class="d"> |
|
<td class="b" nowrap="nowrap"><a href="https://web.archive.org/web/20150404100549/http://hg.openjdk.java.net:80/jdk8/jdk8/raw-file/tip/README-builds.html" title="10:05:49 Apr 04, 2015"><img src="https://web-static.archive.org/_static/images/toolbar/wm_tb_prv_on.png" alt="Previous capture" width="14" height="16" border="0" /></a></td> |
|
<td class="c" id="displayDayEl" style="width:34px;font-size:22px;white-space:nowrap;" title="You are here: 04:27:16 May 06, 2015">06</td> |
|
<td class="f" nowrap="nowrap"><a href="https://web.archive.org/web/20150905214525/http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html" title="21:45:25 Sep 05, 2015"><img src="https://web-static.archive.org/_static/images/toolbar/wm_tb_nxt_on.png" alt="Next capture" width="14" height="16" border="0" /></a></td> |
|
</tr> |
|
|
|
<tr class="y"> |
|
<td class="b" nowrap="nowrap"><a href="https://web.archive.org/web/20131113194914/http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html" title="13 Nov 2013"><strong>2013</strong></a></td> |
|
<td class="c" id="displayYearEl" title="You are here: 04:27:16 May 06, 2015">2015</td> |
|
<td class="f" nowrap="nowrap"><a href="https://web.archive.org/web/20160531232810/http://hg.openjdk.java.net:80/jdk8/jdk8/raw-file/tip/README-builds.html" title="31 May 2016"><strong>2016</strong></a></td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
</div> |
|
<div class="r" style="display:flex;flex-flow:column nowrap;align-items:flex-end;justify-content:space-between;"> |
|
<div id="wm-btns" style="text-align:right;height:23px;"> |
|
<span class="xxs"> |
|
<div id="wm-save-snapshot-success">success</div> |
|
<div id="wm-save-snapshot-fail">fail</div> |
|
<a id="wm-save-snapshot-open" href="#" title="Share via My Web Archive" > |
|
<span class="iconochive-web"></span> |
|
</a> |
|
<a href="https://archive.org/account/login.php" title="Sign In" id="wm-sign-in"> |
|
<span class="iconochive-person"></span> |
|
</a> |
|
<span id="wm-save-snapshot-in-progress" class="iconochive-web"></span> |
|
</span> |
|
<a class="xxs" href="http://faq.web.archive.org/" title="Get some help using the Wayback Machine" style="top:-6px;"><span class="iconochive-question" style="color:rgb(87,186,244);font-size:160%;"></span></a> |
|
<a id="wm-tb-close" href="#close" style="top:-2px;" title="Close the toolbar"><span class="iconochive-remove-circle" style="color:#888888;font-size:240%;"></span></a> |
|
</div> |
|
<div id="wm-share" class="xxs"> |
|
<a href="/web/20150506042716/http://web.archive.org/screenshot/http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html" |
|
id="wm-screenshot" |
|
title="screenshot"> |
|
<span class="wm-icon-screen-shot"></span> |
|
</a> |
|
<a href="#" id="wm-video" title="video"> |
|
<span class="iconochive-movies"></span> |
|
</a> |
|
<a id="wm-share-facebook" href="#" data-url="https://web.archive.org/web/20150506042716/http://hg.openjdk.java.net:80/jdk8/jdk8/raw-file/tip/README-builds.html" title="Share on Facebook" style="margin-right:5px;" target="_blank"><span class="iconochive-facebook" style="color:#3b5998;font-size:160%;"></span></a> |
|
<a id="wm-share-twitter" href="#" data-url="https://web.archive.org/web/20150506042716/http://hg.openjdk.java.net:80/jdk8/jdk8/raw-file/tip/README-builds.html" title="Share on Twitter" style="margin-right:5px;" target="_blank"><span class="iconochive-twitter" style="color:#1dcaff;font-size:160%;"></span></a> |
|
</div> |
|
<div style="padding-right:2px;text-align:right;white-space:nowrap;"> |
|
<a id="wm-expand" class="wm-btn wm-closed" href="#expand" onclick="__wm.ex(event);return false;"><span id="wm-expand-icon" class="iconochive-down-solid"></span> <span class="xxs" style="font-size:80%;">About this capture</span></a> |
|
</div> |
|
</div> |
|
</div> |
|
<div id="wm-capinfo" style="border-top:1px solid #777;display:none; overflow: hidden"> |
|
<div id="wm-capinfo-notice" source="api"></div> |
|
<div id="wm-capinfo-collected-by"> |
|
<div style="background-color:#666;color:#fff;font-weight:bold;text-align:center">COLLECTED BY</div> |
|
<div style="padding:3px;position:relative" id="wm-collected-by-content"> |
|
<div style="display:inline-block;vertical-align:top;width:50%;"> |
|
<span class="c-logo" style="background-image:url(https://archive.org/services/img/alexacrawls);"></span> |
|
Organization: <a style="color:#33f;" href="https://archive.org/details/alexacrawls" target="_new"><span class="wm-title">Alexa Crawls</span></a> |
|
<div style="max-height:75px;overflow:hidden;position:relative;"> |
|
<div style="position:absolute;top:0;left:0;width:100%;height:75px;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,0) 90%,rgba(255,255,255,255) 100%);"></div> |
|
Starting in 1996, <a href="http://www.alexa.com/">Alexa Internet</a> has been donating their crawl data to the Internet Archive. Flowing in every day, these data are added to the <a href="http://web.archive.org/">Wayback Machine</a> after an embargo period. |
|
</div> |
|
</div> |
|
<div style="display:inline-block;vertical-align:top;width:49%;"> |
|
<span class="c-logo" style="background-image:url(https://archive.org/services/img/alexacrawls)"></span> |
|
<div>Collection: <a style="color:#33f;" href="https://archive.org/details/alexacrawls" target="_new"><span class="wm-title">Alexa Crawls</span></a></div> |
|
<div style="max-height:75px;overflow:hidden;position:relative;"> |
|
<div style="position:absolute;top:0;left:0;width:100%;height:75px;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,0) 90%,rgba(255,255,255,255) 100%);"></div> |
|
Starting in 1996, <a href="http://www.alexa.com/">Alexa Internet</a> has been donating their crawl data to the Internet Archive. Flowing in every day, these data are added to the <a href="http://web.archive.org/">Wayback Machine</a> after an embargo period. |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div id="wm-capinfo-timestamps"> |
|
<div style="background-color:#666;color:#fff;font-weight:bold;text-align:center" title="Timestamps for the elements of this page">TIMESTAMPS</div> |
|
<div> |
|
<div id="wm-capresources" style="margin:0 5px 5px 5px;max-height:250px;overflow-y:scroll !important"></div> |
|
<div id="wm-capresources-loading" style="text-align:left;margin:0 20px 5px 5px;display:none"><img src="https://web-static.archive.org/_static/images/loading.gif" alt="loading" /></div> |
|
</div> |
|
</div> |
|
</div></div></div></div><div id="wm-ipp-print">The Wayback Machine - https://web.archive.org/web/20150506042716/http://hg.openjdk.java.net:80/jdk8/jdk8/raw-file/tip/README-builds.html</div> |
|
<script type="text/javascript">//<![CDATA[ |
|
__wm.bt(725,27,25,2,"web","http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html","20150506042716",1996,"https://web-static.archive.org/_static/",["https://web-static.archive.org/_static/css/banner-styles.css?v=S1zqJCYt","https://web-static.archive.org/_static/css/iconochive.css?v=qtvMKcIJ"], false); |
|
__wm.rw(1); |
|
//]]></script> |
|
|
|
|
|
|
|
|
|
<table width="100%"> |
|
<tr> |
|
<td align="center"> |
|
<img alt="OpenJDK" src="https://web.archive.org/web/20150506042716im_/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="https://web.archive.org/web/20150506042716/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 && 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> |
|
|
|
|
|
|
|
|
|
|
|
</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="https://web.archive.org/web/20150506042716/http://mercurial.selenic.com/wiki/Mercurial">Mercurial</a>. |
|
If you are new to Mercurial, please see the |
|
<a href="https://web.archive.org/web/20150506042716/http://mercurial.selenic.com/wiki/BeginnersGuides"> |
|
Beginner Guides</a> |
|
or refer to the <a href="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/http://openjdk.java.net/guide/repositories.html#installConfig"> |
|
Developer Guide: Installing and Configuring Mercurial</a> |
|
section for more information. |
|
|
|
<h3><a name="get_source">Getting the Source</a></h3> |
|
<blockquote> |
|
To get the entire set of OpenJDK Mercurial repositories |
|
use the script <code>get_source.sh</code> located in the |
|
root repository: |
|
<blockquote> |
|
<code> |
|
hg clone http://hg.openjdk.java.net/jdk8/jdk8 |
|
<i>YourOpenJDK</i> |
|
<br> |
|
cd <i>YourOpenJDK</i> |
|
<br> |
|
bash ./get_source.sh |
|
</code> |
|
</blockquote> |
|
Once you have all the repositories, keep in mind that each |
|
repository is its own independent repository. |
|
You can also re-run <code>./get_source.sh</code> anytime to |
|
pull over all the latest changesets in all the repositories. |
|
This set of nested repositories has been given the term |
|
"forest" and there are various ways to apply the same |
|
<code>hg</code> command to each of the repositories. |
|
For example, the script <code>make/scripts/hgforest.sh</code> |
|
can be used to repeat the same <code>hg</code> |
|
command on every repository, e.g. |
|
<blockquote> |
|
<code> |
|
cd <i>YourOpenJDK</i> |
|
<br> |
|
bash ./make/scripts/hgforest.sh status |
|
</code> |
|
</blockquote> |
|
</blockquote> |
|
|
|
<h3><a name="repositories">Repositories</a></h3> |
|
<blockquote> |
|
<p>The set of repositories and what they contain:</p> |
|
<table border="1"> |
|
<thead> |
|
<tr> |
|
<th>Repository</th> |
|
<th>Contains</th> |
|
</tr> |
|
</thead> |
|
<tbody> |
|
<tr> |
|
<td> |
|
. (root) |
|
</td> |
|
<td> |
|
common configure and makefile logic |
|
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
hotspot |
|
</td> |
|
<td> |
|
source code and make files for building |
|
the OpenJDK Hotspot Virtual Machine |
|
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
langtools |
|
</td> |
|
<td> |
|
source code for the OpenJDK javac and language tools |
|
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
jdk |
|
</td> |
|
<td> |
|
source code and make files for building |
|
the OpenJDK runtime libraries and misc files |
|
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
jaxp |
|
</td> |
|
<td> |
|
source code for the OpenJDK JAXP functionality |
|
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
jaxws |
|
</td> |
|
<td> |
|
source code for the OpenJDK JAX-WS functionality |
|
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
corba |
|
</td> |
|
<td> |
|
source code for the OpenJDK Corba functionality |
|
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
nashorn |
|
</td> |
|
<td> |
|
source code for the OpenJDK JavaScript implementation |
|
</td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
</blockquote> |
|
|
|
<h3><a name="guidelines">Repository Source Guidelines</a></h3> |
|
<blockquote> |
|
There are some very basic guidelines: |
|
<ul> |
|
<li> |
|
Use of whitespace in source files |
|
(.java, .c, .h, .cpp, and .hpp files) |
|
is restricted. |
|
No TABs, no trailing whitespace on lines, and files |
|
should not terminate in more than one blank line. |
|
</li> |
|
<li> |
|
Files with execute permissions should not be added |
|
to the source repositories. |
|
</li> |
|
<li> |
|
All generated files need to be kept isolated from |
|
the files |
|
maintained or managed by the source control system. |
|
The standard area for generated files is the top level |
|
<code>build/</code> directory. |
|
</li> |
|
<li> |
|
The default build process should be to build the product |
|
and nothing else, in one form, e.g. a product (optimized), |
|
debug (non-optimized, -g plus assert logic), or |
|
fastdebug (optimized, -g plus assert logic). |
|
</li> |
|
<li> |
|
The <tt>.hgignore</tt> file in each repository |
|
must exist and should |
|
include <tt>^build/</tt>, <tt>^dist/</tt> and |
|
optionally any |
|
<tt>nbproject/private</tt> directories. |
|
<strong>It should NEVER</strong> include |
|
anything in the |
|
<tt>src/</tt> or <tt>test/</tt> |
|
or any managed directory area of a repository. |
|
</li> |
|
<li> |
|
Directory names and file names should never contain |
|
blanks or |
|
non-printing characters. |
|
</li> |
|
<li> |
|
Generated source or binary files should NEVER be added to |
|
the repository (that includes <tt>javah</tt> output). |
|
There are some exceptions to this rule, in particular |
|
with some of the generated configure scripts. |
|
</li> |
|
<li> |
|
Files not needed for typical building |
|
or testing of the repository |
|
should not be added to the repository. |
|
</li> |
|
</ul> |
|
</blockquote> |
|
|
|
</blockquote> |
|
|
|
|
|
<hr> |
|
<h2><a name="building">Building</a></h2> |
|
<blockquote> |
|
The very first step in building the OpenJDK is making sure the |
|
system itself has everything it needs to do OpenJDK builds. |
|
Once a system is setup, it generally doesn't need to be done again. |
|
<br> |
|
Building the OpenJDK is now done with running a |
|
<a href="#configure"><code>configure</code></a> |
|
script which will try and find and verify you have everything |
|
you need, followed by running |
|
<a href="#gmake"><code>make</code></a>, e.g. |
|
<blockquote> |
|
<b> |
|
<code> |
|
bash ./configure<br> |
|
make all |
|
</code> |
|
</b> |
|
</blockquote> |
|
Where possible the <code>configure</code> script will attempt to located the |
|
various components in the default locations or via component |
|
specific variable settings. |
|
When the normal defaults fail or components cannot be found, |
|
additional <code>configure</code> options may be necessary to help <code>configure</code> |
|
find the necessary tools for the build, or you may need to |
|
re-visit the setup of your system due to missing software |
|
packages. |
|
<br> |
|
<strong>NOTE:</strong> The <code>configure</code> script |
|
file does not have |
|
execute permissions and will need to be explicitly run with |
|
<code>bash</code>, |
|
see the <a href="#guidelines">source guidelines</a>. |
|
|
|
|
|
<hr> |
|
<h3><a name="setup">System Setup</a></h3> |
|
<blockquote> |
|
Before even attempting to use a system to build the OpenJDK |
|
there are some very basic system setups needed. |
|
For all systems: |
|
<ul> |
|
<li> |
|
Be sure the GNU make utility is version 3.81 or newer, |
|
e.g. run "<code>make -version</code>" |
|
</li> |
|
<li> |
|
Install a |
|
<a name="bootjdk">Bootstrap JDK</a>. |
|
All OpenJDK builds require access to a previously released |
|
JDK called the <i>bootstrap JDK</i> or <i>boot JDK.</i> |
|
The general rule is that the bootstrap JDK |
|
must be an instance of the previous major |
|
release of the JDK. In addition, there may be |
|
a requirement to use a release at or beyond a |
|
particular update level. |
|
<br> <br> |
|
|
|
<b><i>Building JDK 8 requires use of a version |
|
of JDK 7 that is at Update 7 or newer. JDK 8 |
|
developers should not use JDK 8 as the boot |
|
JDK, to ensure that JDK 8 dependencies are |
|
not introduced into the parts of the system |
|
that are built with JDK 7.</i></b> |
|
|
|
<br> <br> |
|
The JDK 7 binaries can be downloaded from Oracle's |
|
<a href="https://web.archive.org/web/20150506042716/http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">JDK 7 download site</a>. |
|
For build performance reasons |
|
is very important that this bootstrap JDK be made available |
|
on the local disk of the machine doing the build. |
|
You should add its <code>bin</code> directory |
|
to the <code>PATH</code> environment variable. |
|
If <code>configure</code> has any issues finding this JDK, you may |
|
need to use the <code>configure</code> option |
|
<code>--with-boot-jdk</code>. |
|
</li> |
|
<li> |
|
Ensure that GNU make, the Bootstrap JDK, |
|
and the compilers are all |
|
in your PATH environment variable |
|
</li> |
|
</ul> |
|
And for specific systems: |
|
<table border="1"> |
|
<thead> |
|
<tr> |
|
<th>Linux</th> |
|
<th>Solaris</th> |
|
<th>Windows</th> |
|
<th>Mac OS X</th> |
|
</tr> |
|
</thead> |
|
<tbody> |
|
<tr> |
|
<td> |
|
Install all the software development |
|
packages needed including |
|
<a href="#alsa">alsa</a>, |
|
<a href="#freetype">freetype</a>, |
|
<a href="#cups">cups</a>, and |
|
<a href="#xrender">xrender</a>. |
|
<br> |
|
See |
|
<a href="#SDBE">specific system packages</a>. |
|
</td> |
|
<td> |
|
Install all the software development |
|
packages needed including |
|
<a href="#studio">Studio Compilers</a>, |
|
<a href="#freetype">freetype</a>, |
|
<a href="#cups">cups</a>, and |
|
<a href="#xrender">xrender</a>. |
|
<br> |
|
See |
|
<a href="#SDBE">specific system packages</a>. |
|
</td> |
|
<td> |
|
<ul> |
|
<li> |
|
Install one of |
|
<a href="#cygwin">CYGWIN</a> or |
|
<a href="#msys">MinGW/MSYS</a> |
|
</li> |
|
<li> |
|
Install |
|
<a href="#vs2010">Visual Studio 2010</a> |
|
</li> |
|
</ul> |
|
</td> |
|
<td> |
|
Install |
|
<a href="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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> |
|
|
|
<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="https://web.archive.org/web/20150506042716/http://www.cygwin.com/">Cygwin</a> and |
|
<a href="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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><drive>:</code> |
|
to a virtual directory <code>/cygdrive/<drive></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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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><drive>:</code> replaced by a virtual |
|
directory <code>/<drive></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="https://web.archive.org/web/20150506042716/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> |
|
|
|
<h4><a name="macosx">Mac OS X</a></h4> |
|
<blockquote> |
|
Make sure you get the right XCode version. |
|
</blockquote> |
|
|
|
</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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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 && 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> — Default and very quiet. |
|
</li> |
|
<li> |
|
<b><code>info</code></b> — Shows more progress information |
|
than warn. |
|
</li> |
|
<li> |
|
<b><code>debug</code></b> — Echos all command lines and |
|
prints all macro calls for compilation definitions. |
|
</li> |
|
<li> |
|
<b><code>trace</code></b> — 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> |
|
— |
|
number of cores in the build system, |
|
e.g. <code>--with-num-cores=8</code> |
|
</li> |
|
<li> |
|
<b><code>--with-memory-size</code></b> |
|
— memory (in MB) available in the build system, |
|
e.g. <code>--with-memory-size=1024</code> |
|
</li> |
|
</ul> |
|
|
|
<p>It might also be necessary to specify the JVM arguments passed |
|
to the Bootstrap JDK, using e.g. |
|
<code>--with-boot-jdk-jvmargs="-Xmx8G -enableassertions"</code>. |
|
Doing this will override the default JVM arguments |
|
passed to the Bootstrap JDK.</p> |
|
|
|
|
|
<p>One of the top goals of the new build system is to improve the |
|
build performance and decrease the time needed to build. This will |
|
soon also apply to the java compilation when the Smart Javac wrapper |
|
is making its way into jdk8. It can be tried in the build-infra |
|
repository already. You are likely to find that the new build system |
|
is faster than the old one even without this feature.</p> |
|
|
|
<p>At the end of a successful execution of <code>configure</code>, |
|
you will get a performance summary, |
|
indicating how well the build will perform. Here you will |
|
also get performance hints. |
|
If you want to build fast, pay attention to those!</p> |
|
|
|
<h4>Building with ccache</h4> |
|
|
|
<p>A simple way to radically speed up compilation of native code |
|
(typically hotspot and native libraries in JDK) is to install |
|
ccache. This will cache and reuse prior compilation results, if the |
|
source code is unchanged. However, ccache versions prior to 3.1.4 |
|
does not work correctly with the precompiled headers used in |
|
OpenJDK. So if your platform supports ccache at 3.1.4 or later, we |
|
highly recommend installing it. This is currently only supported on |
|
linux.</p> |
|
|
|
<h4>Building on local disk</h4> |
|
|
|
<p>If you are using network shares, e.g. via NFS, for your source code, |
|
make sure the build directory is situated on local disk. |
|
The performance |
|
penalty is extremely high for building on a network share, |
|
close to unusable.</p> |
|
|
|
<h4>Building only one JVM</h4> |
|
|
|
<p>The old build builds multiple JVMs on 32-bit systems (client and |
|
server; and on Windows kernel as well). In the new build we have |
|
changed this default to only build server when it's available. This |
|
improves build times for those not interested in multiple JVMs. To |
|
mimic the old behavior on platforms that support it, |
|
use <code>--with-jvm-variants=client,server</code>.</p> |
|
|
|
<h4>Selecting the number of cores to build on</h4> |
|
|
|
<p>By default, <code>configure</code> will analyze your machine and run the make |
|
process in parallel with as many threads as you have cores. This |
|
behavior can be overridden, either "permanently" (on a <code>configure</code> |
|
basis) using <code>--with-num-cores=N</code> or for a single build |
|
only (on a make basis), using <code>make JOBS=N</code>.</p> |
|
|
|
<p>If you want to make a slower build just this time, to save some CPU |
|
power for other processes, you can run |
|
e.g. <code>make JOBS=2</code>. This will force the makefiles |
|
to only run 2 parallel processes, or even <code>make JOBS=1</code> |
|
which will disable parallelism.</p> |
|
|
|
<p>If you want to have it the other way round, namely having slow |
|
builds default and override with fast if you're |
|
impatient, you should call <code>configure</code> with |
|
<code>--with-num-cores=2</code>, making 2 the default. |
|
If you want to run with more |
|
cores, run <code>make JOBS=8</code></p> |
|
|
|
</blockquote> |
|
|
|
<h3><a name="troubleshooting">Troubleshooting</a></h3> |
|
<blockquote> |
|
|
|
<h4>Solving build problems</h4> |
|
|
|
<blockquote> |
|
If the build fails (and it's not due to a compilation error in |
|
a source file you've changed), the first thing you should do |
|
is to re-run the build with more verbosity. |
|
Do this by adding <code>LOG=debug</code> to your make command line. |
|
<br> |
|
The build log (with both stdout and stderr intermingled, |
|
basically the same as you see on your console) can be found as |
|
<code>build.log</code> in your build directory. |
|
<br> |
|
You can ask for help on build problems with the new build system |
|
on either the |
|
<a href="https://web.archive.org/web/20150506042716/http://mail.openjdk.java.net/mailman/listinfo/build-dev"> |
|
build-dev</a> |
|
or the |
|
<a href="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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> |
|
|
|
</blockquote> |
|
|
|
|
|
<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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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> |
|
|
|
|
|
<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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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="https://web.archive.org/web/20150506042716/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> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<hr> |
|
<p>End of OpenJDK README-builds.html document.<br>Please come again! |
|
<hr> |
|
|
|
</body> |
|
</html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|