Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

Graalをビルドした

Graalはこちらからダウンロードできるのですが、

Oracle Labs GraalVM: Download

ソースを読むついでにビルドしました。

Graalとmxが要ります。Graalはバージョン0.29を使います。

$ git clone https://github.com/graalvm/graal.git
$ cd ../graal
$ git checkout vm-enterprise-0.29

$ git clone https://github.com/graalvm/mx.git
$ cd mx
$ export PATH=`pwd`:$PATH
$ mx -v      
Welcome to Mx version 5.130.1

MxはMavenみたいなものらしいです。込み入ったユースケースで使うので、アプリケーション開発では使わないらしいです。

GraalのコンパイラJIT)をビルドします。JDKは9にしました。

$ cd graal/compiler

$ export JAVA_HOME=`/usr/libexec/java_home -v 9`
$ mx build
...
Archiving TRUFFLE_TEST... [dependency com.oracle.truffle.api.test updated]

mx vmして確認します。

$ mx vm
使用方法: java [options] <mainclass> [args...]
           (クラスを実行する場合)
   または  java [options] -jar <jarfile> [args...]
           (jarファイルを実行する場合)
   または  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (モジュールのメイン・クラスを実行する場合)
...

ソースをIDEで読めるようにするには、mx ideinitです。実行するとEclipseIntelliJ IDEA、NetBeansの設定を全部出力されます。.classpathやらproject.xmlやら.imlファイル全部出ました。

$ mx ideinit
created /Users/jyukutyo/code/graal/truffle/mxbuild/mx.truffle/eclipse-project-settings
...
IntelliJでの問題

SDKの値が1.9になっていて、モジュールすべてでエラーになります。9に変更します。

IGV

IGVでGraalのデータ構造を可視化できます。可視化自体は今度試します。

$ mx igv
Downloading BATIK from ['https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/batik-all-1.7.jar']
Downloading https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/batik-all-1.7.jar to /Users/koichi.sakata/.mx/cache/BATIK_122b87ca88e41a415cf8b523fd3d03b4325134a3.jar
 8361163 bytes (100%)
Please select a JDK for running IGV: (version >= 1.8 and < 1.8.0u20 or >= 1.8.0u40)
[1] Java 1.8.0_144 (1.8) from /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
[2] Java 1.7.0_80 (1.7) from /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
[3] <other>

こんな感じでJDKの選択します。なぜか[3]を選んでJDK 9のパスを入力してもダメでした。8にしました。

ユニットテスト実行

ユニットテストがあります。実行します。

$ mx unittest -Dgraal.Dump BC_athrow0
...
MxJUnitCore
JUnit version 4.12
.Dumping debug output in /Users/jyukutyo/code/graal/compiler/dumps/1510811588804
.
Time: 1.738

OK (2 tests)

これでソースを触る準備ができました。