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