Code Monkey home page Code Monkey logo

eclipse / omr Goto Github PK

View Code? Open in Web Editor NEW
930.0 57.0 391.0 79.28 MB

Eclipse OMR™ Cross platform components for building reliable, high performance language runtimes

Home Page: http://www.eclipse.org/omr

License: Other

Makefile 1.19% C++ 84.00% C 10.87% Shell 0.05% Assembly 1.22% M4 0.07% TeX 1.15% HTML 0.04% CMake 0.90% Ruby 0.01% Python 0.30% Perl 0.06% sed 0.01% Dockerfile 0.01% Awk 0.01% Groovy 0.05% Monkey C 0.01% Objective-C 0.05%
hacktoberfest

omr's Introduction

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

Build Status

Build Status
Windows x86-64 Windows x86-64 Status
Linux x86 Build Status
Linux x86-64 Linux x86-64 Status
Linux AArch64 (ARM 64-bit) Build-linux_aarch64 Status
Linux ARM 32-bit Build-linux_arm Status
OSX x86-64 Build Status
Linux Power 64-bit Build-linux_ppc-64_le_gcc Status
AIX Power 64-bit Build-aix_ppc-64 Status
Linux Z (s390x) 64-bit Build-linux_390-64 Status
z/OS (s390x) 64-bit Build-zOS_390-64 Status

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.

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.

How Do I Interact With the Community?

We operate under the Eclipse Code of Conduct to promote fairness, openness, and inclusion.

  • Join the Eclipse OMR community Slack workspace. You can join channels that interest you, ask questions, and receive answers from subject matter experts.
  • Join the Eclipse OMR developer community mailing list. The community primarily uses this list for project announcements and administrative discussions amongst committers. Questions are welcome here as well.
  • Ask a question or start a discussion via a GitHub issue.

Contributing

If you would like to contribute to OMR, check out the contributing guide for more information. We also have curated a set of good first issues for newcomers to tackle.

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 root of the source tree. For more detailed instructions please read BuildingWithCMake.md.

# Create a build directory and cd into it
mkdir build
cd build

# Generate the build system using cmake
cmake -Wdev -C ../cmake/caches/Travis.cmake ..

# Build (you can optionally compile in parallel by adding -j<N> to the make command)
make

# Run tests (note that no contribution should cause new test failures in testing).
# Use the `-V` option to see verbose output from the tests.
ctest [-V]

Building Eclipse OMR on Windows using Visual Studio

The following instructions below demonstrate the steps to build Eclipse OMR on Windows using Visual Studios. In the example Visual Studio 11 2012 Win64 is being used. You can easily switch this to the version of Visual Studio you would like to use.

# Create a build directory and cd into it
mkdir build
cd build

#generate the build system using cmake
cmake -G "Visual Studio 11 2012 Win64" ..

# Build
cmake --build .

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

Where can I learn more?

Presentations about Eclipse OMR

Blog Posts about OMR technologies

Copyright IBM Corp. 2016

omr's People

Contributors

0xdaryl avatar a7ehuo avatar akira1saitoh avatar amicic avatar andrewcraik avatar aviansie-ben avatar babsingh avatar bradleywood avatar charliegracie avatar dchopra001 avatar dmitripivkine avatar dnakamura avatar dsouzai avatar fjeremic avatar hzongaro avatar janvrany avatar jason-hall avatar jdmpapin avatar keithc-ca avatar knn-k avatar leonardo2718 avatar linhu2016 avatar mstoodle avatar r30shah avatar rsalman avatar rwy7 avatar samolisov avatar vijaysun-omr avatar wbh123456 avatar youngar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

omr's Issues

Style update: Require all class-keys used to declare types to be the same

The C++ standard indicates that at least class-keys (that is, struct, class, union) should be semantically equivalent when forward declaring a type, however, MSVC++ uses a type's class-key as part of name-mangling.

It would be nice to explicitly add this requirement to our style guide, as this has bitten a few of us on the JIT before, and breaks usually result in hard to diagnose link errors.

[0] https://msdn.microsoft.com/en-us/library/695x5bes.aspx
[1] https://alfps.wordpress.com/2010/06/22/cppx-is-c4099-really-a-sillywarning-disabling-msvc-sillywarnings/
[2] http://stackoverflow.com/questions/4866425/mixing-class-and-struct

Numa tests are failing on travis.ci

I've opened pull request #28 to disable the numa tests in the travis.ci builds as they appear to fail intermittently.

The tests need to be investigated to find out why they are failing.

Race conditions in osx/omrintrospect.c implementation

There are some race conditions and other potentially incorrect assumptions in the OSX implementation of omrintrospect.

