[Java] OpenJDKをコンパイルする方法

環境

この記事の内容は、Pentium III, Xubuntu Linux 7.10, OpenJDK 6で確認しました。

手順

以下の手順で行います。

  1. JDK 6のインストール
  2. Binary Plugsのインストール
  3. libmotif-devのインストール
  4. ソースコードのダウンロード
  5. Makefileの修正
  6. make
JDK 6のインストール

http://java.sun.com/javase/ja/6/download.htmlから、JDK 6をダウンロードします(JDKのビルドに、JDKが必要です)。ダウンロードしたファイルjdk-6u5-linux-i586.binは、シェルスクリプトなので、実行権限をつけて実行します。実行したら、JDKが展開されます。展開したJDKを、適当なディレクトリに移動します(私は、ホームディレクトリ下に移しました)。

$ chmod 755 jdk-6u5-linux-i586.bin
$ ./jdk-6u5-linux-i586.bin
:
$ mv jdk1.6.0_05 ~

また、インストールしたディレクトリを環境変数JAVA_HOMEに設定し、${JAVA_HOME}/binにパスを通します。

export JAVA_HOME="${HOME}/jdk1.6.0_05"
export PATH="${HOME}/bin:${JAVA_HOME}/bin:${PATH}"
Binary Plugsのインストール

http://download.java.net/openjdk/jdk6/から、Binary Plugsをダウンロードします。ダウンロードしたファイルjdk-6-ea-plug-b06-linux-i586-28_feb_2008.jarは実行可能であり、以下のように実行すると、(ライセンスの承諾などを訊かれた後、)中のファイルがopenjdk-binary-plugsディレクトリに展開されます。このディレクトリを、適当なディレクトリに移動します(私は、ホームディレクトリ下に移動しました)。

$ java -jar ~/packages/jdk-6-ea-plug-b06-linux-i586-28_feb_2008.jar
:
$ mv openjdk-binary-plugs ~
libmotif-devのインストール

aptitudeから、libmotif-devをインストールします。

ソースコードのダウンロード

http://openjdk.java.net/から、OpenJDKのソースコードをダウンロードし、適当なディレクトリに展開します。

Makefileの修正

OpenJDKに含まれるファイルのうち、以下のMakefileを修正します。

--- jdk/make/java/instrument/Makefile.orig      2008-02-28 18:39:43.000000000 +0900
+++ jdk/make/java/instrument/Makefile   2008-03-07 02:28:09.415004409 +0900
@@ -104,7 +104,7 @@
 else
   LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli
   OTHER_LDLIBS += -ljli
-  OTHER_LDLIBS += -ldl 
+  OTHER_LDLIBS += -ldl -liconv
   ifeq ($(PLATFORM), solaris)
     LDFLAGS += -R \$$ORIGIN/jli
   endif
--- jdk/make/java/npt/Makefile.orig     2008-02-28 18:39:47.000000000 +0900
+++ jdk/make/java/npt/Makefile  2008-03-10 21:59:40.475816599 +0900
@@ -51,6 +51,7 @@
        utf_md.c
 
 OTHER_INCLUDES = -I$(SRCDIR) -I$(PSRCDIR)
+OTHER_LDLIBS = -liconv
 
 #
 # This removes all asserts in the optimized version
--- jdk/make/sun/splashscreen/Makefile.orig     2008-02-28 18:40:13.000000000 +0900
+++ jdk/make/sun/splashscreen/Makefile  2008-03-07 02:39:59.955495804 +0900
@@ -64,7 +64,7 @@
 ifneq ($(PLATFORM), windows)
   CFLAGS += -DWITH_X11
   CPPFLAGS += -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions
-  OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext $(LIBM) -lpthread
+  OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext $(LIBM) -lpthread -liconv
 else # PLATFORM
   CFLAGS += -DWITH_WIN32
   OTHER_LDLIBS += kernel32.lib user32.lib gdi32.lib
make

環境変数ALT_BINARY_PLUGS_PATHに、Binary Plugsをインストールしたディレクトリを設定します。また、環境変数ALT_BOOT_DIRに、JDKをインストールしたディレクトリを設定します。

export ALT_BINARY_PLUGS_PATH="${HOME}/openjdk-binary-plugs"
export ALT_BOOTDIR="${HOME}/jdk1.6.0_05"

jdk/make/jdk_generic_profile.shを使って、環境を設定します。

$ . jdk/make/jdk_generic_profile.sh

control/makeディレクトリに移って、makeします。

$ cd control/make
$ make

私は以上をまとめて実行する以下のスクリプトを、control/make/buildに作成しています。

#! /bin/sh

export ALT_BINARY_PLUGS_PATH="${HOME}/openjdk-binary-plugs"
export ALT_BOOTDIR="${HOME}/jdk1.6.0_05"
. "../../jdk/make/jdk_generic_profile.sh"

make="/usr/bin/make"
tee="/usr/bin/tee"

if [ -z "${1}" ]; then
  target="all"
else
  target="${1}"
fi

${make} ${target} | ${tee} make.log

ビルドすると、 control/build/linux-i586ディレクトリに生成したものができます。例えば、javacはcontrol/build/linux-i586/binにあります。

なお、私の環境では、control/makeディレクトリで

$ make sanity

を実行すると、以下の警告が表示されます。

WARNING: This machine appears to only have 249Mb of physical memory,
         builds on this machine could be slow.

また、諸々の修正をする時間も含めて、ビルドが終了するまで、4時間ほどかかりました。OpenJDKのディレクトリの容量は、ビルドした後、1.8Gbyteになりました。

注意

この記事は、実行してから数日後に、ドキュメントを見直しながら書かれました。そのため、忘れている点があるかもしれません。

たとえば、README-builds.htmlには記載されていませんが、Apache Ant (http://ant.apache.org/) とFindBugs (http://findbugs.sourceforge.net/) をインストールした記録があります。確かcontrol/makeディレクトリでmake sanityして環境を検査したところ、インストールしろと言われた気がします。必要だった場合、以下のように、インストールしたディレクトリを環境変数に設定してください。

export ANT_HOME="${HOME}/apache-ant-1.7.0"
export FINDBUGS_HOME="${HOME}/findbugs-1.3.2"