Building JamVM and GNU Classpath and Jikes (for Java support in webOS) with scratchbox2
'NOTE : JamVM doesn't work, there is a problem with segmentation fault to fix'
Requirements
First, follow the tutorial WebOS Internals PDK to set up the cross compilation environment.
Next install gcj needed for compiling Gnu Classpath
sudo apt-get install gcj
Compiling
Create your working folder :
cd /home/ubuntu mkdir java-project cd java-project
Go in ARM mode in your ScratchBox 2 :
sb2 -M /srv/preware/cross-compile/staging/mapping-armv7
Install GNU Classpath
Goal : implement almost all of the classes from Java J2SE 1.4 and 5.0.
GNU Classpath at Wikipedia : http://en.wikipedia.org/wiki/GNU_Classpath
Create the folders :
mkdir -p /usr/local/bin/ mkdir -p /usr/local/include/ mkdir -p /usr/local/lib/ mkdir -p /usr/local/share/
wget ftp://ftp.gnu.org/gnu/classpath/classpath-0.98.tar.gz tar xzvf classpath-0.98.tar.gz cd classpath-0.98 ./configure --prefix=/usr/local --disable-examples --without-x --disable-gtk-peer --disable-gconf-peer --disable-plugin --disable-alsa --disable-dssi make make install cd ..
Install Zlib needed by JamVM
cd /srv/preware/cross-compile/packages/common rm -Rf /srv/preware/cross-compile/packages/common/zlib/build make -C zlib ARCH=armv7 stage
Install JamVM
Goal : can launch Java program
JamVM at Wikipedia : http://en.wikipedia.org/wiki/JamVM
cd /home/ubuntu/java-project wget http://freefr.dl.sourceforge.net/project/jamvm/jamvm/JamVM%201.5.4/jamvm-1.5.4.tar.gz tar xzvf jamvm-1.5.4.tar.gz cd jamvm-1.5.4 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib export LD_RUN_LIBRARY_PATH=$LD_RUN_LIBRARY_PATH:/usr/local/lib LDFLAGS="-L/usr/local/lib" CFLAGS="-I/usr/local/include" ./configure --prefix=/usr/local --with-classpath-install-dir=/usr/local make make install cd ..
Install Jikes
wget http://freefr.dl.sourceforge.net/project/jikes/Jikes/1.22/jikes-1.22.tar.bz2 bzip2 -d jikes-1.22.tar.bz2 tar xvf jikes-1.22.tar cd jikes-1.22 ./configure --prefix=/usr/local make make install cd ..
Quit Scratch Box : exit
Installing the files on your device
cd /srv/preware/cross-compile/staging/armv7/usr sudo chown -R root:root * sudo tar cvf local.tar * copy the local.tar on your webos device connected as USB key on your computer
On your computer connect at your webOS device
novacom -t open tty://
Move the files in the good folders :
cd /media/internal mkdir java-project mv local.tar java-project cd java-project tar Pxvf local.tar chmod -R 755 * chown root:root * cd bin cp -p * /usr/local/bin cp -p -r include lib man share /usr/local
Fix missing symbolic links :
cd /usr/local/lib ln -s libjvm.so.0.0.0 libjvm.so ln -s libjvm.so.0.0.0 libjvm.so.0 ln -s libz.so.1.2.3 libz.so ln -s libz.so.1.2.3 libz.so.1 ln -s /usr/local/share/classpath/glibj.zip rt.jar cd classpath ln -s libjavaio.so.0.0.0 libjavaio.so ln -s libjavaio.so.0.0.0 libjavaio.so.0 ln -s libjavalangmanagement.so.0.0.0 libjavalangmanagement.so ln -s libjavalangmanagement.so.0.0.0 libjavalangmanagement.so.0 ln -s libjavalangreflect.so.0.0.0 libjavalangreflect.so ln -s libjavalangreflect.so.0.0.0 libjavalangreflect.so.0 ln -s libjavalang.so.0.0.0 libjavalang.so ln -s libjavalang.so.0.0.0 libjavalang.so.0 ln -s libjavanet.so.0.0.0 libjavanet.so ln -s libjavanet.so.0.0.0 libjavanet.so.0 ln -s libjavanio.so.0.0.0 libjavanio.so ln -s libjavanio.so.0.0.0 libjavanio.so.0 ln -s libjavautil.so.0.0.0 libjavautil.so ln -s libjavautil.so.0.0.0 libjavautil.so.0
Files installed by each program
Gnu Classpath
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/bin total 52 -rwxr-xr-x 1 ubuntu ubuntu 2073 2012-01-01 19:23 gappletviewer -rwxr-xr-x 1 ubuntu ubuntu 2058 2012-01-01 19:23 gjar -rwxr-xr-x 1 ubuntu ubuntu 2070 2012-01-01 19:23 gjarsigner -rwxr-xr-x 1 ubuntu ubuntu 2062 2012-01-01 19:23 gjavah -rwxr-xr-x 1 ubuntu ubuntu 2113 2012-01-01 19:23 gjdoc -rwxr-xr-x 1 ubuntu ubuntu 2066 2012-01-01 19:23 gkeytool -rwxr-xr-x 1 ubuntu ubuntu 2084 2012-01-01 19:23 gnative2ascii -rwxr-xr-x 1 ubuntu ubuntu 2060 2012-01-01 19:23 gorbd -rwxr-xr-x 1 ubuntu ubuntu 2060 2012-01-01 19:23 grmic -rwxr-xr-x 1 ubuntu ubuntu 2060 2012-01-01 19:23 grmid -rwxr-xr-x 1 ubuntu ubuntu 2074 2012-01-01 19:23 grmiregistry -rwxr-xr-x 1 ubuntu ubuntu 2075 2012-01-01 19:23 gserialver -rwxr-xr-x 1 ubuntu ubuntu 2070 2012-01-01 19:23 gtnameserv
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/include total 80 -rw-r--r-- 1 ubuntu ubuntu 3516 2012-01-01 19:23 jawt.h -rw-r--r-- 1 ubuntu ubuntu 2349 2012-01-01 19:23 jawt_md.h -rw-r--r-- 1 ubuntu ubuntu 66655 2012-01-01 19:23 jni.h -rw-r--r-- 1 ubuntu ubuntu 1547 2012-01-01 19:23 jni_md.h
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/lib
total 12
drwxr-xr-x 2 ubuntu ubuntu 4096 2012-01-01 19:23 classpath
-rw-r--r-- 1 ubuntu ubuntu 1437 2012-01-01 19:23 logging.properties
drwxr-xr-x 2 ubuntu ubuntu 4096 2012-01-01 19:23 security
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/lib/classpath total 1228 -rwxr-xr-x 1 ubuntu ubuntu 806 2012-01-01 19:23 libjavaio.la lrwxrwxrwx 1 ubuntu ubuntu 18 2012-01-01 19:23 libjavaio.so -> libjavaio.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 18 2012-01-01 19:23 libjavaio.so.0 -> libjavaio.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 177244 2012-01-01 19:23 libjavaio.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 818 2012-01-01 19:23 libjavalang.la -rwxr-xr-x 1 ubuntu ubuntu 878 2012-01-01 19:23 libjavalangmanagement.la lrwxrwxrwx 1 ubuntu ubuntu 30 2012-01-01 19:23 libjavalangmanagement.so -> libjavalangmanagement.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 30 2012-01-01 19:23 libjavalangmanagement.so.0 -> libjavalangmanagement.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 25052 2012-01-01 19:23 libjavalangmanagement.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 860 2012-01-01 19:23 libjavalangreflect.la lrwxrwxrwx 1 ubuntu ubuntu 27 2012-01-01 19:23 libjavalangreflect.so -> libjavalangreflect.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 27 2012-01-01 19:23 libjavalangreflect.so.0 -> libjavalangreflect.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 24773 2012-01-01 19:23 libjavalangreflect.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 20 2012-01-01 19:23 libjavalang.so -> libjavalang.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 20 2012-01-01 19:23 libjavalang.so.0 -> libjavalang.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 378668 2012-01-01 19:23 libjavalang.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 812 2012-01-01 19:23 libjavanet.la lrwxrwxrwx 1 ubuntu ubuntu 19 2012-01-01 19:23 libjavanet.so -> libjavanet.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 19 2012-01-01 19:23 libjavanet.so.0 -> libjavanet.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 263348 2012-01-01 19:23 libjavanet.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 812 2012-01-01 19:23 libjavanio.la lrwxrwxrwx 1 ubuntu ubuntu 19 2012-01-01 19:23 libjavanio.so -> libjavanio.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 19 2012-01-01 19:23 libjavanio.so.0 -> libjavanio.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 311502 2012-01-01 19:23 libjavanio.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 818 2012-01-01 19:23 libjavautil.la lrwxrwxrwx 1 ubuntu ubuntu 20 2012-01-01 19:23 libjavautil.so -> libjavautil.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 20 2012-01-01 19:23 libjavautil.so.0 -> libjavautil.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 27292 2012-01-01 19:23 libjavautil.so.0.0.0
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/lib/security total 4 -rw-r--r-- 1 ubuntu ubuntu 2489 2012-01-01 19:23 classpath.security
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/share total 12 drwxr-xr-x 2 ubuntu ubuntu 4096 2012-01-01 19:23 classpath drwxr-xr-x 2 ubuntu ubuntu 4096 2012-01-01 19:22 info drwxr-xr-x 3 ubuntu ubuntu 4096 2012-01-01 19:22 man [SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/share/classpath total 10780 -rw-r--r-- 1 ubuntu ubuntu 9832050 2012-01-01 19:22 glibj.zip -rw-r--r-- 1 ubuntu ubuntu 1204211 2012-01-01 19:23 tools.zip [SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/share/info total 292 -rw-r--r-- 1 ubuntu ubuntu 83532 2012-01-01 19:22 cp-hacking.info -rw-r--r-- 1 ubuntu ubuntu 106990 2012-01-01 19:22 cp-tools.info -rw-r--r-- 1 ubuntu ubuntu 98304 2012-01-01 19:22 cp-vmintegration.info -rw-r--r-- 1 ubuntu ubuntu 815 2012-01-01 19:22 dir [SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/share/man total 4 drwxr-xr-x 2 ubuntu ubuntu 4096 2012-01-01 19:23 man1 [SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox classpath-0.98 $ ls -l /usr/local/share/man/man1 total 164 -rw-r--r-- 1 ubuntu ubuntu 7997 2012-01-01 19:22 gappletviewer.1 -rw-r--r-- 1 ubuntu ubuntu 5592 2012-01-01 19:23 gcjh.1 -rw-r--r-- 1 ubuntu ubuntu 5918 2012-01-01 19:23 gjar.1 -rw-r--r-- 1 ubuntu ubuntu 9590 2012-01-01 19:23 gjarsigner.1 -rw-r--r-- 1 ubuntu ubuntu 5750 2012-01-01 19:23 gjavah.1 -rw-r--r-- 1 ubuntu ubuntu 35310 2012-01-01 19:23 gjdoc.1 -rw-r--r-- 1 ubuntu ubuntu 35536 2012-01-01 19:23 gkeytool.1 -rw-r--r-- 1 ubuntu ubuntu 4594 2012-01-01 19:23 gnative2ascii.1 -rw-r--r-- 1 ubuntu ubuntu 4825 2012-01-01 19:23 gorbd.1 -rw-r--r-- 1 ubuntu ubuntu 5084 2012-01-01 19:23 grmid.1 -rw-r--r-- 1 ubuntu ubuntu 5036 2012-01-01 19:23 grmiregistry.1 -rw-r--r-- 1 ubuntu ubuntu 4512 2012-01-01 19:23 gserialver.1 -rw-r--r-- 1 ubuntu ubuntu 4592 2012-01-01 19:23 gtnameserv.1
JamVM
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox jamvm-1.5.4 $ ls -l /usr/local/bin total 444 -rwxr-xr-x 1 ubuntu ubuntu 400821 2012-01-01 19:38 jamvm
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox jamvm-1.5.4 $ ls -l /usr/local/include total 108 -rw-r--r-- 1 ubuntu ubuntu 14042 2012-01-01 19:38 jni.h
Note : JamVM replace the jni.h file from Gnu Classpath by his own jni.h file
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox jamvm-1.5.4 $ ls -l /usr/local/lib total 636 -rwxr-xr-x 1 ubuntu ubuntu 817 2012-01-01 19:37 libjvm.la lrwxrwxrwx 1 ubuntu ubuntu 15 2012-01-01 19:37 libjvm.so -> libjvm.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 15 2012-01-01 19:37 libjvm.so.0 -> libjvm.so.0.0.0 -rwxr-xr-x 1 ubuntu ubuntu 556829 2012-01-01 19:37 libjvm.so.0.0.0 lrwxrwxrwx 1 ubuntu ubuntu 46 2012-01-01 19:38 rt.jar -> /usr/local/share/classpath/glibj.zip
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox jamvm-1.5.4 $ ls -l /usr/local/share total 16 drwxr-xr-x 2 ubuntu ubuntu 4096 2012-01-01 19:38 jamvm
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox jamvm-1.5.4 $ ls -l /usr/local/share/jamvm total 24 -rw-r--r-- 1 ubuntu ubuntu 22133 2009-12-31 19:42 classes.zip
Jikes
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox jikes-1.22 $ ls -ltr /usr/local/bin total 8260 -rwxr-xr-x 1 ubuntu ubuntu 8002423 2012-01-01 19:56 jikes
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox jikes-1.22 $ ls -ltr /usr/local/include total 116
-rw-r--r-- 1 ubuntu ubuntu 5794 2012-01-01 19:56 jikesapi.h
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox jikes-1.22 $ ls -ltr /usr/local/share total 20
drwxr-xr-x 3 ubuntu ubuntu 4096 2012-01-01 19:56 doc
[SB2 mapping-armv7 armv7] ubuntu@ubuntu-VirtualBox jikes-1.22 $ ls -ltr /usr/local/share/doc/jikes-1.22 total 12 -rw-r--r-- 1 ubuntu ubuntu 11886 2012-01-01 19:56 license.htm
Links used to do the webOS port
Patches used for the JamVM port for Iphone http://test.saurik.com/iphone/jamvm/
IPhone Java http://web.archive.org/web/20071230000038/http://iphone.fiveforty.net/wiki/index.php/IPhone_Java
Talk:IPhone Java http://web.archive.org/web/20071230050607/http://iphone.fiveforty.net/wiki/index.php/Talk:IPhone_Java