suspendAllPreemptive()
-- Does this function assume that task_threads() will always return >= the previous number of threads? What prevents a thread from exiting between the calls to task_threads() and thread_suspend()? Can you suspend a thread that has exited? Does task_threads() always return threads in the same order? Can you suspend a thread twice?
-- If this function encounters an error, then the runtime is stuck in a permanently bad state, correct?

Remove -DIPv6_FUNCTION_SUPPORT from makefiles

I believe -DIPv6_FUNCTION_SUPPORT was related to some port library socket functions that were removed from OMR before the initial source code release. This flag should no longer be needed, and should be removed from all makefiles.

Integrate generational GC (gencon) into fvtest/gctest

Follow-up to issue #51 (Merge generational GC (gencon) into OMR). Gencon has been partially integrated with gctest but was left in a disabled state with pull request #65. This fix will complete the task and enable gencon testing in fvtest.

Use OMR version of J9 VM macros

It seems we have a couple places where we use the J9 version of OMR buildflag macros.
i.e.: J9VM_GC_CONCURRENT_SWEEP instead of OMR_GC_CONCURRENT_SWEEP

Note that the macro J9VM_GC_FINALIZATION does not currently have an OMR version, and a separate issue will be opened for it.

OMR CUDA problems

  • A process may hang if it uses omrcuda_* functions and terminates early by calling omrexit_shutdown_and_exit().
  • Some device functions incorrectly record the presence of an initialized CUDA device context. If the first omrcuda function called by a thread is one of those below, the context will be incorrectly marked as valid, leading other functions to fail (e.g. omrcuda_linkerCreate).
    • omrcuda_deviceCanAccessPeer
    • omrcuda_deviceDisablePeerAccess
    • omrcuda_deviceEnablePeerAccess
    • omrcuda_deviceGetAttribute

Detect libdwarf in configure

We intend to use libdwarf in future ddr-related tooling.

libdwarf is packaged and installed differently for various Linux distros (Ubuntu, RedHat, SuSe). Add logic in the configure scripts to detect its location and format.

Merge generational GC (gencon) into OMR

These changes will incorporate gencon technology into OMR. Current status (pre-merge) is code compiles cleanly and does not break any existing tests, gencon is enabled for example (fvtest) code and executes when enabled but there are issues to be dealt with before example (fvtest) is complete. These issues will be dealt with post-merge since getting this body of source code inline with OMR development of GetHub is primary concern.

The example (fvtest) code in omr/example/glue includes all of the integration points necessary to run gencon. This mainly involves changes to ObjectModel and the implementation of object scanners (MixedObjectScanner) and root scanners (ScavengerRootScanner, ScavengerBackOutScanner) for the fvtest "language", as well as changes to StartupManagerTestExample to accept "gcpolicy:gencon" as command-line option and enable gencon accordingly and to StartupManagerImpl to instantiate ConfigurationalGenerational (which in turn instantiates Scavenger). Other changes will be required post-merge, as noted above.

Object model and other changes have not at this point been reflected into omr/glue. This work relates to OMR documentation and will be addressed in a new issue post-merge.

omr thread detach issue when thread-local storage destructors are used

If a native thread relies on thread-local storage destructors to detach from the omr thread library when calling pthread_exit they may not be able to successfully detach and leak memory.

Here is some pseudo code to demonstrate the issue:

main() {
    ....
    pthread_key_create(&key, detachThread);
    ....
    pthread_create(&thread, NULL, threadproc, (void *) omrVM);
    pthread_join(thread, NULL);
    pthread_key_delete(key);
    ....
}
static void *
threadproc(void *p) {
    omrthread_t omrThread = NULL;
    .....
    /* Attach to omr so you can use the omr thread library */
    omrthread_attach(&self);
    /* set key to some user data you need in the destructor */
    pthread_setspecific(key, (void *)myData);
    ....
    pthread_exit(NULL);
    .....
}
static void
detachThread(void *p)
{
    ....
    /* do something with my data */
    ....
    /* omrthread_self relies on a tls key which is now NULL */
    self = omrthread_self();
    if (NULL != self) {
        omrthread_detach(self);
    } else {
        /* leak memory */
    }
    ....
}

Shutdown GlobalCollector properly

We are not properly shutting down the current global collector during calls to our public API OMR_GC_ShutdownCollector. This notably affects ConcurrentGC, which will leave behind a concurrent background helper thread.

Style guide: reconsider reference restrictions

Currently the style guidelines contain:

