Eclipse OpenJ9's clone of the Eclipse OMR ( project. PRs should be opened against the upstream OMR project whenever possible.
Switch branches/tags
openj9-0.11.0 openj9-0.11.0-rc2 openj9-0.11.0-rc1 openj9-0.10.0 openj9-0.10.0-rc2 openj9-0.10.0-rc1 openj9-0.9.0 openj9-0.9.0-rc2 openj9-0.9.0-rc1 openj9-0.8.0 openj9-0.8.0-rc2 openj9-0.8.0-rc1 openj9-0.0RC2 openj9-0.0M1 omr_merge_20181020-043550 omr_merge_20181019-021003 omr_merge_20181018-191531 omr_merge_20181018-171159 omr_merge_20181018-160140 omr_merge_20181017-131209 omr_merge_20181016-164710 omr_merge_20181015-222738 omr_merge_20181015-210123 omr_merge_20181015-163207 omr_merge_20181013-022720 omr_merge_20181013-004645 omr_merge_20181011-154622 omr_merge_20181010-181644 omr_merge_20181010-171101 omr_merge_20181009-182947 omr_merge_20181006-203435 omr_merge_20181003_171332 omr_merge_20181002_210014 omr_merge_20181002_190718 omr_merge_20181002_171210 omr_merge_20181002_155903 omr_merge_20181001_210121 omr_merge_20181001_044250 omr_merge_20180929_215340 omr_merge_20180928_155219 omr_merge_20180928_142916 omr_merge_20180927_202200 omr_merge_20180924_192030 omr_merge_20180924_160907 omr_merge_20180920_022916 omr_merge_20180919_192952 omr_merge_20180919_173742 omr_merge_20180919_162048 omr_merge_20180919_142605 omr_merge_20180918_175815 omr_merge_20180917_233204 omr_merge_20180917_211719 omr_merge_20180917_165957 omr_merge_20180915_122710 omr_merge_20180913_181652 omr_merge_20180913_155608 omr_merge_20180913_143009 omr_merge_20180912_232540 omr_merge_20180911_221438 omr_merge_20180907_154316 omr_merge_20180906_175842 omr_merge_20180906_144436 omr_merge_20180906_114932 omr_merge_20180904_195648 omr_merge_20180904_155646 omr_merge_20180903_023222 omr_merge_20180827_182456 omr_merge_20180824_161108 omr_merge_20180824_043814 omr_merge_20180823_143935 omr_merge_20180822_205423 omr_merge_20180821_201205 omr_merge_20180821_182618 omr_merge_20180821_171057 omr_merge_20180821_034505 omr_merge_20180821_024044 omr_merge_20180820_042619 omr_merge_20180818_061131 omr_merge_20180817_221222 omr_merge_20180817_004032 omr_merge_20180816_192244 omr_merge_20180816_141316 omr_merge_20180815_191402 omr_merge_20180815_005826 omr_merge_20180814_201242 omr_merge_20180814_194007 omr_merge_20180814_183844 omr_merge_20180813_160513 omr_merge_20180813_141655 omr_merge_20180809_204315 omr_merge_20180809_005838 omr_merge_20180808_215152 omr_merge_20180808_021337 omr_merge_20180808_014629 omr_merge_20180807_172332 omr_merge_20180802_141850 omr_merge_20180802_000621 omr_merge_20180801_185729 omr_merge_20180801_143533 omr_merge_20180801_004829
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
artwork Remove filename spaces Feb 7, 2018
cmake Merge pull request #3000 from knn-k/aarch64crossbuild1 Oct 15, 2018
compiler Merge pull request #2985 from knn-k/aarch64eval6 Oct 20, 2018
ddr Enable DDR on AIX Sep 12, 2018
doc Merge pull request #2675 from nbhuiyan/doc-updates Aug 7, 2018
example Merge pull request #2727 from dnakamura/tooling_ebcdic Oct 10, 2018
fvtest Fix MSVC error C2398 requires narrowing conversion Oct 18, 2018
gc Merge pull request #3067 from dmitripivkine/master Oct 16, 2018
glue z/TPF Specific Build Updates for refactoring build options Jul 6, 2018
include_core Workaround for unsupported GCC features on OSX Oct 12, 2018
jitbuilder AArch64: Add support for ARM64 in Debug.cpp Oct 17, 2018
lib Correct SPDX license identifier Jan 5, 2018
nls Correct SPDX license identifier Jan 5, 2018
omr Make spelling of "initialize" consistent Jun 6, 2018
omr_glue_static_lib Correct SPDX license identifier Jan 5, 2018
omr_static_lib Correct SPDX license identifier Jan 5, 2018
omrmakefiles Merge pull request #2727 from dnakamura/tooling_ebcdic Oct 10, 2018
omrsigcompat Make OMR an installable library Sep 24, 2018
omrtrace Make spelling of "initialize" consistent Jun 6, 2018
perftest Correct SPDX license identifier Jan 5, 2018
port Pull handling of SIGFPE out of the loop in mapOSSignalToPortLib Oct 16, 2018
scripts Remove arm and aarch64 builds from Travis Oct 16, 2018
third_party Make hookgen/tracegen deal with EBCDIC on z/OS Jul 5, 2018
thread Merge pull request #2918 from gacholio/exit Sep 7, 2018
tools Merge pull request #2727 from dnakamura/tooling_ebcdic Oct 10, 2018
util Merge pull request #2996 from youngar/install Oct 14, 2018
.appveyor.yml Let AppVeyor install winflexbison Jul 3, 2018
.gitattributes Clear out .gitattributes file Jun 22, 2018
.gitignore Add z/OS build artifacts to the .gitignore Jul 5, 2018
.travis.yml Remove arm and aarch64 builds from Travis Oct 16, 2018
CMakeLists.txt Make OMR an installable library Sep 24, 2018 Update Contributor Guidelines for compiler architecture reviews Mar 1, 2018
GNUmakefile Wrap omrtrace lib within build flags in OMR_Initialize_VM May 28, 2018
INSTALL Correct SPDX license identifier Jan 5, 2018
LICENSE Correct SPDX license identifier Jan 5, 2018
Notice.html Fix line-ends May 4, 2018
OmrConfig.cmake Make OMR an installable library Sep 24, 2018 Travis: Update OMR README Sep 17, 2018
about.html Fix line-ends May 4, 2018
asl-v20.text Fix line-ends May 4, 2018
config.guess Update config.guess and config.sub May 11, 2018
config.sub Update config.guess and config.sub May 11, 2018
configure Merge pull request #2727 from dnakamura/tooling_ebcdic Oct 10, 2018 Merge pull request #2727 from dnakamura/tooling_ebcdic Oct 10, 2018 Preparations for use of ddrgen Jan 12, 2018
epl-2.0.html Correct SPDX license identifier Jan 5, 2018
install-sh Correct SPDX license identifier Jan 5, 2018
longabout.html Fix line-ends May 4, 2018 Correct SPDX license identifier Jan 5, 2018
omrcfg.CMakeTemplate.h Allow OMRPORT_OMRSIG_SUPPORT to be enabled and disabled globally Aug 14, 2018
omrversionstrings.CMakeTemplate.h Correct SPDX license identifier Jan 5, 2018 Revert "Call configure using the CONFIG_SHELL variable" Jul 13, 2018

