OpenJDK の JDK 9 をビルドします。 ビルドするには以下の手順を行います。
- 必要なパッケージのインストール
- ソースコードをダウンロード
- コンフィグレーション
- ビルド
今回は Oracle Linux 7.3 上に環境を作っています。RHEL や CentOS でも手順は変わらないと思います。
必要なパッケージのインストール
OpenJDK のソースコードをリポジトリからダウンロードしたり、ダウンロードしたソースからバイナリをビルドするのに必要なパッケージをインストールします。
yum groupinstall -y Development Tools yum install -y mercurial zip unzip java-1.8.0-openjdk-devel libXtst-devel libXt-devel libXrender-devel libXi-devel cups-devel freetype-devel alsa-lib-devel elfutils-libelf-devel
足りないパッケージがあるときはビルド前の configure のログメッセージの最後に不足しているパッケージ名が出力されます。その場合は上記の yum 同様に不足しているパッケージをインストールしましょう。
ソースコードのダウンロード
OpenJDK のソースコードは Mercurial というバージョン管理システムで管理されています。Mercurial の操作にはhgコマンドを使用します。
リポジトリの一覧は以下のURLで確認できます。
OpenJDK Mercurial Repositories
OpenJDK ではソースコードをダウンロードする前に複数のリポジトリをまとめたルートリポジトリをダウンロードします。ルートリポジトリに含まれるツールを使用してそれぞれのリポジトリをダウンロードします。
リポジトリのダウンロードはhgコマンドにcloneサブコマンドと リポジトリのURL、コピー先のディレクトリを指定します。hg clone <リポジトリのURL> <コピー先ディレクトリ>
今回は開発中のOpenJDK 9 のリポジトリである http://hg.openjdk.java.net/jdk9/dev を jdk9-devディレクトリへコピーします。
hg clone http://hg.openjdk.java.net/jdk9/dev jdk9-dev
ルートリポジトリに含まれるそれぞれのリポジトリを取得するには、ルートリポジトリに含まれるget_sources.shを実行します。
cd jdk9-dev bash get_source.sh
コンフィグレーションの作成
ソースコードをダウンロードし終わったらビルドのためのコンフィグレーションを作成します。コンフィグレーションの作成はconfigureスクリプトを使用します。このスクリプトを実行すると、buildディレクトリ以下にコンフィグレーションを含んだディレクトリを作成します。このディレクトリ名はコンフィグレーション名として使用されます。
> bash configure (略) Build performance summary: * Cores to use: 2 * Memory limit: 3693 MB WARNING: The result of this configuration has overridden an older configuration. You *should* run 'make clean' to make sure you get a proper build. Failure to do so might result in strange build problems. > ls build linux-x86_64-normal-server-release
デバッグモード
ビルドしたバイナリにデバッグシンボルを含めるには--with-debug-level=slowdebug --with-native-debug-symbols=internalを付けます。
> bash configure --with-debug-level=slowdebug --with-native-debug-symbols=internal > ls build linux-x86_64-normal-server-slowdebug
以下のフラグは古いフラグのため使用できません。
--disable-zip-debug-info--enable-debug-symbols
ビルド
コンフィグレーションが作成できたらビルドします。ビルドにはmakeコマンドを使用します。CONF=に続いてコンフィグレーション名を指定します。コンフィグレーション名はbuild以下のディレクトリ名です。次の例はコンフィグレーションとしてlinux-x86_64-normal-server-releaseとlinux-x86_64-normal-server-slowdebugがあり、linux-x86_64-normal-server-releaseのコンフィグレーションを使用してビルドする例です。
> ls build linux-x86_64-normal-server-release linux-x86_64-normal-server-slowdebug > make CONF=linux-x86_64-normal-server-release all
コンフィグレーションが1つだけの場合はコンフィグレーションを指定せずに実行できます。
make all