All objects and structures should be passed by address (i.e. *) rather than reference or value.
Non-object parameters that are not updated should be passed by value. C++ reference (i.e. &) arguments must not be used.
Rationale: Reference arguments can be problematic. For example, it's impossible to pass NULL for a reference object. They're just syntactic sugar to hide pointers, so we prefer to be explicit about how the argument is being passed.

C++ References enforce the equivalent of a non-NULL const pointer which is a stronger contract than merely declaring the pointer const. They help disambiguate the meaning of const and volatile in declarations. Furthermore, passing parameters by const reference allows for pass-by-reference optimizations without preventing the use of temporary r-values.

Generally, modern C++ strongly attempts to eschew pointers as much as is reasonably possible, passing by value or const reference whenever it can, passing by reference when needed. Pointers are found to obfuscate ownership and resource management responsibilities. The community has even gone so far as to produce a reference_wrapper class to be able to maintain (as far as possible) the conceptual integrity and non-nullable nature of references while being able to use them in container classes. For an example of this sentiment, see the 'no raw pointers' goal in well-received talk by Sean Parent on 'C++ seasoning'.

That being said, I will be the first to admit that passing non-const references for status / signal / reporting 'out' parameters can significantly obfuscate determining the intent of a function call in the context of a caller's code.

What pain points are we trying to address with this style guideline? Can we accomplish that without a universal prohibition on references?

verbose:gc data has incorrect thread name

I have a branch in my SOMpp fork using OMR and when I gather verbose:gc data OMR_VMThread names are not showing up where they are supposed to.

The lastname field in the response-info stanza and the threadName field in the largest-consumer stanza are printed as "OMR_VMThread [".

Concurrent Scavenger

Migrate MasterGCThread code to OMR, so that other collectors needing concurrent operation (with explicit master GC thread) may make use of it.

Introduce core components for Concurrent Scavenger.

Style update: change naming requirements for c++ class members

Currently our style guide requires that we use leading underscores to identify members in C++ classes. However there seems to be a community consensus that this isn't such a good idea because:

  1. Identifiers containing a leading underscore are reserved implementation use in the global namespace.
  2. Identifiers containing a leading underscore followed by a capital letter are universally reserved.
  3. Identifiers containing two leading underscores are universally reserved.

Furthermore from the C standard:

All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.

Frequent alternatives seem to be to either trail the identifier with an underscore member_ or to use more than just an underscore in the prefix m_member

[0] http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier

Startup API and Glue layer issue

While completing changes to consume OMR in SOM++ I found an issue with the OMR_Initialize_VM API and with the default implementation of CollectorLanguageInterfaceImpl found in omr/glue and the example in omr/example/glue.

Both issues are related to multiple threads being used (either for VM helper threads or multi threaded languages). I will work on this issue.

Generalize string encoding constants

J9STR_CODE_PLATFORM indicates that the string encoding is the "platform" encoding.
There are cases where OMR converts the result of system calls, e.g. getenv, to another encoding,
e.g. EBCDIOC->Latin-1 on z/OS and Wide->UTF-8 on Windows.
This change splits J9STR_CODE_PLATFORM into two constants:
J9STR_CODE_PLATFORM_RAW: the true encoding used by the operating system in the current locale
J9STR_CODE_PLATFORM_OMR_INTERNAL: the encoding taking into account implicit conversions by OMR

Allow ddrgen to be built with custom libdwarf

libdwarf lib and header install location varies by distro. For p & z-linux, binary packages aren't provided, and the consumer may need to build & install libdwarf in a custom location.

Add configure variables to enable ddrgen to be built with libdwarf from a custom location.

