This file contains some notes about the process of building the full OpenJDK distribution in RedHat Enterprise Linux 4 (Oracle's recommended environment) in VMWare. It also contains some of Matt's recommendations as to when and how OpenJDK builds should be made. =========================================================================== Notes on OpenJDK build process: Sun's "official" build environment (per /README-builds.html#MBE in the source distribution) is RHEL 4. Obtain RHEL 4 via MIT - IS&T offers it to students and faculty via https://web.mit.edu/rhlinux/rhel-4.0. There are three varieties of RHEL 4 - AS, ES, and WS. I used WS, which I believe is for workstations (the others are intended for servers). This requires downloading the WS disc 1 and the AS discs 2 - 4. A single disk of size 8.0 GB was created in VMWare; VMWare's option for using .iso files as optical drives was also used (i.e., didn't need to mount loopback on the host). In retrospect, perhaps a larger disk should be used, as only ~500 MB remains after the JDK build. Default options were chosen for RHEL setup (including automatic partitioning and default packages). In the future, SELinux should be disabled in the installer (it can also be done later, but this will save a step). It seems that RHEL 4 doesn't have yum for package management, and that the "up2date" command should be used instead. up2date doesn't seem to have some way to search packages, though, so I had to google for some of the package names below. Before using up2date, I registered with IS&T (not Red Hat!), which was basically just a certificate check and running a script that they provide. I acquired the following packages: - JDK 6 (Linux x86 RPM version; for bootstrapping) -- http://java.sun.com/javase/downloads/index.jsp - SVN -- "up2date subversion" - JDK 7 -- "svn checkout https://openjdk.dev.java.net/svn/openjdk/jdk/trunk openjdk --username guest" (hit enter for blank password) - JDK 7 binary plugs -- http://download.java.net/openjdk/jdk7/ - ALSA headers -- "up2date alsa-lib-devel" - CUPS headers -- "up2date cups-devel" I installed the JDK 6 package via "rpm -Uvh [package]", and then did "/usr/sbin/alternatives" (apparently the RedHat version of Debian's update-alternatives) to install "java" and "javac" links. JDK 7 was a simple checkout (though it took a while) and the binary plugs were a "java -jar [package]". I set the following environment variables (having checked out the JDK 7 sources into my home directory): export ALT_BOOTDIR=/usr/java/jdk1.6.0_01 export ALT_CLOSED_JDK_IMPORT_PATH=~/openjdk/binary-plugs/jdk1.7.0 export LANG=C # to suppress a sanity check warning I then did the sanity check and build per the /README-build.html instructions. The sanity check took a second or two, and the full build took about 40 minutes. The /control/build/linux-i586 folder contains j2sdk-image, which seems suitable as a binary distribution. I don't think there's a way to create the Oracle version, however (the .bin file that, when executed, prompts you to accept their license and then extracts files). There also doesn't seem to be a way to extract out just the compiler sources. In binary form, the compiler is in j2sdk-image/lib/tools.jar. If "make" is run after a successful build (even if no changes have been made), it takes ~17 minutes to complete. =========================================================================== Matt's Recommendations: The build procedure (in Linux, at least) should not prevent us from releasing a binary JSR 308 OpenJDK package. We may have to figure out how to produce the Oracle package (with the license prompt and executable format) if a .zip is not a sufficient means of distribution. We may need some additional tools and setup for building in Windows. However, the build procedure takes too long (at least 17 minutes per build, vs around 5 seconds for the current compiler-only setup) for doing day-to-day development in this environment. I propose continuing to work with the compiler the way we have it in SVN (which mirrors Oracle's compiler-only distribution) and creating two scripts: one for updating the OpenJDK checkout with our compiler modifications and one for updating our compiler repository with vendor OpenJDK changes. We'd only use the former when doing a JSR 308 release, and only use the latter when Oracle does a release. In this way, we don't have to make any serious modifications (only a couple of additions) to our repositories or build scripts and can keep small build times for daily development.