以前、Raspberry Pi 2 で .NET Core Runtime (CoreCLR) をビルドしようとして挫折しましたが、x64 な Ubuntu を使えば問題なくビルドと実行が出来たので、内容をメモ程度に残しておきます。
基本的な手順は CoreCLR の GitHub Wiki にまとまっています。この通りに動かすのが目的です。
Building and Running CoreCLR on Linux · dotnet/coreclr Wiki · GitHub
実行するための、大まかな手順をまとめておきます。途中で Visual Studio 2013 が必須になったりするので、まだまだ粗削りという感じがしますね。
- CoreCLR を Ubuntu 上でビルド
- mscorlib.dll と CoreFX を Windows でビルド
- NuGet からパッケージをダウンロード、ASP.NET Core 5 向けパッケージのみコピー
- mcs を使って実行ファイルを作成
- corerun コマンドで実行
とりあえず、自分がはまった部分を中心にメモを残しておきます。
CoreCLR をビルド
Wiki の通りに LLVM や Clang をインストールして build.sh を実行しましたが、PAL のビルド付近でエラーになってしまう問題に直面しました。
関連するのか分かりませんが、以下の Issue にあったコマンドを使って、パッケージをインストールしたところ、問題なく最後までビルドが通るようになりました。
該当するコメント部分を引用しておきます。
Just FYI. I was able to compile without errors before the patch using these commands on fresh Ubuntu 14.04, but there were no binaries in Product directory.
sudo apt-get install git cmake clang-3.5 make llvm-3.5 gcc git clone https://github.com/dotnet/coreclr cd coreclr ./build.shCan't built on Ubuntu 14.04 · Issue #33 · dotnet/coreclr · GitHub
ビルド自体は 10-15 分ぐらいで終わった気がします。割とコンパイルは早かったです。
CoreCLR のビルド結果としては corerun と libcoreclr.so が重要なものとなります。特に libcoreclr.so は 90MB もある巨大なライブラリで、この中に GC や JIT が入っているわけです。
corerun は mono コマンドみたいなものです。実行ファイルを与えると、それを実際に動かしてくれます。
mscorlib.dll と CoreFX をビルド
これからは Visual Studio 2013 が入った Windows 上での作業となります。同じように CoreCLR と CoreFX の Git リポジトリをクローンしておきます。
Unix 向けの mscorlib.dll を作るには CoreCLR リポジトリの build.cmd にパラメータを渡すだけです。CMake は必要なので、予めパスを通しておきます。
coreclr> build.cmd unixmscorlib
これで Unix 向けの mscorlib.dll がビルドされます。
次に CoreFX リポジトリで Unix 向けに各ライブラリをコンパイルします。
corefx> build.cmd /p:OS=Unix /p:SkipTests=true
今回は System.Console.dll と System.Diagnostics.Debug.dll だけが必要なので、その 2 つだけを Ubuntu 上にコピーしておきます。
その後は Wiki の通りに NuGet から必要なパッケージをインストールして、ASP.NET Core 5 向けの dll だけコピーする必要がありますが、このあたりは特にはまることもないので省略します。
CoreCLR でアプリケーションを実行
用意されている HelloWorld.cs をダウンロードして、mcs を使って実行ファイルを作成します。後はその実行ファイルを corerun に与えると、コンソールアプリケーションとして動作します。
./corerun HelloWorld.exe linux
実行した結果は以下のような感じです。Linux のマスコットが表示されていますね。
まだかなり粗削りな部分もありましたが、実際に動作しているものを見ると興奮してきますね。パフォーマンスや ARM 対応など、まだ課題も多いはずですが、引き続き追いかけていきたいですね。
ちなみに、ちょっと前に OS X 向けの Travis CI 環境が追加されるようになりました。既に Xcode 付属の環境で CoreCLR のビルドが可能になっているようです。
追記
上のコマンドでビルドするとデバッグモードのバイナリが吐かれるので、リリースモードにしてもう一度ビルドしました。ちなみにコマンドは以下のような感じに。
./build.sh amd64 release
当然ですが、リリースの方がコンパイルに時間がかかりました。A2 インスタンスで 20 分ぐらいです。
ファイルサイズは libcoreclr.so が 12MB と、90MB だったのと比べて大幅に縮みました。