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