• Home
    • View
    • Login
    This page
    • Normal
    • Export PDF
    • Export Word
    • Attachments
    • Page Information

    Loading...
  1. Dashboard
  2. Multi-Language VM
  3. Main
  4. Building

Building

  • Created by John Rose, last modified by Michael Haupt on Nov 15, 2011

Setting Up Your Workspace

There are building instructions in the workspace itself: http://hg.openjdk.java.net/mlvm/mlvm/file/tip/README.txt

Make a directory which will contain both sets of repositories (patches and full sources), and pull everything there.

The sources repository based at http://hg.openjdk.java.net/hsx/hotspot-comp (This is as of 9/2011; earlier they were based at jdk7/jdk7 and then at bsd-port/bsd-port.)

pull sources and patches
$ mkdir davinci
$ cd davinci
$ hg fclone http://hg.openjdk.java.net/hsx/hotspot-comp 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.

link patch repos into source repos
$ bash patches/make/link-patch-dirs.sh sources patches
+ ln -s ../../../patches/hotspot sources/hotspot/.hg/patches
+ ln -s ../../../patches/jdk sources/jdk/.hg/patches
+ ln -s ../../../patches/langtools sources/langtools/.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:

select patch guards
$ export davinci=$(pwd) guards="buildable testable"
$ sh patches/make/each-patch-repo.sh hg qselect --reapply $guards \
        '$(sh $davinci/patches/make/current-release.sh)'

The shell script current-release.sh simply digs out the most recent release hash from the source repository; it will be something like 7836be3e92d0.

For convenience, everything after the fclone operations is packaged up in a makefile, which you can invoke on a variety of targets:

makefile targets
$ (cd patches/make; gnumake setup) # build links and select guards
$ (cd patches/make; gnumake check) # check for exact patch base revisions
$ (cd patches/make; gnumake force) # force exact patch base revisions
$ (cd patches/make; gnumake unforce) # restore workspaces to tip revisions
$ (cd patches/make; gnumake patch) # actually apply the selected patches
$ (cd patches/make; gnumake build) # run make in each repo's make subdirectory
$ (cd patches/make; gnumake all) # default target is setup check patch build
$ (cd patches/make; gnumake all RELAX_CHECKS=1) # suppress the check
$ (cd patches/make; gnumake all FORCE_VERSIONS=1) # do 'force' instead of 'check'

Things to watch out for in the makefile:

  • The check and force targets are hyper-conservative, assuming the patches are worthless unless the base revision matches exactly.
  • The check target is likely to fail unless the base revision has been forced, but if it passes you can expect the patches to apply cleanly.
  • The build target is probably oversimplified.

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.

Overview
Content Tools
ThemeBuilder
  • No labels

2 Comments

  1. User icon: kittylyst

    Ben Evans

    A page on building on Macs would be very useful - also perhaps a link to the page by Landon on building OpenJDK 7 via bootstrapping with an older version of SoyLatte (http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html)

    • Permalink
    • Nov 06, 2008
  2. User icon: duke

    J. Duke

    This is the script I use to update and build mlvm on Mac OS X 10.5.8: http://gist.github.com/243072

    • Permalink
    • Apr 06, 2010

Terms of Use
• License: GPLv2
• Privacy • Trademarks • Contact Us

Powered by a free Atlassian Confluence Open Source Project License granted to https://www.atlassian.com/software/views/opensource-community-additional-license-offer. Evaluate Confluence today.

  • Kolekti ThemeBuilder Powered by Atlassian Confluence 8.5.21
  • Kolekti ThemeBuilder printed.by.atlassian.confluence
  • Report a bug
  • Atlassian News
Atlassian
Kolekti ThemeBuilder EngineAtlassian Confluence
{"serverDuration": 208, "requestCorrelationId": "2209d7019f1f96c8"}