#chiroito ’s blog

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

Windows Subsystem for Linux を使って OpenJDK をビルド

Windows 上で Windows Subsystem for Linux (WSL) を使用して OpenJDK 14 の Windows バイナリをビルドする方法をまとめます。

やりがちですが、Windows Subsystem for Linux (WSL)側のUbuntu 側で hg するのは必須ではありません。(やった) Windows側で好きな git クライアントがあればそれを使ってダウンロードしても大丈夫です。
Windows では環境変数とかもやらなくて大丈夫です。

全体の手順は以下のとおり。

  1. Windows の環境構築
  2. Windows Subsystem for Linux (WSL) 上の Ubuntu の環境構築
  3. ソースをダウンロード
  4. Windows Subsystem for Linux (WSL) 上の Ubuntu 上でビルド

Windows の環境構築

OpenJDK14をビルドするためにWindowsでインストールする物は以下の4つです。

  • Visual Studio Community
  • Windows Subsystem for Linux (今回はUbuntu 18.04 LTS)
  • Boot JDK (今回はOracle OpenJDK 12)
  • Mercurialクライアント

Visual Studio Community

以下の URL からVisual Studio Community 2017をダウンロードしてインストールします。

以前の Visual Studio ソフトウェアのダウンロード | Visual Studio - Visual Studio

最初は何もバイナリがありませんでしたが、ログインしたらダウンロードできるようになりました。 今回はVisual Studio Community 2017 (version 15.9)を使いました。

最低限必要なコンポーネントは分からなかったのでC++によるデスクトップ開発を入れています。 f:id:chiroito:20190727172428p:plain

Windows Subsystem for Linux (WSL)

Windows Subsystem for Linux は Ubuntu 18.04 LTS を入れています。Microsoft Storeを開いてインストールします。 f:id:chiroito:20190727172749p:plain

起動してみて以下のエラーが出るようでしたら、Windows Subsystem for Linux の機能が有効化されていません。

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x8007019e
The Windows Subsystem for Linux optional component is not enabled. Please enable it and try again.
See https://aka.ms/wslinstall for details.
Press any key to continue...

Windows の機能の有効化または無効化で以下のようになっていると思いますのでチェックを付けて有効にしてください。

f:id:chiroito:20191019114730p:plain

Boot JDK

Boot 用に使う JDK をインストールします。インストールするのはただのJDKです。Oracle OpenJDK の 12.0.2 を入れました。普通に入れるとProgram Files以下にインストールされますが、空白があるとなんか怖いなと思ってc:\Users\xxxx\develop\jdk-12.0.2にインストールしました。

※注:Windows版のJDKが必要です。

インストール後はこんな感じです。

C:\Users\xxxx\develop\jdk-12.0.2>dir /B
bin
conf
include
jmods
legal
lib
release

Mercurial クライアント

Mercurial のクライアントはお好きな物を使ってください。TortoiseHgを使いました。

Ubuntu 18.04 上で Mercurial を使う場合には以下のようにしてインストールします。

sudo add-apt-repository ppa:mercurial-ppa/releases
sudo apt install mercurial

Windows Subsystem for Linux 上の Ubuntu の環境構築

以下の4つをインストールします。

  • zip
  • unzip
  • autoconf
  • make
sudo apt-get install zip unzip autoconf make

ソースをダウンロード

ソースのダウンロードは Windows 上でもWindows Subsystem for Linux 上でも大丈夫です。 Windows Subsystem for Linux 側でダウンロードして、ソースをWindowsのIDEで修正したり見る場合には Windows から見えるパス上にダウンロードすることを忘れないでください。

以下は Windows 上でダウンロードします。 適当なディレクトリでMercurialクライアントを使ってhttp://hg.openjdk.java.net/jdk/jdkからクローンします。hgコマンドでC:\Users\xxxx\developディレクトリへクローンする場合は、コマンドプロンプトで以下のコマンドを実行します。

cd C:\Users\xxxx\develop
hg clone http://hg.openjdk.java.net/jdk/jdk

Windows Subsystem for Linux 上の Ubuntu でビルド

ビルドは Windows Subsystem for Linux (WSL) 上の Ubuntu でやります。configureでは--with-boot-jdkでは Windows へインストールしたJDKのパスを指定します。C:\のマウントポイントは/mnt/c/なので適宜指定してください。

gtest のコンパイルで失敗するので --disable-hotspot-gtest を付けてgtest は無効化します。

以下は Slow Debug モードでのビルドです。

configureが終わったらmake imagesでビルドしましょう。

bash configure --with-boot-jdk=/mnt/c/Users/xxxx/develop/jdk-12.0.2 --enable-debug --with-native-debug-symbols=internal --disable-hotspot-gtest
make images

これで、Windows Subsystem for Linux (WSL) 上の Ubuntu を使って Windows 用のバイナリをビルドできたはずです。