Eclipse OMR

Build Status
Travis CI (Overall) Travis Overall Status
Windows x86(Appveyor) Appveyor Status
Windows x86-64 (Jenkins) Windows x86-64 Status
Linux x86-64 (Jenkins) Linux x86-64 Status
Linux x86-64 CMAKE Makefile (Travis) Travis Linux x86-64 CMAKE Makefile Status
Linux x86-64 (Travis) Travis Linux x86-64 Status
Linux x86-64 LINT (Travis) Travis Linux x86-64 LINT Status
Linux x86-64 CMAKE Ninja (Travis) Travis Linux x86-64 CMAKE Ninja Status
Linux AArch64 (Travis) Travis Linux AArch64 Status
Linux ARM (Travis) Travis Linux ARM Status
Power 64-bit Linux (Jenkins) Build-linux_ppc-64_le_gcc Status
Power 64-bit AIX (Jenkins) Build-aix_ppc-64 Status
Linux on Z 64-bit (Jenkins) Build-linux_390-64 Status

What Is Eclipse OMR?

The Eclipse OMR project is a set of open source C and C++ components that can be used to build robust language runtimes that support many different hardware and operating system platforms.

Our current components are:

  • gc: Garbage collection framework for managed heaps
  • compiler: Components for building compiler technology, such as JIT compilers.
  • jitbuilder: An easy to use high level abstraction on top of the compiler technology.
  • port: Platform porting library
  • thread: A cross platform pthread-like threading library
  • util: general utilities useful for building cross platform runtimes
  • omrsigcompat: Signal handling compatibility library
  • omrtrace: Tracing library for communication with IBM Health Center monitoring tools
  • tool: Code generation tools for the build system
  • vm: APIs to manage per-interpreter and per-thread contexts
  • example: Demonstration code to show how a language runtime might consume some Eclipse OMR components
  • fvtest: A language-independent test framework so that Eclipse OMR components can be tested outside of a language runtime

