author | sundar |
Mon, 14 Dec 2015 21:53:47 +0530 | |
changeset 34733 | dd9867d04e56 |
parent 33030 | de12d9a875ed |
child 34595 | 09596fe63e2d |
permissions | -rw-r--r-- |
0 | 1 |
<html> |
33030 | 2 |
<head> |
3 |
<title>OpenJDK Build README</title> |
|
4 |
</head> |
|
5 |
<body> |
|
6 |
<p><img src="http://openjdk.java.net/images/openjdk.png" alt="OpenJDK" title="" /></p> |
|
7 |
||
8 |
<h1>OpenJDK Build README</h1> |
|
9 |
||
10 |
<hr /> |
|
11 |
||
12 |
<p><a name="introduction"></a></p> |
|
13 |
||
14 |
<h2>Introduction</h2> |
|
15 |
||
16 |
<p>This README file contains build instructions for the |
|
17 |
<a href="http://openjdk.java.net">OpenJDK</a>. Building the source code for the OpenJDK |
|
18 |
requires a certain degree of technical expertise.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
19 |
|
33030 | 20 |
<h3>!!!!!!!!!!!!!!! THIS IS A MAJOR RE-WRITE of this document. !!!!!!!!!!!!!</h3> |
21 |
||
22 |
<p>Some Headlines:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
23 |
|
33030 | 24 |
<ul> |
25 |
<li>The build is now a "<code>configure && make</code>" style build</li> |
|
26 |
<li>Any GNU make 3.81 or newer should work, except on Windows where 4.0 or newer |
|
27 |
is recommended.</li> |
|
28 |
<li>The build should scale, i.e. more processors should cause the build to be |
|
29 |
done in less wall-clock time</li> |
|
30 |
<li>Nested or recursive make invocations have been significantly reduced, |
|
31 |
as has the total fork/exec or spawning of sub processes during the build</li> |
|
32 |
<li>Windows MKS usage is no longer supported</li> |
|
33 |
<li>Windows Visual Studio <code>vsvars*.bat</code> and <code>vcvars*.bat</code> files are run |
|
34 |
automatically</li> |
|
35 |
<li>Ant is no longer used when building the OpenJDK</li> |
|
36 |
<li>Use of ALT_* environment variables for configuring the build is no longer |
|
37 |
supported</li> |
|
38 |
</ul> |
|
39 |
||
40 |
<hr /> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
41 |
|
33030 | 42 |
<h2>Contents</h2> |
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
43 |
|
33030 | 44 |
<ul> |
45 |
<li><a href="#introduction">Introduction</a></li> |
|
46 |
<li><a href="#hg">Use of Mercurial</a> |
|
47 |
<ul> |
|
48 |
<li><a href="#get_source">Getting the Source</a></li> |
|
49 |
<li><a href="#repositories">Repositories</a></li> |
|
50 |
</ul></li> |
|
51 |
<li><a href="#building">Building</a> |
|
52 |
<ul> |
|
53 |
<li><a href="#setup">System Setup</a> |
|
54 |
<ul> |
|
55 |
<li><a href="#linux">Linux</a></li> |
|
56 |
<li><a href="#solaris">Solaris</a></li> |
|
57 |
<li><a href="#macosx">Mac OS X</a></li> |
|
58 |
<li><a href="#windows">Windows</a></li> |
|
59 |
</ul></li> |
|
60 |
<li><a href="#configure">Configure</a></li> |
|
61 |
<li><a href="#make">Make</a></li> |
|
62 |
</ul></li> |
|
63 |
<li><a href="#testing">Testing</a></li> |
|
64 |
</ul> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
65 |
|
33030 | 66 |
<hr /> |
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
67 |
|
33030 | 68 |
<ul> |
69 |
<li><a href="#hints">Appendix A: Hints and Tips</a> |
|
70 |
<ul> |
|
71 |
<li><a href="#faq">FAQ</a></li> |
|
72 |
<li><a href="#performance">Build Performance Tips</a></li> |
|
73 |
<li><a href="#troubleshooting">Troubleshooting</a></li> |
|
74 |
</ul></li> |
|
75 |
<li><a href="#gmake">Appendix B: GNU Make Information</a></li> |
|
76 |
<li><a href="#buildenvironments">Appendix C: Build Environments</a></li> |
|
77 |
</ul> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
78 |
|
33030 | 79 |
<hr /> |
80 |
||
81 |
<p><a name="hg"></a></p> |
|
82 |
||
83 |
<h2>Use of Mercurial</h2> |
|
7650
6a3a53d8eacc
7003845: README-builds document proper location of forest extension, provide alternatives
ohair
parents:
7360
diff
changeset
|
84 |
|
33030 | 85 |
<p>The OpenJDK sources are maintained with the revision control system |
86 |
<a href="http://mercurial.selenic.com/wiki/Mercurial">Mercurial</a>. If you are new to |
|
87 |
Mercurial, please see the <a href="http://mercurial.selenic.com/wiki/ |
|
88 |
BeginnersGuides">Beginner Guides</a> or refer to the <a href="http://hgbook.red-bean.com/">Mercurial Book</a>. |
|
89 |
The first few chapters of the book provide an excellent overview of Mercurial, |
|
90 |
what it is and how it works.</p> |
|
91 |
||
92 |
<p>For using Mercurial with the OpenJDK refer to the <a href="http://openjdk.java.net/guide/ |
|
93 |
repositories.html#installConfig">Developer Guide: Installing |
|
94 |
and Configuring Mercurial</a> section for more information.</p> |
|
95 |
||
96 |
<p><a name="get_source"></a></p> |
|
97 |
||
98 |
<h3>Getting the Source</h3> |
|
99 |
||
100 |
<p>To get the entire set of OpenJDK Mercurial repositories use the script |
|
101 |
<code>get_source.sh</code> located in the root repository:</p> |
|
7650
6a3a53d8eacc
7003845: README-builds document proper location of forest extension, provide alternatives
ohair
parents:
7360
diff
changeset
|
102 |
|
33030 | 103 |
<pre><code> hg clone http://hg.openjdk.java.net/jdk9/jdk9 YourOpenJDK |
104 |
cd YourOpenJDK |
|
105 |
bash ./get_source.sh |
|
106 |
</code></pre> |
|
107 |
||
108 |
<p>Once you have all the repositories, keep in mind that each repository is its |
|
109 |
own independent repository. You can also re-run <code>./get_source.sh</code> anytime to |
|
110 |
pull over all the latest changesets in all the repositories. This set of |
|
111 |
nested repositories has been given the term "forest" and there are various |
|
112 |
ways to apply the same <code>hg</code> command to each of the repositories. For |
|
113 |
example, the script <code>make/scripts/hgforest.sh</code> can be used to repeat the |
|
114 |
same <code>hg</code> command on every repository, e.g.</p> |
|
115 |
||
116 |
<pre><code> cd YourOpenJDK |
|
117 |
bash ./make/scripts/hgforest.sh status |
|
118 |
</code></pre> |
|
119 |
||
120 |
<p><a name="repositories"></a></p> |
|
121 |
||
122 |
<h3>Repositories</h3> |
|
123 |
||
124 |
<p>The set of repositories and what they contain:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
125 |
|
33030 | 126 |
<ul> |
127 |
<li><strong>. (root)</strong> contains common configure and makefile logic</li> |
|
128 |
<li><strong>hotspot</strong> contains source code and make files for building the OpenJDK |
|
129 |
Hotspot Virtual Machine</li> |
|
130 |
<li><strong>langtools</strong> contains source code for the OpenJDK javac and language tools</li> |
|
131 |
<li><strong>jdk</strong> contains source code and make files for building the OpenJDK runtime |
|
132 |
libraries and misc files</li> |
|
133 |
<li><strong>jaxp</strong> contains source code for the OpenJDK JAXP functionality</li> |
|
134 |
<li><strong>jaxws</strong> contains source code for the OpenJDK JAX-WS functionality</li> |
|
135 |
<li><strong>corba</strong> contains source code for the OpenJDK Corba functionality</li> |
|
136 |
<li><strong>nashorn</strong> contains source code for the OpenJDK JavaScript implementation</li> |
|
137 |
</ul> |
|
138 |
||
139 |
<h3>Repository Source Guidelines</h3> |
|
140 |
||
141 |
<p>There are some very basic guidelines:</p> |
|
142 |
||
143 |
<ul> |
|
144 |
<li>Use of whitespace in source files (.java, .c, .h, .cpp, and .hpp files) is |
|
145 |
restricted. No TABs, no trailing whitespace on lines, and files should not |
|
146 |
terminate in more than one blank line.</li> |
|
147 |
<li>Files with execute permissions should not be added to the source |
|
148 |
repositories.</li> |
|
149 |
<li>All generated files need to be kept isolated from the files maintained or |
|
150 |
managed by the source control system. The standard area for generated files |
|
151 |
is the top level <code>build/</code> directory.</li> |
|
152 |
<li>The default build process should be to build the product and nothing else, |
|
153 |
in one form, e.g. a product (optimized), debug (non-optimized, -g plus |
|
154 |
assert logic), or fastdebug (optimized, -g plus assert logic).</li> |
|
155 |
<li>The <code>.hgignore</code> file in each repository must exist and should include |
|
156 |
<code>^build/</code>, <code>^dist/</code> and optionally any <code>nbproject/private</code> directories. <strong>It |
|
157 |
should NEVER</strong> include anything in the <code>src/</code> or <code>test/</code> or any managed |
|
158 |
directory area of a repository.</li> |
|
159 |
<li>Directory names and file names should never contain blanks or non-printing |
|
160 |
characters.</li> |
|
161 |
<li>Generated source or binary files should NEVER be added to the repository |
|
162 |
(that includes <code>javah</code> output). There are some exceptions to this rule, in |
|
163 |
particular with some of the generated configure scripts.</li> |
|
164 |
<li>Files not needed for typical building or testing of the repository should |
|
165 |
not be added to the repository.</li> |
|
166 |
</ul> |
|
167 |
||
168 |
<hr /> |
|
169 |
||
170 |
<p><a name="building"></a></p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
171 |
|
33030 | 172 |
<h2>Building</h2> |
173 |
||
174 |
<p>The very first step in building the OpenJDK is making sure the system itself |
|
175 |
has everything it needs to do OpenJDK builds. Once a system is setup, it |
|
176 |
generally doesn't need to be done again.</p> |
|
177 |
||
178 |
<p>Building the OpenJDK is now done with running a <code>configure</code> script which will |
|
179 |
try and find and verify you have everything you need, followed by running |
|
180 |
<code>make</code>, e.g.</p> |
|
181 |
||
182 |
<blockquote> |
|
183 |
<p><strong><code>bash ./configure</code></strong> <br /> |
|
184 |
<strong><code>make all</code></strong></p> |
|
185 |
</blockquote> |
|
7650
6a3a53d8eacc
7003845: README-builds document proper location of forest extension, provide alternatives
ohair
parents:
7360
diff
changeset
|
186 |
|
33030 | 187 |
<p>Where possible the <code>configure</code> script will attempt to located the various |
188 |
components in the default locations or via component specific variable |
|
189 |
settings. When the normal defaults fail or components cannot be found, |
|
190 |
additional <code>configure</code> options may be necessary to help <code>configure</code> find the |
|
191 |
necessary tools for the build, or you may need to re-visit the setup of your |
|
192 |
system due to missing software packages.</p> |
|
193 |
||
194 |
<p><strong>NOTE:</strong> The <code>configure</code> script file does not have execute permissions and |
|
195 |
will need to be explicitly run with <code>bash</code>, see the source guidelines.</p> |
|
196 |
||
197 |
<hr /> |
|
198 |
||
199 |
<p><a name="setup"></a></p> |
|
200 |
||
201 |
<h3>System Setup</h3> |
|
202 |
||
203 |
<p>Before even attempting to use a system to build the OpenJDK there are some very |
|
204 |
basic system setups needed. For all systems:</p> |
|
205 |
||
206 |
<ul> |
|
207 |
<li><p>Be sure the GNU make utility is version 3.81 (4.0 on windows) or newer, e.g. |
|
208 |
run "<code>make -version</code>"</p> |
|
7650
6a3a53d8eacc
7003845: README-builds document proper location of forest extension, provide alternatives
ohair
parents:
7360
diff
changeset
|
209 |
|
33030 | 210 |
<p><a name="bootjdk"></a></p></li> |
211 |
<li><p>Install a Bootstrap JDK. All OpenJDK builds require access to a previously |
|
212 |
released JDK called the <em>bootstrap JDK</em> or <em>boot JDK.</em> The general rule is |
|
213 |
that the bootstrap JDK must be an instance of the previous major release of |
|
214 |
the JDK. In addition, there may be a requirement to use a release at or |
|
215 |
beyond a particular update level.</p> |
|
216 |
||
217 |
<p><strong><em>Building JDK 9 requires JDK 8. JDK 9 developers should not use JDK 9 as |
|
218 |
the boot JDK, to ensure that JDK 9 dependencies are not introduced into the |
|
219 |
parts of the system that are built with JDK 8.</em></strong></p> |
|
220 |
||
221 |
<p>The JDK 8 binaries can be downloaded from Oracle's <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK 8 download |
|
222 |
site</a>. |
|
223 |
For build performance reasons it is very important that this bootstrap JDK |
|
224 |
be made available on the local disk of the machine doing the build. You |
|
225 |
should add its <code>bin</code> directory to the <code>PATH</code> environment variable. If |
|
226 |
<code>configure</code> has any issues finding this JDK, you may need to use the |
|
227 |
<code>configure</code> option <code>--with-boot-jdk</code>.</p></li> |
|
228 |
<li><p>Ensure that GNU make, the Bootstrap JDK, and the compilers are all in your |
|
229 |
PATH environment variable.</p></li> |
|
230 |
</ul> |
|
231 |
||
232 |
<p>And for specific systems:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
233 |
|
33030 | 234 |
<ul> |
235 |
<li><p><strong>Linux</strong></p> |
|
236 |
||
237 |
<p>Install all the software development packages needed including |
|
238 |
<a href="#alsa">alsa</a>, <a href="#freetype">freetype</a>, <a href="#cups">cups</a>, and |
|
239 |
<a href="#xrender">xrender</a>. See <a href="#SDBE">specific system packages</a>.</p></li> |
|
240 |
<li><p><strong>Solaris</strong></p> |
|
18049
ab1fcd9738e8
8016780: README-builds.html misses crucial requirement on bootstrap JDK
smarks
parents:
15787
diff
changeset
|
241 |
|
33030 | 242 |
<p>Install all the software development packages needed including <a href="#studio">Studio |
243 |
Compilers</a>, <a href="#freetype">freetype</a>, <a href="#cups">cups</a>, and |
|
244 |
<a href="#xrender">xrender</a>. See <a href="#SDBE">specific system packages</a>.</p></li> |
|
245 |
<li><p><strong>Windows</strong></p> |
|
246 |
||
247 |
<ul> |
|
248 |
<li>Install one of <a href="#cygwin">CYGWIN</a> or <a href="#msys">MinGW/MSYS</a></li> |
|
249 |
<li>Install <a href="#vs2013">Visual Studio 2013</a></li> |
|
250 |
</ul></li> |
|
251 |
<li><p><strong>Mac OS X</strong></p> |
|
252 |
||
253 |
<p>Install <a href="https://developer.apple.com/xcode/">XCode 4.5.2</a> and also |
|
254 |
install the "Command line tools" found under the preferences pane |
|
255 |
"Downloads"</p></li> |
|
256 |
</ul> |
|
18049
ab1fcd9738e8
8016780: README-builds.html misses crucial requirement on bootstrap JDK
smarks
parents:
15787
diff
changeset
|
257 |
|
33030 | 258 |
<p><a name="linux"></a></p> |
259 |
||
260 |
<h4>Linux</h4> |
|
261 |
||
262 |
<p>With Linux, try and favor the system packages over building your own or getting |
|
263 |
packages from other areas. Most Linux builds should be possible with the |
|
264 |
system's available packages.</p> |
|
265 |
||
266 |
<p>Note that some Linux systems have a habit of pre-populating your environment |
|
267 |
variables for you, for example <code>JAVA_HOME</code> might get pre-defined for you to |
|
268 |
refer to the JDK installed on your Linux system. You will need to unset |
|
269 |
<code>JAVA_HOME</code>. It's a good idea to run <code>env</code> and verify the environment variables |
|
270 |
you are getting from the default system settings make sense for building the |
|
271 |
OpenJDK.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
272 |
|
33030 | 273 |
<p><a name="solaris"></a></p> |
274 |
||
275 |
<h4>Solaris</h4> |
|
276 |
||
277 |
<p><a name="studio"></a></p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
278 |
|
33030 | 279 |
<h5>Studio Compilers</h5> |
280 |
||
281 |
<p>At a minimum, the <a href="http://www.oracle.com/ |
|
282 |
technetwork/server-storage/solarisstudio/downloads/index.htm">Studio 12 Update 1 Compilers</a> (containing |
|
283 |
version 5.10 of the C and C++ compilers) is required, including specific |
|
284 |
patches.</p> |
|
285 |
||
286 |
<p>The Solaris SPARC patch list is:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
287 |
|
33030 | 288 |
<ul> |
289 |
<li>118683-05: SunOS 5.10: Patch for profiling libraries and assembler</li> |
|
290 |
<li>119963-21: SunOS 5.10: Shared library patch for C++</li> |
|
291 |
<li>120753-08: SunOS 5.10: Microtasking libraries (libmtsk) patch</li> |
|
292 |
<li>128228-09: Sun Studio 12 Update 1: Patch for Sun C++ Compiler</li> |
|
293 |
<li>141860-03: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C |
|
294 |
C++ F77 F95</li> |
|
295 |
<li>141861-05: Sun Studio 12 Update 1: Patch for Sun C Compiler</li> |
|
296 |
<li>142371-01: Sun Studio 12.1 Update 1: Patch for dbx</li> |
|
297 |
<li>143384-02: Sun Studio 12 Update 1: Patch for debuginfo handling</li> |
|
298 |
<li>143385-02: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C |
|
299 |
C++ F77 F95</li> |
|
300 |
<li>142369-01: Sun Studio 12.1: Patch for Performance Analyzer Tools</li> |
|
301 |
</ul> |
|
302 |
||
303 |
<p>The Solaris X86 patch list is:</p> |
|
304 |
||
305 |
<ul> |
|
306 |
<li>119961-07: SunOS 5.10_x86, x64, Patch for profiling libraries and assembler</li> |
|
307 |
<li>119964-21: SunOS 5.10_x86: Shared library patch for C++_x86</li> |
|
308 |
<li>120754-08: SunOS 5.10_x86: Microtasking libraries (libmtsk) patch</li> |
|
309 |
<li>141858-06: Sun Studio 12 Update 1_x86: Sun Compiler Common patch for x86 |
|
310 |
backend</li> |
|
311 |
<li>128229-09: Sun Studio 12 Update 1_x86: Patch for C++ Compiler</li> |
|
312 |
<li>142363-05: Sun Studio 12 Update 1_x86: Patch for C Compiler</li> |
|
313 |
<li>142368-01: Sun Studio 12.1_x86: Patch for Performance Analyzer Tools</li> |
|
314 |
</ul> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
315 |
|
33030 | 316 |
<p>Place the <code>bin</code> directory in <code>PATH</code>.</p> |
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
317 |
|
33030 | 318 |
<p>The Oracle Solaris Studio Express compilers at: <a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/ |
319 |
downloads/index-jsp-142582.html">Oracle Solaris Studio Express |
|
320 |
Download site</a> are also an option, although these compilers |
|
321 |
have not been extensively used yet.</p> |
|
322 |
||
323 |
<p><a name="windows"></a></p> |
|
324 |
||
325 |
<h4>Windows</h4> |
|
326 |
||
327 |
<h5>Windows Unix Toolkit</h5> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
328 |
|
33030 | 329 |
<p>Building on Windows requires a Unix-like environment, notably a Unix-like |
330 |
shell. There are several such environments available of which |
|
331 |
<a href="http://www.cygwin.com/">Cygwin</a> and |
|
332 |
<a href="http://www.mingw.org/wiki/MSYS">MinGW/MSYS</a> are currently supported for the |
|
333 |
OpenJDK build. One of the differences of these systems from standard Windows |
|
334 |
tools is the way they handle Windows path names, particularly path names which |
|
335 |
contain spaces, backslashes as path separators and possibly drive letters. |
|
336 |
Depending on the use case and the specifics of each environment these path |
|
337 |
problems can be solved by a combination of quoting whole paths, translating |
|
338 |
backslashes to forward slashes, escaping backslashes with additional |
|
339 |
backslashes and translating the path names to their <a href="http://en.wikipedia.org/wiki/8.3_filename">"8.3" |
|
340 |
version</a>.</p> |
|
341 |
||
342 |
<p><a name="cygwin"></a></p> |
|
343 |
||
344 |
<h6>CYGWIN</h6> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
345 |
|
33030 | 346 |
<p>CYGWIN is an open source, Linux-like environment which tries to emulate a |
347 |
complete POSIX layer on Windows. It tries to be smart about path names and can |
|
348 |
usually handle all kinds of paths if they are correctly quoted or escaped |
|
349 |
although internally it maps drive letters <code><drive>:</code> to a virtual directory |
|
350 |
<code>/cygdrive/<drive></code>.</p> |
|
351 |
||
352 |
<p>You can always use the <code>cygpath</code> utility to map pathnames with spaces or the |
|
353 |
backslash character into the <code>C:/</code> style of pathname (called 'mixed'), e.g. |
|
354 |
<code>cygpath -s -m "<path>"</code>.</p> |
|
355 |
||
356 |
<p>Note that the use of CYGWIN creates a unique problem with regards to setting |
|
357 |
<a href="#path"><code>PATH</code></a>. Normally on Windows the <code>PATH</code> variable contains directories |
|
358 |
separated with the ";" character (Solaris and Linux use ":"). With CYGWIN, it |
|
359 |
uses ":", but that means that paths like "C:/path" cannot be placed in the |
|
360 |
CYGWIN version of <code>PATH</code> and instead CYGWIN uses something like |
|
361 |
<code>/cygdrive/c/path</code> which CYGWIN understands, but only CYGWIN understands.</p> |
|
362 |
||
363 |
<p>The OpenJDK build requires CYGWIN version 1.7.16 or newer. Information about |
|
364 |
CYGWIN can be obtained from the CYGWIN website at |
|
365 |
<a href="http://www.cygwin.com">www.cygwin.com</a>.</p> |
|
366 |
||
367 |
<p>By default CYGWIN doesn't install all the tools required for building the |
|
368 |
OpenJDK. Along with the default installation, you need to install the following |
|
369 |
tools.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
370 |
|
33030 | 371 |
<blockquote> |
372 |
<p><table border="1"> |
|
373 |
<thead> |
|
374 |
<tr> |
|
375 |
<td>Binary Name</td> |
|
376 |
<td>Category</td> |
|
377 |
<td>Package</td> |
|
378 |
<td>Description</td> |
|
379 |
</tr> |
|
380 |
</thead> |
|
381 |
<tbody> |
|
382 |
<tr> |
|
383 |
<td>ar.exe</td> |
|
384 |
<td>Devel</td> |
|
385 |
<td>binutils</td> |
|
386 |
<td>The GNU assembler, linker and binary utilities</td> |
|
387 |
</tr> |
|
388 |
<tr> |
|
389 |
<td>make.exe</td> |
|
390 |
<td>Devel</td> |
|
391 |
<td>make</td> |
|
392 |
<td>The GNU version of the 'make' utility built for CYGWIN</td> |
|
393 |
</tr> |
|
394 |
<tr> |
|
395 |
<td>m4.exe</td> |
|
396 |
<td>Interpreters</td> |
|
397 |
<td>m4</td> |
|
398 |
<td>GNU implementation of the traditional Unix macro processor</td> |
|
399 |
</tr> |
|
400 |
<tr> |
|
401 |
<td>cpio.exe</td> |
|
402 |
<td>Utils</td> |
|
403 |
<td>cpio</td> |
|
404 |
<td>A program to manage archives of files</td> |
|
405 |
</tr> |
|
406 |
<tr> |
|
407 |
<td>gawk.exe</td> |
|
408 |
<td>Utils</td> |
|
409 |
<td>awk</td> |
|
410 |
<td>Pattern-directed scanning and processing language</td> |
|
411 |
</tr> |
|
412 |
<tr> |
|
413 |
<td>file.exe</td> |
|
414 |
<td>Utils</td> |
|
415 |
<td>file</td> |
|
416 |
<td>Determines file type using 'magic' numbers</td> |
|
417 |
</tr> |
|
418 |
<tr> |
|
419 |
<td>zip.exe</td> |
|
420 |
<td>Archive</td> |
|
421 |
<td>zip</td> |
|
422 |
<td>Package and compress (archive) files</td> |
|
423 |
</tr> |
|
424 |
<tr> |
|
425 |
<td>unzip.exe</td> |
|
426 |
<td>Archive</td> |
|
427 |
<td>unzip</td> |
|
428 |
<td>Extract compressed files in a ZIP archive</td> |
|
429 |
</tr> |
|
430 |
<tr> |
|
431 |
<td>free.exe</td> |
|
432 |
<td>System</td> |
|
433 |
<td>procps</td> |
|
434 |
<td>Display amount of free and used memory in the system</td> |
|
435 |
</tr> |
|
436 |
</tbody> |
|
437 |
</table></p> |
|
438 |
</blockquote> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
439 |
|
33030 | 440 |
<p>Note that the CYGWIN software can conflict with other non-CYGWIN software on |
441 |
your Windows system. CYGWIN provides a <a href="http://cygwin.com/faq/ |
|
442 |
faq.using.html">FAQ</a> for known issues and problems, of particular interest is the |
|
443 |
section on <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda">BLODA (applications that interfere with |
|
444 |
CYGWIN)</a>.</p> |
|
445 |
||
446 |
<p><a name="msys"></a></p> |
|
447 |
||
448 |
<h6>MinGW/MSYS</h6> |
|
449 |
||
450 |
<p>MinGW ("Minimalist GNU for Windows") is a collection of free Windows specific |
|
451 |
header files and import libraries combined with GNU toolsets that allow one to |
|
452 |
produce native Windows programs that do not rely on any 3rd-party C runtime |
|
453 |
DLLs. MSYS is a supplement to MinGW which allows building applications and |
|
454 |
programs which rely on traditional UNIX tools to be present. Among others this |
|
455 |
includes tools like <code>bash</code> and <code>make</code>. See <a href="http://www.mingw.org/ |
|
456 |
wiki/MSYS">MinGW/MSYS</a> for more information.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
457 |
|
33030 | 458 |
<p>Like Cygwin, MinGW/MSYS can handle different types of path formats. They are |
459 |
internally converted to paths with forward slashes and drive letters |
|
460 |
<code><drive>:</code> replaced by a virtual directory <code>/<drive></code>. Additionally, MSYS |
|
461 |
automatically detects binaries compiled for the MSYS environment and feeds them |
|
462 |
with the internal, Unix-style path names. If native Windows applications are |
|
463 |
called from within MSYS programs their path arguments are automatically |
|
464 |
converted back to Windows style path names with drive letters and backslashes |
|
465 |
as path separators. This may cause problems for Windows applications which use |
|
466 |
forward slashes as parameter separator (e.g. <code>cl /nologo /I</code>) because MSYS may |
|
467 |
wrongly <a href="http://mingw.org/wiki/ |
|
468 |
Posix_path_conversion">replace such parameters by drive letters</a>.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
469 |
|
33030 | 470 |
<p>In addition to the tools which will be installed by default, you have to |
471 |
manually install the <code>msys-zip</code> and <code>msys-unzip</code> packages. This can be easily |
|
472 |
done with the MinGW command line installer:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
473 |
|
33030 | 474 |
<pre><code> mingw-get.exe install msys-zip |
475 |
mingw-get.exe install msys-unzip |
|
476 |
</code></pre> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
477 |
|
33030 | 478 |
<p><a name="vs2013"></a></p> |
479 |
||
480 |
<h5>Visual Studio 2013 Compilers</h5> |
|
481 |
||
482 |
<p>The 32-bit and 64-bit OpenJDK Windows build requires Microsoft Visual Studio |
|
483 |
C++ 2013 (VS2013) Professional Edition or Express compiler. The compiler and |
|
484 |
other tools are expected to reside in the location defined by the variable |
|
485 |
<code>VS120COMNTOOLS</code> which is set by the Microsoft Visual Studio installer.</p> |
|
486 |
||
487 |
<p>Only the C++ part of VS2013 is needed. Try to let the installation go to the |
|
488 |
default install directory. Always reboot your system after installing VS2013. |
|
489 |
The system environment variable VS120COMNTOOLS should be set in your |
|
490 |
environment.</p> |
|
491 |
||
492 |
<p>Make sure that TMP and TEMP are also set in the environment and refer to |
|
493 |
Windows paths that exist, like <code>C:\temp</code>, not <code>/tmp</code>, not <code>/cygdrive/c/temp</code>, |
|
494 |
and not <code>C:/temp</code>. <code>C:\temp</code> is just an example, it is assumed that this area |
|
495 |
is private to the user, so by default after installs you should see a unique |
|
496 |
user path in these variables.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
497 |
|
33030 | 498 |
<p><a name="macosx"></a></p> |
499 |
||
500 |
<h4>Mac OS X</h4> |
|
501 |
||
502 |
<p>Make sure you get the right XCode version.</p> |
|
503 |
||
504 |
<hr /> |
|
505 |
||
506 |
<p><a name="configure"></a></p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
507 |
|
33030 | 508 |
<h3>Configure</h3> |
509 |
||
510 |
<p>The basic invocation of the <code>configure</code> script looks like:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
511 |
|
33030 | 512 |
<blockquote> |
513 |
<p><strong><code>bash ./configure [options]</code></strong></p> |
|
514 |
</blockquote> |
|
515 |
||
516 |
<p>This will create an output directory containing the "configuration" and setup |
|
517 |
an area for the build result. This directory typically looks like:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
518 |
|
33030 | 519 |
<blockquote> |
520 |
<p><strong><code>build/linux-x64-normal-server-release</code></strong></p> |
|
521 |
</blockquote> |
|
522 |
||
523 |
<p><code>configure</code> will try to figure out what system you are running on and where all |
|
524 |
necessary build components are. If you have all prerequisites for building |
|
525 |
installed, it should find everything. If it fails to detect any component |
|
526 |
automatically, it will exit and inform you about the problem. When this |
|
527 |
happens, read more below in <a href="#configureoptions">the <code>configure</code> options</a>.</p> |
|
528 |
||
529 |
<p>Some examples:</p> |
|
530 |
||
531 |
<blockquote> |
|
532 |
<p><strong>Windows 32bit build with freetype specified:</strong> <br /> |
|
533 |
<code>bash ./configure --with-freetype=/cygdrive/c/freetype-i586 --with-target- |
|
534 |
bits=32</code></p> |
|
535 |
||
536 |
<p><strong>Debug 64bit Build:</strong> <br /> |
|
537 |
<code>bash ./configure --enable-debug --with-target-bits=64</code></p> |
|
538 |
</blockquote> |
|
539 |
||
540 |
<p><a name="configureoptions"></a></p> |
|
541 |
||
542 |
<h4>Configure Options</h4> |
|
543 |
||
544 |
<p>Complete details on all the OpenJDK <code>configure</code> options can be seen with:</p> |
|
545 |
||
546 |
<blockquote> |
|
547 |
<p><strong><code>bash ./configure --help=short</code></strong></p> |
|
548 |
</blockquote> |
|
549 |
||
550 |
<p>Use <code>-help</code> to see all the <code>configure</code> options available. You can generate any |
|
551 |
number of different configurations, e.g. debug, release, 32, 64, etc.</p> |
|
552 |
||
553 |
<p>Some of the more commonly used <code>configure</code> options are:</p> |
|
554 |
||
555 |
<blockquote> |
|
556 |
<p><strong><code>--enable-debug</code></strong> <br /> |
|
557 |
set the debug level to fastdebug (this is a shorthand for <code>--with-debug- |
|
558 |
level=fastdebug</code>)</p> |
|
559 |
</blockquote> |
|
560 |
||
561 |
<p><a name="alsa"></a></p> |
|
562 |
||
563 |
<blockquote> |
|
564 |
<p><strong><code>--with-alsa=</code></strong><em>path</em> <br /> |
|
565 |
select the location of the Advanced Linux Sound Architecture (ALSA)</p> |
|
566 |
||
567 |
<p>Version 0.9.1 or newer of the ALSA files are required for building the |
|
568 |
OpenJDK on Linux. These Linux files are usually available from an "alsa" of |
|
569 |
"libasound" development package, and it's highly recommended that you try |
|
570 |
and use the package provided by the particular version of Linux that you are |
|
571 |
using.</p> |
|
572 |
||
573 |
<p><strong><code>--with-boot-jdk=</code></strong><em>path</em> <br /> |
|
574 |
select the <a href="#bootjdk">Bootstrap JDK</a></p> |
|
575 |
||
576 |
<p><strong><code>--with-boot-jdk-jvmargs=</code></strong>"<em>args</em>" <br /> |
|
577 |
provide the JVM options to be used to run the <a href="#bootjdk">Bootstrap JDK</a></p> |
|
578 |
||
579 |
<p><strong><code>--with-cacerts=</code></strong><em>path</em> <br /> |
|
580 |
select the path to the cacerts file.</p> |
|
581 |
||
582 |
<p>See <a href="http://en.wikipedia.org/wiki/ |
|
583 |
Certificate_Authority">Certificate Authority on Wikipedia</a> for a better understanding of the Certificate |
|
584 |
Authority (CA). A certificates file named "cacerts" represents a system-wide |
|
585 |
keystore with CA certificates. In JDK and JRE binary bundles, the "cacerts" |
|
586 |
file contains root CA certificates from several public CAs (e.g., VeriSign, |
|
587 |
Thawte, and Baltimore). The source contain a cacerts file without CA root |
|
588 |
certificates. Formal JDK builders will need to secure permission from each |
|
589 |
public CA and include the certificates into their own custom cacerts file. |
|
590 |
Failure to provide a populated cacerts file will result in verification |
|
591 |
errors of a certificate chain during runtime. By default an empty cacerts |
|
592 |
file is provided and that should be fine for most JDK developers.</p> |
|
593 |
</blockquote> |
|
594 |
||
595 |
<p><a name="cups"></a></p> |
|
596 |
||
597 |
<blockquote> |
|
598 |
<p><strong><code>--with-cups=</code></strong><em>path</em> <br /> |
|
599 |
select the CUPS install location</p> |
|
600 |
||
601 |
<p>The Common UNIX Printing System (CUPS) Headers are required for building the |
|
602 |
OpenJDK on Solaris and Linux. The Solaris header files can be obtained by |
|
603 |
installing the package <strong>SFWcups</strong> from the Solaris Software Companion |
|
604 |
CD/DVD, these often will be installed into the directory <code>/opt/sfw/cups</code>.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
605 |
|
33030 | 606 |
<p>The CUPS header files can always be downloaded from |
607 |
<a href="http://www.cups.org">www.cups.org</a>.</p> |
|
608 |
||
609 |
<p><strong><code>--with-cups-include=</code></strong><em>path</em> <br /> |
|
610 |
select the CUPS include directory location</p> |
|
611 |
||
612 |
<p><strong><code>--with-debug-level=</code></strong><em>level</em> <br /> |
|
613 |
select the debug information level of release, fastdebug, or slowdebug</p> |
|
614 |
||
615 |
<p><strong><code>--with-dev-kit=</code></strong><em>path</em> <br /> |
|
616 |
select location of the compiler install or developer install location</p> |
|
617 |
</blockquote> |
|
618 |
||
619 |
<p><a name="freetype"></a></p> |
|
620 |
||
621 |
<blockquote> |
|
622 |
<p><strong><code>--with-freetype=</code></strong><em>path</em> <br /> |
|
623 |
select the freetype files to use.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
624 |
|
33030 | 625 |
<p>Expecting the freetype libraries under <code>lib/</code> and the headers under |
626 |
<code>include/</code>.</p> |
|
627 |
||
628 |
<p>Version 2.3 or newer of FreeType is required. On Unix systems required files |
|
629 |
can be available as part of your distribution (while you still may need to |
|
630 |
upgrade them). Note that you need development version of package that |
|
631 |
includes both the FreeType library and header files.</p> |
|
632 |
||
633 |
<p>You can always download latest FreeType version from the <a href="http://www.freetype.org">FreeType |
|
634 |
website</a>. Building the freetype 2 libraries from |
|
635 |
scratch is also possible, however on Windows refer to the <a href="http://freetype.freedesktop.org/wiki/FreeType_DLL">Windows FreeType |
|
636 |
DLL build instructions</a>.</p> |
|
637 |
||
638 |
<p>Note that by default FreeType is built with byte code hinting support |
|
639 |
disabled due to licensing restrictions. In this case, text appearance and |
|
640 |
metrics are expected to differ from Sun's official JDK build. See the |
|
641 |
<a href="http://freetype.sourceforge.net/freetype2">SourceForge FreeType2 Home Page</a> |
|
642 |
for more information.</p> |
|
643 |
||
644 |
<p><strong><code>--with-import-hotspot=</code></strong><em>path</em> <br /> |
|
645 |
select the location to find hotspot binaries from a previous build to avoid |
|
646 |
building hotspot</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
647 |
|
33030 | 648 |
<p><strong><code>--with-target-bits=</code></strong><em>arg</em> <br /> |
649 |
select 32 or 64 bit build</p> |
|
650 |
||
651 |
<p><strong><code>--with-jvm-variants=</code></strong><em>variants</em> <br /> |
|
652 |
select the JVM variants to build from, comma separated list that can |
|
653 |
include: server, client, kernel, zero and zeroshark</p> |
|
654 |
||
655 |
<p><strong><code>--with-memory-size=</code></strong><em>size</em> <br /> |
|
656 |
select the RAM size that GNU make will think this system has</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
657 |
|
33030 | 658 |
<p><strong><code>--with-msvcr-dll=</code></strong><em>path</em> <br /> |
659 |
select the <code>msvcr100.dll</code> file to include in the Windows builds (C/C++ |
|
660 |
runtime library for Visual Studio).</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
661 |
|
33030 | 662 |
<p>This is usually picked up automatically from the redist directories of |
663 |
Visual Studio 2013.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
664 |
|
33030 | 665 |
<p><strong><code>--with-num-cores=</code></strong><em>cores</em> <br /> |
666 |
select the number of cores to use (processor count or CPU count)</p> |
|
667 |
</blockquote> |
|
8646
f07e5ed381a8
6896934: README: Document how the drop source bundles work for jaxp/jaxws
ohair
parents:
8057
diff
changeset
|
668 |
|
33030 | 669 |
<p><a name="xrender"></a></p> |
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
670 |
|
33030 | 671 |
<blockquote> |
672 |
<p><strong><code>--with-x=</code></strong><em>path</em> <br /> |
|
673 |
select the location of the X11 and xrender files.</p> |
|
8646
f07e5ed381a8
6896934: README: Document how the drop source bundles work for jaxp/jaxws
ohair
parents:
8057
diff
changeset
|
674 |
|
33030 | 675 |
<p>The XRender Extension Headers are required for building the OpenJDK on |
676 |
Solaris and Linux. The Linux header files are usually available from a |
|
677 |
"Xrender" development package, it's recommended that you try and use the |
|
678 |
package provided by the particular distribution of Linux that you are using. |
|
679 |
The Solaris XRender header files is included with the other X11 header files |
|
680 |
in the package <strong>SFWxwinc</strong> on new enough versions of Solaris and will be |
|
681 |
installed in <code>/usr/X11/include/X11/extensions/Xrender.h</code> or |
|
682 |
<code>/usr/openwin/share/include/X11/extensions/Xrender.h</code></p> |
|
683 |
</blockquote> |
|
19525 | 684 |
|
33030 | 685 |
<hr /> |
686 |
||
687 |
<p><a name="make"></a></p> |
|
688 |
||
689 |
<h3>Make</h3> |
|
690 |
||
691 |
<p>The basic invocation of the <code>make</code> utility looks like:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
692 |
|
33030 | 693 |
<blockquote> |
694 |
<p><strong><code>make all</code></strong></p> |
|
695 |
</blockquote> |
|
696 |
||
697 |
<p>This will start the build to the output directory containing the |
|
698 |
"configuration" that was created by the <code>configure</code> script. Run <code>make help</code> for |
|
699 |
more information on the available targets.</p> |
|
700 |
||
701 |
<p>There are some of the make targets that are of general interest:</p> |
|
702 |
||
703 |
<blockquote> |
|
704 |
<p><em>empty</em> <br /> |
|
705 |
build everything but no images</p> |
|
706 |
||
707 |
<p><strong><code>all</code></strong> <br /> |
|
708 |
build everything including images</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
709 |
|
33030 | 710 |
<p><strong><code>all-conf</code></strong> <br /> |
711 |
build all configurations</p> |
|
712 |
||
713 |
<p><strong><code>images</code></strong> <br /> |
|
714 |
create complete j2sdk and j2re images</p> |
|
715 |
||
716 |
<p><strong><code>install</code></strong> <br /> |
|
717 |
install the generated images locally, typically in <code>/usr/local</code></p> |
|
8646
f07e5ed381a8
6896934: README: Document how the drop source bundles work for jaxp/jaxws
ohair
parents:
8057
diff
changeset
|
718 |
|
33030 | 719 |
<p><strong><code>clean</code></strong> <br /> |
720 |
remove all files generated by make, but not those generated by <code>configure</code></p> |
|
721 |
||
722 |
<p><strong><code>dist-clean</code></strong> <br /> |
|
723 |
remove all files generated by both and <code>configure</code> (basically killing the |
|
724 |
configuration)</p> |
|
725 |
||
726 |
<p><strong><code>help</code></strong> <br /> |
|
727 |
give some help on using <code>make</code>, including some interesting make targets</p> |
|
728 |
</blockquote> |
|
729 |
||
730 |
<hr /> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
731 |
|
33030 | 732 |
<p><a name="testing"></a></p> |
733 |
||
734 |
<h2>Testing</h2> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
735 |
|
33030 | 736 |
<p>When the build is completed, you should see the generated binaries and |
737 |
associated files in the <code>j2sdk-image</code> directory in the output directory. In |
|
738 |
particular, the <code>build/*/images/j2sdk-image/bin</code> directory should contain |
|
739 |
executables for the OpenJDK tools and utilities for that configuration. The |
|
740 |
testing tool <code>jtreg</code> will be needed and can be found at: <a href="http://openjdk.java.net/jtreg/">the jtreg |
|
741 |
site</a>. The provided regression tests in the |
|
742 |
repositories can be run with the command:</p> |
|
743 |
||
744 |
<blockquote> |
|
745 |
<p><strong><code>cd test && make PRODUCT_HOME=`pwd`/../build/*/images/j2sdk-image all</code></strong></p> |
|
746 |
</blockquote> |
|
747 |
||
748 |
<hr /> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
749 |
|
33030 | 750 |
<p><a name="hints"></a></p> |
751 |
||
752 |
<h2>Appendix A: Hints and Tips</h2> |
|
753 |
||
754 |
<p><a name="faq"></a></p> |
|
755 |
||
756 |
<h3>FAQ</h3> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
757 |
|
33030 | 758 |
<p><strong>Q:</strong> The <code>generated-configure.sh</code> file looks horrible! How are you going to |
759 |
edit it? <br /> |
|
760 |
<strong>A:</strong> The <code>generated-configure.sh</code> file is generated (think "compiled") by the |
|
761 |
autoconf tools. The source code is in <code>configure.ac</code> and various .m4 files in |
|
762 |
common/autoconf, which are much more readable.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
763 |
|
33030 | 764 |
<p><strong>Q:</strong> Why is the <code>generated-configure.sh</code> file checked in, if it is |
765 |
generated? <br /> |
|
766 |
<strong>A:</strong> If it was not generated, every user would need to have the autoconf |
|
767 |
tools installed, and re-generate the <code>configure</code> file as the first step. Our |
|
768 |
goal is to minimize the work needed to be done by the user to start building |
|
769 |
OpenJDK, and to minimize the number of external dependencies required.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
770 |
|
33030 | 771 |
<p><strong>Q:</strong> Do you require a specific version of autoconf for regenerating |
772 |
<code>generated-configure.sh</code>? <br /> |
|
773 |
<strong>A:</strong> Yes, version 2.69 is required and should be easy enough to aquire on all |
|
774 |
supported operating systems. The reason for this is to avoid large spurious |
|
775 |
changes in <code>generated-configure.sh</code>.</p> |
|
776 |
||
777 |
<p><strong>Q:</strong> How do you regenerate <code>generated-configure.sh</code> after making changes to |
|
778 |
the input files? <br /> |
|
779 |
<strong>A:</strong> Regnerating <code>generated-configure.sh</code> should always be done using the |
|
780 |
script <code>common/autoconf/autogen.sh</code> to ensure that the correct files get |
|
781 |
updated. This script should also be run after mercurial tries to merge |
|
782 |
<code>generated-configure.sh</code> as a merge of the generated file is not guaranteed to |
|
783 |
be correct.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
784 |
|
33030 | 785 |
<p><strong>Q:</strong> What are the files in <code>common/makefiles/support/*</code> for? They look like |
786 |
gibberish. <br /> |
|
787 |
<strong>A:</strong> They are a somewhat ugly hack to compensate for command line length |
|
788 |
limitations on certain platforms (Windows, Solaris). Due to a combination of |
|
789 |
limitations in make and the shell, command lines containing too many files will |
|
790 |
not work properly. These helper files are part of an elaborate hack that will |
|
791 |
compress the command line in the makefile and then uncompress it safely. We're |
|
792 |
not proud of it, but it does fix the problem. If you have any better |
|
793 |
suggestions, we're all ears! :-)</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
794 |
|
33030 | 795 |
<p><strong>Q:</strong> I want to see the output of the commands that make runs, like in the old |
796 |
build. How do I do that? <br /> |
|
797 |
<strong>A:</strong> You specify the <code>LOG</code> variable to make. There are several log levels:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
798 |
|
33030 | 799 |
<ul> |
800 |
<li><strong><code>warn</code></strong> -- Default and very quiet.</li> |
|
801 |
<li><strong><code>info</code></strong> -- Shows more progress information than warn.</li> |
|
802 |
<li><strong><code>debug</code></strong> -- Echos all command lines and prints all macro calls for |
|
803 |
compilation definitions.</li> |
|
804 |
<li><strong><code>trace</code></strong> -- Echos all $(shell) command lines as well.</li> |
|
805 |
</ul> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
806 |
|
33030 | 807 |
<p><strong>Q:</strong> When do I have to re-run <code>configure</code>? <br /> |
808 |
<strong>A:</strong> Normally you will run <code>configure</code> only once for creating a |
|
809 |
configuration. You need to re-run configuration only if you want to change any |
|
810 |
configuration options, or if you pull down changes to the <code>configure</code> script.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
811 |
|
33030 | 812 |
<p><strong>Q:</strong> I have added a new source file. Do I need to modify the makefiles? <br /> |
813 |
<strong>A:</strong> Normally, no. If you want to create e.g. a new native library, you will |
|
814 |
need to modify the makefiles. But for normal file additions or removals, no |
|
815 |
changes are needed. There are certan exceptions for some native libraries where |
|
816 |
the source files are spread over many directories which also contain sources |
|
817 |
for other libraries. In these cases it was simply easier to create include |
|
818 |
lists rather than excludes.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
819 |
|
33030 | 820 |
<p><strong>Q:</strong> When I run <code>configure --help</code>, I see many strange options, like |
821 |
<code>--dvidir</code>. What is this? <br /> |
|
822 |
<strong>A:</strong> Configure provides a slew of options by default, to all projects that |
|
823 |
use autoconf. Most of them are not used in OpenJDK, so you can safely ignore |
|
824 |
them. To list only OpenJDK specific features, use <code>configure --help=short</code> |
|
825 |
instead.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
826 |
|
33030 | 827 |
<p><strong>Q:</strong> <code>configure</code> provides OpenJDK-specific features such as <code>--with- |
828 |
builddeps-server</code> that are not described in this document. What about those? <br /> |
|
829 |
<strong>A:</strong> Try them out if you like! But be aware that most of these are |
|
830 |
experimental features. Many of them don't do anything at all at the moment; the |
|
831 |
option is just a placeholder. Others depend on pieces of code or infrastructure |
|
832 |
that is currently not ready for prime time.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
833 |
|
33030 | 834 |
<p><strong>Q:</strong> How will you make sure you don't break anything? <br /> |
835 |
<strong>A:</strong> We have a script that compares the result of the new build system with |
|
836 |
the result of the old. For most part, we aim for (and achieve) byte-by-byte |
|
837 |
identical output. There are however technical issues with e.g. native binaries, |
|
838 |
which might differ in a byte-by-byte comparison, even when building twice with |
|
839 |
the old build system. For these, we compare relevant aspects (e.g. the symbol |
|
840 |
table and file size). Note that we still don't have 100% equivalence, but we're |
|
841 |
close.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
842 |
|
33030 | 843 |
<p><strong>Q:</strong> I noticed this thing X in the build that looks very broken by design. |
844 |
Why don't you fix it? <br /> |
|
845 |
<strong>A:</strong> Our goal is to produce a build output that is as close as technically |
|
846 |
possible to the old build output. If things were weird in the old build, they |
|
847 |
will be weird in the new build. Often, things were weird before due to |
|
848 |
obscurity, but in the new build system the weird stuff comes up to the surface. |
|
849 |
The plan is to attack these things at a later stage, after the new build system |
|
850 |
is established.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
851 |
|
33030 | 852 |
<p><strong>Q:</strong> The code in the new build system is not that well-structured. Will you |
853 |
fix this? <br /> |
|
854 |
<strong>A:</strong> Yes! The new build system has grown bit by bit as we converted the old |
|
855 |
system. When all of the old build system is converted, we can take a step back |
|
856 |
and clean up the structure of the new build system. Some of this we plan to do |
|
857 |
before replacing the old build system and some will need to wait until after.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
858 |
|
33030 | 859 |
<p><strong>Q:</strong> Is anything able to use the results of the new build's default make |
860 |
target? <br /> |
|
861 |
<strong>A:</strong> Yes, this is the minimal (or roughly minimal) set of compiled output |
|
862 |
needed for a developer to actually execute the newly built JDK. The idea is |
|
863 |
that in an incremental development fashion, when doing a normal make, you |
|
864 |
should only spend time recompiling what's changed (making it purely |
|
865 |
incremental) and only do the work that's needed to actually run and test your |
|
866 |
code. The packaging stuff that is part of the <code>images</code> target is not needed for |
|
867 |
a normal developer who wants to test his new code. Even if it's quite fast, |
|
868 |
it's still unnecessary. We're targeting sub-second incremental rebuilds! ;-) |
|
869 |
(Or, well, at least single-digit seconds...)</p> |
|
870 |
||
871 |
<p><strong>Q:</strong> I usually set a specific environment variable when building, but I can't |
|
872 |
find the equivalent in the new build. What should I do? <br /> |
|
873 |
<strong>A:</strong> It might very well be that we have neglected to add support for an |
|
874 |
option that was actually used from outside the build system. Email us and we |
|
875 |
will add support for it!</p> |
|
876 |
||
877 |
<p><a name="performance"></a></p> |
|
878 |
||
879 |
<h3>Build Performance Tips</h3> |
|
880 |
||
881 |
<p>Building OpenJDK requires a lot of horsepower. Some of the build tools can be |
|
882 |
adjusted to utilize more or less of resources such as parallel threads and |
|
883 |
memory. The <code>configure</code> script analyzes your system and selects reasonable |
|
884 |
values for such options based on your hardware. If you encounter resource |
|
885 |
problems, such as out of memory conditions, you can modify the detected values |
|
886 |
with:</p> |
|
887 |
||
888 |
<ul> |
|
889 |
<li><strong><code>--with-num-cores</code></strong> -- number of cores in the build system, e.g. |
|
890 |
<code>--with-num-cores=8</code></li> |
|
891 |
<li><strong><code>--with-memory-size</code></strong> -- memory (in MB) available in the build system, |
|
892 |
e.g. <code>--with-memory-size=1024</code></li> |
|
893 |
</ul> |
|
894 |
||
895 |
<p>It might also be necessary to specify the JVM arguments passed to the Bootstrap |
|
896 |
JDK, using e.g. <code>--with-boot-jdk-jvmargs="-Xmx8G -enableassertions"</code>. Doing |
|
897 |
this will override the default JVM arguments passed to the Bootstrap JDK.</p> |
|
898 |
||
899 |
<p>One of the top goals of the new build system is to improve the build |
|
900 |
performance and decrease the time needed to build. This will soon also apply to |
|
901 |
the java compilation when the Smart Javac wrapper is fully supported.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
902 |
|
33030 | 903 |
<p>At the end of a successful execution of <code>configure</code>, you will get a performance |
904 |
summary, indicating how well the build will perform. Here you will also get |
|
905 |
performance hints. If you want to build fast, pay attention to those!</p> |
|
906 |
||
907 |
<h4>Building with ccache</h4> |
|
908 |
||
909 |
<p>The OpenJDK build supports building with ccache when using gcc or clang. Using |
|
910 |
ccache can radically speed up compilation of native code if you often rebuild |
|
911 |
the same sources. Your milage may vary however so we recommend evaluating it |
|
912 |
for yourself. To enable it, make sure it's on the path and configure with |
|
913 |
<code>--enable-ccache</code>.</p> |
|
914 |
||
915 |
<h4>Building on local disk</h4> |
|
916 |
||
917 |
<p>If you are using network shares, e.g. via NFS, for your source code, make sure |
|
918 |
the build directory is situated on local disk. The performance penalty is |
|
919 |
extremely high for building on a network share, close to unusable.</p> |
|
920 |
||
921 |
<h4>Building only one JVM</h4> |
|
922 |
||
923 |
<p>The old build builds multiple JVMs on 32-bit systems (client and server; and on |
|
924 |
Windows kernel as well). In the new build we have changed this default to only |
|
925 |
build server when it's available. This improves build times for those not |
|
926 |
interested in multiple JVMs. To mimic the old behavior on platforms that |
|
927 |
support it, use <code>--with-jvm-variants=client,server</code>.</p> |
|
928 |
||
929 |
<h4>Selecting the number of cores to build on</h4> |
|
930 |
||
931 |
<p>By default, <code>configure</code> will analyze your machine and run the make process in |
|
932 |
parallel with as many threads as you have cores. This behavior can be |
|
933 |
overridden, either "permanently" (on a <code>configure</code> basis) using |
|
934 |
<code>--with-num-cores=N</code> or for a single build only (on a make basis), using |
|
935 |
<code>make JOBS=N</code>.</p> |
|
936 |
||
937 |
<p>If you want to make a slower build just this time, to save some CPU power for |
|
938 |
other processes, you can run e.g. <code>make JOBS=2</code>. This will force the makefiles |
|
939 |
to only run 2 parallel processes, or even <code>make JOBS=1</code> which will disable |
|
940 |
parallelism.</p> |
|
941 |
||
942 |
<p>If you want to have it the other way round, namely having slow builds default |
|
943 |
and override with fast if you're impatient, you should call <code>configure</code> with |
|
944 |
<code>--with-num-cores=2</code>, making 2 the default. If you want to run with more cores, |
|
945 |
run <code>make JOBS=8</code></p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
946 |
|
33030 | 947 |
<p><a name="troubleshooting"></a></p> |
948 |
||
949 |
<h3>Troubleshooting</h3> |
|
950 |
||
951 |
<h4>Solving build problems</h4> |
|
952 |
||
953 |
<p>If the build fails (and it's not due to a compilation error in a source file |
|
954 |
you've changed), the first thing you should do is to re-run the build with more |
|
955 |
verbosity. Do this by adding <code>LOG=debug</code> to your make command line.</p> |
|
956 |
||
957 |
<p>The build log (with both stdout and stderr intermingled, basically the same as |
|
958 |
you see on your console) can be found as <code>build.log</code> in your build directory.</p> |
|
959 |
||
960 |
<p>You can ask for help on build problems with the new build system on either the |
|
961 |
<a href="http://mail.openjdk.java.net/mailman/listinfo/build-dev">build-dev</a> or the |
|
962 |
<a href="http://mail.openjdk.java.net/mailman/listinfo/build-infra-dev">build-infra-dev</a> |
|
963 |
mailing lists. Please include the relevant parts of the build log.</p> |
|
964 |
||
965 |
<p>A build can fail for any number of reasons. Most failures are a result of |
|
966 |
trying to build in an environment in which all the pre-build requirements have |
|
967 |
not been met. The first step in troubleshooting a build failure is to recheck |
|
968 |
that you have satisfied all the pre-build requirements for your platform. |
|
969 |
Scanning the <code>configure</code> log is a good first step, making sure that what it |
|
970 |
found makes sense for your system. Look for strange error messages or any |
|
971 |
difficulties that <code>configure</code> had in finding things.</p> |
|
972 |
||
973 |
<p>Some of the more common problems with builds are briefly described below, with |
|
974 |
suggestions for remedies.</p> |
|
975 |
||
976 |
<ul> |
|
977 |
<li><p><strong>Corrupted Bundles on Windows:</strong> <br /> |
|
978 |
Some virus scanning software has been known to corrupt the downloading of |
|
979 |
zip bundles. It may be necessary to disable the 'on access' or 'real time' |
|
980 |
virus scanning features to prevent this corruption. This type of 'real time' |
|
981 |
virus scanning can also slow down the build process significantly. |
|
982 |
Temporarily disabling the feature, or excluding the build output directory |
|
983 |
may be necessary to get correct and faster builds.</p></li> |
|
984 |
<li><p><strong>Slow Builds:</strong> <br /> |
|
985 |
If your build machine seems to be overloaded from too many simultaneous C++ |
|
986 |
compiles, try setting the <code>JOBS=1</code> on the <code>make</code> command line. Then try |
|
987 |
increasing the count slowly to an acceptable level for your system. Also:</p> |
|
988 |
||
989 |
<p>Creating the javadocs can be very slow, if you are running javadoc, consider |
|
990 |
skipping that step.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
991 |
|
33030 | 992 |
<p>Faster CPUs, more RAM, and a faster DISK usually helps. The VM build tends |
993 |
to be CPU intensive (many C++ compiles), and the rest of the JDK will often |
|
994 |
be disk intensive.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
995 |
|
33030 | 996 |
<p>Faster compiles are possible using a tool called |
997 |
<a href="http://ccache.samba.org/">ccache</a>.</p></li> |
|
998 |
<li><p><strong>File time issues:</strong> <br /> |
|
999 |
If you see warnings that refer to file time stamps, e.g.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1000 |
|
33030 | 1001 |
<blockquote> |
1002 |
<p><em>Warning message:</em> <code>File 'xxx' has modification time in the future.</code> <br /> |
|
1003 |
<em>Warning message:</em> <code>Clock skew detected. Your build may be incomplete.</code></p> |
|
1004 |
</blockquote> |
|
1005 |
||
1006 |
<p>These warnings can occur when the clock on the build machine is out of sync |
|
1007 |
with the timestamps on the source files. Other errors, apparently unrelated |
|
1008 |
but in fact caused by the clock skew, can occur along with the clock skew |
|
1009 |
warnings. These secondary errors may tend to obscure the fact that the true |
|
1010 |
root cause of the problem is an out-of-sync clock.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1011 |
|
33030 | 1012 |
<p>If you see these warnings, reset the clock on the build machine, run |
1013 |
"<code>gmake clobber</code>" or delete the directory containing the build output, and |
|
1014 |
restart the build from the beginning.</p></li> |
|
1015 |
<li><p><strong>Error message: <code>Trouble writing out table to disk</code></strong> <br /> |
|
1016 |
Increase the amount of swap space on your build machine. This could be |
|
1017 |
caused by overloading the system and it may be necessary to use:</p> |
|
1018 |
||
1019 |
<blockquote> |
|
1020 |
<p><code>make JOBS=1</code></p> |
|
1021 |
</blockquote> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1022 |
|
33030 | 1023 |
<p>to reduce the load on the system.</p></li> |
1024 |
<li><p><strong>Error Message: <code>libstdc++ not found</code>:</strong> <br /> |
|
1025 |
This is caused by a missing libstdc++.a library. This is installed as part |
|
1026 |
of a specific package (e.g. libstdc++.so.devel.386). By default some 64-bit |
|
1027 |
Linux versions (e.g. Fedora) only install the 64-bit version of the |
|
1028 |
libstdc++ package. Various parts of the JDK build require a static link of |
|
1029 |
the C++ runtime libraries to allow for maximum portability of the built |
|
1030 |
images.</p></li> |
|
1031 |
<li><p><strong>Linux Error Message: <code>cannot restore segment prot after reloc</code></strong> <br /> |
|
1032 |
This is probably an issue with SELinux (See <a href="http://en.wikipedia.org/wiki/SELinux">SELinux on |
|
1033 |
Wikipedia</a>). Parts of the VM is built |
|
1034 |
without the <code>-fPIC</code> for performance reasons.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1035 |
|
33030 | 1036 |
<p>To completely disable SELinux:</p> |
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1037 |
|
33030 | 1038 |
<ol> |
1039 |
<li><code>$ su root</code></li> |
|
1040 |
<li><code># system-config-securitylevel</code></li> |
|
1041 |
<li><code>In the window that appears, select the SELinux tab</code></li> |
|
1042 |
<li><code>Disable SELinux</code></li> |
|
1043 |
</ol> |
|
1044 |
||
1045 |
<p>Alternatively, instead of completely disabling it you could disable just |
|
1046 |
this one check.</p> |
|
1047 |
||
1048 |
<ol> |
|
1049 |
<li>Select System->Administration->SELinux Management</li> |
|
1050 |
<li>In the SELinux Management Tool which appears, select "Boolean" from the |
|
1051 |
menu on the left</li> |
|
1052 |
<li>Expand the "Memory Protection" group</li> |
|
1053 |
<li>Check the first item, labeled "Allow all unconfined executables to use |
|
1054 |
libraries requiring text relocation ..."</li> |
|
1055 |
</ol></li> |
|
1056 |
<li><p><strong>Windows Error Messages:</strong> <br /> |
|
1057 |
<code>*** fatal error - couldn't allocate heap, ...</code> <br /> |
|
1058 |
<code>rm fails with "Directory not empty"</code> <br /> |
|
1059 |
<code>unzip fails with "cannot create ... Permission denied"</code> <br /> |
|
1060 |
<code>unzip fails with "cannot create ... Error 50"</code></p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1061 |
|
33030 | 1062 |
<p>The CYGWIN software can conflict with other non-CYGWIN software. See the |
1063 |
CYGWIN FAQ section on <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda">BLODA (applications that interfere with |
|
1064 |
CYGWIN)</a>.</p></li> |
|
1065 |
<li><p><strong>Windows Error Message: <code>spawn failed</code></strong> <br /> |
|
1066 |
Try rebooting the system, or there could be some kind of issue with the disk |
|
1067 |
or disk partition being used. Sometimes it comes with a "Permission Denied" |
|
1068 |
message.</p></li> |
|
1069 |
</ul> |
|
1070 |
||
1071 |
<hr /> |
|
1072 |
||
1073 |
<p><a name="gmake"></a></p> |
|
1074 |
||
1075 |
<h2>Appendix B: GNU make</h2> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1076 |
|
33030 | 1077 |
<p>The Makefiles in the OpenJDK are only valid when used with the GNU version of |
1078 |
the utility command <code>make</code> (usually called <code>gmake</code> on Solaris). A few notes |
|
1079 |
about using GNU make:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1080 |
|
33030 | 1081 |
<ul> |
1082 |
<li>You need GNU make version 3.81 or newer. On Windows 4.0 or newer is |
|
1083 |
recommended. If the GNU make utility on your systems is not of a suitable |
|
1084 |
version, see "<a href="#buildgmake">Building GNU make</a>".</li> |
|
1085 |
<li>Place the location of the GNU make binary in the <code>PATH</code>.</li> |
|
1086 |
<li><strong>Solaris:</strong> Do NOT use <code>/usr/bin/make</code> on Solaris. If your Solaris system |
|
1087 |
has the software from the Solaris Developer Companion CD installed, you |
|
1088 |
should try and use <code>gmake</code> which will be located in either the <code>/usr/bin</code>, |
|
1089 |
<code>/opt/sfw/bin</code> or <code>/usr/sfw/bin</code> directory.</li> |
|
1090 |
<li><strong>Windows:</strong> Make sure you start your build inside a bash shell.</li> |
|
1091 |
<li><strong>Mac OS X:</strong> The XCode "command line tools" must be installed on your Mac.</li> |
|
1092 |
</ul> |
|
1093 |
||
1094 |
<p>Information on GNU make, and access to ftp download sites, are available on the |
|
1095 |
<a href="http://www.gnu.org/software/make/make.html">GNU make web site </a>. The latest |
|
1096 |
source to GNU make is available at |
|
1097 |
<a href="http://ftp.gnu.org/pub/gnu/make/">ftp.gnu.org/pub/gnu/make/</a>.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1098 |
|
33030 | 1099 |
<p><a name="buildgmake"></a></p> |
1100 |
||
1101 |
<h3>Building GNU make</h3> |
|
1102 |
||
1103 |
<p>First step is to get the GNU make 3.81 or newer source from |
|
1104 |
<a href="http://ftp.gnu.org/pub/gnu/make/">ftp.gnu.org/pub/gnu/make/</a>. Building is a |
|
1105 |
little different depending on the OS but is basically done with:</p> |
|
1106 |
||
1107 |
<pre><code> bash ./configure |
|
1108 |
make |
|
1109 |
</code></pre> |
|
1110 |
||
1111 |
<hr /> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1112 |
|
33030 | 1113 |
<p><a name="buildenvironments"></a></p> |
1114 |
||
1115 |
<h2>Appendix C: Build Environments</h2> |
|
1116 |
||
1117 |
<h3>Minimum Build Environments</h3> |
|
1118 |
||
1119 |
<p>This file often describes specific requirements for what we call the "minimum |
|
1120 |
build environments" (MBE) for this specific release of the JDK. What is listed |
|
1121 |
below is what the Oracle Release Engineering Team will use to build the Oracle |
|
1122 |
JDK product. Building with the MBE will hopefully generate the most compatible |
|
1123 |
bits that install on, and run correctly on, the most variations of the same |
|
1124 |
base OS and hardware architecture. In some cases, these represent what is often |
|
1125 |
called the least common denominator, but each Operating System has different |
|
1126 |
aspects to it.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1127 |
|
33030 | 1128 |
<p>In all cases, the Bootstrap JDK version minimum is critical, we cannot |
1129 |
guarantee builds will work with older Bootstrap JDK's. Also in all cases, more |
|
1130 |
RAM and more processors is better, the minimums listed below are simply |
|
1131 |
recommendations.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1132 |
|
33030 | 1133 |
<p>With Solaris and Mac OS X, the version listed below is the oldest release we |
1134 |
can guarantee builds and works, and the specific version of the compilers used |
|
1135 |
could be critical.</p> |
|
1136 |
||
1137 |
<p>With Windows the critical aspect is the Visual Studio compiler used, which due |
|
1138 |
to it's runtime, generally dictates what Windows systems can do the builds and |
|
1139 |
where the resulting bits can be used.</p> |
|
1140 |
||
1141 |
<p><strong>NOTE: We expect a change here off these older Windows OS releases and to a |
|
1142 |
'less older' one, probably Windows 2008R2 X64.</strong></p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1143 |
|
33030 | 1144 |
<p>With Linux, it was just a matter of picking a stable distribution that is a |
1145 |
good representative for Linux in general.</p> |
|
1146 |
||
1147 |
<p><strong>NOTE: We expect a change here from Fedora 9 to something else, but it has not |
|
1148 |
been completely determined yet, possibly Ubuntu 12.04 X64, unbiased community |
|
1149 |
feedback would be welcome on what a good choice would be here.</strong></p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1150 |
|
33030 | 1151 |
<p>It is understood that most developers will NOT be using these specific |
1152 |
versions, and in fact creating these specific versions may be difficult due to |
|
1153 |
the age of some of this software. It is expected that developers are more often |
|
1154 |
using the more recent releases and distributions of these operating systems.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1155 |
|
33030 | 1156 |
<p>Compilation problems with newer or different C/C++ compilers is a common |
1157 |
problem. Similarly, compilation problems related to changes to the |
|
1158 |
<code>/usr/include</code> or system header files is also a common problem with older, |
|
1159 |
newer, or unreleased OS versions. Please report these types of problems as bugs |
|
1160 |
so that they can be dealt with accordingly.</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1161 |
|
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1162 |
<blockquote> |
33030 | 1163 |
<p><table border="1"> |
1164 |
<thead> |
|
1165 |
<tr> |
|
1166 |
<th>Base OS and Architecture</th> |
|
1167 |
<th>OS</th> |
|
1168 |
<th>C/C++ Compiler</th> |
|
1169 |
<th>Bootstrap JDK</th> |
|
1170 |
<th>Processors</th> |
|
1171 |
<th>RAM Minimum</th> |
|
1172 |
<th>DISK Needs</th> |
|
1173 |
</tr> |
|
1174 |
</thead> |
|
1175 |
<tbody> |
|
1176 |
<tr> |
|
1177 |
<td>Linux X86 (32-bit) and X64 (64-bit)</td> |
|
1178 |
<td>Oracle Enterprise Linux 6.4</td> |
|
1179 |
<td>gcc 4.8.2 </td> |
|
1180 |
<td>JDK 8</td> |
|
1181 |
<td>2 or more</td> |
|
1182 |
<td>1 GB</td> |
|
1183 |
<td>6 GB</td> |
|
1184 |
</tr> |
|
1185 |
<tr> |
|
1186 |
<td>Solaris SPARCV9 (64-bit)</td> |
|
1187 |
<td>Solaris 10 Update 10</td> |
|
1188 |
<td>Studio 12 Update 3 + patches</td> |
|
1189 |
<td>JDK 8</td> |
|
1190 |
<td>4 or more</td> |
|
1191 |
<td>4 GB</td> |
|
1192 |
<td>8 GB</td> |
|
1193 |
</tr> |
|
1194 |
<tr> |
|
1195 |
<td>Solaris X64 (64-bit)</td> |
|
1196 |
<td>Solaris 10 Update 10</td> |
|
1197 |
<td>Studio 12 Update 3 + patches</td> |
|
1198 |
<td>JDK 8</td> |
|
1199 |
<td>4 or more</td> |
|
1200 |
<td>4 GB</td> |
|
1201 |
<td>8 GB</td> |
|
1202 |
</tr> |
|
1203 |
<tr> |
|
1204 |
<td>Windows X86 (32-bit)</td> |
|
1205 |
<td>Windows Server 2012 R2 x64</td> |
|
1206 |
<td>Microsoft Visual Studio C++ 2013 Professional Edition</td> |
|
1207 |
<td>JDK 8</td> |
|
1208 |
<td>2 or more</td> |
|
1209 |
<td>2 GB</td> |
|
1210 |
<td>6 GB</td> |
|
1211 |
</tr> |
|
1212 |
<tr> |
|
1213 |
<td>Windows X64 (64-bit)</td> |
|
1214 |
<td>Windows Server 2012 R2 x64</td> |
|
1215 |
<td>Microsoft Visual Studio C++ 2013 Professional Edition</td> |
|
1216 |
<td>JDK 8</td> |
|
1217 |
<td>2 or more</td> |
|
1218 |
<td>2 GB</td> |
|
1219 |
<td>6 GB</td> |
|
1220 |
</tr> |
|
1221 |
<tr> |
|
1222 |
<td>Mac OS X X64 (64-bit)</td> |
|
1223 |
<td>Mac OS X 10.9 "Mavericks"</td> |
|
1224 |
<td>XCode 5.1.1 or newer</td> |
|
1225 |
<td>JDK 8</td> |
|
1226 |
<td>2 or more</td> |
|
1227 |
<td>4 GB</td> |
|
1228 |
<td>6 GB</td> |
|
1229 |
</tr> |
|
1230 |
</tbody> |
|
1231 |
</table></p> |
|
1232 |
</blockquote> |
|
1233 |
||
1234 |
<hr /> |
|
1235 |
||
1236 |
<p><a name="SDBE"></a></p> |
|
1237 |
||
1238 |
<h3>Specific Developer Build Environments</h3> |
|
1239 |
||
1240 |
<p>We won't be listing all the possible environments, but we will try to provide |
|
1241 |
what information we have available to us.</p> |
|
1242 |
||
1243 |
<p><strong>NOTE: The community can help out by updating this part of the document.</strong></p> |
|
1244 |
||
1245 |
<h4>Fedora</h4> |
|
1246 |
||
1247 |
<p>After installing the latest <a href="http://fedoraproject.org">Fedora</a> you need to |
|
1248 |
install several build dependencies. The simplest way to do it is to execute the |
|
1249 |
following commands as user <code>root</code>:</p> |
|
1250 |
||
1251 |
<pre><code> yum-builddep java-1.7.0-openjdk |
|
1252 |
yum install gcc gcc-c++ |
|
1253 |
</code></pre> |
|
1254 |
||
1255 |
<p>In addition, it's necessary to set a few environment variables for the build:</p> |
|
1256 |
||
1257 |
<pre><code> export LANG=C |
|
1258 |
export PATH="/usr/lib/jvm/java-openjdk/bin:${PATH}" |
|
1259 |
</code></pre> |
|
1260 |
||
1261 |
<h4>CentOS 5.5</h4> |
|
1262 |
||
1263 |
<p>After installing <a href="http://www.centos.org/">CentOS 5.5</a> you need to make sure you |
|
1264 |
have the following Development bundles installed:</p> |
|
1265 |
||
1266 |
<ul> |
|
1267 |
<li>Development Libraries</li> |
|
1268 |
<li>Development Tools</li> |
|
1269 |
<li>Java Development</li> |
|
1270 |
<li>X Software Development (Including XFree86-devel)</li> |
|
1271 |
</ul> |
|
1272 |
||
1273 |
<p>Plus the following packages:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1274 |
|
33030 | 1275 |
<ul> |
1276 |
<li>cups devel: Cups Development Package</li> |
|
1277 |
<li>alsa devel: Alsa Development Package</li> |
|
1278 |
<li>Xi devel: libXi.so Development Package</li> |
|
1279 |
</ul> |
|
1280 |
||
1281 |
<p>The freetype 2.3 packages don't seem to be available, but the freetype 2.3 |
|
1282 |
sources can be downloaded, built, and installed easily enough from <a href="http://downloads.sourceforge.net/freetype">the |
|
1283 |
freetype site</a>. Build and install |
|
1284 |
with something like:</p> |
|
1285 |
||
1286 |
<pre><code> bash ./configure |
|
1287 |
make |
|
1288 |
sudo -u root make install |
|
1289 |
</code></pre> |
|
1290 |
||
1291 |
<p>Mercurial packages could not be found easily, but a Google search should find |
|
1292 |
ones, and they usually include Python if it's needed.</p> |
|
1293 |
||
1294 |
<h4>Debian 5.0 (Lenny)</h4> |
|
1295 |
||
1296 |
<p>After installing <a href="http://debian.org">Debian</a> 5 you need to install several |
|
1297 |
build dependencies. The simplest way to install the build dependencies is to |
|
1298 |
execute the following commands as user <code>root</code>:</p> |
|
1299 |
||
1300 |
<pre><code> aptitude build-dep openjdk-7 |
|
1301 |
aptitude install openjdk-7-jdk libmotif-dev |
|
1302 |
</code></pre> |
|
1303 |
||
1304 |
<p>In addition, it's necessary to set a few environment variables for the build:</p> |
|
1305 |
||
1306 |
<pre><code> export LANG=C |
|
1307 |
export PATH="/usr/lib/jvm/java-7-openjdk/bin:${PATH}" |
|
1308 |
</code></pre> |
|
1309 |
||
1310 |
<h4>Ubuntu 12.04</h4> |
|
1311 |
||
1312 |
<p>After installing <a href="http://ubuntu.org">Ubuntu</a> 12.04 you need to install several |
|
1313 |
build dependencies. The simplest way to do it is to execute the following |
|
1314 |
commands:</p> |
|
1315 |
||
1316 |
<pre><code> sudo aptitude build-dep openjdk-7 |
|
1317 |
sudo aptitude install openjdk-7-jdk |
|
1318 |
</code></pre> |
|
1319 |
||
1320 |
<p>In addition, it's necessary to set a few environment variables for the build:</p> |
|
1321 |
||
1322 |
<pre><code> export LANG=C |
|
1323 |
export PATH="/usr/lib/jvm/java-7-openjdk/bin:${PATH}" |
|
1324 |
</code></pre> |
|
1325 |
||
1326 |
<h4>OpenSUSE 11.1</h4> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1327 |
|
33030 | 1328 |
<p>After installing <a href="http://opensuse.org">OpenSUSE</a> 11.1 you need to install |
1329 |
several build dependencies. The simplest way to install the build dependencies |
|
1330 |
is to execute the following commands:</p> |
|
1331 |
||
1332 |
<pre><code> sudo zypper source-install -d java-1_7_0-openjdk |
|
1333 |
sudo zypper install make |
|
1334 |
</code></pre> |
|
1335 |
||
1336 |
<p>In addition, it is necessary to set a few environment variables for the build:</p> |
|
1337 |
||
1338 |
<pre><code> export LANG=C |
|
1339 |
export PATH="/usr/lib/jvm/java-1.7.0-openjdk/bin:$[PATH}" |
|
1340 |
</code></pre> |
|
1341 |
||
1342 |
<p>Finally, you need to unset the <code>JAVA_HOME</code> environment variable:</p> |
|
1343 |
||
1344 |
<pre><code> export -n JAVA_HOME` |
|
1345 |
</code></pre> |
|
1346 |
||
1347 |
<h4>Mandriva Linux One 2009 Spring</h4> |
|
1348 |
||
1349 |
<p>After installing <a href="http://mandriva.org">Mandriva</a> Linux One 2009 Spring you need |
|
1350 |
to install several build dependencies. The simplest way to install the build |
|
1351 |
dependencies is to execute the following commands as user <code>root</code>:</p> |
|
1352 |
||
1353 |
<pre><code> urpmi java-1.7.0-openjdk-devel make gcc gcc-c++ freetype-devel zip unzip |
|
1354 |
libcups2-devel libxrender1-devel libalsa2-devel libstc++-static-devel |
|
1355 |
libxtst6-devel libxi-devel |
|
1356 |
</code></pre> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1357 |
|
33030 | 1358 |
<p>In addition, it is necessary to set a few environment variables for the build:</p> |
1359 |
||
1360 |
<pre><code> export LANG=C |
|
1361 |
export PATH="/usr/lib/jvm/java-1.7.0-openjdk/bin:${PATH}" |
|
1362 |
</code></pre> |
|
1363 |
||
1364 |
<h4>OpenSolaris 2009.06</h4> |
|
1365 |
||
1366 |
<p>After installing <a href="http://opensolaris.org">OpenSolaris</a> 2009.06 you need to |
|
1367 |
install several build dependencies. The simplest way to install the build |
|
1368 |
dependencies is to execute the following commands:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1369 |
|
33030 | 1370 |
<pre><code> pfexec pkg install SUNWgmake SUNWj7dev sunstudioexpress SUNWcups SUNWzip |
1371 |
SUNWunzip SUNWxwhl SUNWxorg-headers SUNWaudh SUNWfreetype2 |
|
1372 |
</code></pre> |
|
1373 |
||
1374 |
<p>In addition, it is necessary to set a few environment variables for the build:</p> |
|
15787
496cd89abcc5
8004712: build-infra: Move user guide from web pages to repository
ohair
parents:
14069
diff
changeset
|
1375 |
|
33030 | 1376 |
<pre><code> export LANG=C |
1377 |
export PATH="/opt/SunStudioExpress/bin:${PATH}" |
|
1378 |
</code></pre> |
|
1379 |
||
1380 |
<hr /> |
|
1381 |
||
1382 |
<p>End of the OpenJDK build README document.</p> |
|
1383 |
||
1384 |
<p>Please come again!</p> |
|
1385 |
</body> |
|
333
d4540117530e
6563616: Clarify instructions for unpacking openjdk binary "plug"
ohair
parents:
15
diff
changeset
|
1386 |
</html> |