Improvements to CONTRIBUTING.md

  • Reference the coding standard doc
  • Recommend referencing the issue number in the pull request
  • Include the issue number in the commit comments (exact format is still TBD pending #46)

Ensure all Scavenger threads return same backout flag within a scan cycle

In a rare scenario of Scavenger backout, make sure that all parallel threads return same backout flag value from a scan cycle (being the main scan cycle or some of other smaller ones that may occur in miscellaneous clearing-scan phases toward the end of Scavenge cycle).

This is ensured by:

  • the thread that first encounters backout condition will store index of the scan cycle
  • threads will return value 'true' for the backout flag, only if their scan cycle index matches the one recorded by the first thread (thus avoiding a scenario where a late thread sees a backout flag of a fast thread in the next scan cycle)

Trivially a thread sync/barrier point would be put in between two scan cycles, but it would not be justified just for ensuring integrity of this flag, since this is a rare scenario.

Configure downloads required files

Currently the configure script downloads the configure files config.sub and config.guess. If the scripts can not download these files you can not compile the source.

I am suggesting that we check these files into the source to improve consumability of the Eclipse OMR project.

Stop using gcc-generated dependency files (*.d)

Stop using the -MD compile option, and stop using the generated *.d dependency files.

They don't significantly improve compile time.

Whenever there is significant file refactoring, some *.d files are no longer removed by "make clean", and the next attempt to compile usually fails due to incorrect dependencies specified by the obsolete *.d files.

Build Artifacts on OS X Showing up as Untracked Files

After building and testing the OMR project with the default glue, there are a large number of untracked files that should likely be added to .gitignore.

Steps to reproduce:
< clone repo to local disk >

make -f run_configure.mk SPEC=osx OMRGLUE=./example/glue
make
make test
git status

git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add ..." to include in what will be committed)

VerboseGC_59109_1457627456535.xml.001
VerboseGC_59109_1457627456535.xml.002
VerboseGC_59109_1457627456535.xml.003
VerboseGC_59109_1457627456758.xml
VerboseGC_59512_1457627886676.xml.001
VerboseGC_59512_1457627886676.xml.002
VerboseGC_59512_1457627886676.xml.003
VerboseGC_59512_1457627886843.xml
VerboseGC_64521_1457628095035.xml.001
VerboseGC_64521_1457628095035.xml.002
VerboseGC_64521_1457628095035.xml.003
VerboseGC_64521_1457628095225.xml
config.guess
config.sub
libbindthreadagent.dylib.dbg
libcpuLoadAgent.dylib.dbg
libinvalidAgentMissingOnLoad.dylib.dbg
libinvalidAgentMissingOnUnload.dylib.dbg
libinvalidAgentReturnError.dylib.dbg
libmemorycategoriesagent.dylib.dbg
libomrsig.dylib.dbg
libsampleSubscriber.dylib.dbg
libsltestlib.dylib.dbg
libsubscriberAgent.dylib.dbg
libsubscriberAgentWithJ9thread.dylib.dbg
libtraceNotStartedAgent.dylib.dbg
libtraceOptionAgent.dylib.dbg
libtraceagent.dylib.dbg
mmapTest1.tst
mmapTest10.tst
mmapTest11.tst
mmapTest13.tst
mmapTest2.tst
mmapTest3.tst
mmapTest4.tst
mmapTest5.tst
mmapTest6.tst
mmapTest7.tst
mmapTest8.tst
mmapTest9.tst
omrfile_test20_child_1_got_lock
omrfile_test20_child_2_done
omrfile_test20_file
omrfile_test22_child_1_got_lock
omrfile_test22_child_2_done
omrfile_test22_child_2_trying_for_lock
omrfile_test22_file
omrfile_test24_child_1_got_lock
omrfile_test24_child_2_done
omrfile_test24_child_2_trying_for_lock
omrfile_test24_file
omrfile_test25_child_1_got_lock
omrfile_test25_child_2_done
omrfile_test25_child_2_trying_for_lock
omrfile_test25_file
omrmmap_test5_child_1_checked_file
omrmmap_test5_child_1_mapped_file
omrmmap_test5_child_2_changed_file
traceLogTest.trc

reduce scanCache initial native footprint

Currently we reserved "maximum"(for maximum nursery space) native memory for the scan copy cache headers during vm startup, it might be requiring too much resource to initialize small heap usage application, so we will update CopyScanCacheList implementation to increase the size incrementally as the required or heap expansion. in order to balance between allocation size and allocation frequency. the new implementation are following the below rules.

1, the size of CopyScanCacheChunks are the same(includes initial size).
2, the size of Chunks(cache counts) =
if Xmnx <= 32MB ---> Xmnx / scavengerScanCacheMinimumSize
if 32MB < Xmnx < 4GB ---> MAX( Xmnx/16, 32MB) / scavengerScanCacheMinimumSize
if Xmnx >= 4GB ---> 256MB / scavengerScanCacheMinimumSize

3, when run out of CopyScanCache heads during Scavenger, try to allocate new chunk and append cache entries, if allocation is failed, allocate it in Heap
4, when heap expansion, if require cache entries for current new space is bigger than current count of cache entries, try to allocate new chunk and append cache entries
5, update cache overflow warning in verbose gc to monitor the performance of cache chunk allocation during scavenger.

omrvmem__testOverlappingSegments generates copious output

...to the point that Travis-CI logs don't want to show it or anything after it, and I get tired of scrolling through it. It would be nicer if the test could report possibly a short summary along with pass/fail and save this output to a file that would be automatically cleaned up unless a failure is detected or an override command line option is provided.

ddrgen tool initial contribution

DDR is a tool for analyzing core dumps. DDRGen is a utility that generates metadata for the DDR tool. In particular, it extracts information about data structures and macros from the runtime build. It outputs two artifacts that are consumed by the DDR tool chain (not included in this contribution):

  1. superset - Metadata for generating language-specific accessor stubs for coredump data, which allow implementation of advanced debug functions in DDR.
  2. blob - Metadata about structures, field offsets, and #defined values, used to generate the accessors.

The initial contribution of DDRGen covers:

  • Extraction of debug data from DWARF debug data in output from GCC.
  • Build and test on Linux/GCC x86-64 and -32.
    • Linux/GCC on p- and z- should "just work" after #88 is resolved.

DDRGen is disabled by default. Steps to build and run it:

make -f run_configure.mk SPEC=linux_x86-64 OMRGLUE=example/glue EXTRA_CONFIGURE_ARGS='--enable-DDR'

# Compiles ddrgen tools, but does no ddrgen processing
make

# Build ddr artifacts for sample test program
# vars can be customized to process full omr or runtime source tree
make -f ddr_artifacts.mk TOP_SRCDIR=tools/ddrgen/test DBG_FILE_LIST=tools/ddrgen/test/file_list

# Read the contents of the binary blob
./blob_reader blob.dat > blob.dat.strings

configure and makefile support for ddrgen tool

This is prep work for bringing the ddrgen tool into the OMR source tree.

Add configure option "--enable-DDR" to enable building the ddrgen tool.
Add top-level makefile targets for building the tool.

Infrastructure to support building DDR artifacts for the OMR code base.

  • ddr_artifacts.mk to support building DDR artifacts over a source tree. This is separate from the primary makefile that compiles the tool because the consumer will probably want to customize the artifact build to scan their language source tree as well.
  • Add "make ddrgen" target and cascading make targets to run preprocessor over the source tree.
  • Add per-module make rules for preprocessing @ ddr annotated code.
  • Add cleaning rules for generated .i artifacts.
  • Don't run preprocessor on tools, tests, and third party code.

OSX cannot map memory below 4GB

The OSX version of the port library cannot map memory below 4GB.

OSX cannot map memory below 4GB, so omrmem_allocate_memory32() will always return NULL.
If we can't allocate memory below 4G, this may prevent us from supporting features like compressedrefs GC.

There may be an option that allows forcing mmap() below 4GB to succeed. It requires linking the executable (does not work for libraries) with option "-pagezero_size x".

All commits must be trackable to an Issue

For us to maintain good release changelogs, and be able to identify the release where an Issue gets fixed, we must be able to easily find (1) the Issue that corresponds to a commit; (2) all the commits needed to fix an Issue.

I propose updating the contribution guidelines to include:

  • Every pull request must be associated with an Issue.
  • Every commit comment must clearly reference an Issue.
  • Provide a template for commit comments that makes it easy for us to find the issues in the git log.

Compile fails after running "./configure OMRGLUE=./example/glue"

After running "./configure OMRGLUE=./example/glue" as shown in the README, compilation fails:

make[2]: Entering directory `/home/angelal/git/omr.github/omr_glue_static_lib'
g++   -I. -I.././example/glue -I../include_core -I../omr/startup -I../gc/include -I../gc/startup -I../gc/base -I../gc/base/standard -I../gc/verbose -I../gc/verbose/handler_standard -I../gc/stats -I../gc/structs  -DUT_DIRECT_TRACE_REGISTRATION -I../include_core -I../nls -DLINUX -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DIPv6_FUNCTION_SUPPORT -DJ9HAMMER -c  -MMD -fno-exceptions -fno-rtti -fno-threadsafe-statics -fPIC -ggdb -m64 -Wreturn-type -Werror -Wall -Wno-non-virtual-dtor -O3 -fno-strict-aliasing   -o .././example/glue/CollectorLanguageInterfaceImpl.o .././example/glue/CollectorLanguageInterfaceImpl.cpp
.././example/glue/CollectorLanguageInterfaceImpl.cpp:37:28: fatal error: omrExampleVM.hpp: No such file or directory
 #include "omrExampleVM.hpp"
                            ^
compilation terminated.

To make this work, you need to explicitly add --enable-OMR_EXAMPLE to the configure command.

From a certain point of view, it makes sense that --enable-OMR_EXAMPLE is required because I am compiling the example glue. But this is not very user-friendly.

One possible resolution is to default OMRGLUE to example/glue and enable_OMR_EXAMPLE to yes, so that no configure options are required for the trivial standalone case.

Another option is to make --enable_OMR_EXAMPLE set OMRGLUE to example/glue, so that the minimal standalone configuration is ./configure --enable-OMR_EXAMPLE.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.