OpenJDK 9をMac OS X (Yosemite) でビルドする

動作確認した環境は、Mac OS X 10.10.1 (Yosemite)です。

前提事項

JDK9のビルドにはJDK8が必要です(ヨーグルトみたいですね)。これをBootstrupJDKと呼びます。

そのため、JDK9をビルドする環境では、Javaを実行したらJDK8が動くようにしておきます。そうしたくない場合には、ビルド時にオプション「--with-boot-jdk=path/to/JDK8」を渡しても構いません。

(補足)JDK9はclangに対応済み

README-builds.htmlには、Mac OSJDKをビルドするにはXcode 4.5.2が必要と書かれています。これはgccが必要なためです。Xcodeに内蔵のコンパイラは現在clangですが、4.5.2の時点ではgccでした。

しかし、JDK9はclangでのビルドにすでに対応しています*1

というわけで、古いXcodeおよびCommand Line Toolsをインストールしなくてもビルドできます。

ソースコードの取得

java.netのMercurialリポジトリからjdk9をクローンします。その後、サブプロジェクトのソースコードスクリプトで取得します。

$ mkdir jdk9-20150102
$ cd jdk9-20150102/
$ hg clone http://hg.openjdk.java.net/jdk9/jdk9 jdk9
[...]
$ cd jdk9/
$ bash ./get_source.sh
[...]

configure

configureを実行します。

$ bash ./configure
[...]
configure: error: Could not find freetype!
configure exiting with result code 1

freetypeがインストールされていない場合、上のようなエラーになります。XQuartzfreetypeが入っているのでインストールします。2015/1/2時点の最新版は2.7.7です。インストール後、Xを再起動しろといわれるので、OSごと再起動します。

JDKのビルドオプションでfreetypeディレクトリを明示的に指定して、あらためてconfigureを実行します。

$ bash ./configure  --with-freetype-include=/usr/X11/include/freetype2 --with-freetype-lib=/usr/X11/lib
[...]
configure: Found freetype include files at /usr/X11/include/freetype2 using --with-freetype
checking for freetype includes... /usr/X11/include/freetype2
checking for freetype libraries... /usr/X11/lib
checking if we can compile and link with freetype... yes
checking if we should bundle freetype... yes
[...]
====================================================
A new configuration has been successfully created in
[...]
using configure arguments '--with-freetype-include=/usr/X11/include/freetype2 --with-freetype-lib=/usr/X11/lib'.
[...]

configureに成功しました。

なお、XQuartz 2.7.7をインストールしただけではビルドできないのはバグのようです。 上のようにオプションを指定するか、XQuartz 2.7.5を使えばよいとのことです。

make

makeを実行します。

$ make all
[...]
----- Build times -------
Start 2015-01-02 02:41:31
End   2015-01-02 02:47:19

00:05:48 TOTAL
-------------------------

Finished building OpenJDK for target 'all'

makeに成功しました。生成された実行ファイルを確認します。

$ ls build/macosx-x86_64-normal-server-release/jdk/bin/
appletviewer     javap          jjs          keytool          schemagen
idlj          jcmd          jmap          native2ascii     serialver
jar          jconsole     jps          orbd          servertool
jarsigner     jdb          jrunscript     pack200          tnameserv
java          jdeps          jsadebugd     policytool     unpack200
javac          jhat          jstack          rmic          wsgen
javadoc          jimage          jstat          rmid          wsimport
javah          jinfo          jstatd          rmiregistry     xjc
$ build/macosx-x86_64-normal-server-release/jdk/bin/java -version
openjdk version "1.9.0-internal"
OpenJDK Runtime Environment (build 1.9.0-internal-yuki_2015_01_02_02_37-b00)
OpenJDK 64-Bit Server VM (build 1.9.0-internal-yuki_2015_01_02_02_37-b00, mixed mode)

以上です。新年はJDK9ライフをお楽しみください。

*1:タイチさんから情報いただきました