blob: a2cf768e122f8ce218b0c181666aef92e65b1f64 [file] [log] [blame]
J. Duke686d76f2007-12-01 00:00:00 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
J. Duke686d76f2007-12-01 00:00:00 +00002<html>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -07003 <head>
4 <title>OpenJDK Build README</title>
5 </head>
6 <body style="background-color:lightcyan">
7 <!-- ====================================================== -->
8 <table width="100%" style="background-color:white">
9 <tr>
10 <td align="center">
11 <a href="http://openjdk.java.net" border="0">
12 <img alt="OpenJDK"
13 src="http://openjdk.java.net/images/openjdk.png"
14 width=256
15 style="border-style: none"/>
16 </a>
17 </td>
18 </tr>
19 <tr>
20 <td align=center>
21 <h1>OpenJDK Build README</h1>
22 </td>
23 </tr>
J. Duke686d76f2007-12-01 00:00:00 +000024 </table>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -070025 <!-- ------------------------------------------------------ -->
26 <hr>
27 <h2><a name="introduction">Introduction</a></h2>
28 <blockquote>
29 <p>
30 This README file contains build instructions for the
31 <a href="http://openjdk.java.net" target="_blank">OpenJDK</a>.
32 Building the source code for the
33 OpenJDK
34 requires
35 a certain degree of technical expertise.
36 </blockquote>
37 <!-- ------------------------------------------------------ -->
38 <hr>
39 <h2><a name="contents">Contents</a></h2>
40 <blockquote>
J. Duke686d76f2007-12-01 00:00:00 +000041 <ul>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -070042 <li><a href="#introduction">Introduction</a></li>
43 <li><a href="#MBE">Minimum Build Environments</a></li>
44 <li><a href="#SDBE">Specific Developer Build Environments</a></li>
45 <li><a href="#directories">Source Directory Structure</a> </li>
46 <li><a href="#building">Build Information</a>
47 <ul>
48 <li><a href="#gmake">GNU Make (<tt><i>gmake</i></tt>)</a> </li>
49 <li><a href="#linux">Basic Linux System Setup</a> </li>
50 <li><a href="#solaris">Basic Solaris System Setup</a> </li>
51 <li><a href="#windows">Basic Windows System Setup</a> </li>
52 <li><a href="#dependencies">Build Dependencies</a> </li>
53 <ul>
54 <li><a href="#bootjdk">Bootstrap JDK</a> </li>
55 <li><a href="#binaryplugs">Binary Plugs</a> </li>
56 <li><a href="#importjdk">Optional Import JDK</a> </li>
57 <li><a href="#cacerts">Certificate Authority File (cacert)</a> </li>
58 <li><a href="#compilers">Compilers</a>
59 <ul>
60 <li><a href="#msvc">Microsoft Visual Studio</a> </li>
61 <li><a href="#mssdk">Microsoft Platform SDK</a> </li>
62 <li><a href="#gcc">Linux gcc/binutils</a> </li>
63 <li><a href="#studio">Sun Studio</a> </li>
64 </ul>
65 </li>
66 <li><a href="#zip">Zip and Unzip</a> </li>
67 <li><a href="#freetype">FreeType2 Fonts</a> </li>
68 <li>Linux and Solaris:
69 <ul>
70 <li><a href="#cups">CUPS Include files</a> </li>
71 </ul>
72 </li>
73 <li>Linux only:
74 <ul>
75 <li><a href="#alsa">ALSA files</a> </li>
76 </ul>
77 </li>
78 <li>Windows only:
79 <ul>
80 <li>Unix Command Tools (<a href="#cygwin">CYGWIN</a>)</li>
81 <li><a href="#dxsdk">DirectX 9.0 SDK</a> </li>
82 </ul>
83 </li>
84 </ul>
85 </ul>
86 </li>
87 <li><a href="#creating">Creating the Build</a> </li>
88 <li><a href="#testing">Testing the Build</a> </li>
89 <li><a href="#variables">Environment/Make Variables</a></li>
90 <li><a href="#troubleshooting">Troubleshooting</a></li>
J. Duke686d76f2007-12-01 00:00:00 +000091 </ul>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -070092 </blockquote>
93 <!-- ------------------------------------------------------ -->
94 <hr>
95 <h2><a name="MBE">Minimum Build Environments</a></h2>
96 <blockquote>
97 This file often describes specific requirements for what we call the
98 "minimum build environments" (MBE) for the JDK.
99 Building with the MBE will generate the most compatible
100 bits that install on, and run correctly on, the most variations
101 of the same base OS and hardware architecture.
102 These usually represent what is often called the
103 least common denominator platforms.
104 It is understood that most developers will NOT be using these
105 specific platforms, and in fact creating these specific platforms
106 may be difficult due to the age of some of this software.
107 <p>
108 The minimum OS and C/C++ compiler versions needed for building the
109 OpenJDK:
110 <p>
111 <table border="1">
112 <thead>
113 <tr>
114 <th>Base OS and Architecture</th>
115 <th>OS</th>
116 <th>Compiler</th>
117 </tr>
118 </thead>
119 <tbody>
120 <tr>
121 <td>Linux X86 (32bit)</td>
122 <td>Red Hat Enterprise Linux 4 </td>
123 <td>gcc 4 </td>
124 </tr>
125 <tr>
126 <td>Linux X64 (64bit)</td>
127 <td>Red Hat Enterprise Linux 4 </td>
128 <td>gcc 4 </td>
129 </tr>
130 <tr>
131 <td>Solaris SPARC (32bit)</td>
132 <td>Solaris 10 + patches
133 <br>
134 See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
135 SunSolve</a> for patch downloads.
136 </td>
137 <td>Sun Studio 11 </td>
138 </tr>
139 <tr>
140 <td>Solaris SPARCV9 (64bit)</td>
141 <td>Solaris 10 + patches
142 <br>
143 See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
144 SunSolve</a> for patch downloads.
145 </td>
146 <td>Sun Studio 11</td>
147 </tr>
148 <tr>
149 <td>Solaris X86 (32bit)</td>
150 <td>Solaris 10 + patches
151 <br>
152 See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
153 SunSolve</a> for patch downloads.
154 </td>
155 <td>Sun Studio 11</td>
156 </tr>
157 <tr>
158 <td>Solaris X64 (64bit)</td>
159 <td>Solaris 10 + patches
160 <br>
161 See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
162 SunSolve</a> for patch downloads.
163 </td>
164 <td>Sun Studio 11</td>
165 </tr>
166 <tr>
167 <td>Windows X86 (32bit)</td>
168 <td>Windows XP</td>
169 <td>Microsoft Visual Studio .NET 2003 Professional</td>
170 </tr>
171 <tr>
172 <td>Windows X64 (64bit)</td>
173 <td>Windows Server 2003 - Enterprise x64 Edition</td>
174 <td>Microsoft Platform SDK - April 2005</td>
175 </tr>
176 </tbody>
177 </table>
178 </blockquote>
179 <!-- ------------------------------------------------------ -->
180 <hr>
181 <h2><a name="SDBE">Specific Developer Build Environments</a></h2>
182 <blockquote>
183 We won't be listing all the possible environments, but
184 we will try to provide what information we have available to us.
185 </blockquote>
186 <!-- ------------------------------------------------------ -->
187 <h3><a name="fedora">Fedora</a></h3>
188 <blockquote>
189 TBD
190 </blockquote>
191 <!-- ------------------------------------------------------ -->
192 <h3><a name="debian">Debian</a></h3>
193 <blockquote>
194 TBD
195 </blockquote>
196 <!-- ------------------------------------------------------ -->
197 <h3><a name="ubuntu">Ubuntu</a></h3>
198 <blockquote>
199 In addition to needing the Bootstrap JDK and the Binary Plugs,
200 when building on Ubuntu you will need to
201 make sure certain packages are installed.
202 In particular, certain X11 packages, make, m4, gawk, gcc 4,
203 binutils, cups, freetype
204 and alsa.
205 <!-- ------------------------------------------------------ -->
206 <h4>Ubuntu 6.06</h4>
207 <p>
208 The following list of packages for Ubuntu 6.06 is a working set that
209 does appear to work.
210 <p>
211 <b>Note that it's quite possible that some of these
212 packages are not required, so anyone discovering that some of the
213 packages listed below are NOT required,
214 please let the
215 OpenJDK
216 team know.</b>
217 <p>
218 All the packages below can be installed with the
219 Synaptic Package manager provided with the base Ubuntu 6.06 release.
220 <blockquote>
221 <ul>
222 <li>binutils (2.16.1cvs20060117-1ubuntu2.1)</li>
223 <li>cpp (4:4.0.3-1)</li>
224 <li>cpp-4.0 (4.0.3-1ubuntu5)</li>
225 <li>libfreetype6-dev</li>
226 <li>g++ (4:4.0.3-1)</li>
227 <li>g++-4.0 (4.0.3-1ubuntu5)</li>
228 <li>gawk (1:3.1.5-2build1)</li>
229 <li>gcc (4:4.0.3-1)</li>
230 <li>gcc-4.0 (4.0.3-1ubuntu5)</li>
231 <li>libasound2-dev (1.0.10-2ubuntu4)</li>
232 <li>libc6 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li>
233 <li>libc6-dev (2.3.6-0ubuntu20.4)</li>
234 <li>libc6-i686 (2.3.6-0ubuntu20) to 2.3.6-0ubuntu20.4</li>
235 <li>libcupsys2-dev (1.2.2-0ubuntu0.6.06)</li>
236 <li>libgcrypt11-dev (1.2.2-1)</li>
237 <li>libgnutls-dev (1.2.9-2ubuntu1.1)</li>
238 <li>libgnutls12 (1.2.9-2ubuntu1) to 1.2.9-2ubuntu1.1</li>
239 <li>libgpg-error-dev (1.1-4)</li>
240 <li>libice-dev (2:1.0.0-0ubuntu2)</li>
241 <li>liblockfile1 (1.06.1)</li>
242 <li>libopencdk8-dev (0.5.7-2)</li>
243 <li>libpopt-dev (1.7-5)</li>
244 <li>libsm-dev (2:1.0.0-0ubuntu2)</li>
245 <li>libstdc++6-4.0-dev (4.0.3-1ubuntu5)</li>
246 <li>libtasn1-2-dev (0.2.17-1ubuntu1)</li>
247 <li>libx11-dev (2:1.0.0-0ubuntu9)</li>
248 <li>libxau-dev (1:1.0.0-0ubuntu4)</li>
249 <li>libxaw-headers (2:1.0.1-0ubuntu3)</li>
250 <li>libxaw7-dev (2:1.0.1-0ubuntu3)</li>
251 <li>libxdmcp-dev (1:1.0.0-0ubuntu2)</li>
252 <li>libxext-dev (2:1.0.0-0ubuntu4)</li>
253 <li>libxi-dev (2:1.0.0-0ubuntu3) </li>
254 <li>libxmu-dev (2:1.0.0-0ubuntu3)</li>
255 <li>libxmu-headers (2:1.0.0-0ubuntu3)</li>
256 <li>libxmuu-dev (2:1.0.0-0ubuntu3)</li>
257 <li>libxp-dev (6.8.2-11ubuntu2)</li>
258 <li>libxpm-dev (1:3.5.4.2-0ubuntu3)</li>
259 <li>libxrandr-dev (1:1.1.0.2-0ubuntu4)</li>
260 <li>libxt-dev (1:1.0.0-0ubuntu3)</li>
261 <li>libxtrap-dev (2:1.0.0-0ubuntu2)</li>
262 <li>libxtst-dev (2:1.0.1-0ubuntu2)</li>
263 <li>libxv-dev (2:1.0.1-0ubuntu3)</li>
264 <li>linux-kernel-headers (2.6.11.2-0ubuntu18)</li>
265 <li>m4 (1.4.4-1)</li>
266 <li>make (3.80+3.81.b4-1)</li>
267 <li>ssl-cert (1.0.13)</li>
268 <li>x-dev (7.0.4-0ubuntu2)</li>
269 <li>x11proto-core-dev (7.0.4-0ubuntu2)</li>
270 <li>x11proto-input-dev (1.3.2-0ubuntu2)</li>
271 <li>x11proto-kb-dev (1.0.2-0ubuntu2)</li>
272 <li>x11proto-randr-dev (1.1.2-0ubuntu2)</li>
273 <li>x11proto-record-dev (1.13.2-0ubuntu2)</li>
274 <li>x11proto-trap-dev (3.4.3-0ubuntu2)</li>
275 <li>x11proto-video-dev (2.2.2-0ubuntu2)</li>
276 <li>x11proto-xext-dev (7.0.2-0ubuntu2)</li>
277 <li>xlibs-dev (7.0.0-0ubuntu45)</li>
278 <li>zlib1g-dev (1:1.2.3-6ubuntu4)</li>
279 </ul>
280 </blockquote>
281 <!-- ------------------------------------------------------ -->
282 <h4>Ubuntu 7.04</h4>
283 <p>
284 Using the Synaptic Package Manager, download the following
285 packages (double indented packages are automatically aquired
286 due to package dependencies):
287 <blockquote>
288 <ul>
289 <li>build-essential</li>
290 <ul>
291 <li>dpkg-dev</li>
292 <li>g++</li>
293 <li>g++-4.1</li>
294 <li>libc6-dev</li>
295 <li>libstdc++6.4.1-dev</li>
296 <li>linux-libc-dev</li>
297 </ul>
298 <li>gawk</li>
299 <li>m4</li>
300 <li>libasound2-dev</li>
301 <li>libcupsys2-dev</li>
302 <ul>
303 <li>libgcrypt11-dev</li>
304 <li>lgnutls-dev</li>
305 <li>libgpg-error-dev</li>
306 <li>liblzo-dev</li>
307 <li>libopencdk8-dev</li>
308 <li>libpopt-dev</li>
309 <li>libtasn1-3-dev</li>
310 <li>zlib1g-dev</li>
311 </ul>
312 <li>sun-java6-jdk</li>
313 <ul>
314 <li>java-common</li>
315 <li>libltdl3</li>
316 <li>odbcinst1debian1</li>
317 <li>sun-java6-bin</li>
318 <li>sun-java6-jre</li>
319 <li>unixodbc</li>
320 </ul>
321 <li>xlibs-dev</li>
322 <ul>
323 <li>(many)</li>
324 </ul>
325 <li>x11proto-print-dev</li>
326 <li>libxaw7-dev</li>
327 <ul>
328 <li>libxaw-headers</li>
329 </ul>
330 <li>libxp-dev</li>
331 <li>libfreetype6-dev</li>
332 </ul>
333 </blockquote>
334 </blockquote>
335 <!-- ------------------------------------------------------ -->
336 <hr>
337 <h2><a name="directories">Source Directory Structure</a></h2>
338 <blockquote>
339 <p>
340 The source code for the OpenJDK is delivered in a set of
341 directories:
342 <tt>hotspot</tt>,
343 <tt>langtools</tt>,
344 <tt>corba</tt>,
345 <tt>jaxws</tt>,
346 <tt>jaxp</tt>,
347 and
348 <tt>jdk</tt>.
349 The <tt>hotspot</tt> directory contains the source code and make
350 files for building the OpenJDK Hotspot Virtual Machine.
351 The <tt>langtools</tt> directory contains the source code and make
352 files for building the OpenJDK javac and language tools.
353 The <tt>corba</tt> directory contains the source code and make
354 files for building the OpenJDK Corba files.
355 The <tt>jaxws</tt> directory contains the source code and make
356 files for building the OpenJDK JAXWS files.
357 The <tt>jaxp</tt> directory contains the source code and make
358 files for building the OpenJDK JAXP files.
359 The <tt>jdk</tt> directory contains the source code and make files for
360 building the OpenJDK runtime libraries and misc files.
361 The top level <tt>Makefile</tt>
362 is used to build the entire OpenJDK.
363 </blockquote>
364 <!-- ------------------------------------------------------ -->
365 <hr>
366 <h2><a name="building">Build Information</a></h2>
367 <blockquote>
368 Building the OpenJDK
369 is done with a <tt><i>gmake</i></tt>
370 command line and various
371 environment or make variable settings that direct the make rules
372 to where various components have been installed.
373 Where possible the makefiles will attempt to located the various
374 components in the default locations or any component specific
375 variable settings.
376 When the normal defaults fail or components cannot be found,
377 the various
378 <tt>ALT_*</tt> variables (alternates)
379 can be used to help the makefiles locate components.
380 <p>
381 Refer to the bash/sh/ksh setup file
382 <tt>jdk/make/jdk_generic_profile.sh</tt>
383 if you need help in setting up your environment variables.
384 A build could be as simple as:
385 <blockquote>
386 <pre><tt>
J. Duke686d76f2007-12-01 00:00:00 +0000387 bash
388 . jdk/make/jdk_generic_profile.sh
389 <i>gmake</i> sanity &amp;&amp; <i>gmake</i>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700390 </tt></pre>
J. Duke686d76f2007-12-01 00:00:00 +0000391 </blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700392 <p>
393 Of course ksh or sh would work too.
394 But some customization will probably be necessary.
395 The <tt>sanity</tt> rule will make some basic checks on build
396 dependencies and generate appropriate warning messages
397 regarding missing, out of date, or newer than expected components
398 found on your system.
J. Duke686d76f2007-12-01 00:00:00 +0000399 </blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700400 <!-- ------------------------------------------------------ -->
401 <hr>
402 <h3><a name="gmake">GNU make (<tt><i>gmake</i></tt>)</a></h3>
J. Duke686d76f2007-12-01 00:00:00 +0000403 <blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700404 The Makefiles in the OpenJDK are only valid when used with the
405 GNU version of the utility command <tt>make</tt>
406 (<tt><i>gmake</i></tt>).
407 A few notes about using GNU make:
408 <ul>
409 <li>
410 In general, you need GNU make version 3.78.1 or newer.
411 </li>
412 <li>
413 Place the location of the GNU make binary in the <tt>PATH</tt>.
414 </li>
415 <li>
416 <strong>Linux:</strong>
417 The <tt>/usr/bin/make</tt> command should work fine for you.
418 </li>
419 <li>
420 <strong>Solaris:</strong>
421 Do NOT use <tt>/usr/bin/make</tt> on Solaris.
422 If your Solaris system has the software
423 from the Solaris Companion CD installed,
424 you should use <tt>gmake</tt>
425 which will be located in either the <tt>/opt/sfw/bin</tt> or
426 <tt>/usr/sfw/bin</tt> directory.
427 </li>
428 <li>
429 <strong>Windows:</strong>
430 Make sure you start your build inside a bash/sh/ksh shell.
431 <br>
432 <b>WARNING:</b> Watch out for make version 3.81, it may
433 not work due to a lack of support for drive letter paths
434 like <tt>C:/</tt>. See
435 <a href="#gmake">section on gmake</a>.
436 Use a 3.80 version, or find a newer
437 version that has this problem fixed.
438 The older 3.80 version of make.exe can be downloaded with this
439 <a href="http://cygwin.paracoda.com/release/make/make-3.80-1.tar.bz2" target="_blank">
440 link</a>.
441 Also see the
442 <a href="http://developer.mozilla.org/en/docs/Windows_build_prerequisites_using_cygwin#make" target="_blank">
443 mozilla developer center</a>
444 on this topic.
445 </li>
446 </ul>
J. Duke686d76f2007-12-01 00:00:00 +0000447 <p>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700448 Information on GNU make, and access to ftp download sites, are
449 available on the
450 <a href="http://www.gnu.org/software/make/make.html" target="_blank">
451 GNU make web site
452 </a>.
453 The latest source to GNU make is available at
454 <a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
455 ftp.gnu.org/pub/gnu/make/</a>.
J. Duke686d76f2007-12-01 00:00:00 +0000456 </blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700457 <!-- ------------------------------------------------------ -->
458 <hr>
459 <h3><a name="linux">Basic Linux System Setup</a></h3>
460 <blockquote>
J. Duke686d76f2007-12-01 00:00:00 +0000461 <strong>i586 only:</strong>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700462 The minimum recommended hardware for building the Linux version
463 is a Pentium class processor or better, at least 256 MB of RAM, and
464 approximately 1.5 GB of free disk space.
J. Duke686d76f2007-12-01 00:00:00 +0000465 <p>
466 <strong>X64 only:</strong>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700467 The minimum recommended hardware for building the Linux
468 version is an AMD Opteron class processor, at least 512 MB of RAM, and
469 approximately 4 GB of free disk space.
470 <p>
471 The build will use the tools contained in
472 <tt>/bin</tt> and
473 <tt>/usr/bin</tt>
474 of a standard installation of the Linux operating environment.
475 You should ensure that these directories are in your
476 <tt>PATH</tt>.
J. Duke686d76f2007-12-01 00:00:00 +0000477 <p>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700478 Note that some Linux systems have a habit of pre-populating
479 your environment variables for you, for example <tt>JAVA_HOME</tt>
480 might get pre-defined for you to refer to the JDK installed on
481 your Linux system.
482 You will need to unset <tt>JAVA_HOME</tt>.
483 It's a good idea to run <tt>env</tt> and verify the
484 environment variables you are getting from the default system
485 settings make sense for building the
486 OpenJDK.
J. Duke686d76f2007-12-01 00:00:00 +0000487 </blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700488 <!-- ------------------------------------------------------ -->
489 <h4><a name="linux_checklist">Basic Linux Check List</a></h4>
490 <blockquote>
491 <ol>
492 <li>
493 Install the
494 <a href="#bootjdk">Bootstrap JDK</a>, set
495 <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
496 </li>
497 <li>
498 Install the
499 <a href="#binaryplugs">Binary Plugs</a>, set
500 <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>.
501 </li>
502 <li>
503 <a href="#importjdk">Optional Import JDK</a>, set
504 <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>.
505 </li>
506 <li>
507 Install or upgrade the <a href="#freetype">FreeType development
508 package</a>.
509 </li>
510 </ol>
511 </blockquote>
512 <!-- ------------------------------------------------------ -->
513 <hr>
514 <h3><a name="solaris">Basic Solaris System Setup</a></h3>
515 <blockquote>
516 The minimum recommended hardware for building the
517 Solaris SPARC version is an UltraSPARC with 512 MB of RAM.
518 For building
519 the Solaris x86 version, a Pentium class processor or better and at
520 least 512 MB of RAM are recommended.
521 Approximately 1.4 GB of free disk
522 space is needed for a 32-bit build.
523 <p>
524 If you are building the 64bit version, you should
525 run the command "isainfo -v" to verify that you have a
526 64-bit installation, it should say <tt>sparcv9</tt> or
527 <tt>amd64</tt>.
528 An additional 7 GB of free disk space is needed
529 for a 64-bit build.
530 <p>
531 The build uses the tools contained in <tt>/usr/ccs/bin</tt>
532 and <tt>/usr/bin</tt> of a standard developer or full installation of
533 the Solaris operating environment.
534 <p>
535 Solaris patches specific to the JDK can be downloaded from the
536 <a href="http://sunsolve.sun.com/show.do?target=patches/JavaSE" target="_blank">
537 SunSolve JDK Solaris patches download page</a>.
538 You should ensure that the latest patch cluster for
539 your version of the Solaris operating environment has also
540 been installed.
541 </blockquote>
542 <!-- ------------------------------------------------------ -->
543 <h4><a name="solaris_checklist">Basic Solaris Check List</a></h4>
544 <blockquote>
545 <ol>
546 <li>
547 Install the
548 <a href="#bootjdk">Bootstrap JDK</a>, set
549 <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
550 </li>
551 <li>
552 Install the
553 <a href="#binaryplugs">Binary Plugs</a>, set
554 <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>.
555 </li>
556 <li>
557 <a href="#importjdk">Optional Import JDK</a>, set
558 <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>.
559 </li>
560 <li>
561 Install the
562 <a href="#studio">Sun Studio Compilers</a>, set
J. Duke686d76f2007-12-01 00:00:00 +0000563 <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>.
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700564 </li>
565 <li>
566 Install the
567 <a href="#cups">CUPS Include files</a>, set
568 <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt>.
569 </li>
570 </ol>
571 </blockquote>
572 <!-- ------------------------------------------------------ -->
573 <hr>
574 <h3><a name="windows">Basic Windows System Setup</a></h3>
575 <blockquote>
576 <strong>i586 only:</strong>
577 The minimum recommended hardware for building the 32bit or X86
578 Windows version is an Pentium class processor or better, at least
579 512 MB of RAM, and approximately 600 MB of free disk space.
580 <strong>
581 NOTE: The Windows 2000 build machines need to use the
582 file system NTFS.
583 Build machines formatted to FAT32 will not work
584 because FAT32 doesn't support case-sensitivity in file names.
585 </strong>
586 <p>
587 <strong>X64 only:</strong>
588 The minimum recommended hardware for building
589 the Windows X64 version is an AMD Opteron class processor, at least 1
590 GB of RAM, and approximately 10 GB of free disk space.
591 </blockquote>
592 <!-- ------------------------------------------------------ -->
593 <h4><a name="paths">Windows Paths</a></h4>
594 <blockquote>
595 <strong>Windows:</strong>
596 Note that GNU make is a historic utility and is based very
597 heavily on shell scripting, so it does not tolerate the Windows habit
598 of having spaces in pathnames or the use of the <tt>\</tt>characters in pathnames.
599 Luckily on most Windows systems, you can use <tt>/</tt>instead of \, and
600 there is always a 'short' pathname without spaces for any path that
601 contains spaces.
602 Unfortunately, this short pathname can be somewhat dynamic and the
603 formula is difficult to explain.
604 You can use <tt>cygpath</tt> utility to map pathnames with spaces
605 or the <tt>\</tt>character into the <tt>C:/</tt> style of pathname
606 (called 'mixed'), e.g.
607 <tt>cygpath -s -m "<i>path</i>"</tt>.
608 <p>
609 The makefiles will try to translate any pathnames supplied
610 to it into the <tt>C:/</tt> style automatically.
611 <p>
612 Note that use of CYGWIN creates a unique problem with regards to
613 setting <a href="#path"><tt>PATH</tt></a>. Normally on Windows
614 the <tt>PATH</tt> variable contains directories
615 separated with the ";" character (Solaris and Linux uses ":").
616 With CYGWIN, it uses ":", but that means that paths like "C:/path"
617 cannot be placed in the CYGWIN version of <tt>PATH</tt> and
618 instead CYGWIN uses something like <tt>/cygdrive/c/path</tt>
619 which CYGWIN understands, but only CYGWIN understands.
620 So be careful with paths on Windows.
621 </blockquote>
622 <!-- ------------------------------------------------------ -->
623 <h4><a name="windows_checklist">Basic Windows Check List</a></h4>
624 <blockquote>
625 <ol>
626 <li>
627 Install the
628 <a href="#cygwin">CYGWIN product</a>.
629 </li>
630 <li>
631 Install the
632 <a href="#bootjdk">Bootstrap JDK</a>, set
633 <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>.
634 </li>
635 <li>
636 Install the
637 <a href="#binaryplugs">Binary Plugs</a>, set
638 <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>..
639 </li>
640 <li>
641 <a href="#importjdk">Optional Import JDK</a>, set
642 <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>.
643 </li>
644 <li>
645 Install the
646 <a href="#msvc">Microsoft Visual Studio .NET 2003 Professional</a> or the
647 <a href="#mssdk">Microsoft Platform SDK</a>.
648 </li>
649 <li>
650 Setup all environment variables for compilers
651 (see <a href="#msvc">compilers</a>).
652 </li>
653 <li>
654 Install
655 <a href="#dxsdk">Microsoft DirectX SDK</a>.
656 </li>
657 </ol>
658 </blockquote>
659 <!-- ------------------------------------------------------ -->
660 <hr>
661 <h3><a name="dependencies">Build Dependencies</a></h3>
662 <blockquote>
663 Depending on the platform, the OpenJDK build process has some basic
664 dependencies on components not part of the OpenJDK sources.
665 Some of these are specific to a platform, some even specific to
666 an architecture.
667 Each dependency will have a set of ALT variables that can be set
668 to tell the makefiles where to locate the component.
669 In most cases setting these ALT variables may not be necessary
670 and the makefiles will find defaults on the system in standard
671 install locations or through component specific variables.
672 <!-- ------------------------------------------------------ -->
673 <h4><a name="bootjdk">Bootstrap JDK</a></h4>
J. Duke686d76f2007-12-01 00:00:00 +0000674 <blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700675 All OpenJDK builds require access to the previously released
676 JDK 6, this is often called a bootstrap JDK.
677 The JDK 6 binaries can be downloaded from Sun's
678 <a href="http://java.sun.com/javase/1.6.0/download.html" target="_blank">JDK 6 download site</a>.
679 For build performance reasons
680 is very important that this bootstrap JDK be made available on the
681 local disk of the machine doing the build.
682 You should always set
683 <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>
684 to point to the location of
685 the bootstrap JDK installation, this is the directory pathname
686 that contains a <tt>bin, lib, and include</tt>
687 It's also a good idea to also place its <tt>bin</tt> directory
688 in the <tt>PATH</tt> environment variable, although it's
689 not required.
J. Duke686d76f2007-12-01 00:00:00 +0000690 <p>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700691 <strong>Solaris:</strong>
692 Some pre-installed JDK images may be available to you in the
693 directory <tt>/usr/jdk/instances</tt>.
694 If you don't set
695 <tt><a href="#ALT_BOOTDIR">ALT_BOOTDIR</a></tt>
696 the makefiles will look in that location for a JDK it can use.
J. Duke686d76f2007-12-01 00:00:00 +0000697 </blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700698 <!-- ------------------------------------------------------ -->
699 <h4><a name="binaryplugs">Binary Plugs</a></h4>
J. Duke686d76f2007-12-01 00:00:00 +0000700 <blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700701 Not all of the source code that makes up the JDK is available
702 under an open-source license.
703 This is a temporary situation and these binary plugs will be
704 replaced with fully open source replacements as soon as possible.
705 So currently, in order to build a complete OpenJDK image,
706 you must first download and install the appropriate
707 binary plug bundles for the OpenJDK, go to the
708 <a href="http://openjdk.java.net" target="_blank">OpenJDK</a> site and select
709 the "<b>Bundles(7)</b>" link and download the binaryplugs for
710 your particular platform.
711 The file downloaded is a jar file that must be extracted by running
712 the jar file with:
J. Duke686d76f2007-12-01 00:00:00 +0000713 <blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -0700714 <pre>
715 <tt><b>java -jar jdk-7-ea-plug-b<i>nn</i>-<i>os</i>-<i>arch</i>-<i>dd</i>_<i>month</i>_<i>year</i>.jar</b></tt>
716 </pre>
717 </blockquote>
718 A prompt will be issued for acceptance of these binary plug files.
719 During the OpenJDK build process these "binary plugs"
720 for the encumbered components will be copied into your
721 resulting OpenJDK binary build image.
722 These binary plug files are only for the purpose of
723 building an OpenJDK binary.
724 Make sure you set
725 <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>
726 to the root of this installation.
727 </blockquote>
728 <!-- ------------------------------------------------------ -->
729 <h4><a name="importjdk">Optional Import JDK</a></h4>
730 <blockquote>
731 The <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>
732 setting is only needed if you are not building the entire
733 JDK. For example, if you have built the entire JDK once, and
734 wanted to avoid repeatedly building the Hotspot VM, you could
735 set this to the location of the previous JDK install image
736 and the build will copy the needed files from this import area.
737 </blockquote>
738 <!-- ------------------------------------------------------ -->
739 <h4><a name="cacerts">Certificate Authority File (cacert)</a></h4>
740 <blockquote>
741 See <a href="http://en.wikipedia.org/wiki/Certificate_Authority" target="_blank">
742 http://en.wikipedia.org/wiki/Certificate_Authority</a>
743 for a better understanding of the Certificate Authority (CA).
744 A certificates file named "cacerts"
745 represents a system-wide keystore with CA certificates.
746 In JDK and JRE
747 binary bundles, the "cacerts" file contains root CA certificates from
748 several public CAs (e.g., VeriSign, Thawte, and Baltimore).
749 The source contain a cacerts file
750 without CA root certificates.
751 Formal JDK builders will need to secure
752 permission from each public CA and include the certificates into their
753 own custom cacerts file.
754 Failure to provide a populated cacerts file
755 will result in verification errors of a certificate chain during runtime.
756 The variable
757 <tt><a href="#ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt>
758 can be used to override the default location of the
759 cacerts file that will get placed in your build.
760 By default an empty cacerts file is provided and that should be
761 fine for most JDK developers.
762 </blockquote>
763 <!-- ------------------------------------------------------ -->
764 <h4><a name="compilers">Compilers</a></h4>
765 <blockquote>
766 <strong><a name="gcc">Linux gcc/binutils</a></strong>
767 <blockquote>
768 The GNU gcc compiler version should be 3.2.2 or newer.
769 The binutils package should be 2.11.93.0.2-11 or newer.
770 The compiler used should be the default compiler installed
771 in <tt>/usr/bin</tt>.
772 <p>
773 Older Linux systems may require a gcc and bunutils update.
774 The Redhat Enterprise Advanced Server 2.1 update 2 system
775 is one of these systems.
776 RedHat Linux users can obtain this binutils package from
777 <a href="http://www.redhat.com"
778 target="_blank">Redhat web site</a>.
779 You will need to remove the default compiler and binutils
780 packages and install the required packages
781 into the default location on the system.
782 However if you have a new video card driver, like
783 Geforce 4 it is best to use
784 the same compiler as the kernel was built with to
785 build the new video card driver module.
786 So you should build the modules before making this change.
787 </blockquote>
788 <strong><a name="studio">Solaris: Sun Studio</a></strong>
789 <blockquote>
790 At a minimum, the
791 <a href="http://developers.sun.com/sunstudio/index.jsp" target="_blank">
792 Sun Studio 11 Compilers</a>
793 (containing version 5.8 of the C and C++ compilers) is required,
794 with patches from the
795 <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access" target="_blank">
796 SunSolve web site</a>.
797 <p>
798 Set
799 <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>
800 to point to the location of
801 the compiler binaries, and place this location in the <tt>PATH</tt>.
802 <p>
803 The Sun Studio Express compilers at:
804 <a href="http://developers.sun.com/sunstudio/downloads/express.jsp" target="_blank">
805 Sun Studio Express Download site</a>
806 are also an option, although these compilers have not
807 been extensively used yet.
808 </blockquote>
809 <strong><a name="msvc">Windows i586: Microsoft Visual Studio .NET 2003 Professional</a></strong>
810 <blockquote>
811 The 32-bit OpenJDK Windows build
812 requires Microsoft Visual Studio .NET 2003 (VS2003) Professional
813 Edition compiler.
814 The compiler and other tools are expected to reside
815 in the location defined by the variable <tt>VS71COMNTOOLS</tt> which
816 is set by the Microsoft Visual Studio .NET installer.
817 <p>
818 Once the compiler is installed,
819 it is recommended that you run <tt>VCVARS32.BAT</tt>
820 to set the compiler environment variables
821 <tt>MSVCDIR</tt>,
822 <tt>INCLUDE</tt>,
823 <tt>LIB</tt>, and
824 <tt>PATH</tt>
825 prior to building the
826 OpenJDK.
827 The above environment variables <b>MUST</b> be set.
828 <p>
829 The Microsoft Visual Studio .NET 2005 (VS2005) compiler
830 will not work at this time due to the new runtime dll
831 and the manifest requirements.
832 </blockquote>
833 <strong><a name="mssdk">Windows X64: Microsoft Platform SDK April 2005</a></strong>
834 <blockquote>
835 On <b>X64</b>, the Microsoft Platform Software
836 Development Kit (SDK), April 2005 Edition compiler,
837 is required for building the OpenJDK
838 because it contains the C/C++ compiler.
839 You will need to minimally install the Core SDK and
840 the MDAC SDK features of this compiler.
841 <p>
842 Once the Platform SDK is installed,
843 it is recommended that you run <tt>SetEnv.Cmd /X64</tt>
844 to set the compiler environment variables
845 <tt>MSSDK</tt>,
846 <tt>MSTOOLS</tt>,
847 <tt>INCLUDE</tt>,
848 <tt>LIB</tt>, and
849 <tt>PATH</tt>
850 prior to building the
851 OpenJDK.
852 The above environment variables <b>MUST</b> be set.
853 <p>
854 Note that this compiler may say it's version is a
855 Microsoft Visual Studio .NET 2005 (VS2005), but be careful,
856 it will not match the official VS2005 product.
857 This Platform SDK compiler is only used on X64 builds.
858 </blockquote>
859 </blockquote>
860 <!-- ------------------------------------------------------ -->
861 <h4><a name="zip">Zip and Unzip</a></h4>
862 <blockquote>
863 Version 2.2 (November 3rd 1997) or newer of the zip utility
864 and version 5.12 or newer of the unzip utility is needed
865 to build the JDK.
866 With Solaris, Linux, and Windows CYGWIN, the zip and unzip
867 utilities installed on the system should be fine.
868 Information and the source code for
869 ZIP.EXE and UNZIP.EXE is available on the
870 <a href="http://www.info-zip.org"
871 target="_blank">info-zip web site</a>.
872 </blockquote>
873 <!-- ------------------------------------------------------ -->
874 <h4><a name="cups">Common UNIX Printing System (CUPS) Headers (Solaris &amp; Linux)</a></h4>
875 <blockquote>
876 <strong>Solaris:</strong>
877 CUPS header files are required for building the
878 OpenJDK on Solaris.
879 The Solaris header files can be obtained by installing
880 the package <strong>SFWcups</strong> from the Solaris Software
881 Companion CD/DVD, these often will be installed into
882 <tt>/opt/sfw/cups</tt>.
883 <p>
884 <strong>Linux:</strong>
885 CUPS header files are required for building the
886 OpenJDK on Linux.
887 The Linux header files are usually available from a "cups"
888 development package, it's recommended that you try and use
889 the package provided by the particular version of Linux that
890 you are using.
891 <p>
892 The CUPS header files can always be downloaded from
893 <a href="http://www.cups.org" target="_blank">www.cups.org</a>.
894 The variable
895 <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt>
896 can be used to override the default location of the
897 CUPS Header files.
898 </blockquote>
899 <!-- ------------------------------------------------------ -->
900 <h4><a name="freetype">FreeType 2</a></h4>
901 <blockquote>
902 Version 2.3 or newer of FreeType is required for building the OpenJDK.
903 On Unix systems required files can be available as part of your
904 distribution (while you still may need to upgrade them).
905 Note that you need development version of package that
906 includes both FreeType library and header files.
907 <p>
908 You can always download latest FreeType version from the
909 <a href="http://www.freetype.org" target="_blank">FreeType website</a>.
910 <p>
911 Makefiles will try to pick FreeType from /usr/lib and /usr/include.
912 In case it is installed elsewhere you will need to set environment
913 variables
914 <tt><a href="#ALT_FREETYPE_LIB_PATH">ALT_FREETYPE_LIB_PATH</a></tt>
915 and
916 <tt><a href="#ALT_FREETYPE_HEADERS_PATH">ALT_FREETYPE_HEADERS_PATH</a></tt>
917 to refer to place where library and header files are installed.
918 </blockquote>
919 <!-- ------------------------------------------------------ -->
920 <h4><a name="alsa">Advanced Linux Sound Architecture (ALSA) (Linux only)</a></h4>
921 <blockquote>
922 <strong>Linux only:</strong>
923 Version 0.9.1 or newer of the ALSA files are
924 required for building the OpenJDK on Linux.
925 These Linux files are usually available from an "alsa"
926 of "libasound"
927 development package, it's highly recommended that you try and use
928 the package provided by the particular version of Linux that
929 you are using.
930 The makefiles will check this emit a sanity error if it is
931 missing or the wrong version.
932 <p>
933 In particular, older Linux systems will likely not have the
934 right version of ALSA installed, for example
935 Redhat AS 2.1 U2 and SuSE 8.1 do not include a sufficiently
936 recent ALSA distribution.
937 On rpm-based systems, you can see if ALSA is installed by
938 running this command:
939 <pre>
940 <tt>rpm -qa | grep alsa</tt>
941 </pre>
942 Both <tt>alsa</tt> and <tt>alsa-devel</tt> packages are needed.
943 <p>
944 If your distribution does not come with ALSA, and you can't
945 find ALSA packages built for your particular system,
946 you can try to install the pre-built ALSA rpm packages from
947 <a href="http://www.freshrpms.net/" target="_blank">
948 <tt>www.freshrpms.net</tt></a>.
949 Note that installing a newer ALSA could
950 break sound output if an older version of ALSA was previously
951 installed on the system, but it will enable JDK compilation.
952 <blockquote>
953 Installation: execute as root<br>
954 [i586]: <code>rpm -Uv --force alsa-lib-devel-0.9.1-rh61.i386.rpm</code><br>
955 [x64]: <code>rpm -Uv --force alsa-lib-devel-0.9.8-amd64.x86_64.rpm</code><br>
956 Uninstallation:<br>
957 [i586]: <code>rpm -ev alsa-lib-devel-0.9.1-rh61</code><br>
958 [x64]:<code>rpm -ev alsa-lib-devel-0.9.8-amd64</code><br>
959 Make sure that you do not link to the static library
960 (<tt>libasound.a</tt>),
961 by verifying that the dynamic library (<tt>libasound.so</tt>) is
962 correctly installed in <tt>/usr/lib</tt>.
963 </blockquote>
964 As a last resort you can go to the
965 <a href="http://www.alsa-project.org" target="_blank">
966 Advanced Linux Sound Architecture Site</a> and build it from
967 source.
968 <blockquote>
969 Download driver and library
970 source tarballs from
971 <a href="http://www.alsa-project.org" target="_blank">ALSA's homepage</a>.
972 As root, execute the following
973 commands (you may need to adapt the version number):
974 <pre>
975 <tt>
976 $ tar xjf alsa-driver-0.9.1.tar.bz2
977 $ cd alsa-driver-0.9.1
978 $ ./configure
979 $ make install
980 $ cd ..
981 $ tar xjf alsa-lib-0.9.1.tar.bz2
982 $ cd alsa-lib-0.9.1
983 $ ./configure
984 $ make install
985 </tt>
986 </pre>
987 Should one of the above steps fail, refer to the documentation on
988 ALSA's home page.
989 </blockquote>
990 Note that this is a minimum install that enables
991 building the JDK platform. To actually use ALSA sound drivers, more
992 steps are necessary as outlined in the documentation on ALSA's homepage.
993 <p>
994 ALSA can be uninstalled by executing <tt>make uninstall</tt> first in
995 the <tt>alsa-lib-0.9.1</tt> directory and then in
996 <tt>alsa-driver-0.9.1</tt>.
997 </blockquote>
998 There are no ALT* variables to change the assumed locations of ALSA,
999 the makefiles will expect to find the ALSA include files and library at:
1000 <tt>/usr/include/alsa</tt> and <tt>/usr/lib/libasound.so</tt>.
1001 </blockquote>
1002 <!-- ------------------------------------------------------ -->
1003 <h4>Windows Specific Dependencies</h4>
1004 <blockquote>
1005 <strong>Unix Command Tools (<a name="cygwin">CYGWIN</a>)</strong>
1006 <blockquote>
1007 The OpenJDK requires access to a set of unix command tools
1008 on Windows which can be supplied by
1009 <a href="http://www.cygwin.com" target="_blank">CYGWIN</a>.
1010 <p>
1011 The OpenJDK build requires CYGWIN version 1.5.12 or newer.
1012 Information about CYGWIN can
1013 be obtained from the CYGWIN website at
1014 <a href="http://www.cygwin.com" target="_blank">www.cygwin.com</a>.
1015 <p>
1016 By default CYGWIN doesn't install all the tools required for building
1017 the OpenJDK.
1018 Along with the default installation, you need to install
1019 the following tools.
1020 <blockquote>
1021 <table border="1">
1022 <thead>
1023 <tr>
1024 <td>Binary Name</td>
1025 <td>Package</td>
1026 <td>Description</td>
1027 </tr>
1028 </thead>
1029 <tbody>
1030 <tr>
1031 <td>ar.exe</td>
1032 <td>Devel</td>
1033 <td>binutils: The GNU assembler, linker and binary
1034 utilities</td>
1035 </tr>
1036 <tr>
1037 <td>make.exe</td>
1038 <td>Devel</td>
1039 <td>make: The GNU version of the 'make' utility</td>
1040 </tr>
1041 <tr>
1042 <td>m4.exe</td>
1043 <td>Interpreters</td>
1044 <td>m4: GNU implementation of the traditional Unix macro
1045 processor</td>
1046 </tr>
1047 <tr>
1048 <td>cpio.exe</td>
1049 <td>Utils</td>
1050 <td>cpio: A program to manage archives of files</td>
1051 </tr>
1052 <tr>
1053 <td>awk.exe</td>
1054 <td>Utils</td>
1055 <td>awk: Pattern-directed scanning and processing language</td>
1056 </tr>
1057 <tr>
1058 <td>file.exe</td>
1059 <td>Utils</td>
1060 <td>file: Determines file type using 'magic' numbers</td>
1061 </tr>
1062 <tr>
1063 <td>zip.exe</td>
1064 <td>Utils</td>
1065 <td>zip: Package and compress (archive) files</td>
1066 </tr>
1067 <tr>
1068 <td>unzip.exe</td>
1069 <td>Utils</td>
1070 <td>unzip: Extract compressed files in a ZIP archive</td>
1071 </tr>
1072 <tr>
1073 <td>free.exe</td>
1074 <td>Utils</td>
1075 <td>free: Display amount of free and used memory in the system</td>
1076 </tr>
1077 </tbody>
1078 </table>
J. Duke686d76f2007-12-01 00:00:00 +00001079 </blockquote>
1080 <p>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -07001081 Note that the CYGWIN software can conflict with other non-CYGWIN
1082 software on your Windows system.
1083 CYGWIN provides a
1084 <a href="http://cygwin.com/faq/faq.using.html" target="_blank">FAQ</a> for
1085 known issues and problems, of particular interest is the
1086 section on
1087 <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
1088 BLODA (applications that interfere with CYGWIN)</a>.
J. Duke686d76f2007-12-01 00:00:00 +00001089 </blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -07001090 <strong><a name="dxsdk">Microsoft DirectX 9.0 SDK header files and libraries</a></strong>
J. Duke686d76f2007-12-01 00:00:00 +00001091 <blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -07001092 Microsoft DirectX 9.0 SDK (Summer 2004)
1093 headers are required for building
1094 OpenJDK.
1095 This SDK can be downloaded from
1096 <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FD044A42-9912-42A3-9A9E-D857199F888E&amp;displaylang=en" target="_blank">
1097 Microsoft DirectX 9.0 SDK (Summer 2004)</a>.
1098 If the link above becomes obsolete, the SDK can be found from
1099 <a href="http://download.microsoft.com" target="_blank">the Microsoft Download Site</a>
1100 (search with "DirectX 9.0 SDK Update Summer 2004").
1101 The location of this SDK can be set with
1102 <tt><a href="#ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt>
1103 but it's normally found via the DirectX environment variable
1104 <tt>DXSDK_DIR</tt>.
J. Duke686d76f2007-12-01 00:00:00 +00001105 </blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -07001106 <strong><a name="msvcrt"><tt>MSVCRT.DLL</tt></a></strong>
1107 <blockquote>
1108 <strong>i586 only:</strong>
1109 The OpenJDK 32bit build requires access to
1110 <tt>MSVCRT.DLL</tt> version 6.00.8337.0 or newer.
1111 If the <tt>MSVCRT.DLL</tt> is not installed in
1112 the system32 directory set the
1113 <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a>
1114 variable to the location.
1115 <p>
1116 <strong>X64 only:</strong>
1117 The OpenJDK 64bit build requires access to
1118 <tt>MSVCRT.DLL</tt> version 7.0.3790.0 or newer, which is
1119 usually supplied by the
1120 <a href="#mssdk">Platform SDK</a>.
1121 If it is not available from the Platform SDK,
1122 set the
1123 <a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a>
1124 variable to the location.
1125 </blockquote>
1126 <strong><tt><a name="msvcr71">MSVCR71.DLL</a></tt></strong>
J. Duke686d76f2007-12-01 00:00:00 +00001127 <blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -07001128 <strong>i586 only:</strong>
1129 The
1130 OpenJDK
1131 build requires access to
1132 MSVCR71.DLL version 7.10.3052.4 or newer which should be
1133 supplied by the
1134 <a href="#msvc">Visual Studio product</a>
1135 If the <tt>MSVCR71.DLL</tt> is not available from the
1136 Visual Studio product
1137 set the
1138 <a href="#ALT_MSVCR71_DLL_PATH"><tt>ALT_MSVCR71_DLL_PATH</tt></a>
1139 variable to the location.
J. Duke686d76f2007-12-01 00:00:00 +00001140 </blockquote>
Kelly O'Hairbf8a41a2008-04-30 19:35:26 -07001141 </blockquote>
1142 <!-- ------------------------------------------------------ -->
1143 <hr>
1144 <h2><a name="creating">Creating the Build</a></h2>
1145 <blockquote>
1146 Once a machine is setup to build the OpenJDK,
1147 the steps to create the build are fairly simple.
1148 The various ALT settings can either be made into variables
1149 or can be supplied on the
1150 <a href="#gmake"><tt><i>gmake</i></tt></a>
1151 command.
1152 <ol>
1153 <li>Use the sanity rule to double check all the ALT settings:
1154 <blockquote>
1155 <tt>
1156 <i>gmake</i>
1157 sanity
1158 [ARCH_DATA_MODEL=<i>32 or 64</i>]
1159 [other "ALT_" overrides]
1160 </tt>
1161 </blockquote>
1162 </li>
1163 <li>Start the build with the command:
1164 <blockquote>
1165 <tt>
1166 <i>gmake</i>
1167 [ARCH_DATA_MODEL=<i>32 or 64</i>]
1168 [ALT_OUTPUTDIR=<i>output_directory</i>]
1169 [other "ALT_" overrides]
1170 </tt>
1171 </blockquote>
1172 </li>
1173 </ol>
1174 <p>
1175 <strong>Solaris:</strong>
1176 Note that ARCH_DATA_MODEL is really only needed on Solaris to
1177 indicate you want to built the 64-bit version.
1178 And before the Solaris 64-bit binaries can be used, they
1179 must be merged with the binaries from a separate 32-bit build.
1180 The merged binaries may then be used in either 32-bit or 64-bit mode, with
1181 the selection occurring at runtime
1182 with the <tt>-d32</tt> or <tt>-d64</tt> options.
1183 </blockquote>
1184 <!-- ------------------------------------------------------ -->
1185 <hr>
1186 <h2><a name="testing">Testing the Build</a></h2>
1187 <blockquote>
1188 When the build is completed, you should see the generated
1189 binaries and associated files in the <tt>j2sdk-image</tt>
1190 directory in the output directory.
1191 The default output directory is
1192 <tt>build/<i>platform</i></tt>,
1193 where <tt><i>platform</i></tt> is one of
1194 <tt><ul>
1195 <li>solaris-sparc</li>
1196 <li>solaris-sparcv9</li>
1197 <li>solaris-i586</li>
1198 <li>solaris-amd64</li>
1199 <li>linux-i586</li>
1200 <li>linux-amd64</li>
1201 <li>windows-i586</li>
1202 <li>windows-amd64</li>
1203 </ul></tt>
1204 In particular, the
1205 <tt>build/<i>platform</i>/j2sdk-image/bin</tt>
1206 directory should contain executables for the
1207 OpenJDK tools and utilities.
1208 <p>
1209 You can test that the build completed properly by using the build
1210 to run the various demos that you will find in the
1211 <tt>build/<i>platform</i>/j2sdk-image/demo</tt>
1212 directory.
1213 <p>
1214 The provided regression tests can be run with the <tt>jtreg</tt>
1215 utility from
1216 <a href="http://openjdk.java.net/jtreg/" target="_blank">the jtreg site</a>.
1217 </blockquote>
1218 <!-- ------------------------------------------------------ -->
1219 <hr>
1220 <h2><a name="variables">Environment/Make Variables</a></h2>
1221 <p>
1222 Some of the
1223 environment or make variables (just called <b>variables</b> in this
1224 document) that can impact the build are:
1225 <blockquote>
1226 <dl>
1227 <dt><a name="path"><tt>PATH</tt></a> </dt>
1228 <dd>Typically you want to set the <tt>PATH</tt> to include:
1229 <ul>
1230 <li>The location of the GNU make binary</li>
1231 <li>The location of the Bootstrap JDK <tt>java</tt>
1232 (see <a href="#bootjdk">Bootstrap JDK</a>)</li>
1233 <li>The location of the C/C++ compilers
1234 (see <a href="#compilers"><tt>compilers</tt></a>)</li>
1235 <li>The location or locations for the Unix command utilities
1236 (e.g. <tt>/usr/bin</tt>)</li>
1237 </ul>
1238 </dd>
1239 <dt><tt>MILESTONE</tt> </dt>
1240 <dd>
1241 The milestone name for the build (<i>e.g.</i>"beta").
1242 The default value is "internal".
1243 </dd>
1244 <dt><tt>BUILD_NUMBER</tt> </dt>
1245 <dd>
1246 The build number for the build (<i>e.g.</i> "b27").
1247 The default value is "b00".
1248 </dd>
1249 <dt><a name="arch_data_model"><tt>ARCH_DATA_MODEL</tt></a></dt>
1250 <dd>The <tt>ARCH_DATA_MODEL</tt> variable
1251 is used to specify whether the build is to generate 32-bit or 64-bit
1252 binaries.
1253 The Solaris build supports either 32-bit or 64-bit builds, but
1254 Windows and Linux will support only one, depending on the specific
1255 OS being used.
1256 Normally, setting this variable is only necessary on Solaris.
1257 Set <tt>ARCH_DATA_MODEL</tt> to <tt>32</tt> for generating 32-bit binaries,
1258 or to <tt>64</tt> for generating 64-bit binaries.
1259 </dd>
1260 <dt><a name="ALT_BOOTDIR"><tt>ALT_BOOTDIR</tt></a></dt>
1261 <dd>
1262 The location of the bootstrap JDK installation.
1263 See <a href="#bootjdk">Bootstrap JDK</a> for more information.
1264 You should always install your own local Bootstrap JDK and
1265 always set <tt>ALT_BOOTDIR</tt> explicitly.
1266 </dd>
1267 <dt><a name="ALT_BINARY_PLUGS_PATH"><tt>ALT_BINARY_PLUGS_PATH</tt></a></dt>
1268 <dd>
1269 The location of the binary plugs installation.
1270 See <a href="#binaryplugs">Binary Plugs</a> for more information.
1271 You should always have a local copy of a
1272 recent Binary Plugs install image
1273 and set this variable to that location.
1274 </dd>
1275 <dt><a name="ALT_JDK_IMPORT_PATH"><tt>ALT_JDK_IMPORT_PATH</tt></a></dt>
1276 <dd>
1277 The location of a previously built JDK installation.
1278 See <a href="#importjdk">Optional Import JDK</a> for more information.
1279 </dd>
1280 <dt><a name="ALT_OUTPUTDIR"><tt>ALT_OUTPUTDIR</tt></a> </dt>
1281 <dd>
1282 An override for specifying the (absolute) path of where the
1283 build output is to go.
1284 The default output directory will be build/<i>platform</i>.
1285 </dd>
1286 <dt><a name="ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> </dt>
1287 <dd>
1288 The location of the C/C++ compiler.
1289 The default varies depending on the platform.
1290 </dd>
1291 <dt><tt><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt></dt>
1292 <dd>
1293 The location of the <a href="#cacerts">cacerts</a> file.
1294 The default will refer to
1295 <tt>jdk/src/share/lib/security/cacerts</tt>.
1296 </dd>
1297 <dt><a name="ALT_CUPS_HEADERS_PATH"><tt>ALT_CUPS_HEADERS_PATH</tt></a> </dt>
1298 <dd>
1299 The location of the CUPS header files.
1300 See <a href="#cups">CUPS information</a> for more information.
1301 If this path does not exist the fallback path is
1302 <tt>/usr/include</tt>.
1303 </dd>
1304 <dt><a name="ALT_FREETYPE_LIB_PATH"><tt>ALT_FREETYPE_LIB_PATH</tt></a></dt>
1305 <dd>
1306 The location of the FreeType shared library.
1307 See <a href="#freetype">FreeType information</a> for details.
1308 </dd>
1309 <dt><a name="ALT_FREETYPE_HEADERS_PATH"><tt>ALT_FREETYPE_HEADERS_PATH</tt></a></dt>
1310 <dd>
1311 The location of the FreeType header files.
1312 See <a href="#freetype">FreeType information</a> for details.
1313 </dd>
1314 <dt><a name="ALT_JDK_DEVTOOLS_PATH"><tt>ALT_JDK_DEVTOOLS_PATH</tt></a></dt>
1315 <dd>
1316 The default root location of the devtools.
1317 The default value is
1318 <tt>$(ALT_SLASH_JAVA)/devtools</tt>.
1319 </dd>
1320 <dt><tt><a name="ALT_DEVTOOLS_PATH">ALT_DEVTOOLS_PATH</a></tt> </dt>
1321 <dd>
1322 The location of tools like the
1323 <a href="#zip"><tt>zip</tt> and <tt>unzip</tt></a>
1324 binaries, but might also contain the GNU make utility
1325 (<tt><i>gmake</i></tt>).
1326 So this area is a bit of a grab bag, especially on Windows.
1327 The default value depends on the platform and
1328 Unix Commands being used.
1329 On Linux the default will be
1330 <tt>$(ALT_JDK_DEVTOOLS_PATH)/linux/bin</tt>,
1331 on Solaris
1332 <tt>$(ALT_JDK_DEVTOOLS_PATH)/<i>{sparc,i386}</i>/bin</tt>,
1333 on Windows with MKS
1334 <tt>%SYSTEMDRIVE%/UTILS</tt>,
1335 and on Windows with CYGWIN
1336 <tt>/usr/bin</tt>.
1337 </dd>
1338 <dt><a name="ALT_UNIXCOMMAND_PATH"><tt>ALT_UNIXCOMMAND_PATH</tt></a> </dt>
1339 <dd>
1340 An override for specifying where the
1341 Unix command set are located.
1342 The default location varies depending on the platform,
1343 <tt>"%SYSTEMDRIVE%/MKSNT"</tt> or
1344 <tt>$(ROOTDIR)</tt> on Windows with MKS, otherwise it's
1345 <tt>"/bin"</tt> or <tt>/usr/bin</tt>.
1346 </dd>
1347 <dt><a name="ALT_UNIXCCS_PATH"><tt>ALT_UNIXCCS_PATH</tt></a></dt>
1348 <dd>
1349 <strong>Solaris only:</strong>
1350 An override for specifying where the Unix CCS
1351 command set are located.
1352 The default location is <tt>/usr/ccs/bin</tt>
1353 </dd>
1354 <dt><a name="ALT_USRBIN_PATH"><tt>ALT_USRBIN_PATH</tt></a></dt>
1355 <dd>
1356 An override for specifying where the
1357 Unix <tt>/usr/bin</tt> commands are located. You usually do not need
1358 to set this variable: the default location is <tt>/usr/bin</tt>)
1359 </dd>
1360 <dt><a name="ALT_SLASHJAVA"><tt>ALT_SLASHJAVA</tt></a></dt>
1361 <dd>
1362 The default root location for many of the ALT path locations
1363 of the following ALT variables.
1364 The default value is
1365 <tt>"/java"</tt> on Solaris and Linux,
1366 <tt>"J:"</tt> on Windows.
1367 </dd>
1368 <dt><a name="ALT_BUILD_JDK_IMPORT_PATH"><tt>ALT_BUILD_JDK_IMPORT_PATH</tt></a></dt>
1369 <dd>
1370 These are useful in managing builds on multiple platforms.
1371 The default network location for all of the import JDK images
1372 for all platforms.
1373 If <tt><a href="#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a></tt>
1374 is not set, this directory will be used and should contain
1375 the following directories:
1376 <tt>solaris-sparc</tt>,
1377 <tt>solaris-i586</tt>,
1378 <tt>solaris-sparcv9</tt>,
1379 <tt>solaris-amd64</tt>,
1380 <tt>linux-i586</tt>,
1381 <tt>linux-amd64</tt>,
1382 <tt>windows-i586</tt>,
1383 and
1384 <tt>windows-amd64</tt>.
1385 Where each of these directories contain the import JDK image
1386 for that platform.
1387 </dd>
1388 <dt><a name="ALT_BUILD_BINARY_PLUGS_PATH"><tt>ALT_BUILD_BINARY_PLUGS_PATH</tt></a></dt>
1389 <dd>
1390 These are useful in managing builds on multiple platforms.
1391 The default network location for all of the binary plug images
1392 for all platforms.
1393 If <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>
1394 is not set, this directory will be used and should contain
1395 the following directories:
1396 <tt>solaris-sparc</tt>,
1397 <tt>solaris-i586</tt>,
1398 <tt>solaris-sparcv9</tt>,
1399 <tt>solaris-amd64</tt>,
1400 <tt>linux-i586</tt>,
1401 <tt>linux-amd64</tt>,
1402 <tt>windows-i586</tt>,
1403 and
1404 <tt>windows-amd64</tt>.
1405 Where each of these directories contain the binary plugs image
1406 for that platform.
1407 </dd>
1408 <dt><strong>Windows specific:</strong></dt>
1409 <dd>
1410 <dl>
1411 <dt><a name="ALT_MSDEVTOOLS_PATH"><tt>ALT_MSDEVTOOLS_PATH</tt></a> </dt>
1412 <dd>
1413 The location of the Microsoft Visual Studio .NET 2003
1414 tools 'bin' directory.
1415 The default is usually derived from
1416 <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>.
1417 </dd>
1418 <dt><tt><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </dt>
1419 <dd>
1420 The location of the
1421 <a href="#dxsdk">Microsoft DirectX 9 SDK</a>.
1422 The default will be to try and use the DirectX environment
1423 variable <tt>DXSDK_DIR</tt>,
1424 failing that, look in <tt>C:/DXSDK</tt>.
1425 </dd>
1426 <dt><tt><a name="ALT_MSVCRT_DLL_PATH">ALT_MSVCRT_DLL_PATH</a></tt> </dt>
1427 <dd>
1428 The location of the
1429 <a href="#msvcrt"><tt>MSVCRT.DLL</tt></a>.
1430 </dd>
1431 <dt><tt><a name="ALT_MSVCR71_DLL_PATH">ALT_MSVCR71_DLL_PATH</a></tt> </dt>
1432 <dd>
1433 <strong>i586 only:</strong>
1434 The location of the
1435 <a href="#msvcr71"><tt>MSVCR71.DLL</tt></a>.
1436 </dd>
1437 </dl>
1438 </dd>
1439 </dl>
1440 </blockquote>
1441 <!-- ------------------------------------------------------ -->
1442 <hr>
1443 <h2><a name="troubleshooting">Troubleshooting</a></h2>
1444 <blockquote>
1445 A build can fail for any number of reasons.
1446 Most failures
1447 are a result of trying to build in an environment in which all the
1448 pre-build requirements have not been met.
1449 The first step in
1450 troubleshooting a build failure is to recheck that you have satisfied
1451 all the pre-build requirements for your platform.
1452 Look for the check list of the platform you are building on in the
1453 <a href="#contents">Table of Contents</a>.
1454 <p>
1455 You can validate your build environment by using the <tt>sanity</tt>
1456 target.
1457 Any errors listed
1458 will stop the build from starting, and any warnings may result in
1459 a flawed product build.
1460 We strongly encourage you to evaluate every
1461 sanity check warning and fix it if required, before you proceed
1462 further with your build.
1463 <p>
1464 Some of the more common problems with builds are briefly described
1465 below, with suggestions for remedies.
1466 <ul>
1467 <li>
1468 <b>Slow Builds:</b>
1469 <blockquote>
1470 If your build machine seems to be overloaded from too many
1471 simultaneous C++ compiles, try setting the <tt>HOTSPOT_BUILD_JOBS</tt>
1472 variable to <tt>1</tt> (if you're using a multiple CPU
1473 machine, setting it to more than the the number of CPUs is probably
1474 not a good idea).
1475 <p>
1476 Creating the javadocs can be very slow, if you are running
1477 javadoc, consider skipping that step.
1478 <p>
1479 Faster hardware and more RAM always helps too.
1480 The VM build tends to be CPU intensive (many C++ compiles),
1481 and the rest of the JDK will often be disk intensive.
1482 <p>
1483 Faster compiles are possible using a tool called
1484 <a href="http://ccache.samba.org/" target="_blank">ccache</a>.
1485 </blockquote>
1486 </li>
1487 <li>
1488 <b>File time issues:</b>
1489 <blockquote>
1490 If you see warnings that refer to file time stamps, e.g.
1491 <blockquote>
1492 <i>Warning message:</i><tt> File `xxx' has modification time in
1493 the future.</tt>
1494 <br>
1495 <i>Warning message:</i> <tt> Clock skew detected. Your build may
1496 be incomplete.</tt>
1497 </blockquote>
1498 These warnings can occur when the clock on the build machine is out of
1499 sync with the timestamps on the source files. Other errors, apparently
1500 unrelated but in fact caused by the clock skew, can occur along with
1501 the clock skew warnings. These secondary errors may tend to obscure the
1502 fact that the true root cause of the problem is an out-of-sync clock.
1503 For example, an out-of-sync clock has been known to cause an old
1504 version of javac to be used to compile some files, resulting in errors
1505 when the pre-1.4 compiler ran across the new <tt>assert</tt> keyword
1506 in the 1.4 source code.
1507 <p>
1508 If you see these warnings, reset the clock on the build
1509 machine, run "<tt><i>gmake</i> clobber</tt>" or delete the directory
1510 containing the build output, and restart the build from the beginning.
1511 </blockquote>
1512 </li>
1513 <li>
1514 <b>Error message: <tt>Trouble writing out table to disk</tt></b>
1515 <blockquote>
1516 Increase the amount of swap space on your build machine.
1517 </blockquote>
1518 </li>
1519 <li>
1520 <b>Error Message: <tt>libstdc++ not found:</tt></b>
1521 <blockquote>
1522 This is caused by a missing libstdc++.a library.
1523 This is installed as part of a specific package
1524 (e.g. libstdc++.so.devel.386).
1525 By default some 64bit Linux versions (e.g. Fedora)
1526 only install the 64bit version of the libstdc++ package.
1527 Various parts of the JDK build require a static
1528 link of the C++ runtime libraries to allow for maximum
1529 portability of the built images.
1530 </blockquote>
1531 </li>
1532 <li>
1533 <b>Error Message: <tt>cannot restore segment prot after reloc</tt></b>
1534 <blockquote>
1535 This is probably an issue with SELinux (See
1536 <a href="http://en.wikipedia.org/wiki/SELinux" target="_blank">
1537 http://en.wikipedia.org/wiki/SELinux</a>).
1538 Parts of the VM is built without the <tt>-fPIC</tt> for
1539 performance reasons.
1540 <p>
1541 To completely disable SELinux:
1542 <tt>
1543 <ol>
1544 <li>$ su root</li>
1545 <li># system-config-securitylevel</li>
1546 <li>In the window that appears, select the SELinux tab</li>
1547 <li>Disable SELinux</li>
1548 </ol>
1549 </tt>
1550 <p>
1551 Alternatively, instead of completely disabling it you could
1552 disable just this one check.
1553 <tt>
1554 <ol>
1555 <li>Select System->Administration->SELinux Management</li>
1556 <li>In the SELinux Management Tool which appears,
1557 select "Boolean" from the menu on the left</li>
1558 <li>Expand the "Memory Protection" group</li>
1559 <li>Check the first item, labeled
1560 "Allow all unconfined executables to use libraries requiring text relocation ..."</li>
1561 </ol>
1562 </tt>
1563 </blockquote>
1564 </li>
1565 <li>
1566 <b>Windows Error Message: <tt>*** fatal error - couldn't allocate heap, ... </tt></b>
1567 <blockquote>
1568 The CYGWIN software can conflict with other non-CYGWIN
1569 software. See the CYGWIN FAQ section on
1570 <a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
1571 BLODA (applications that interfere with CYGWIN)</a>.
1572 </blockquote>
1573 </li>
1574 <li>
1575 <b>Windows Error Message: <tt>*** multiple target patterns. Stop.</tt></b>
1576 <blockquote>
1577 The CYGWIN make version 3.81 may not like the Windows <tt>C:/</tt>
1578 style paths, it may not like the ':' character in the path
1579 when used in a makefile target definition.
1580 See the <a href="#gmake"><tt><i>gmake</i></tt></a> section.
1581 </blockquote>
1582 </li>
1583 </ul>
1584 </blockquote>
1585 <hr>
1586 </body>
1587</html>