-
Notifications
You must be signed in to change notification settings - Fork 44
/
README-builds.html
2495 lines (2389 loc) · 126 KB
/
README-builds.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>OpenJDK Build README</title>
</head>
<body style="background-color:aquamarine">
<!-- ====================================================== -->
<table width="100%">
<tr>
<td align="center">
<img alt="OpenJDK"
src="http://openjdk.java.net/images/openjdk.png"
width=256>
</td>
</tr>
<tr>
<td align=center>
<h1>OpenJDK Build README</h1>
</td>
</tr>
</table>
<!-- ====================================================== -->
<hr>
<h2><a name="introduction">Introduction</a></h2>
<blockquote>
This README file contains build instructions for the
<a href="http://openjdk.java.net" target="_blank">OpenJDK</a>.
Building the source code for the
OpenJDK
requires
a certain degree of technical expertise.
<!-- ====================================================== -->
<h3>!!!!!!!!!!!!!!! THIS IS A MAJOR RE-WRITE of this document. !!!!!!!!!!!!!</h3>
<blockquote>
Some Headlines:
<ul>
<li>
The build is now a "<code>configure && make</code>" style build
</li>
<li>
Any GNU make 3.81 or newer should work
</li>
<li>
The build should scale, i.e. more processors should
cause the build to be done in less wall-clock time
</li>
<li>
Nested or recursive make invocations have been significantly
reduced, as has the total fork/exec or spawning
of sub processes during the build
</li>
<li>
Windows MKS usage is no longer supported
</li>
<li>
Windows Visual Studio <code>vsvars*.bat</code> and
<code>vcvars*.bat</code> files are run automatically
</li>
<li>
Ant is no longer used when building the OpenJDK
</li>
<li>
Use of ALT_* environment variables for configuring the
build is no longer supported
</li>
</ul>
</blockquote>
</blockquote>
<!-- ====================================================== -->
<hr>
<h2><a name="contents">Contents</a></h2>
<blockquote>
<ul>
<li><a href="#introduction">Introduction</a></li>
<li><a href="#hg">Use of Mercurial</a>
<ul>
<li><a href="#get_source">Getting the Source</a></li>
<li><a href="#repositories">Repositories</a></li>
</ul>
</li>
<li><a href="#building">Building</a>
<ul>
<li><a href="#setup">System Setup</a>
<ul>
<li><a href="#linux">Linux</a></li>
<li><a href="#solaris">Solaris</a></li>
<li><a href="#macosx">Mac OS X</a></li>
<li><a href="#windows">Windows</a></li>
</ul>
</li>
<li><a href="#configure">Configure</a></li>
<li><a href="#make">Make</a></li>
</ul>
</li>
<li><a href="#testing">Testing</a></li>
</ul>
<hr>
<ul>
<li><a href="#hints">Appendix A: Hints and Tips</a>
<ul>
<li><a href="#faq">FAQ</a></li>
<li><a href="#performance">Build Performance Tips</a></li>
<li><a href="#troubleshooting">Troubleshooting</a></li>
</ul>
</li>
<li><a href="#gmake">Appendix B: GNU Make Information</a></li>
<li><a href="#buildenvironments">Appendix C: Build Environments</a></li>
<!-- Leave out
<li><a href="#mapping">Appendix D: Mapping Old Builds to the New Builds</a></li>
-->
</ul>
</blockquote>
<!-- ====================================================== -->
<hr>
<h2><a name="hg">Use of Mercurial</a></h2>
<blockquote>
The OpenJDK sources are maintained with the revision control system
<a href="http://mercurial.selenic.com/wiki/Mercurial">Mercurial</a>.
If you are new to Mercurial, please see the
<a href="http://mercurial.selenic.com/wiki/BeginnersGuides">
Beginner Guides</a>
or refer to the <a href="http://hgbook.red-bean.com/">
Mercurial Book</a>.
The first few chapters of the book provide an excellent overview of
Mercurial, what it is and how it works.
<br>
For using Mercurial with the OpenJDK refer to the
<a href="http://openjdk.java.net/guide/repositories.html#installConfig">
Developer Guide: Installing and Configuring Mercurial</a>
section for more information.
<h3><a name="get_source">Getting the Source</a></h3>
<blockquote>
To get the entire set of OpenJDK Mercurial repositories
use the script <code>get_source.sh</code> located in the
root repository:
<blockquote>
<code>
hg clone http://hg.openjdk.java.net/jdk8/jdk8
<i>YourOpenJDK</i>
<br>
cd <i>YourOpenJDK</i>
<br>
bash ./get_source.sh
</code>
</blockquote>
Once you have all the repositories, keep in mind that each
repository is its own independent repository.
You can also re-run <code>./get_source.sh</code> anytime to
pull over all the latest changesets in all the repositories.
This set of nested repositories has been given the term
"forest" and there are various ways to apply the same
<code>hg</code> command to each of the repositories.
For example, the script <code>make/scripts/hgforest.sh</code>
can be used to repeat the same <code>hg</code>
command on every repository, e.g.
<blockquote>
<code>
cd <i>YourOpenJDK</i>
<br>
bash ./make/scripts/hgforest.sh status
</code>
</blockquote>
</blockquote>
<h3><a name="repositories">Repositories</a></h3>
<blockquote>
<p>The set of repositories and what they contain:</p>
<table border="1">
<thead>
<tr>
<th>Repository</th>
<th>Contains</th>
</tr>
</thead>
<tbody>
<tr>
<td>
. (root)
</td>
<td>
common configure and makefile logic
</td>
</tr>
<tr>
<td>
hotspot
</td>
<td>
source code and make files for building
the OpenJDK Hotspot Virtual Machine
</td>
</tr>
<tr>
<td>
langtools
</td>
<td>
source code for the OpenJDK javac and language tools
</td>
</tr>
<tr>
<td>
jdk
</td>
<td>
source code and make files for building
the OpenJDK runtime libraries and misc files
</td>
</tr>
<tr>
<td>
jaxp
</td>
<td>
source code for the OpenJDK JAXP functionality
</td>
</tr>
<tr>
<td>
jaxws
</td>
<td>
source code for the OpenJDK JAX-WS functionality
</td>
</tr>
<tr>
<td>
corba
</td>
<td>
source code for the OpenJDK Corba functionality
</td>
</tr>
<tr>
<td>
nashorn
</td>
<td>
source code for the OpenJDK JavaScript implementation
</td>
</tr>
</tbody>
</table>
</blockquote>
<h3><a name="guidelines">Repository Source Guidelines</a></h3>
<blockquote>
There are some very basic guidelines:
<ul>
<li>
Use of whitespace in source files
(.java, .c, .h, .cpp, and .hpp files)
is restricted.
No TABs, no trailing whitespace on lines, and files
should not terminate in more than one blank line.
</li>
<li>
Files with execute permissions should not be added
to the source repositories.
</li>
<li>
All generated files need to be kept isolated from
the files
maintained or managed by the source control system.
The standard area for generated files is the top level
<code>build/</code> directory.
</li>
<li>
The default build process should be to build the product
and nothing else, in one form, e.g. a product (optimized),
debug (non-optimized, -g plus assert logic), or
fastdebug (optimized, -g plus assert logic).
</li>
<li>
The <tt>.hgignore</tt> file in each repository
must exist and should
include <tt>^build/</tt>, <tt>^dist/</tt> and
optionally any
<tt>nbproject/private</tt> directories.
<strong>It should NEVER</strong> include
anything in the
<tt>src/</tt> or <tt>test/</tt>
or any managed directory area of a repository.
</li>
<li>
Directory names and file names should never contain
blanks or
non-printing characters.
</li>
<li>
Generated source or binary files should NEVER be added to
the repository (that includes <tt>javah</tt> output).
There are some exceptions to this rule, in particular
with some of the generated configure scripts.
</li>
<li>
Files not needed for typical building
or testing of the repository
should not be added to the repository.
</li>
</ul>
</blockquote>
</blockquote>
<!-- ====================================================== -->
<hr>
<h2><a name="building">Building</a></h2>
<blockquote>
The very first step in building the OpenJDK is making sure the
system itself has everything it needs to do OpenJDK builds.
Once a system is setup, it generally doesn't need to be done again.
<br>
Building the OpenJDK is now done with running a
<a href="#configure"><code>configure</code></a>
script which will try and find and verify you have everything
you need, followed by running
<a href="#gmake"><code>make</code></a>, e.g.
<blockquote>
<b>
<code>
bash ./configure<br>
make all
</code>
</b>
</blockquote>
Where possible the <code>configure</code> script will attempt to located the
various components in the default locations or via component
specific variable settings.
When the normal defaults fail or components cannot be found,
additional <code>configure</code> options may be necessary to help <code>configure</code>
find the necessary tools for the build, or you may need to
re-visit the setup of your system due to missing software
packages.
<br>
<strong>NOTE:</strong> The <code>configure</code> script
file does not have
execute permissions and will need to be explicitly run with
<code>bash</code>,
see the <a href="#guidelines">source guidelines</a>.
<!-- ====================================================== -->
<hr>
<h3><a name="setup">System Setup</a></h3>
<blockquote>
Before even attempting to use a system to build the OpenJDK
there are some very basic system setups needed.
For all systems:
<ul>
<li>
Be sure the GNU make utility is version 3.81 or newer,
e.g. run "<code>make -version</code>"
</li>
<li>
Install a
<a name="bootjdk">Bootstrap JDK</a>.
All OpenJDK builds require access to a previously released
JDK called the <i>bootstrap JDK</i> or <i>boot JDK.</i>
The general rule is that the bootstrap JDK
must be an instance of the previous major
release of the JDK. In addition, there may be
a requirement to use a release at or beyond a
particular update level.
<br> <br>
<b><i>Building JDK 8 requires use of a version
of JDK 7 that is at Update 7 or newer. JDK 8
developers should not use JDK 8 as the boot
JDK, to ensure that JDK 8 dependencies are
not introduced into the parts of the system
that are built with JDK 7.</i></b>
<br> <br>
The JDK 7 binaries can be downloaded from Oracle's
<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"
target="_blank">JDK 7 download site</a>.
For build performance reasons
is very important that this bootstrap JDK be made available
on the local disk of the machine doing the build.
You should add its <code>bin</code> directory
to the <code>PATH</code> environment variable.
If <code>configure</code> has any issues finding this JDK, you may
need to use the <code>configure</code> option
<code>--with-boot-jdk</code>.
</li>
<li>
Ensure that GNU make, the Bootstrap JDK,
and the compilers are all
in your PATH environment variable
</li>
</ul>
And for specific systems:
<table border="1">
<thead>
<tr>
<th>Linux</th>
<th>Solaris</th>
<th>Windows</th>
<th>Mac OS X</th>
</tr>
</thead>
<tbody>
<tr>
<td>
Install all the software development
packages needed including
<a href="#alsa">alsa</a>,
<a href="#freetype">freetype</a>,
<a href="#cups">cups</a>, and
<a href="#xrender">xrender</a>.
<br>
See
<a href="#SDBE">specific system packages</a>.
</td>
<td>
Install all the software development
packages needed including
<a href="#studio">Studio Compilers</a>,
<a href="#freetype">freetype</a>,
<a href="#cups">cups</a>, and
<a href="#xrender">xrender</a>.
<br>
See
<a href="#SDBE">specific system packages</a>.
</td>
<td>
<ul>
<li>
Install one of
<a href="#cygwin">CYGWIN</a> or
<a href="#msys">MinGW/MSYS</a>
</li>
<li>
Install
<a href="#vs2010">Visual Studio 2010</a>
</li>
</ul>
</td>
<td>
Install
<a href="https://developer.apple.com/xcode/">XCode 4.5.2</a>
and also install the "Command line tools" found under the
preferences pane "Downloads"
</td>
</tr>
</tbody>
</table>
<h4><a name="linux">Linux</a></h4>
<blockquote>
With Linux, try and favor the system packages over
building your own
or getting packages from other areas.
Most Linux builds should be possible with the system's
available packages.
<br>
Note that some Linux systems have a habit of pre-populating
your environment variables for you, for example <code>JAVA_HOME</code>
might get pre-defined for you to refer to the JDK installed on
your Linux system.
You will need to unset <code>JAVA_HOME</code>.
It's a good idea to run <code>env</code> and verify the
environment variables you are getting from the default system
settings make sense for building the OpenJDK.
</blockquote>
<h4><a name="solaris">Solaris</a></h4>
<blockquote>
<h5><a name="studio">Studio Compilers</a></h5>
<blockquote>
At a minimum, the
<a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.htm" target="_blank">
Studio 12 Update 1 Compilers</a>
(containing version 5.10 of the C and C++ compilers) is required,
including specific patches.
<p>
The Solaris SPARC patch list is:
<ul>
<li>
118683-05: SunOS 5.10: Patch for profiling libraries and assembler
</li>
<li>
119963-21: SunOS 5.10: Shared library patch for C++
</li>
<li>
120753-08: SunOS 5.10: Microtasking libraries (libmtsk) patch
</li>
<li>
128228-09: Sun Studio 12 Update 1: Patch for Sun C++ Compiler
</li>
<li>
141860-03: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
</li>
<li>
141861-05: Sun Studio 12 Update 1: Patch for Sun C Compiler
</li>
<li>
142371-01: Sun Studio 12.1 Update 1: Patch for dbx
</li>
<li>
143384-02: Sun Studio 12 Update 1: Patch for debuginfo handling
</li>
<li>
143385-02: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
</li>
<li>
142369-01: Sun Studio 12.1: Patch for Performance Analyzer Tools
</li>
</ul>
<p>
The Solaris X86 patch list is:
<ul>
<li>
119961-07: SunOS 5.10_x86, x64, Patch for profiling libraries and assembler
</li>
<li>
119964-21: SunOS 5.10_x86: Shared library patch for C++_x86
</li>
<li>
120754-08: SunOS 5.10_x86: Microtasking libraries (libmtsk) patch
</li>
<li>
141858-06: Sun Studio 12 Update 1_x86: Sun Compiler Common patch for x86 backend
</li>
<li>
128229-09: Sun Studio 12 Update 1_x86: Patch for C++ Compiler
</li>
<li>
142363-05: Sun Studio 12 Update 1_x86: Patch for C Compiler
</li>
<li>
142368-01: Sun Studio 12.1_x86: Patch for Performance Analyzer Tools
</li>
</ul>
<p>
Place the <code>bin</code> directory in <code>PATH</code>.
<p>
The Oracle Solaris Studio Express compilers at:
<a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index-jsp-142582.html" target="_blank">
Oracle Solaris Studio Express Download site</a>
are also an option, although these compilers have not
been extensively used yet.
</blockquote>
</blockquote> <!-- Solaris -->
<h4><a name="windows">Windows</a></h4>
<blockquote>
<h5><a name="toolkit">Windows Unix Toolkit</a></h5>
<blockquote>
Building on Windows requires a Unix-like environment, notably a
Unix-like shell.
There are several such environments available of which
<a href="http://www.cygwin.com/">Cygwin</a> and
<a href="http://www.mingw.org/wiki/MSYS">MinGW/MSYS</a> are
currently supported for
the OpenJDK build. One of the differences of these
systems from standard Windows tools is the way
they handle Windows path names, particularly path names which contain
spaces, backslashes as path separators and possibly drive letters.
Depending
on the use case and the specifics of each environment these path
problems can
be solved by a combination of quoting whole paths, translating
backslashes to
forward slashes, escaping backslashes with additional backslashes and
translating the path names to their
<a href="http://en.wikipedia.org/wiki/8.3_filename">
"8.3" version</a>.
<h6><a name="cygwin">CYGWIN</a></h6>
<blockquote>
CYGWIN is an open source, Linux-like environment which tries to emulate
a complete POSIX layer on Windows. It tries to be smart about path names
and can usually handle all kinds of paths if they are correctly quoted
or escaped although internally it maps drive letters <code><drive>:</code>
to a virtual directory <code>/cygdrive/<drive></code>.
<p>
You can always use the <code>cygpath</code> utility to map pathnames with spaces
or the backslash character into the <code>C:/</code> style of pathname
(called 'mixed'), e.g. <code>cygpath -s -m "<i>path</i>"</code>.
</p>
<p>
Note that the use of CYGWIN creates a unique problem with regards to
setting <a href="#path"><code>PATH</code></a>. Normally on Windows
the <code>PATH</code> variable contains directories
separated with the ";" character (Solaris and Linux use ":").
With CYGWIN, it uses ":", but that means that paths like "C:/path"
cannot be placed in the CYGWIN version of <code>PATH</code> and
instead CYGWIN uses something like <code>/cygdrive/c/path</code>
which CYGWIN understands, but only CYGWIN understands.
</p>
<p>
The OpenJDK build requires CYGWIN version 1.7.16 or newer.
Information about CYGWIN can
be obtained from the CYGWIN website at
<a href="http://www.cygwin.com" target="_blank">www.cygwin.com</a>.
</p>
<p>
By default CYGWIN doesn't install all the tools required for building
the OpenJDK.
Along with the default installation, you need to install
the following tools.
<blockquote>
<table border="1">
<thead>
<tr>
<td>Binary Name</td>
<td>Category</td>
<td>Package</td>
<td>Description</td>
</tr>
</thead>
<tbody>
<tr>
<td>ar.exe</td>
<td>Devel</td>
<td>binutils</td>
<td>
The GNU assembler, linker and binary utilities
</td>
</tr>
<tr>
<td>make.exe</td>
<td>Devel</td>
<td>make</td>
<td>
The GNU version of the 'make' utility built for CYGWIN
</td>
</tr>
<tr>
<td>m4.exe</td>
<td>Interpreters</td>
<td>m4</td>
<td>
GNU implementation of the traditional Unix macro
processor
</td>
</tr>
<tr>
<td>cpio.exe</td>
<td>Utils</td>
<td>cpio</td>
<td>
A program to manage archives of files
</td>
</tr>
<tr>
<td>gawk.exe</td>
<td>Utils</td>
<td>awk</td>
<td>
Pattern-directed scanning and processing language
</td>
</tr>
<tr>
<td>file.exe</td>
<td>Utils</td>
<td>file</td>
<td>
Determines file type using 'magic' numbers
</td>
</tr>
<tr>
<td>zip.exe</td>
<td>Archive</td>
<td>zip</td>
<td>
Package and compress (archive) files
</td>
</tr>
<tr>
<td>unzip.exe</td>
<td>Archive</td>
<td>unzip</td>
<td>
Extract compressed files in a ZIP archive
</td>
</tr>
<tr>
<td>free.exe</td>
<td>System</td>
<td>procps</td>
<td>
Display amount of free and used memory in the system
</td>
</tr>
</tbody>
</table>
</blockquote>
Note that the CYGWIN software can conflict with other non-CYGWIN
software on your Windows system.
CYGWIN provides a
<a href="http://cygwin.com/faq/faq.using.html" target="_blank">FAQ</a> for
known issues and problems, of particular interest is the
section on
<a href="http://cygwin.com/faq/faq.using.html#faq.using.bloda" target="_blank">
BLODA (applications that interfere with CYGWIN)</a>.
</blockquote>
<h6><a name="msys">MinGW/MSYS</a></h6>
<blockquote>
MinGW ("Minimalist GNU for Windows") is a collection of free Windows
specific header files and import libraries combined with GNU toolsets that
allow one to produce native Windows programs that do not rely on any
3rd-party C runtime DLLs. MSYS is a supplement to MinGW which allows building
applications and programs which rely on traditional UNIX tools to
be present. Among others this includes tools like <code>bash</code>
and <code>make</code>.
See <a href="http://www.mingw.org/wiki/MSYS" target="_blank">MinGW/MSYS</a>
for more information.
<p>
Like Cygwin, MinGW/MSYS can handle different types of path formats. They
are internally converted to paths with forward slashes and drive letters
<code><drive>:</code> replaced by a virtual
directory <code>/<drive></code>. Additionally, MSYS automatically
detects binaries compiled for the MSYS environment and feeds them with the
internal, Unix-style path names. If native Windows applications are called
from within MSYS programs their path arguments are automatically converted
back to Windows style path names with drive letters and backslashes as
path separators. This may cause problems for Windows applications which
use forward slashes as parameter separator (e.g. <code>cl /nologo /I</code>)
because MSYS may wrongly <a href="http://mingw.org/wiki/Posix_path_conversion">
replace such parameters by drive letters</a>.
</p>
<p>
In addition to the tools which will be installed
by default, you have
to manually install the
<code>msys-zip</code> and
<code>msys-unzip</code> packages.
This can be easily done with the MinGW command line installer:
<blockquote>
<code>mingw-get.exe install msys-zip</code>
<br>
<code>mingw-get.exe install msys-unzip</code>
</blockquote>
</blockquote>
</blockquote>
<h5><a name="vs2010">Visual Studio 2010 Compilers</a></h5>
<blockquote>
<p>
The 32-bit and 64-bit OpenJDK Windows build requires
Microsoft Visual Studio C++ 2010 (VS2010) Professional
Edition or Express compiler.
The compiler and other tools are expected to reside
in the location defined by the variable
<code>VS100COMNTOOLS</code> which
is set by the Microsoft Visual Studio installer.
</p>
<p>
Only the C++ part of VS2010 is needed.
Try to let the installation go to the default
install directory.
Always reboot your system after installing VS2010.
The system environment variable VS100COMNTOOLS
should be
set in your environment.
</p>
<p>
Make sure that TMP and TEMP are also set
in the environment
and refer to Windows paths that exist,
like <code>C:\temp</code>,
not <code>/tmp</code>, not <code>/cygdrive/c/temp</code>,
and not <code>C:/temp</code>.
<code>C:\temp</code> is just an example,
it is assumed that this area is
private to the user, so by default
after installs you should
see a unique user path in these variables.
</p>
</blockquote>
</blockquote> <!-- Windows -->
<h4><a name="macosx">Mac OS X</a></h4>
<blockquote>
Make sure you get the right XCode version.
</blockquote> <!-- Mac OS X -->
</blockquote>
<!-- ====================================================== -->
<hr>
<h3><a name="configure">Configure</a></h3>
<blockquote>
The basic invocation of the <code>configure</code> script
looks like:
<blockquote>
<b><code>bash ./configure [<i>options</i>]</code></b>
</blockquote>
This will create an output directory containing the
"configuration" and setup an area for the build result.
This directory typically looks like:
<blockquote>
<b><code>build/linux-x64-normal-server-release</code></b>
</blockquote>
<code>configure</code> will try to figure out what system you are running on
and where all necessary build components are.
If you have all prerequisites for building installed,
it should find everything.
If it fails to detect any component automatically,
it will exit and inform you about the problem.
When this happens, read more below in
<a href="#configureoptions">the <code>configure</code> options</a>.
<p>
Some examples:
</p>
<table border="1">
<thead>
<tr>
<th>Description</th>
<th>Configure Command Line</th>
</tr>
</thead>
<tbody>
<tr>
<td>Windows 32bit build with freetype specified</td>
<td>
<code>bash ./configure --with-freetype=/cygdrive/c/freetype-i586 --with-target-bits=32</code>
</td>
</tr>
<tr>
<td>Debug 64bit Build</td>
<td>
<code>bash ./configure --enable-debug --with-target-bits=64</code>
</td>
</tr>
</tbody>
</table>
<!-- ====================================================== -->
<h4><a name="configureoptions">Configure Options</a></h4>
<blockquote>
Complete details on all the OpenJDK <code>configure</code> options can
be seen with:
<blockquote>
<b><code>bash ./configure --help=short</code></b>
</blockquote>
Use <code>-help</code> to see all the <code>configure</code> options
available.
You can generate any number of different configurations,
e.g. debug, release, 32, 64, etc.
Some of the more commonly used <code>configure</code> options are:
<table border="1">
<thead>
<tr>
<th width="300">OpenJDK Configure Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><b><code>--enable-debug</code></b></td>
<td>
set the debug level to fastdebug (this is a shorthand for
<code>--with-debug-level=fastdebug</code>)
</td>
</tr>
<tr>
<td><b><code>--with-alsa=</code></b><i>path</i></td>
<td>
select the location of the
<a name="alsa">Advanced Linux Sound Architecture (ALSA)</a>
<br>
Version 0.9.1 or newer of the ALSA files are
required for building the OpenJDK on Linux.
These Linux files are usually available from an "alsa"
of "libasound"
development package,
and it's highly recommended that you try and use
the package provided by the particular version of Linux that
you are using.
</td>
</tr>
<tr>
<td><b><code>--with-boot-jdk=</code></b><i>path</i></td>
<td>
select the <a href="#bootjdk">Bootstrap JDK</a>
</td>
</tr>
<tr>
<td><b><code>--with-boot-jdk-jvmargs=</code></b>"<i>args</i>"</td>
<td>
provide the JVM options to be used to run the
<a href="#bootjdk">Bootstrap JDK</a>
</td>
</tr>
<tr>
<td><b><code>--with-cacerts=</code></b><i>path</i></td>
<td>
select the path to the cacerts file.
<br>
See <a href="http://en.wikipedia.org/wiki/Certificate_Authority" target="_blank">
http://en.wikipedia.org/wiki/Certificate_Authority</a>
for a better understanding of the Certificate Authority (CA).
A certificates file named "cacerts"
represents a system-wide keystore with CA certificates.
In JDK and JRE
binary bundles, the "cacerts" file contains root CA certificates from
several public CAs (e.g., VeriSign, Thawte, and Baltimore).
The source contain a cacerts file
without CA root certificates.
Formal JDK builders will need to secure
permission from each public CA and include the certificates into their
own custom cacerts file.
Failure to provide a populated cacerts file
will result in verification errors of a certificate chain during runtime.
By default an empty cacerts file is provided and that should be
fine for most JDK developers.
</td>
</tr>
<tr>
<td><b><code>--with-cups=</code></b><i>path</i></td>
<td>
select the CUPS install location
<br>
The
<a name="cups">Common UNIX Printing System (CUPS) Headers</a>
are required for building the
OpenJDK on Solaris and Linux.
The Solaris header files can be obtained by installing
the package <strong>SFWcups</strong> from the Solaris Software
Companion CD/DVD, these often will be installed into the
directory <code>/opt/sfw/cups</code>.
<br>
The CUPS header files can always be downloaded from
<a href="http://www.cups.org" target="_blank">www.cups.org</a>.
</td>
</tr>
<tr>
<td><b><code>--with-cups-include=</code></b><i>path</i></td>
<td>
select the CUPS include directory location
</td>
</tr>
<tr>
<td><b><code>--with-debug-level=</code></b><i>level</i></td>
<td>
select the debug information level of release,
fastdebug, or slowdebug
</td>
</tr>
<tr>
<td><b><code>--with-dev-kit=</code></b><i>path</i></td>
<td>
select location of the compiler install or
developer install location
</td>
</tr>
<tr>
<td><b><code>--with-freetype=</code></b><i>path</i></td>
<td>
select the freetype files to use.
<br>
Expecting the
<a name="freetype">freetype</a> libraries under
<code>lib/</code> and the
headers under <code>include/</code>.
<br>
Version 2.3 or newer of FreeType is required.
On Unix systems required files can be available as part of your
distribution (while you still may need to upgrade them).
Note that you need development version of package that
includes both the FreeType library and header files.
<br>
You can always download latest FreeType version from the
<a href="http://www.freetype.org" target="_blank">FreeType website</a>.
<br>
Building the freetype 2 libraries from scratch is also possible,
however on Windows refer to the
<a href="http://freetype.freedesktop.org/wiki/FreeType_DLL">
Windows FreeType DLL build instructions</a>.
<br>
Note that by default FreeType is built with byte code hinting
support disabled due to licensing restrictions.
In this case, text appearance and metrics are expected to
differ from Sun's official JDK build.
See
<a href="http://freetype.sourceforge.net/freetype2/index.html">
the SourceForge FreeType2 Home Page