#chiroito ’s blog

Java を中心とした趣味の技術について

OpenJDK を Linux でビルドする

OpenJDK の JDK 9 をビルドします。 ビルドするには以下の手順を行います。

  1. 必要なパッケージのインストール
  2. ソースコードをダウンロード
  3. コンフィグレーション
  4. ビルド

今回は 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/devjdk9-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-releaselinux-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