Eclipse OMR™ Cross platform components for building reliable, high performance language runtimes
C++ C Assembly Makefile Perl SourcePawn Other
Latest commit 67fc69e Jan 24, 2017 @vijaysun-omr vijaysun-omr committed on GitHub Merge pull request #692 from 0dvictor/master
Fix for incorrect MoveDataType
Failed to load latest commit information.
artwork Add OMR artwork to repository Nov 21, 2016
compiler Merge pull request #692 from 0dvictor/master Jan 24, 2017
doc Add more documentation to extensible classes Dec 12, 2016
example Build the Test compiler and JitBuilder on OS X Dec 22, 2016
fvtest Remove references to 'TR Talk' from makefiles Jan 20, 2017
gc Merge pull request #651 from ktbriggs/collector-language-interface-un… Jan 4, 2017
glue OMR out-of-line object allocation/initialization framework Oct 7, 2016
include_core Merge pull request #466 from charliegracie/cleanup Dec 21, 2016
jitbuilder Remove references to 'TR Talk' from makefiles Jan 20, 2017
lib issue #161 - remove useless .jazzignore files Jul 20, 2016
nls Initial contribution Mar 7, 2016
omr Resolve a RAS memory leak Dec 20, 2016
omr_glue_static_lib Initial contribution Mar 7, 2016
omr_static_lib Initial contribution Mar 7, 2016
omrmakefiles Update compiler options for zOS and zLinux Jan 12, 2017
omrsigcompat Define OMR_OMRSIG_HAS_SIGVEC in omrsig.h Oct 15, 2016
omrtrace Fix spacing around string literals Jun 23, 2016
perftest Fix #141: Improve gctest framework to support perf test Jun 27, 2016
port Merge pull request #466 from charliegracie/cleanup Dec 21, 2016
third_party Move Google Test to third_party Jul 29, 2016
thread Merge pull request #466 from charliegracie/cleanup Dec 21, 2016
tools Resolve cross configure issues for the tools Nov 15, 2016
util Cleanup the compareAndSwap functions Nov 10, 2016
.gitignore Simplify the tools configuration Oct 28, 2016
.travis.yml Run linter as part of Travis CI Oct 12, 2016 Add `lint` make target Oct 11, 2016
GNUmakefile Change configure flags for JIT components Nov 30, 2016
INSTALL Fix #82 Support for ddrgen and macro processing Apr 27, 2016
LICENSE Fix #39 Check-in config.sub and config.guess Apr 1, 2016 Add link to slides for EclipseCon'16 talk to README.MD Jan 9, 2017
config.guess Fix #39 Check-in config.sub and config.guess Apr 1, 2016
config.sub Fix #39 Check-in config.sub and config.guess Apr 1, 2016
configure Tolerating RTTI in OMR Jan 6, 2017 Tolerating RTTI in OMR Jan 6, 2017 Fix #82 Makefile for generating DDR artifacts. Apr 27, 2016
install-sh Include a dummy install-sh to satisfy configure Jun 22, 2016 Simplify the tools configuration Oct 28, 2016

Welcome to the Eclipse OMR Project!

Build Status

The Eclipse OMR project consists of a highly integrated set of open source C and C++ components that can be used to build robust language runtimes that will support many different hardware and operating system platforms. These components include but are not limited to: memory management, threading, platform port (abstraction) library, diagnostic support, monitoring support, garbage collection, and native Just In Time compilation.

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.

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

The initial set of Eclipse OMR components include:

  • 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
  • gc: garbage collection framework for managed heaps
  • 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

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.

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!)
  • starters: 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
  • jit: Just In Time compiler for generating native code for several platforms into managed code caches
  • gc: adding generational and other GC policies

The most comprehensive consumer of the Eclipse OMR technology is the IBM J9 Virtual Machine: a high performance, scalable, enterprise class Java Virtual Machine implementation representing hundreds of person years of effort. While not an open source project itself, J9 directly implements capabilites for Java using the core implementations provided by Eclipse OMR. The Ruby+OMR Technology Preview project also consumes the Eclipse OMR components by modifying the CRuby project. A SOM++ Smalltalk runtime has also been modified to use Eclipse OMR componentry. An experimental version of CPython using Eclipse OMR componentry has also been created but is not currently available in the open. (Our focus has been dominated by getting this code out into the open!)

Recent Presentations about Eclipse OMR

How to Build Standalone Eclipse OMR

Basic configuration and compile

To build standalone Eclipse OMR, run the following commands from the top of the source tree. The top of the Eclipe 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