GraalVMのEarly Adopter Windows Supportでnative-imageを試す
GraalVM CE 19で待望のWindows版がリリースされたので早速試した所、途中で色々つまづきつつもなんとか実行ファイルをビルドできた。
試した環境はWindows 10 Home Edition 64 bit。
やること
- インストール
- Javaコードを書きjavacでコンパイル
- native-image化
- Windows SDK for Windows 7をインストール
- Windows SDK 7.1 Command Promptから実行
インストール
こちらから
graalvm-ce-windows-amd64-19.0.0.zip
をダウンロードし適当なディレクトリに解凍。
Javaコードを書きjavacでコンパイル
面白みのないコードだけど。お行儀悪くGraalVMインストールディレクトリにtest
ディレクトリを掘ってそこに作成した。
public class Hello {
public static void main(String[] args) {
System.out.println("Hello Windows Graal!");
}
}
GraalVMをインストールしたディレクトリでコマンドプロンプトを開き、コンパイル。.class
ファイルが .java
と同じディレクトリに生成される。
>.\bin\javac Hello.java
native-image化
いよいよnative化にトライ。
なお今回からLinuxやMacでは native-image が同梱されなくなったが(後述)、Windows版では最初から入っている。
GraalVMをインストールしたディレクトリでコマンドプロンプトから以下を実行したところ、エラーとなった。
> .\bin\native-image.cmd -cp test Hello
[hello:11816] classlist: 3,421.71 ms
[hello:11816] (cap): 557.59 ms
[hello:11816] setup: 878.50 ms
Error: Unable to compile C-ABI query code. Make sure GCC toolchain is installed on your system.
Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
Error: Image build request failed with exit status 1
GCCを入れろとのメッセージ。しかしこれは嘘で、GithubのIssue によると、Windows SDK for Windows 7に付属の Windows SDK 7.1 Command Promptから実行せよとのこと。
試しにインストール済みだったVisual Studio 2017 開発者コマンドプロンプトから試したけれどダメだった。
Windows SDK for Windows 7をインストール
というわけでこちらからインストールする。
ここでDownloadをクリックすると3つ出てきてどれをダウンロードすればよいかわからないが、こちらによると
GRMSDK_EN_DVD.iso は x86。GRMSDKX_EN_DVD.iso は x64。GRMSDKIAI_EN_DVD.iso はAMD64
とのことなので、 GRMSDKX_EN_DVD.iso
をダウンロードした。
早速インストールと行きたいのだがここでも罠があり、ISOファイル直下のsetup.exe
ではなく、Setup
ディレクトリの中のSDKSetup.exe
を実行する必要があるらしい。
実際手元でsetup.exe
を起動した場合、なぜかC++関連のチェックを有効化できなかった。
無事インストールが成功すれば、Windows SDK 7.1 Command Promptが起動可能のはず。
Windows SDK 7.1 Command Promptから実行
気を取り直してWindows SDK 7.1 Command Promptを起動し、GraalVMをインストールしたディレクトリで以下を実行。
>.\bin\native-image.cmd -cp test Hello
[hello:12552] classlist: 3,172.26 ms
[hello:12552] (cap): 56,918.37 ms
[hello:12552] setup: 58,294.43 ms
[hello:12552] (typeflow): 9,461.19 ms
[hello:12552] (objects): 6,182.68 ms
[hello:12552] (features): 632.13 ms
[hello:12552] analysis: 16,523.92 ms
[hello:12552] (clinit): 217.78 ms
[hello:12552] universe: 615.45 ms
[hello:12552] (parse): 1,383.63 ms
[hello:12552] (inline): 3,869.78 ms
[hello:12552] (compile): 14,177.54 ms
[hello:12552] compile: 20,117.05 ms
[hello:12552] image: 1,145.81 ms
[hello:12552] write: 6,774.28 ms
[hello:12552] [total]: 106,857.29 ms
今度は無事成功した。さっそく実行してみる。
>hello.exe
Hello Windows Graal!
めでたい 🎉 🎉
さいごに
紆余曲折ありつつもなんとかnative化に成功できてよかったよかった。というかGraalVMすごい。夢が広がる。
現時点ではエラーメッセージがおかしかったり、WindowsSDK 7のインストールが辛かったりするけれど、今後改善されるはず。
とりあえずはVisualStudio 2017 開発者コマンドプロンプトからビルド可能になって欲しい。
Linux/Mac版GraalVMでnative-imageを追加インストールする
今回からLinuxやMacでは native-image が同梱されなくなったため、追加インストールする必要がある。
以下のコマンドで追加可能なものを一覧できる。
$ bin/gu available
Downloading: Component catalog from www.graalvm.org
ComponentId Version Component name Origin
--------------------------------------------------------------------------------
native-image 19.0.0 Native Image github.com
python 19.0.0 Graal.Python github.com
R 19.0.0 FastR github.com
ruby 19.0.0 TruffleRuby github.com
インストールするには以下のコマンドを実行。
$ bin/gu install native-image
Downloading: Component catalog from www.graalvm.org
Processing component archive: Native Image
Downloading: Component native-image: Native Image from github.com
Installing new component: Native Image licence files (org.graalvm.native-image, version 19.0.0)
インストール先は今までどおり bin
の中。
$ bin/native-image
Please specify options for native-image building or use --help for more info.