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