Setting Up Your Workspace
Make a directory which will contain both sets of repositories (patches and full sources), and pull everything there.
$ mkdir davinci $ cd davinci $ hg fclone http://hg.openjdk.java.net/jdk7/jdk7 sources $ hg fclone http://hg.openjdk.java.net/mlvm/mlvm patches
Then create symbolic links to the patch directories from the corresponding .hg
directories of the full sources. There is a shell script which will do this automatically, or you can do it by hand.
$ sh patches/make/link-patch-dirs.sh sources patches + ln -s ../../../patches/hotspot sources/hotspot/.hg/patches + ln -s ../../../patches/jdk sources/jdk/.hg/patches $ ls -il patches/hotspot/series sources/hotspot/.hg/patches/series (should be identical files)
Since patches are guarded, you need a non-empty guards file in order to apply patches. Select the desired guards in each source repository that has a patch queue. There is a shell script which will distribute the hg command to each patch queue, or you can do it by hand:
$ guards="buildable testable $(sh patches/make/current-release.sh)" $ sh patches/make/each-patch-repo.sh hg qselect --reapply $guards
The shell script current-release.sh
simply digs out the most recent release tag from the source repository; it will be something like jdk7-b25
.
TO DO: Put the gory details in patches/Makefile
, with a simple build target.
Building
Once patches are applied, build as usual. Build instructions are posted with the OpenJDK Build Group.
TO DO: What are other good references to build advice?
For the most basic JVM enhancements, you may only need to build a Hotspot JVM and apply incremental testing, rather than build a whole JDK/JRE. See the patch document files, or this wiki, for information about incremental testing procedures for specific patch sets.