Eclipse OpenJ9 Java 11をLinux上でビルドできるようにする手順です。ここではAArch64用のUbuntu server 24.04.1 LTSを使用しています。
Boot JDKの準備
Boot JDKとして使用するJDKをIBM Semeru Runtimes Downloadsからダウンロードして適当な場所に展開します。OpenJ9 Java 11をビルドするにはJava 11のJDKが必要です。
$ mkdir openj9
$ cd openj9
$ wget https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.25%2B9_openj9-0.48.0/ibm-semeru-open-jdk_aarch64_linux_11.0.25_9_openj9-0.48.0.tar.gz
$ tar xvf ibm-semeru-open-jdk_aarch64_linux_11.0.25_9_openj9-0.48.0.tar.gz
$ jdk-11.0.25+9/bin/java -version
openjdk version "11.0.25" 2024-10-15
IBM Semeru Runtime Open Edition 11.0.25.0 (build 11.0.25+9)
Eclipse OpenJ9 VM 11.0.25.0 (build openj9-0.48.0, JRE 11 Linux aarch64-64-Bit Compressed References 20241107_1091 (JIT enabled, AOT enabled)
OpenJ9 - 1d5831436e
OMR - d10a4d553
JCL - edded3f65c based on jdk-11.0.25+9)
ソースツリーの準備
openj9-openjdk-jdk11のGitHubレポジトリーをクローンします。
$ git clone https://github.com/ibmruntimes/openj9-openjdk-jdk11.git
さらに、get_source.sh
を実行してOMRとOpenJ9という2つのレポジトリーをクローンします。
$ cd openj9-openjdk-jdk11
$ bash get_source.sh
openj9-openjdk-jdk11
ディレクトリー内にomr
ディレクトリーとopenj9
ディレクトリーが作られます。
omr
はガーベジコレクション (GC) やJIT (just-in-time) コンパイラ、移植レイヤーなど言語実装の基盤部分を含んでいます。Java仮想マシンのコードはopenj9
内にあります。
Javaクラスライブラリーのソースコードはopenj9-openjdk-jdk11
のsrc
ディレクトリーにありますが、OpenJ9固有の一部コードがopenj9/jcl/src
にあります。
必要なパッケージのインストール
ビルドに使用するツールやライブラリーをインストールします。AArch64 Ubuntu以外のLinuxの場合、他にもパッケージを追加する必要があるかもしれません。
$ sudo apt install -y gcc g++ autoconf ca-certificates ccache cmake cpio pkg-config unzip zip libasound2-dev libcups2-dev libdwarf-dev libelf-dev libfontconfig1-dev libssl-dev libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
configureの実行
configure
を実行します。--with-boot-jdk=
でBoot JDKの場所を指定します。ここでエラーが出た場合は必要なパッケージが足りていない可能性があります。
$ bash configure --with-boot-jdk=/home/ubuntu/openj9/jdk-11.0.25+9 --with-openssl=system --disable-warnings-as-errors
ビルドの実行
make all
でビルドを実行します。make
だけだと最後までビルドされないのでall
を指定するのをお忘れなく。ストレージの速度に左右されますが、Raspberry Pi 4で実行すると1時間くらいはかかります。
$ make all
(中略)
Creating jdk image
Stopping sjavac server
Finished building target 'all' in configuration 'linux-aarch64-normal-server-release'
ビルドが成功したら実行してみましょう。生成されたJava 11ランタイムはbuild/linux-aarch64-normal-server-release/images/jdk
以下にあります。
$ build/linux-aarch64-normal-server-release/images/jdk/bin/java -version
openjdk version "11.0.26-internal" 2025-01-21
OpenJDK Runtime Environment (build 11.0.26-internal+0-adhoc.ubuntu.openj9-openjdk-jdk11)
Eclipse OpenJ9 VM (build master-1c0f64e5dc, JRE 11 Linux aarch64-64-Bit Compressed References 20250126_000000 (JIT enabled, AOT enabled)
OpenJ9 - 1c0f64e5dc
OMR - 27feb3b2f
JCL - d874dd51c9 based on jdk-11.0.26+4)
パスにimages
を含まないbuild/linux-aarch64-normal-server-release/jdk
というディレクトリーも存在しますが、images/jdk
のほうが最終形です。
他のバージョン
Java 11以外にも8/17/21などのバージョンを同様の手順でビルドできます。ビルド対象のopenj9-openjdk-jdk*
レポジトリーをクローンし、適切なバージョンのBoot JDKをconfigure
時に指定してください。なお、build
ディレクトリーの下のディレクトリー名はJavaのバージョンによって違うので注意が必要です。
- Java 8/11:
build/linux-aarch64-normal-server-release
- Java 17/21:
build/linux-aarch64-server-release
参考
ビルド方法の詳細はEclipse OpenJ9プロジェクトのドキュメントを参照してください。