Step-by-step OpenJDK on OS X?
Charles Oliver Nutter
charles.nutter at sun.com
Sun Feb 1 21:09:13 PST 2009
Blog! Blog!
Stephen Bannasch wrote:
> At 2:30 PM -0600 1/30/09, Charles Oliver Nutter wrote:
>> I've read through some of the backthreads and there's a lot of noise
>> about getting OpenJDK to build, having this issue, applying that patch.
>> I'm wondering what the bottom line is today:
>>
>> - Is it possible to build OpenJDK on OS X right now? Which
>> versions/branches/etc?
>> - Has anyone aggregated the instructions required to do so yet? I mostly
>> got an older revision to build using Landon Fuller's walkthrough, but
>> that's pretty dated now.
>
> Building the BSD port of OpenJDK -- Java 1.7 on Max OS X 10.5.x
>
> This is lightly adapted from Landon Fuller's instructions here:
>
> http://landonf.bikemonkey.org/2008/08/20#SoyLatte_Meets_OpenJDK.20080819
>
> Dependencies:
>
> I'm using Landon Fuller's 32-bit SoyLatte binaries to build the OpenJDK
> bsd port:
>
> http://landonf.bikemonkey.org/static/soylatte/
>
> http://hg.bikemonkey.org/archive/javasrc_1_6_jrl_darwin/soylatte16-i386-1.0.3.tar.bz2
>
>
> After downloading the binaries I copied then to:
>
> /usr/local/soylatte16-i386-1.0.3
>
> Get Mercurial:
>
> sudo port install mercurial +bash_completion
>
> and add the Forest extension:
>
> hg clone http://hg.akoha.org/hgforest
>
> I'm actually using Patrick M�zard's clone of hgforest (just a couple of
> fixes to Simons work):
>
> hg clone http://bitbucket.org/pmezard/hgforest-crew
>
> And after that add an 'hgext.forest' item with the path to forest.py in
> the extensions section in your ~/.hgrc file.
>
> Here's mine:
>
> $ cat ~/.hgrc
> [ui]
> username = Stephen Bannasch <stephen.bannasch at gmail.com>
> [extensions]
> hgext.forest=/Users/stephen/dev/mercurial/hgforest-crew/forest.py
>
> You'll also need Kurt Miller's binary plugs for the BSD port:
>
>
> http://landonf.bikemonkey.org/static/soylatte/jdk-7-icedtea-plugs-1.6.tar.gz
>
>
> I unpacked them here:
>
> ~/dev/java/jdk-7-icedtea-plugs
>
> Checkout all the code using hg/forest:
>
> hg fclone http://hg.openjdk.java.net/bsd-port/bsd-port
>
> Here's what my bsd-port dir looks like:
>
> $ cd bsd-port/
>
> $ ls -l
> total 528
> -rw-r--r-- 1 stephen staff 1503 Dec 15 12:29 ASSEMBLY_EXCEPTION
> -rw-r--r-- 1 stephen staff 19241 Dec 15 12:29 LICENSE
> -rw-r--r-- 1 stephen staff 16336 Dec 15 12:29 Makefile
> -rw-r--r-- 1 stephen staff 1207 Dec 15 12:29 README
> -rw-r--r-- 1 stephen staff 87215 Jan 25 23:04 README-builds.html
> -rw-r--r-- 1 stephen staff 127532 Dec 15 12:29 THIRD_PARTY_README
> drwxr-xr-x 4 stephen staff 136 Jan 26 00:51 build
> -rwxr--r--@ 1 stephen staff 373 Jan 26 03:00 build.sh
> drwxr-xr-x 11 stephen staff 374 Jan 25 23:06 corba
> drwxr-xr-x 13 stephen staff 442 Jan 25 23:06 hotspot
> drwxr-xr-x 11 stephen staff 374 Jan 25 23:06 jaxp
> drwxr-xr-x 11 stephen staff 374 Jan 25 23:06 jaxws
> drwxr-xr-x 12 stephen staff 408 Jan 25 23:07 jdk
> drwxr-xr-x 12 stephen staff 408 Jan 25 23:07 langtools
> drwxr-xr-x 18 stephen staff 612 Dec 15 12:29 make
>
> I added the script build.sh:
>
> $ cat build.sh
> # source build.sh
> LC_ALL=C
> LANG=C
> unset CLASSPATH
> unset JAVA_HOME
> make \
> ALT_BOOTDIR=/usr/local/soylatte16-i386-1.0.3/ \
> ALT_BINARY_PLUGS_PATH=/Users/stephen/dev/java/jdk-7-icedtea-plugs \
> ALT_FREETYPE_HEADERS_PATH=/usr/X11R6/include \
> ALT_FREETYPE_LIB_PATH=/usr/X11R6/lib \
> ALT_CUPS_HEADERS_PATH=/usr/include \
> ANT_HOME=/usr/share/ant \
> NO_DOCS=true \
> HOTSPOT_BUILD_JOBS=1
>
> I build openjdk like this:
>
> source build.sh
>
> This takes about 10m on my 2.5 GHz Intel Core 2 Duo MacBook Pro.
>
> If it works I then copy it to /usr/local adding a suffix of my username
> and the date:
>
> sudo mv build/bsd-i586/j2sdk-image
> /usr/local/java-1.7.0-internal-`date "+%Y_%m_%d"``
>
> $ /usr/local/java-1.7.0/bin/java -version
> openjdk version "1.7.0-internal"
> OpenJDK Runtime Environment (build
> 1.7.0-internal-stephen_2009_01_25_23_54-b00)
> OpenJDK Server VM (build 14.0-b10, mixed mode)
>
> Then I link /usr/local/java-1.7.0 to the latest build:
>
> $ cd /usr/local
> $ sudo ln -s java-1.7.0-internal-`date "+%Y_%m_%d"` java-1.7.0
>
> THese functions are in update-usr-local.sh:
>
>
> #!/bin/sh
> buildname=java-1.7.0-internal-`date "+%Y_%m_%d"`
> cp -r build/bsd-i586/j2sdk-image /usr/local/$buildname
> cd /usr/local
> sudo rm -f java-1.7.0
> sudo ln -s $buildname java-1.7.0
>
> This results in:
>
> $ ls -l /usr/local
> ...
> lrwxr-xr-x 1 root wheel 38 Jan 31 20:58 java-1.7.0 ->
> java-1.7.0-internal-2009_01_31
> drwxr-xr-x 15 root wheel 510 Jan 31 21:37
> java-1.7.0-internal-2009_01_31
>
> Updating:
>
> $ cd bsd-port
> $ hg fpull -u
> $ source build.sh
> $ sudo ./update-usr-local.sh
>
> I've modified the function pickjdk in my ~./bash_profile like this to
> add java 1.7.0
>
> #
> # pickjdk: for switching between Java versions:
> # From Nick Sieger: http://pastie.org/170326
> # "I just symlink soylatte to:
> #
> /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0-soylatte/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0-soylatte"
>
> #
> _macosx()
> {
> if [ $(uname -s) = Darwin ]; then
> return 0
> else
> return 1
> fi
> }
>
> JDKS_ROOT=
> if [ $(uname -s) = Darwin ]; then
> JDKS_ROOT=/System/Library/Frameworks/JavaVM.framework/Versions
> fi
>
> SOYLATTE_HOME=${HOME}/dev/java/src/soylatte/control/build/bsd-amd64
> SOYLATTE_32_HOME=/usr/local/soylatte16-i386-1.0.3
> JAVA_1_7_0_HOME=/usr/local/java-1.7.0
>
> pickjdk()
> {
> if [ -z "$JDKS_ROOT" ]; then
> return 1
> fi
>
> declare -a JDKS
> local n=1 jdk total_jdks choice=0 currjdk=$JAVA_HOME explicit_jdk
> for jdk in $JDKS_ROOT/[0-9]*; do
> if [ -d $jdk -a ! -L $jdk ]; then
> echo -n " $n) $(basename $jdk)"
> if _macosx; then
> jdk=$jdk/Home
> fi
> if [ $jdk = "$currjdk" ]; then
> echo " < CURRENT"
> else
> echo
> fi
> JDKS[$n]=$jdk
> total_jdks=$n
> n=$[ $n + 1 ]
> fi
> done
> echo " $n) Soylatte-amd64"
> JDKS[$n]=$SOYLATTE_HOME
> n=$[ $n + 1 ]
> echo " $n) Soylatte16-i386-1.0.3"
> JDKS[$n]=$SOYLATTE_32_HOME
> n=$[ $n + 1 ]
> echo " $n) 1.7.0"
> JDKS[$n]=$JAVA_1_7_0_HOME
> n=$[ $n + 1 ]
> echo " $n) None"
> JDKS[$n]=None
> total_jdks=$n
>
> if [ $total_jdks -gt 1 ]; then
> while [ -z "${JDKS[$choice]}" ]; do
> echo -n "Choose one of the above [1-$total_jdks]: "
> read choice
> done
> else
> choice=1
> fi
>
> if [ -z "$currjdk" ]; then
> currjdk=$(dirname $(dirname $(type -path java)))
> fi
>
> if [ ${JDKS[$choice]} != None ]; then
> export JAVA_HOME=${JDKS[$choice]}
> else
> unset JAVA_HOME
> fi
>
> explicit_jdk=
> for jdk in ${JDKS[*]}; do
> if [ "$currjdk" = "$jdk" ]; then
> explicit_jdk=$jdk
> break
> fi
> done
>
> if [ "$explicit_jdk" ]; then
> if [ -z "$JAVA_HOME" ]; then
> PATH=$(echo $PATH | sed "s|$explicit_jdk/bin:*||g")
> else
> PATH=$(echo $PATH | sed "s|$explicit_jdk|$JAVA_HOME|g")
> fi
> elif [ "$JAVA_HOME" ]; then
> PATH="$JAVA_HOME/bin:$PATH"
> fi
>
> hash -r
> unset JDKS
> }
More information about the bsd-port-dev
mailing list