blob: 6f88ea2b32ce88989936846834d299fb4ba88763 [file] [log] [blame]
//===---------------------------------------------------------------------===//
// General notes
//===---------------------------------------------------------------------===//
VMKit is the composition of three libraries:
1) MVM: mostly a garbage collector
2) JnJVM: a Java Virtual Machine implemented with MVM and LLVM
3) N3: a CLI implementation with MVM and LLVM
JnJVM and N3 work on Linux/x86 (note that you may have to disable SSE on some
architecture), and mostly work on Linux/PPC (there are some errors with
floating points). Portage to Darwin needs to investigate why exceptions
do not work.
JnJVM and N3 use GCC's unwinding library (libgcc_s.so).
These are the options you should pass to the ./configure script
--with-llvmsrc: the source directory of LLVM
--with-llvmobj: the object directory of LLVM
--with-gnu-classpath-local-prefix: the local build of GNU classpath
--with-pnet-local-prefix: the local build of PNET
There's also:
--with-gc: user either boehm or single-mmap
Running make on the root tree will produce two "tools":
1) Debug|Release/bin/jnjvm: running the JnJVM like any other JVM
2) Debug|Release/bin/n3: running N3 like CLR
JnJVM and N3 have their own README notes.
//===---------------------------------------------------------------------===//
// Target specific LLVM patches (not required)
//===---------------------------------------------------------------------===//
If you experience problems, you can apply the patches for your corresponding
arch. I'd be interested to get some info on your specific problem if the
patch fixes it.
Patch for PowerPC:
- Bugfix for handling some external symbols (FIXME: does this still happen?)
- Thread safety when doing native code patching (TODO: submit to llvm-dev)
- CFI instructions for callbacks (TODO: find a correct macro to enable this)
- Emit a hand-made frame table for stubs (TODO: submit to llvm-dev)
Patch for X86
- Disable SSE (It can sigsegv on some x86 archs. Having test cases would be
nice)
- Enable CFI instructions for callbacks (TODO: find a correct macro to enable
by default)
//===---------------------------------------------------------------------===//
// TODOs
//===---------------------------------------------------------------------===//
- A compiler/system dependency interface
- Port to Darwin