What's the goal?

The long term goal for the Eclipse OMR project is to foster an open ecosystem of language runtime developers to collaborate and collectively innovate with hardware platform designers, operating system developers, as well as tool and framework developers and to provide a robust runtime technology platform so that language implementers can much more quickly and easily create more fully featured languages to enrich the options available to programmers.

It is our community's fervent goal to be one of active contribution, improvement, and continual consumption.

We will be operating under the Eclipse Code of Conduct to promote fairness, openness, and inclusion.

Who is using Eclipse OMR?

  • The most comprehensive consumer of the Eclipse OMR technology is the Eclipse OpenJ9 Virtual Machine: a high performance, scalable, enterprise class Java Virtual Machine implementation representing hundreds of person years of effort, built on top of the core technologies provided by Eclipse OMR.
  • The Ruby+OMR Technology Preview has used Eclipse OMR components to add a JIT compiler to the CRuby implementation, and to experiment with replacing the garbage collector in CRuby.
  • A SOM++ Smalltalk runtime has also been modified to use Eclipse OMR componentry.
  • An experimental version of CPython using Eclipse OMR components has also been created but is not yet available in the open. (Our focus has been dominated by getting this code out into the open!)

What's the licence?

License License

All Eclipse OMR project materials are made available under the Eclipse Public License 2.0 and the Apache 2.0 license. You can choose which license you wish to follow. Please see our LICENSE file for more details.

What's being worked on?

There are some active contribution projects underway right now:

  • Documentation: code comments are great, but we need more overview documentation so we're writing that
  • FAQ: Frequently Asked Questions from real people's questions (request: ask questions!)
  • Beginner issues: relatively simple but useful work items meant for people new to the project.
  • diag: more diagnostic support for language runtimes to aid developers and users
  • hcagent: the core code for the IBM Health Center agent for interfacing to a runtime
  • gc: adding generational and other GC policies

How Do I Interact With the Community?

  • Join the Eclipse OMR developer community mailing list. The community typically uses this list for project announcements and administrative discussions amongst committers. Questions are welcome here as well.

  • Join the Eclipse OMR community Slack workspace. You can join channels that interest you, ask questions, and receive answers from subject matter experts.

  • Ask a question or start a discussion via a GitHub issue.

How Do I Use it?

How to Build Standalone Eclipse OMR

The best way to get an initial understanding of the Eclipse OMR technology is to look at a 'standalone' build, which hooks Eclipse OMR up to the its testing system only.

Basic configuration and compile

To build standalone Eclipse OMR, run the following commands from the top of the source tree. The top of the Eclipse OMR source tree is the directory that contains

# Generate autotools makefiles with SPEC-specific presets
make -f SPEC=linux_x86-64 OMRGLUE=./example/glue

# Build

# Run tests (note that no contribution should cause new test failures in "make test")
make test

Run make -f help for a list of configure makefile targets. Run make help for a list of build targets.

Building Eclipse OMR on Windows

A shell script interpreter, such as bash, is required to run configure.

How to Configure with Custom Options

Run ./configure --help to see the full list of configure command-line options.

To run configure using both SPEC presets and custom options, pass the EXTRA_CONFIGURE_ARGS option to

For example, to disable optimizations, run configure like this:

# Example configure
make -f SPEC=linux_x86-64 OMRGLUE=./example/glue 'EXTRA_CONFIGURE_ARGS=--disable-optimized' clean all

To disable building fvtests, run configure like this:

# Example configure disabling fvtests
make -f SPEC=linux_x86-64 OMRGLUE=./example/glue 'EXTRA_CONFIGURE_ARGS=--disable-fvtest' clean all

Note that the clean target of deletes the header files and makefiles generated by configure. Invoking the clean all targets ensures that the header files and makefiles are regenerated using the custom options.

The minimal invocation of configure is:

# Basic configure example
$ ./configure OMRGLUE=./example/glue

Where can I learn more?

Presentations about Eclipse OMR

Blog Posts about OMR technologies

(c) Copyright IBM Corp. 2016, 2018