[Java] OpenJDKをコンパイルする方法
環境
この記事の内容は、Pentium III, Xubuntu Linux 7.10, OpenJDK 6で確認しました。
手順
以下の手順で行います。
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"