[aarch64-port-dev ] OpenJDK8/Zero cross compile build for Foundation model
Edward Nevill
ed at camswl.com
Mon Jun 17 05:50:24 PDT 2013
Hi all,
I have got a cross compile build of OpenJDK8/Zero working for the ARM
foundation model (ARM's aarch64 simulator).
I have made binaries of the images available should people wish to try
this out directly, and I have also included details on how to build from
the source below.
Firstly the build in OpenJDK8 has been changed completely. The top level
jdk8 directory now contains a ./configure. This has a
--with-jvm-variants= argument. From jdk8-b85 onwards it is possible to
build zero out of the box by simply doing
./configure --with-jvm-variants=zero
make
The support for cross compiling also seems to have been vastly improved.
The following options are available to ./configure.
--with-sys-root= <location of your cross compile sysroot>
--openjdk-target= <cross compile 'target'>
Armed with these options, a properly configured sysroot and a few
patches as given below it was possible to get OpenJDK cross compiling
for aarc64 with relatively little difficulty.
Well done to those who worked on the new build system in OpenJDK8 - it
is a vast improvement.
Setting up and running the binaries
-----------------------------------------------
First of all I will described how you can download the Foundation model
(ARM's aarch64 simulator) and get a Java binary up and running.
Note: In all of the below I am running Fedora 18 x86 64 bit. Your
mileage on other OS/Distro may vary.
First of all you will need to download the foundation model from ARM's
website at
http://www.arm.com/products/tools/models/fast-models/foundation-model.php
At the bottom of the page under "Get started with Foundation Models"
click on "download now". You will be asked to login. If you have
prevously registered for an ARM account login, otherwise you will need
to check the license terms, ensure that you are happy with them and
register for an ARM account.
After logging in above, on the right hand side of the next page under
"ARM V8 Foundation Model" click "Download Now".
The name of the file I downloaded was "FM000-KT-00035-r0p8-48rel5.tgz".
Obviously the name of the file you download may differ depending on the
version number you download, but if you want to download exactly the
same version number you can look for it under "Display older versions".
Untar this archive. It will create a directory 'Foundation_v8pkg'. cd to
this directory
tar xfz FM000-KT-00035-r0p8-48rel5.tgz
cd Foundation_v8pkg
Next you will need to download a boot image and an SD disk image.
To download the boot image do
wget
http://releases.linaro.org/13.05/openembedded/aarch64/img-foundation.axf
The SD disk image may be downloaded from
http://people.linaro.org/~edward.nevill/sd.img.gz
Decompress it using
gzip -d sd.img.gz
To boot the image in the foundation model do
./models/Linux64_GCC-4.1/Foundation_v8 --image img-foundation.axf
--block-device sd.img --network=nat
Now, an xterm window will open and Linux will boot in the aarch64
simulator. After a short while you will get the root '#' prompt. The
root home directory has been pre populated with the following
# ls
Queens.class
Queens.java
ecm
j2re-image
j2sdk-image
Some things you can try. In each case be prepared to wait, it hasn't
crashed, it is running under a simulator.
./jsdk-image/bin/javac Queens.java
./j2re-image/bin/java Queens
cd ecm
../j2re-image/bin/java CaffeineMarkEmbeddedApp
If you want to download more Java programs to you image follow the
instructions at the end of the next section for mounting the sd.img on
your host.
Please be careful to shut down the simulator properly before mounting
the file system on your host machine. Otherwise you *will* corrupt the
filesystem!
To shutdown the simulator do
shutdown -h now
Then, when the simulator says "system halted" use CTRL-C to stop it.
Building the OpenJDK8/zero image
----------------------------------------------
For convenience I have provided a complete build tree and a populated
sysroot below. Details of how to fetch and patch the OpenJDK8 source,
and how to build your own sysroot are given later, but to get started
you may find it more convenient just to download the images below.
The OpenJDK8 source tree:-
http://people.linaro.org/~edward.nevill/aa64_openjdk_130606.tar.gz
The sysroot
http://people.linaro.org/~edward.nevill/sysroot.tar.gz
Untar the 1st achive aa64_openjdk_130606.tar.gz. This will create a
directory aa64_openjdk.
cd to that directory and untar the 2nd archive, sysroot.tar.gz.
tar xfz ~/Downloads/aa64_openjdk_130606.tar.gz
cd aa64_openjdk
tar xfz ~/Downloads/sysroot.tar.gz
Then just execute the 'do_configure' and 'do_compile' scripts contained
in the aa64_openjdk directory and all being well, some time later, you
should have a j2sdk and a j2re image.
./do_configure
./do_compile 2>&1 | tee log
To transfer the compiled j2sdk and 2re images to the SD card image do
the following.
Be very careful to shut down the simulator before attempting the
following. If you attempt to mount the sd.img file as described below,
while you are running a simulator which also has it mounted you *will*
corrupt the filesystem.
sudo mount -o loop,offset=54525952 sd.img /mnt
sudo cp -r
<...>/aa64_openjdk/jdk8/build/linux-aarch64-normal-zero-release/j2sdk-image
/mnt/home/root
sudo cp -r
<...>/aa64_openjdk/jdk8/build/linux-aarch64-normal-zero-release/j2re-image
/mnt/home/root
sudo umount /mnt
You may then reboot the simulator with the upated image as described above.
Rebuilding from scratch
--------------------------------
To rebuild from scratch you will first of all need to build and populate
a sysroot.
The easiest way to do this is to use Open Embedded.
mkdir fromscratch
cd fromscratch
git clone git://git.linaro.org/openembedded/jenkins-setup.git
cd jenkins-setup
bash init-and-build.sh
cd openembedded-core
source oe-init-build-env ../build
bitbake -k openjdk-7-jre
Note: The reason for doing openjdk-7-jre is that we want to ensure that
all the packages required to build openjdk are included in the sysroot.
We are not actually going to use openjdk-7-jre in the build.
The above command will take several hours.
Now cd to the 'fromscratch' directory created above.
cd ~/fromscratch
Create a symbolic link to the sysroots created in the Open Embedded
build above
ln -s jenkins-setup/build/tmp-eglibc/sysroots sysroots
Download the OpenJDK source from openjdk.java.net
hg clone http://hg.openjdk.java.net/jdk8/jdk8
cd jdk8
sh ./get_source.sh
Update everything to jdk8-b92
sh ./common/bin/hgforest.sh up -r jdk8-b92
Download and untar the patches
http://people.linaro.org/~edward.nevill/patches.tar
cd ~/fromscratch
tar xf patches.tar
cd jdk8
patch -p 1 < ../patches/jdk8_patches
cd jdk
patch -p 1 < ../../patches/jdk_patches
cd ../hotspot
patch -p 1 < ../../patches/hotspot_patches
Download the 'do_configure' and 'do_compile' scripts. First make sure
you cd to the ~/fromscratch directory above.
cd ~/fromscratch
http://people.linaro.org/~edward.nevill/do_configure
http://people.linaro.org/~edward.nevill/do_compile
Then execute do_configure and do_compile
bash do_configure
bash do_compile 2>&1 | tee log
All being well, within a few minutes you should have a j2sdk and j2re image!
If you run into difficulties with any of this please drop me an email.
All the best,
Edward Nevill
More information about the aarch64-port-dev
mailing list