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