WindowsでもOpenJDKを野良ビルドしたい
はじめに
OpenJDKの中身をいじって検証する必要があったので、WindowsでOpenJDKを野良ビルドする方法を確認してみました。
最新のバージョンならOpenJDKの公式Wikiのビルドのページを参照すればいいですが、古いバージョンはリポジトリ内のdocs
フォルダの中身を確認する必要があります。(1敗)
また、基本的にバージョンが下るほどビルド難易度が上がっていきます。
古いバージョンだと過去のVisual StudioとかWindowsバージョンが必要っぽいですが、流石に個人でVisual Studio Subscriptionを契約していないので基本的にWindows 11 + Visual Studio 2022でビルドしていきます。
必要なもの
OpenJDKの公式リファレンス曰く、英語版のWindowsのみを公式でサポートしているらしいです。 そのため、何らかの合法的な手段で英語版のWindowsを調達するか、ロケールを英語に変更してください。
そうしたら以下の開発ツールをインストールします。
- Visual Studio 2022
- 「Desktop development with C++」ワークロード
- Cygwin
- autoconf
- make
- zip
- unzip
- git(GitHubからソースをクローンしてくるなら)
- ビルド済みのJDK(ビルドしたいOpenJDKのバージョンかその一つ前のバージョン)
- JTReg(リグレッションテストを回すなら)
- googletest(hotspotのテストを回すなら)
ソースをzipで落としてくるのであれば、ファイル数がとても多いので7zipなどのアーカイバを使って解凍したほうがいいかもしれません。
ビルド
どのバージョンでもbuild\windows-x86_64-server-release\jdk
にバイナリが吐かれています。
大体どのバージョンでも手元のマシンだとビルドで30分位、test-tier1
で2時間位掛かるのでゆっくりしていってね!!!
あと、ビルドに時間が掛かるからって調子に乗って複数バージョンの同時ビルドを流すと、たまにテストがタイムアウトしてError扱いになるので注意しましょう。(4敗)
OpenJDK 23 (23.0.1-11)
最新ならとっても簡単です。
bash configure \
--with-boot-jdk=/cygdrive/c/java/jdk-23.0.1+11 \
--with-jtreg=/cygdrive/c/java/jtreg \
--with-gtest=/cygdrive/c/src/googletest-1.14.0
make all; make test-tier1
OpenJDK 22 (22.0.2-9)
22までならなんの捻りもなくビルドが通ります。
bash configure \
--with-boot-jdk=/cygdrive/c/java/jdk-22.0.2+9 \
--with-jtreg=/cygdrive/c/java/jtreg \
--with-gtest=/cygdrive/c/src/googletest-1.14.0
make all; make test-tier1
OpenJDK 21 (21.0.6-6)
最新のLTSですが、googletestを有効にするとビルドに失敗するようになります。 ここから雲行きが怪しくなります。
とりあえずバイナリが欲しいので、googletestを無効にしてビルドを進めます。
bash configure \
--with-boot-jdk=/cygdrive/c/java/jdk-21.0.5+11 \
--with-jtreg=/cygdrive/c/java/jtreg
googletestを無効化したせいでいくつかのhotspotテストが失敗として報告されますが、動くので多分問題ないでしょう。
make all; make test-tier1
OpenJDK 20 (20.0.2-ga)
ビルド中にワーニング出てきて若干不穏な感じになりますが、まぁビルドが通るので良しとしましょう。
bash configure \
--with-boot-jdk=/cygdrive/c/java/jdk-20.0.2+9 \
--with-jtreg=/cygdrive/c/java/jtreg
20からgoogletest起因以外でテストが1件失敗し始めます。
make all; make test-tier1
OpenJDK 19 (19.0.2-ga)
bash configure \
--with-boot-jdk/cygdrive/c/java/jdk-19.0.2+7 \
--with-jtreg=/cygdrive/c/java/jtreg
make all; make test-tier1
OpenJDK 18 (18.0.2.1-0)
bash configure \
--with-boot-jdk=/cygdrive/c/java/jdk-18.0.2.1+1 \
--with-jtreg=/cygdrive/c/java/jtreg
make all; make test-tier1
OpenJDK 17 (17.0.14-6)
bash configure \
--with-boot-jdk=/cygdrive/c/java/jdk-17.0.13+11 \
--with-jtreg=/cygdrive/c/java/jtreg
make all; make test-tier1
OpenJDK 16 (16.0.2-ga)
Visual Studioのビルド環境の検出に失敗してbash configure
自体が失敗します。
bash configure \
--with-boot-jdk=/cygdrive/c/java/jdk-16.0.2+7 \
--with-jtreg=/cygdrive/c/java/jtreg
configure: Using default toolchain microsoft (Microsoft Visual Studio)
configure: error: Cannot locate a valid Visual Studio installation
configure exiting with result code 1
OpenJDK 11 (11.0.26-3)
11はまだビルドが通ります。 いつまで使う気なんでしょうね
bash configure \
--with-boot-jdk=/cygdrive/c/java/jdk-11.0.25+9 \
--with-jtreg=/cygdrive/c/java/jtreg
make all; make run-test-tier1
OpenJDK 8 (jdk8u442-b04)
u442
ってもはや何なんだよって感じです
bash configure \
--with-boot-jdk=/cygdrive/c/java/jdk8u432-b06 \
--with-jtreg=/cygdrive/c/java/jtreg \
--with-freetype-src=/cygdrive/c/src/freetype-2.5.3
bash configure
までは通るけど、ビルドはコケます。
make all
おわり