OpenJDK 1.7 for OS/X continuous build with Hudson – Episode 3
Last Updated on Samedi, 4 décembre 2010 11:50 Written by Henri Gomez Vendredi, 26 novembre 2010 09:55
Gildas and I create a project on GoogleCode where we’ll maintain build/package scripts and provide packages.
My Dropbox download page was overloaded and we needed another location, here is it :
http://code.google.com/p/openjdk-osx-build/
Contributors are very welcome, especially OS/X gurus
Learn MoreOpenJDK 1.7 for OS/X continuous build with Hudson – Episode 2
Last Updated on Samedi, 4 décembre 2010 11:51 Written by Henri Gomez Jeudi, 25 novembre 2010 09:49
First episode of OpenJDK 1.7 for OS/X covered build of 32 and 64 bits VM via Hudson.
We ended with two VMs, 32bits was under build/bsd-i586/j2sdk-image and 64bits in build/bsd-amd64/j2sdk-image
And here appears a new OS/X jedi, Gildas, providing .PKG and .DMG scripting.
This episode will describe how packaging, PKG and DMG was done.
OS/X Package .PKG
First we need to transform j2sdk-image folder into .PKG
We used OS/X packagemaker, provided by XCode :
/Developer/usr/bin/packagemaker \
--title "Open JDK 7 (32bits) for OS X Installer" \
--version 1.0 \
--filter "\.DS_Store" \
--root-volume-only \
--domain system \
--verbose \
--no-relocate \
-l "/Library/Java/JavaVirtualMachines/openjdk-1.7-i586" \
--target 10.5 \
--id net.openjdk.java.i586.pkg \
--root ${SOURCE_DIR} \
--out ${BUILD_DIR}/openjdk-1.7-i586.pkg \
-v
From .PKG to .DMG
Next step is to transform the .PKG into a mountable image .DMG.
Here we used hdiutil :
hdiutil create -srcfolder ${BUILD_DIR}/openjdk-1.7-i586.pkg -volname 'Open JDK 7 (32bits)' -fs HFS+ -fsargs '-c c=64,a=16,e=16' -format UDRW ${BUILD_DIR}/openjdk-1.7-i586-tmp.dmg
hdiutil convert ${BUILD_DIR}/openjdk-1.7-i586-tmp.dmg -format UDZO -imagekey zlib-level=9 -o ${BUILD_DIR}/OpenJDK-1.7-i586.dmg
Scripts for 32 and 64bits VM
The following scripts could be added at the end of the Hudson script zone, or called in a second pass.
32bits
#!/bin/bash
SOURCE_DIR=`pwd`/build/bsd-i586/j2sdk-image
BUILD_DIR=`pwd`/java-osx
DMG_MOUNT_DIR=$BUILD_DIR/mount
mkdir -p ${BUILD_DIR}
if [ -x build/bsd-i586/j2sdk-image/bin/java ]; then
rm -f ${BUILD_DIR}/OpenJDK-1.7-i586.dmg ${BUILD_DIR}/openjdk-1.7-i586.pkg
/Developer/usr/bin/packagemaker \
--title "Open JDK 7 (32bits) for OS X Installer" \
--version 1.0 \
--filter "\.DS_Store" \
--root-volume-only \
--domain system \
--verbose \
--no-relocate \
-l "/Library/Java/JavaVirtualMachines/openjdk-1.7-i586" \
--target 10.5 \
--id net.openjdk.java.i586.pkg \
--root ${SOURCE_DIR} \
--out ${BUILD_DIR}/openjdk-1.7-i586.pkg \
-v
hdiutil create -srcfolder ${BUILD_DIR}/openjdk-1.7-i586.pkg -volname 'Open JDK 7 (32bits)' -fs HFS+ -fsargs '-c c=64,a=16,e=16' -format UDRW ${BUILD_DIR}/openjdk-1.7-i586-tmp.dmg
hdiutil convert ${BUILD_DIR}/openjdk-1.7-i586-tmp.dmg -format UDZO -imagekey zlib-level=9 -o ${BUILD_DIR}/OpenJDK-1.7-i586.dmg
rm -f ${BUILD_DIR}/openjdk-1.7-i586-tmp.dmg
else
echo "no valid exec under build/bsd-i586/j2sdk-image/bin/java, packaging skipped"
fi
64bits
#!/bin/bash
SOURCE_DIR=`pwd`/build/bsd-amd64/j2sdk-image
BUILD_DIR=`pwd`/java-osx
DMG_MOUNT_DIR=$BUILD_DIR/mount
mkdir -p ${BUILD_DIR}
if [ -x build/bsd-amd64/j2sdk-image/bin/java ]; then
rm -f ${BUILD_DIR}/OpenJDK-1.7-x86_64.dmg ${BUILD_DIR}/openjdk-1.7-x86_64.pkg
/Developer/usr/bin/packagemaker \
--title "Open JDK 7 (64bits) for OS X Installer" \
--version 1.0 \
--filter "\.DS_Store" \
--root-volume-only \
--domain system \
--verbose \
--no-relocate \
-l "/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64" \
--target 10.5 \
--id net.openjdk.java.x86_64.pkg \
--root ${SOURCE_DIR} \
--out ${BUILD_DIR}/openjdk-1.7-x86_64.pkg \
-v
hdiutil create -srcfolder ${BUILD_DIR}/openjdk-1.7-x86_64.pkg -volname 'Open JDK 7 (64bits)' -fs HFS+ -fsargs '-c c=64,a=16,e=16' -format UDRW ${BUILD_DIR}/openjdk-1.7-x86_64-tmp.dmg
hdiutil convert ${BUILD_DIR}/openjdk-1.7-x86_64-tmp.dmg -format UDZO -imagekey zlib-level=9 -o ${BUILD_DIR}/OpenJDK-1.7-x86_64.dmg
rm -f ${BUILD_DIR}/openjdk-1.7-x86_64-tmp.dmg
else
echo "no valid exec under build/bsd-amd64/j2sdk-image/bin/java, packaging skipped"
fi
Next Step
Gildas and I, will continue to improve these basic .PKG/.DMG scripts and OS/X gurus advices are more than welcome.
Next steps is to find storage on the net so we could provide DMG regularly. Even better, an OS/X box (under SnowLeopard) available on the net, will help us provide continuous DMG.
Plus on est de fous, ….
Learn MoreOpenJDK 1.7 for OS/X continuous build with Hudson
Last Updated on Mardi, 23 novembre 2010 11:53 Written by Henri Gomez Dimanche, 21 novembre 2010 02:06
I setup Hudson to create continuous build of OpenJDK 1.7 for OS/X.
Pre-requisite
- an OS/X box, under Snow Leopard, 32 and 64bits mode should works
- XCode
- Mercurial with hgforest extension (see my previous article on Mercurial and hgforest)
- Hudson with its Mercurial Plugin
Hudson jobs
I created free-style software project jobs, one for building 32 bits JVM, openjdk-1.7-i586, the other to build 64 bits JVM, openjdk-1.7-x86_64.
32 bits build job
64 bits build job
Both jobs user Mercurial Source Code Management, with Forest Extension, in sync with repository URL http://hg.openjdk.java.net/bsd-port/bsd-port.
Each one will use self sufficient script, each script will :
- download soylatte JVMs (i386/amd64) under $HUDSON_HOME/DROP_DIR (so it could be reused for future builds).
- jaxp, jaf and jaxws2 since these are not available from the url defined in ant build scripts. Also download under $HUDSON_HOME/DROP_DIR.
- patch project so it will build under 32 and 64bits OS/X, and will be able to build 32bits JVM on 64bits OS/X (patches commited to OpenJDK Bugzilla #100155)
Execute shell for openjdk-1.7-i586
Take care and please get the text version of the script wordpress code plugin replacing < by lt
#!/bin/sh # if [ ! -z "$HUDSON_HOME" ]; then DROP_DIR=$HUDSON_HOME/DROP_DIR else DROP_DIR=`pwd/DROP_DIR` fi DROP_DIR=$HUDSON_HOME/DROP_DIR if [ ! -d $DROP_DIR ]; then echo "creating DROP_DIR" mkdir -p DROP_DIR fi SOYLATTE=$DROP_DIR/soylatte16-i386-1.0.3 if [ ! -d $SOYLATTE ]; then if [ ! -f $DROP_DIR/soylatte16-i386-1.0.3.tar.bz2 ]; then echo "downloading soylatte16-i386-1.0.3 into DROP_DIR" curl --user jrl:"I am a Licensee in good standing" http://hg.bikemonkey.org/archive/javasrc_1_6_jrl_darwin/soylatte16-i386-1.0.3.tar.bz2 -o $DROP_DIR/soylatte16-i386-1.0.3.tar.bz2 fi pushd $DROP_DIR tar xjf $DROP_DIR/soylatte16-i386-1.0.3.tar.bz2 popd fi if [ ! -f $DROP_DIR/jaxp-1_4_4.zip ]; then echo "downloading jaxp-1_4_4.zip into DROP_DIR" curl http://icedtea.classpath.org/download/drops/jaxp-1_4_4.zip -o $DROP_DIR/jaxp-1_4_4.zip fi if [ ! -f $DROP_DIR/jdk7-jaf-2010_08_19.zip ]; then echo "downloading jdk7-jaf-2010_08_19.zip into DROP_DIR" curl http://icedtea.classpath.org/download/drops/jdk7-jaf-2010_08_19.zip -o $DROP_DIR/jdk7-jaf-2010_08_19.zip fi if [ ! -f $DROP_DIR/jdk7-jaxws2_2-2010_08_19.zip ]; then echo "downloading jdk7-jaxws2_2-2010_08_19.zip into DROP_DIR" curl http://icedtea.classpath.org/download/drops/jdk7-jaxws2_2-2010_08_19.zip -o $DROP_DIR/jdk7-jaxws2_2-2010_08_19.zip fi if [ ! -d ALT_COMPILER_PATH ]; then echo "setup compiler dirs" mkdir ALT_COMPILER_PATH pushd ALT_COMPILER_PATH ln -s /usr/bin .SOURCE ln -s .SOURCE/g++-4.0 g++ ln -s .SOURCE/gcc-4.0 gcc popd fi echo "cleaning previous build" rm -rf build unset CLASSPATH unset JAVA_HOME unset LD_LIBRARY_PATH # patching defs.make for build on 64bits machine if required grep -q x86_64 hotspot/make/bsd/makefiles/defs.make if [ $? -eq 1 ] ; then echo "patching defs.make for build on 64bits machine" patch -p0 <<EOF --- hotspot/make/bsd/makefiles/defs.make.orig 2010-11-20 16:09:49.000000000 +0100 +++ hotspot/make/bsd/makefiles/defs.make 2010-11-20 16:10:29.000000000 +0100 @@ -90,6 +90,24 @@ endif endif +# x86_64 OS/X +ifeq (\$(ARCH), x86_64) + ifeq (\$(ARCH_DATA_MODEL), 64) + ARCH_DATA_MODEL = 64 + MAKE_ARGS += LP64=1 + PLATFORM = bsd-amd64 + VM_PLATFORM = bsd_amd64 + HS_ARCH = x86 + else + ARCH_DATA_MODEL = 32 + PLATFORM = bsd-i586 + VM_PLATFORM = bsd_i486 + HS_ARCH = x86 + # We have to reset ARCH to i386 since SRCARCH relies on it + ARCH = i386 + endif +endif + # i386 ifeq (\$(ARCH), i386) ifeq (\$(ARCH_DATA_MODEL), 64) EOF fi # patching Platform.gmk for 32bits VM build on 64bits machine grep -q "force i586 if 32bits VM asked" jdk/make/common/shared/Platform.gmk if [ $? -eq 1 ] ; then echo "patching Platform.gmk for 32bits VM on 64bits machine" patch -p0 <<EOF1 --- jdk/make/common/shared/Platform.gmk.orig 2010-11-20 19:33:19.000000000 +0100 +++ jdk/make/common/shared/Platform.gmk 2010-11-21 00:39:18.000000000 +0100 @@ -272,6 +272,12 @@ # Darwin builds may be 32-bit or 64-bit data model. ifeq (\$(SYSTEM_UNAME), Darwin) + ifeq (\$(ARCH), amd64) + # force i586 if 32bits VM asked + ifeq (\$(ARCH_DATA_MODEL), 32) + ARCH=i586 + endif + endif ifeq (\$(ARCH), i586) ifeq (\$(ARCH_DATA_MODEL), 64) ARCH=amd64 EOF1 fi env -i PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin \ LANG=C \ CC=gcc-4.0 \ CXX=g++-4.0 \ make \ ALT_DROPS_DIR=$DROP_DIR \ ALT_BOOTDIR=$SOYLATTE \ ALT_JDK_IMPORT_PATH=$SOYLATTE \ ALT_FREETYPE_HEADERS_PATH=/usr/X11R6/include \ ALT_FREETYPE_LIB_PATH=/usr/X11R6/lib \ ALT_CUPS_HEADERS_PATH=/usr/include \ ALLOW_DOWNLOADS=true \ ANT_HOME=/usr/share/ant \ NO_DOCS=true \ HOTSPOT_BUILD_JOBS=2 \ ARCH_DATA_MODEL=32 \ ALT_COMPILER_PATH=$(pwd -P)/ALT_COMPILER_PATH/ \ LD_LIBRARY_PATH= echo "testing build: ./build/bsd-i586/j2sdk-image/bin/java -version" ./build/bsd-i586/j2sdk-image/bin/java -version
Execute shell for openjdk-1.7-x86_64
Take care and please get the text version of the script wordpress code plugin replacing < by lt
#!/bin/sh # if [ ! -z "$HUDSON_HOME" ]; then DROP_DIR=$HUDSON_HOME/DROP_DIR else DROP_DIR=`pwd/DROP_DIR` fi DROP_DIR=$HUDSON_HOME/DROP_DIR if [ ! -d $DROP_DIR ]; then echo "creating DROP_DIR" mkdir -p DROP_DIR fi SOYLATTE=$DROP_DIR/soylatte16-amd64-1.0.3 if [ ! -d $SOYLATTE ]; then if [ ! -f $DROP_DIR/soylatte16-amd64-1.0.3.tar.bz2 ]; then echo "downloading soylatte16-amd64-1.0.3 into DROP_DIR" curl --user jrl:"I am a Licensee in good standing" http://hg.bikemonkey.org/archive/javasrc_1_6_jrl_darwin/soylatte16-amd64-1.0.3.tar.bz2 -o $DROP_DIR/soylatte16-amd64-1.0.3.tar.bz2 fi pushd $DROP_DIR tar xjf $DROP_DIR/soylatte16-amd64-1.0.3.tar.bz2 popd fi if [ ! -f $DROP_DIR/jaxp-1_4_4.zip ]; then echo "downloading jaxp-1_4_4.zip into DROP_DIR" curl http://icedtea.classpath.org/download/drops/jaxp-1_4_4.zip -o $DROP_DIR/jaxp-1_4_4.zip fi if [ ! -f $DROP_DIR/jdk7-jaf-2010_08_19.zip ]; then echo "downloading jdk7-jaf-2010_08_19.zip into DROP_DIR" curl http://icedtea.classpath.org/download/drops/jdk7-jaf-2010_08_19.zip -o $DROP_DIR/jdk7-jaf-2010_08_19.zip fi if [ ! -f $DROP_DIR/jdk7-jaxws2_2-2010_08_19.zip ]; then echo "downloading jdk7-jaxws2_2-2010_08_19.zip into DROP_DIR" curl http://icedtea.classpath.org/download/drops/jdk7-jaxws2_2-2010_08_19.zip -o $DROP_DIR/jdk7-jaxws2_2-2010_08_19.zip fi if [ ! -d ALT_COMPILER_PATH ]; then echo "setup compiler dirs" mkdir ALT_COMPILER_PATH pushd ALT_COMPILER_PATH ln -s /usr/bin .SOURCE ln -s .SOURCE/g++-4.0 g++ ln -s .SOURCE/gcc-4.0 gcc popd fi echo "cleaning previous build" rm -rf build unset CLASSPATH unset JAVA_HOME unset LD_LIBRARY_PATH # patching defs.make for build on 64bits machine if required grep -q x86_64 hotspot/make/bsd/makefiles/defs.make if [ $? -eq 1 ] ; then echo "patching defs.make for build on 64bits machine" patch -p0 <<EOF --- hotspot/make/bsd/makefiles/defs.make.orig 2010-11-20 16:09:49.000000000 +0100 +++ hotspot/make/bsd/makefiles/defs.make 2010-11-20 16:10:29.000000000 +0100 @@ -90,6 +90,24 @@ endif endif +# x86_64 OS/X +ifeq (\$(ARCH), x86_64) + ifeq (\$(ARCH_DATA_MODEL), 64) + ARCH_DATA_MODEL = 64 + MAKE_ARGS += LP64=1 + PLATFORM = bsd-amd64 + VM_PLATFORM = bsd_amd64 + HS_ARCH = x86 + else + ARCH_DATA_MODEL = 32 + PLATFORM = bsd-i586 + VM_PLATFORM = bsd_i486 + HS_ARCH = x86 + # We have to reset ARCH to i386 since SRCARCH relies on it + ARCH = i386 + endif +endif + # i386 ifeq (\$(ARCH), i386) ifeq (\$(ARCH_DATA_MODEL), 64) EOF fi # patching Platform.gmk for 32bits VM build on 64bits machine grep -q "force i586 if 32bits VM asked" jdk/make/common/shared/Platform.gmk if [ $? -eq 1 ] ; then echo "patching Platform.gmk for 32bits VM on 64bits machine" patch -p0 <<EOF1 --- jdk/make/common/shared/Platform.gmk.orig 2010-11-20 19:33:19.000000000 +0100 +++ jdk/make/common/shared/Platform.gmk 2010-11-21 00:39:18.000000000 +0100 @@ -272,6 +272,12 @@ # Darwin builds may be 32-bit or 64-bit data model. ifeq (\$(SYSTEM_UNAME), Darwin) + ifeq (\$(ARCH), amd64) + # force i586 if 32bits VM asked + ifeq (\$(ARCH_DATA_MODEL), 32) + ARCH=i586 + endif + endif ifeq (\$(ARCH), i586) ifeq (\$(ARCH_DATA_MODEL), 64) ARCH=amd64 EOF1 fi env -i PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin \ LANG=C \ CC=gcc-4.0 \ CXX=g++-4.0 \ make \ ALT_DROPS_DIR=$DROP_DIR \ ALT_BOOTDIR=$SOYLATTE \ ALT_JDK_IMPORT_PATH=$SOYLATTE \ ALT_FREETYPE_HEADERS_PATH=/usr/X11R6/include \ ALT_FREETYPE_LIB_PATH=/usr/X11R6/lib \ ALT_CUPS_HEADERS_PATH=/usr/include \ ALLOW_DOWNLOADS=true \ ANT_HOME=/usr/share/ant \ NO_DOCS=true \ HOTSPOT_BUILD_JOBS=2 \ ARCH_DATA_MODEL=64 \ ALT_COMPILER_PATH=$(pwd -P)/ALT_COMPILER_PATH/ \ LD_LIBRARY_PATH= echo "testing build: ./build/bsd-amd64/j2sdk-image/bin/java -version" ./build/bsd-amd64/j2sdk-image/bin/java -version
You could now click on Build Icons, and after some minutes you should see (hopefully).






