mirror of
https://github.com/corda/corda.git
synced 2025-01-07 13:38:47 +00:00
Will now look pretty when converted to .md
This commit is contained in:
parent
ccbe01c16a
commit
dfbc34c3a4
209
readme.txt
209
readme.txt
@ -1,28 +1,26 @@
|
|||||||
Avian - a lightweight Java virtual machine (JVM)
|
Avian - A lightweight Java Virtual Machine (JVM)
|
||||||
================================================
|
================================================
|
||||||
|
|
||||||
// Put travis thing here
|
|
||||||
|
|
||||||
Quick Start
|
Quick Start
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
on Linux:
|
#### on Linux:
|
||||||
$ export JAVA_HOME=/usr/local/java # or wherever you have the JDK installed
|
$ export JAVA_HOME=/usr/local/java # or wherever you have the JDK installed
|
||||||
$ make
|
$ make
|
||||||
$ build/linux-i386/avian -cp build/linux-i386/test Hello
|
$ build/linux-i386/avian -cp build/linux-i386/test Hello
|
||||||
|
|
||||||
on Mac OS X:
|
#### on Mac OS X:
|
||||||
$ export JAVA_HOME=/Library/Java/Home
|
$ export JAVA_HOME=/Library/Java/Home
|
||||||
$ make
|
$ make
|
||||||
$ build/darwin-i386/avian -cp build/darwin-i386/test Hello
|
$ build/darwin-i386/avian -cp build/darwin-i386/test Hello
|
||||||
|
|
||||||
on Windows (MSYS):
|
#### on Windows (MSYS):
|
||||||
$ git clone git@github.com:ReadyTalk/win32.git ../win32
|
$ git clone git@github.com:ReadyTalk/win32.git ../win32
|
||||||
$ export JAVA_HOME="C:/Program Files/Java/jdk1.6.0_07"
|
$ export JAVA_HOME="C:/Program Files/Java/jdk1.6.0_07"
|
||||||
$ make
|
$ make
|
||||||
$ build/windows-i386/avian -cp build/windows-i386/test Hello
|
$ build/windows-i386/avian -cp build/windows-i386/test Hello
|
||||||
|
|
||||||
on Windows (Cygwin):
|
#### on Windows (Cygwin):
|
||||||
$ git clone git@github.com:ReadyTalk/win32.git ../win32
|
$ git clone git@github.com:ReadyTalk/win32.git ../win32
|
||||||
$ export JAVA_HOME="/cygdrive/c/Program Files/Java/jdk1.6.0_07"
|
$ export JAVA_HOME="/cygdrive/c/Program Files/Java/jdk1.6.0_07"
|
||||||
$ make
|
$ make
|
||||||
@ -38,14 +36,10 @@ Introduction
|
|||||||
Avian is a lightweight virtual machine and class library designed to
|
Avian is a lightweight virtual machine and class library designed to
|
||||||
provide a useful subset of Java's features, suitable for building
|
provide a useful subset of Java's features, suitable for building
|
||||||
self-contained applications. More information is available at the
|
self-contained applications. More information is available at the
|
||||||
project web site:
|
project [web site](http://oss.readytalk.com/avian).
|
||||||
|
|
||||||
http://oss.readytalk.com/avian
|
|
||||||
|
|
||||||
If you have any trouble building, running, or embedding Avian, please
|
If you have any trouble building, running, or embedding Avian, please
|
||||||
post a message to our discussion group:
|
post a message to our [discussion group](http://groups.google.com/group/avian).
|
||||||
|
|
||||||
http://groups.google.com/group/avian
|
|
||||||
|
|
||||||
That's also the place for any other questions, comments, or
|
That's also the place for any other questions, comments, or
|
||||||
suggestions you might have.
|
suggestions you might have.
|
||||||
@ -56,10 +50,10 @@ Supported Platforms
|
|||||||
|
|
||||||
Avian can currently target the following platforms:
|
Avian can currently target the following platforms:
|
||||||
|
|
||||||
Linux (i386, x86_64, ARM, and 32-bit PowerPC)
|
* Linux (i386, x86_64, ARM, and 32-bit PowerPC)
|
||||||
Windows (i386 and x86_64)
|
* Windows (i386 and x86_64)
|
||||||
Mac OS X (i386, x86_64 and 32-bit PowerPC)
|
* Mac OS X (i386, x86_64 and 32-bit PowerPC)
|
||||||
Apple iOS (i386 and ARM)
|
* Apple iOS (i386 and ARM)
|
||||||
|
|
||||||
|
|
||||||
Building
|
Building
|
||||||
@ -95,102 +89,101 @@ certain flags described below, all of which are optional.
|
|||||||
openjdk=<openjdk installation directory> \
|
openjdk=<openjdk installation directory> \
|
||||||
openjdk-src=<openjdk source directory>
|
openjdk-src=<openjdk source directory>
|
||||||
|
|
||||||
* platform - the target platform
|
* `platform` - the target platform
|
||||||
default: output of $(uname -s | tr [:upper:] [:lower:]),
|
* _default:_ output of $(uname -s | tr [:upper:] [:lower:]),
|
||||||
normalized in some cases (e.g. CYGWIN_NT-5.1 -> windows)
|
normalized in some cases (e.g. CYGWIN_NT-5.1 -> windows)
|
||||||
|
|
||||||
* arch - the target architecture
|
* `arch` - the target architecture
|
||||||
default: output of $(uname -m), normalized in some cases
|
* _default:_ output of $(uname -m), normalized in some cases
|
||||||
(e.g. i686 -> i386)
|
(e.g. i686 -> i386)
|
||||||
|
|
||||||
* process - choice between pure interpreter or JIT compiler
|
* `process` - choice between pure interpreter or JIT compiler
|
||||||
default: compile
|
* _default:_ compile
|
||||||
|
|
||||||
* mode - which set of compilation flags to use to determine
|
* `mode` - which set of compilation flags to use to determine
|
||||||
optimization level, debug symbols, and whether to enable
|
optimization level, debug symbols, and whether to enable
|
||||||
assertions
|
assertions
|
||||||
default: fast
|
* _default:_ fast
|
||||||
|
|
||||||
* lzma - if set, support use of LZMA to compress embedded JARs and
|
* `lzma` - if set, support use of LZMA to compress embedded JARs and
|
||||||
boot images. The value of this option should be a directory
|
boot images. The value of this option should be a directory
|
||||||
containing a recent LZMA SDK (available at
|
containing a recent LZMA SDK (available [here](http://www.7-zip.org/sdk.html)). Currently, only version 9.20 of
|
||||||
http://www.7-zip.org/sdk.html). Currently, only version 9.20 of
|
|
||||||
the SDK has been tested, but other versions might work.
|
the SDK has been tested, but other versions might work.
|
||||||
default: not set
|
* _default:_ not set
|
||||||
|
|
||||||
* ios - if true, cross-compile for iOS on OS X. Note that
|
* `ios` - if true, cross-compile for iOS on OS X. Note that
|
||||||
non-jailbroken iOS devices do not allow JIT compilation, so only
|
non-jailbroken iOS devices do not allow JIT compilation, so only
|
||||||
process=interpret or bootimage=true builds will run on such
|
process=interpret or bootimage=true builds will run on such
|
||||||
devices. See https://github.com/ReadyTalk/hello-ios for an
|
devices. See [here](https://github.com/ReadyTalk/hello-ios) for an
|
||||||
example of an Xcode project for iOS which uses Avian.
|
example of an Xcode project for iOS which uses Avian.
|
||||||
default: false
|
* _default:_ false
|
||||||
|
|
||||||
* bootimage - if true, create a boot image containing the pre-parsed
|
* `bootimage` - if true, create a boot image containing the pre-parsed
|
||||||
class library and ahead-of-time compiled methods. This option is
|
class library and ahead-of-time compiled methods. This option is
|
||||||
only valid for process=compile builds. Note that you may need to
|
only valid for process=compile builds. Note that you may need to
|
||||||
specify both build-arch=x86_64 and arch=x86_64 on 64-bit systems
|
specify both build-arch=x86_64 and arch=x86_64 on 64-bit systems
|
||||||
where "uname -m" prints "i386".
|
where "uname -m" prints "i386".
|
||||||
default: false
|
* _default:_ false
|
||||||
|
|
||||||
* heapdump - if true, implement avian.Machine.dumpHeap(String),
|
* `heapdump` - if true, implement avian.Machine.dumpHeap(String),
|
||||||
which, when called, will generate a snapshot of the heap in a
|
which, when called, will generate a snapshot of the heap in a
|
||||||
simple, ad-hoc format for memory profiling purposes. See
|
simple, ad-hoc format for memory profiling purposes. See
|
||||||
heapdump.cpp for details.
|
heapdump.cpp for details.
|
||||||
default: false
|
* _default:_ false
|
||||||
|
|
||||||
* tails - if true, optimize each tail call by replacing the caller's
|
* `tails` - if true, optimize each tail call by replacing the caller's
|
||||||
stack frame with the callee's. This convention ensures proper
|
stack frame with the callee's. This convention ensures proper
|
||||||
tail recursion, suitable for languages such as Scheme. This
|
tail recursion, suitable for languages such as Scheme. This
|
||||||
option is only valid for process=compile builds.
|
option is only valid for process=compile builds.
|
||||||
default: false
|
* _default:_ false
|
||||||
|
|
||||||
* continuations - if true, support continuations via the
|
* `continuations` - if true, support continuations via the
|
||||||
avian.Continuations methods callWithCurrentContinuation and
|
avian.Continuations methods callWithCurrentContinuation and
|
||||||
dynamicWind. See Continuations.java for details. This option is
|
dynamicWind. See Continuations.java for details. This option is
|
||||||
only valid for process=compile builds.
|
only valid for process=compile builds.
|
||||||
default: false
|
* _default:_ false
|
||||||
|
|
||||||
* use-clang - if true, use LLVM's clang instead of GCC to build.
|
* `use-clang` - if true, use LLVM's clang instead of GCC to build.
|
||||||
Note that this does not currently affect cross compiles, only
|
Note that this does not currently affect cross compiles, only
|
||||||
native builds.
|
native builds.
|
||||||
default: false
|
* _default:_ false
|
||||||
|
|
||||||
* openjdk - if set, use OpenJDK class library instead of the default
|
* `openjdk` - if set, use OpenJDK class library instead of the default
|
||||||
Avian class library. See "Building with the OpenJDK Class
|
Avian class library. See "Building with the OpenJDK Class
|
||||||
Library" below for details.
|
Library" below for details.
|
||||||
default: not set
|
* _default:_ not set
|
||||||
|
|
||||||
* openjdk-src - if this and the openjdk option above are both set,
|
* `openjdk-src` - if this and the openjdk option above are both set,
|
||||||
build an embeddable VM using the OpenJDK class library. The JNI
|
build an embeddable VM using the OpenJDK class library. The JNI
|
||||||
components of the OpenJDK class library will be built from the
|
components of the OpenJDK class library will be built from the
|
||||||
sources found under the specified directory. See "Building with
|
sources found under the specified directory. See "Building with
|
||||||
the OpenJDK Class Library" below for details.
|
the OpenJDK Class Library" below for details.
|
||||||
default: not set
|
* _default:_ not set
|
||||||
|
|
||||||
These flags determine the name of the directory used for the build.
|
These flags determine the name of the directory used for the build.
|
||||||
The name always starts with ${platform}-${arch}, and each non-default
|
The name always starts with _${platform}-${arch}_, and each non-default
|
||||||
build option is appended to the name. For example, a debug build with
|
build option is appended to the name. For example, a debug build with
|
||||||
bootimage enabled on Linux/i386 would be built in
|
bootimage enabled on Linux/i386 would be built in
|
||||||
build/linux-i386-debug-bootimage. This allows you to build with
|
_build/linux-i386-debug-bootimage_. This allows you to build with
|
||||||
several different sets of options independently and even
|
several different sets of options independently and even
|
||||||
simultaneously without doing a clean build each time.
|
simultaneously without doing a clean build each time.
|
||||||
|
|
||||||
If you are compiling for Windows, you may either cross-compile using
|
If you are compiling for Windows, you may either cross-compile using
|
||||||
MinGW or build natively on Windows under MSYS or Cygwin.
|
MinGW or build natively on Windows under MSYS or Cygwin.
|
||||||
|
|
||||||
Installing MSYS:
|
#### Installing MSYS:
|
||||||
|
|
||||||
1. Download and install the current MinGW and MSYS packages from
|
__1.__ Download and install the current MinGW and MSYS packages from
|
||||||
mingw.org, selecting the C and C++ compilers when prompted. Use the
|
mingw.org, selecting the C and C++ compilers when prompted. Use the
|
||||||
post-install script to create the filesystem link to the compiler.
|
post-install script to create the filesystem link to the compiler.
|
||||||
|
|
||||||
2. Download GNU Make 3.81 from the MSYS download page
|
__2.__ Download GNU Make 3.81 from the MSYS download page
|
||||||
(make-3.81-MSYS-1.0.11-2.tar.bz2) and extract the tar file into
|
(make-3.81-MSYS-1.0.11-2.tar.bz2) and extract the tar file into
|
||||||
e.g. c:/msys/1.0.
|
_e.g. c:/msys/1.0_.
|
||||||
|
|
||||||
Installing Cygwin:
|
#### Installing Cygwin:
|
||||||
|
|
||||||
1. Download and run setup.exe from cygwin.com, installing the base
|
__1.__ Download and run setup.exe from [cygwin's website](http://www.cygwin.com), installing the base
|
||||||
system and these packages: make, gcc-mingw-g++,
|
system and these packages: make, gcc-mingw-g++,
|
||||||
mingw64-i686-gcc-g++, mingw64-x86_64-gcc-g++, and (optionally) git.
|
mingw64-i686-gcc-g++, mingw64-x86_64-gcc-g++, and (optionally) git.
|
||||||
|
|
||||||
@ -222,13 +215,9 @@ To build with MSVC, install Cygwin as described above and set the
|
|||||||
following environment variables:
|
following environment variables:
|
||||||
|
|
||||||
$ export PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/Common7/IDE:/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/VC/BIN:/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/Common7/Tools:/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v3.5:/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v2.0.50727:/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/VC/VCPackages:/cygdrive/c/Program Files/Microsoft SDKs/Windows/v6.0A/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem"
|
$ export PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/Common7/IDE:/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/VC/BIN:/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/Common7/Tools:/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v3.5:/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v2.0.50727:/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/VC/VCPackages:/cygdrive/c/Program Files/Microsoft SDKs/Windows/v6.0A/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem"
|
||||||
|
|
||||||
$ export LIBPATH="C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;"
|
$ export LIBPATH="C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;"
|
||||||
|
|
||||||
$ export VCINSTALLDIR="C:\Program Files\Microsoft Visual Studio 9.0\VC"
|
$ export VCINSTALLDIR="C:\Program Files\Microsoft Visual Studio 9.0\VC"
|
||||||
|
|
||||||
$ export LIB="C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib;"
|
$ export LIB="C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib;"
|
||||||
|
|
||||||
$ export INCLUDE="C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include;"
|
$ export INCLUDE="C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include;"
|
||||||
|
|
||||||
Adjust these definitions as necessary according to your MSVC
|
Adjust these definitions as necessary according to your MSVC
|
||||||
@ -238,7 +227,6 @@ Finally, build with the msvc flag set to the MSVC tool directory:
|
|||||||
|
|
||||||
$ make msvc="/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/VC"
|
$ make msvc="/cygdrive/c/Program Files/Microsoft Visual Studio 9.0/VC"
|
||||||
|
|
||||||
|
|
||||||
Building with the OpenJDK Class Library
|
Building with the OpenJDK Class Library
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
@ -253,7 +241,7 @@ where OpenJDK is installed, e.g.:
|
|||||||
|
|
||||||
This will build Avian as a conventional JVM (e.g. libjvm.so) which
|
This will build Avian as a conventional JVM (e.g. libjvm.so) which
|
||||||
loads its boot class library and native libraries (e.g. libjava.so)
|
loads its boot class library and native libraries (e.g. libjava.so)
|
||||||
from /usr/lib/jvm/java-7-openjdk/jre at runtime. To run an
|
from _/usr/lib/jvm/java-7-openjdk/jre_ at runtime. To run an
|
||||||
application in this configuration, you'll need to make sure the VM is
|
application in this configuration, you'll need to make sure the VM is
|
||||||
in your library search path. For example:
|
in your library search path. For example:
|
||||||
|
|
||||||
@ -292,46 +280,50 @@ and the supplied openjdk.pro configuration file (see "Embedding with
|
|||||||
ProGuard and a Boot Image" below). Note that you'll still need to use
|
ProGuard and a Boot Image" below). Note that you'll still need to use
|
||||||
vm.pro in that case -- openjdk.pro just adds additional constraints
|
vm.pro in that case -- openjdk.pro just adds additional constraints
|
||||||
specific to the OpenJDK port. Also see app.mk in
|
specific to the OpenJDK port. Also see app.mk in
|
||||||
git://oss.readytalk.com/avian-swt-examples.git for an example of using
|
_git://oss.readytalk.com/avian-swt-examples.git_ for an example of using
|
||||||
Avian, OpenJDK, ProGuard, and UPX in concert.
|
Avian, OpenJDK, ProGuard, and UPX in concert.
|
||||||
|
|
||||||
Here are some examples of how to install OpenJDK and build Avian with
|
Here are some examples of how to install OpenJDK and build Avian with
|
||||||
it on various OSes:
|
it on various OSes:
|
||||||
|
|
||||||
Debian-based Linux:
|
#### Debian-based Linux:
|
||||||
# conventional build:
|
_Conventional build:_
|
||||||
apt-get install openjdk-7-jdk
|
|
||||||
make openjdk=/usr/lib/jvm/java-7-openjdk test
|
|
||||||
|
|
||||||
# stand-alone build:
|
$ apt-get install openjdk-7-jdk
|
||||||
apt-get install openjdk-7-jdk
|
$ make openjdk=/usr/lib/jvm/java-7-openjdk test
|
||||||
apt-get source openjdk-7-jdk
|
|
||||||
apt-get build-dep openjdk-7-jdk
|
_Stand-alone build:_
|
||||||
|
|
||||||
|
$ apt-get install openjdk-7-jdk
|
||||||
|
$ apt-get source openjdk-7-jdk
|
||||||
|
$ apt-get build-dep openjdk-7-jdk
|
||||||
(cd openjdk-7-7~b147-2.0 && dpkg-buildpackage)
|
(cd openjdk-7-7~b147-2.0 && dpkg-buildpackage)
|
||||||
make openjdk=/usr/lib/jvm/java-7-openjdk \
|
$ make openjdk=/usr/lib/jvm/java-7-openjdk \
|
||||||
openjdk-src=$(pwd)/openjdk-7-7~b147-2.0/build/openjdk/jdk/src \
|
openjdk-src=$(pwd)/openjdk-7-7~b147-2.0/build/openjdk/jdk/src \
|
||||||
test
|
test
|
||||||
|
|
||||||
Mac OS X:
|
####Mac OS X:
|
||||||
# Prerequisite: build OpenJDK 7 according to
|
_Prerequisite:_ Build OpenJDK 7 according to [this site](https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port).
|
||||||
# https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port
|
|
||||||
|
|
||||||
# conventional build:
|
_Conventional build:_
|
||||||
make openjdk=$(pwd)/../jdk7u-dev/build/macosx-amd64/j2sdk-image test
|
|
||||||
|
|
||||||
# stand-alone build:
|
$ make openjdk=$(pwd)/../jdk7u-dev/build/macosx-amd64/j2sdk-image test
|
||||||
make openjdk=$(pwd)/../jdk7u-dev/build/macosx-amd64/j2sdk-image \
|
|
||||||
|
_Stand-alone build:_
|
||||||
|
|
||||||
|
$ make openjdk=$(pwd)/../jdk7u-dev/build/macosx-amd64/j2sdk-image \
|
||||||
openjdk-src=$(pwd)/../p/jdk7u-dev/jdk/src test
|
openjdk-src=$(pwd)/../p/jdk7u-dev/jdk/src test
|
||||||
|
|
||||||
Windows (Cygwin):
|
####Windows (Cygwin):
|
||||||
# Prerequisite: build OpenJDK 7 according to
|
_Prerequisite:_ Build OpenJDK 7 according to [this site](http://weblogs.java.net/blog/simonis/archive/2011/10/28/yaojowbi-yet-another-openjdk-windows-build-instruction).
|
||||||
# http://weblogs.java.net/blog/simonis/archive/2011/10/28/yaojowbi-yet-another-openjdk-windows-build-instruction
|
|
||||||
|
|
||||||
# conventional build:
|
_Conventional build:_
|
||||||
make openjdk=$(pwd)/../jdk7u-dev/build/windows-i586/j2sdk-image test
|
|
||||||
|
|
||||||
# stand-alone build:
|
$ make openjdk=$(pwd)/../jdk7u-dev/build/windows-i586/j2sdk-image test
|
||||||
make openjdk=$(pwd)/../jdk7u-dev/build/windows-i586/j2sdk-image \
|
|
||||||
|
_Stand-alone build:_
|
||||||
|
|
||||||
|
$ make openjdk=$(pwd)/../jdk7u-dev/build/windows-i586/j2sdk-image \
|
||||||
openjdk-src=$(pwd)/../p/jdk7u-dev/jdk/src test
|
openjdk-src=$(pwd)/../p/jdk7u-dev/jdk/src test
|
||||||
|
|
||||||
Currently, only OpenJDK 7 is supported. Later versions might work,
|
Currently, only OpenJDK 7 is supported. Later versions might work,
|
||||||
@ -357,7 +349,7 @@ Note: if you are building on Cygwin, prepend "x86_64-w64-mingw32-" or
|
|||||||
"i686-w64-mingw32-" to the ar, g++, gcc, strip, and dlltool commands
|
"i686-w64-mingw32-" to the ar, g++, gcc, strip, and dlltool commands
|
||||||
below (e.g. x86_64-w64-mingw32-gcc).
|
below (e.g. x86_64-w64-mingw32-gcc).
|
||||||
|
|
||||||
Step 1: Build Avian, create a new directory, and populate it with the
|
__1.__ Build Avian, create a new directory, and populate it with the
|
||||||
VM object files and bootstrap classpath jar.
|
VM object files and bootstrap classpath jar.
|
||||||
|
|
||||||
$ make
|
$ make
|
||||||
@ -366,7 +358,7 @@ VM object files and bootstrap classpath jar.
|
|||||||
$ ar x ../build/${platform}-${arch}/libavian.a
|
$ ar x ../build/${platform}-${arch}/libavian.a
|
||||||
$ cp ../build/${platform}-${arch}/classpath.jar boot.jar
|
$ cp ../build/${platform}-${arch}/classpath.jar boot.jar
|
||||||
|
|
||||||
Step 2: Build the Java code and add it to the jar.
|
__2.__ Build the Java code and add it to the jar.
|
||||||
|
|
||||||
$ cat >Hello.java <<EOF
|
$ cat >Hello.java <<EOF
|
||||||
public class Hello {
|
public class Hello {
|
||||||
@ -378,15 +370,15 @@ EOF
|
|||||||
$ javac -bootclasspath boot.jar Hello.java
|
$ javac -bootclasspath boot.jar Hello.java
|
||||||
$ jar u0f boot.jar Hello.class
|
$ jar u0f boot.jar Hello.class
|
||||||
|
|
||||||
Step 3: Make an object file out of the jar.
|
__3.__ Make an object file out of the jar.
|
||||||
|
|
||||||
$ ../build/${platform}-${arch}/binaryToObject/binaryToObject boot.jar \
|
$ ../build/${platform}-${arch}/binaryToObject/binaryToObject boot.jar \
|
||||||
boot-jar.o _binary_boot_jar_start _binary_boot_jar_end ${platform} ${arch}
|
boot-jar.o _binary_boot_jar_start _binary_boot_jar_end ${platform} ${arch}
|
||||||
|
|
||||||
If you've built Avian using the lzma option, you may optionally
|
If you've built Avian using the `lzma` option, you may optionally
|
||||||
compress the jar before generating the object:
|
compress the jar before generating the object:
|
||||||
|
|
||||||
$ ../build/$(platform}-${arch}-lzma/lzma/lzma encode boot.jar boot.jar.lzma
|
../build/$(platform}-${arch}-lzma/lzma/lzma encode boot.jar boot.jar.lzma
|
||||||
&& ../build/${platform}-${arch}-lzma/binaryToObject/binaryToObject \
|
&& ../build/${platform}-${arch}-lzma/binaryToObject/binaryToObject \
|
||||||
boot.jar.lzma boot-jar.o _binary_boot_jar_start _binary_boot_jar_end \
|
boot.jar.lzma boot-jar.o _binary_boot_jar_start _binary_boot_jar_end \
|
||||||
${platform} ${arch}
|
${platform} ${arch}
|
||||||
@ -395,7 +387,7 @@ Note that you'll need to specify "-Xbootclasspath:[lzma:bootJar]"
|
|||||||
instead of "-Xbootclasspath:[bootJar]" in the next step if you've used
|
instead of "-Xbootclasspath:[bootJar]" in the next step if you've used
|
||||||
LZMA to compress the jar.
|
LZMA to compress the jar.
|
||||||
|
|
||||||
Step 4: Write a driver which starts the VM and runs the desired main
|
__4.__ Write a driver which starts the VM and runs the desired main
|
||||||
method. Note the bootJar function, which will be called by the VM to
|
method. Note the bootJar function, which will be called by the VM to
|
||||||
get a handle to the embedded jar. We tell the VM about this jar by
|
get a handle to the embedded jar. We tell the VM about this jar by
|
||||||
setting the boot classpath to "[bootJar]".
|
setting the boot classpath to "[bootJar]".
|
||||||
@ -479,37 +471,42 @@ main(int ac, const char** av)
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
on Linux:
|
__on Linux:__
|
||||||
|
|
||||||
$ g++ -I$JAVA_HOME/include -I$JAVA_HOME/include/linux \
|
$ g++ -I$JAVA_HOME/include -I$JAVA_HOME/include/linux \
|
||||||
-D_JNI_IMPLEMENTATION_ -c embedded-jar-main.cpp -o main.o
|
-D_JNI_IMPLEMENTATION_ -c embedded-jar-main.cpp -o main.o
|
||||||
|
|
||||||
on Mac OS X:
|
__on Mac OS X:__
|
||||||
|
|
||||||
$ g++ -I$JAVA_HOME/include -D_JNI_IMPLEMENTATION_ -c embedded-jar-main.cpp \
|
$ g++ -I$JAVA_HOME/include -D_JNI_IMPLEMENTATION_ -c embedded-jar-main.cpp \
|
||||||
-o main.o
|
-o main.o
|
||||||
|
|
||||||
on Windows:
|
__on Windows:__
|
||||||
|
|
||||||
$ g++ -I$JAVA_HOME/include -I$JAVA_HOME/include/win32 \
|
$ g++ -I$JAVA_HOME/include -I$JAVA_HOME/include/win32 \
|
||||||
-D_JNI_IMPLEMENTATION_ -c embedded-jar-main.cpp -o main.o
|
-D_JNI_IMPLEMENTATION_ -c embedded-jar-main.cpp -o main.o
|
||||||
|
|
||||||
Step 5: Link the objects produced above to produce the final
|
__5.__ Link the objects produced above to produce the final
|
||||||
executable, and optionally strip its symbols.
|
executable, and optionally strip its symbols.
|
||||||
|
|
||||||
on Linux:
|
__on Linux:__
|
||||||
|
|
||||||
$ g++ -rdynamic *.o -ldl -lpthread -lz -o hello
|
$ g++ -rdynamic *.o -ldl -lpthread -lz -o hello
|
||||||
$ strip --strip-all hello
|
$ strip --strip-all hello
|
||||||
|
|
||||||
on Mac OS X:
|
__on Mac OS X:__
|
||||||
|
|
||||||
$ g++ -rdynamic *.o -ldl -lpthread -lz -o hello -framework CoreFoundation
|
$ g++ -rdynamic *.o -ldl -lpthread -lz -o hello -framework CoreFoundation
|
||||||
$ strip -S -x hello
|
$ strip -S -x hello
|
||||||
|
|
||||||
on Windows:
|
__on Windows:__
|
||||||
|
|
||||||
$ dlltool -z hello.def *.o
|
$ dlltool -z hello.def *.o
|
||||||
$ dlltool -d hello.def -e hello.exp
|
$ dlltool -d hello.def -e hello.exp
|
||||||
$ g++ hello.exp *.o -L../../win32/lib -lmingwthrd -lm -lz -lws2_32 \
|
$ g++ hello.exp *.o -L../../win32/lib -lmingwthrd -lm -lz -lws2_32 \
|
||||||
-mwindows -mconsole -o hello.exe
|
-mwindows -mconsole -o hello.exe
|
||||||
$ strip --strip-all hello.exe
|
$ strip --strip-all hello.exe
|
||||||
|
|
||||||
|
|
||||||
Embedding with ProGuard and a Boot Image
|
Embedding with ProGuard and a Boot Image
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
@ -547,7 +544,7 @@ as desired.
|
|||||||
The following instructions assume we are building for Linux/i386.
|
The following instructions assume we are building for Linux/i386.
|
||||||
Please refer to the previous example for guidance on other platforms.
|
Please refer to the previous example for guidance on other platforms.
|
||||||
|
|
||||||
Step 1: Build Avian, create a new directory, and populate it with the
|
__1.__ Build Avian, create a new directory, and populate it with the
|
||||||
VM object files.
|
VM object files.
|
||||||
|
|
||||||
$ make bootimage=true
|
$ make bootimage=true
|
||||||
@ -555,13 +552,13 @@ VM object files.
|
|||||||
$ cd hello
|
$ cd hello
|
||||||
$ ar x ../build/linux-i386-bootimage/libavian.a
|
$ ar x ../build/linux-i386-bootimage/libavian.a
|
||||||
|
|
||||||
Step 2: Create a stage1 directory and extract the contents of the
|
__2.__ Create a stage1 directory and extract the contents of the
|
||||||
class library jar into it.
|
class library jar into it.
|
||||||
|
|
||||||
$ mkdir stage1
|
$ mkdir stage1
|
||||||
$ (cd stage1 && jar xf ../../build/linux-i386-bootimage/classpath.jar)
|
$ (cd stage1 && jar xf ../../build/linux-i386-bootimage/classpath.jar)
|
||||||
|
|
||||||
Step 3: Build the Java code and add it to stage1.
|
__3.__ Build the Java code and add it to stage1.
|
||||||
|
|
||||||
$ cat >Hello.java <<EOF
|
$ cat >Hello.java <<EOF
|
||||||
public class Hello {
|
public class Hello {
|
||||||
@ -572,7 +569,7 @@ public class Hello {
|
|||||||
EOF
|
EOF
|
||||||
$ javac -bootclasspath stage1 -d stage1 Hello.java
|
$ javac -bootclasspath stage1 -d stage1 Hello.java
|
||||||
|
|
||||||
Step 4: Create a ProGuard configuration file specifying Hello.main as
|
__4.__ Create a ProGuard configuration file specifying Hello.main as
|
||||||
the entry point.
|
the entry point.
|
||||||
|
|
||||||
$ cat >hello.pro <<EOF
|
$ cat >hello.pro <<EOF
|
||||||
@ -581,7 +578,7 @@ the entry point.
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
Step 5: Run ProGuard with stage1 as input and stage2 as output.
|
__5.__ Run ProGuard with stage1 as input and stage2 as output.
|
||||||
|
|
||||||
$ java -jar ../../proguard4.6/lib/proguard.jar \
|
$ java -jar ../../proguard4.6/lib/proguard.jar \
|
||||||
-dontusemixedcaseclassnames -injars stage1 -outjars stage2 \
|
-dontusemixedcaseclassnames -injars stage1 -outjars stage2 \
|
||||||
@ -597,7 +594,7 @@ runtime, you'll need to add them to stage1 before running ProGuard.
|
|||||||
Finally, you'll need to add @../openjdk.pro to the above command when
|
Finally, you'll need to add @../openjdk.pro to the above command when
|
||||||
using the OpenJDK library.)
|
using the OpenJDK library.)
|
||||||
|
|
||||||
Step 6: Build the boot and code images.
|
__6.__ Build the boot and code images.
|
||||||
|
|
||||||
$ ../build/linux-i386-bootimage/bootimage-generator
|
$ ../build/linux-i386-bootimage/bootimage-generator
|
||||||
-cp stage2 \
|
-cp stage2 \
|
||||||
@ -610,7 +607,7 @@ symbols in the boot/code image by also passing:
|
|||||||
-bootimage-symbols my_bootimage_start:my_bootimage_end \
|
-bootimage-symbols my_bootimage_start:my_bootimage_end \
|
||||||
-codeimage-symbols my_codeimage_start:my_codeimage_end
|
-codeimage-symbols my_codeimage_start:my_codeimage_end
|
||||||
|
|
||||||
Step 7: Write a driver which starts the VM and runs the desired main
|
__7.__ Write a driver which starts the VM and runs the desired main
|
||||||
method. Note the bootimageBin function, which will be called by the
|
method. Note the bootimageBin function, which will be called by the
|
||||||
VM to get a handle to the embedded boot image. We tell the VM about
|
VM to get a handle to the embedded boot image. We tell the VM about
|
||||||
this function via the "avian.bootimage" property.
|
this function via the "avian.bootimage" property.
|
||||||
@ -717,7 +714,7 @@ EOF
|
|||||||
$ g++ -I$JAVA_HOME/include -I$JAVA_HOME/include/linux \
|
$ g++ -I$JAVA_HOME/include -I$JAVA_HOME/include/linux \
|
||||||
-D_JNI_IMPLEMENTATION_ -c bootimage-main.cpp -o main.o
|
-D_JNI_IMPLEMENTATION_ -c bootimage-main.cpp -o main.o
|
||||||
|
|
||||||
Step 8: Link the objects produced above to produce the final
|
__8.__ Link the objects produced above to produce the final
|
||||||
executable, and optionally strip its symbols.
|
executable, and optionally strip its symbols.
|
||||||
|
|
||||||
$ g++ -rdynamic *.o -ldl -lpthread -lz -o hello
|
$ g++ -rdynamic *.o -ldl -lpthread -lz -o hello
|
||||||
|
Loading…
Reference in New Issue
Block a user