例のレイトレをDockerで動かす
https://gyazo.com/2537f19b3d3e1fdcf2ef43c4e35da756
min-caml
min-caml のリポジトリには、例のレイトレーサーのソースコードが含まれている。このレイトレーサーを動かそうとすると、以下のような罠にハマりがち。
OCaml のバージョンが5系の場合、min-caml の修正が必要
Ubuntu は32ビットモードをサポートしていないため、min-caml が出力する32ビット x86 アセンブリコードをビルドできない
Apple シリコン搭載の Mac では、そもそも x86 のコードをビルドできない
そのため、32 ビットモードをサポートする Debian 上に OCaml 4 系の環境を構築した Docker イメージを用意し、その上でレイトレーサーを実行する。もちろん Apple シリコン搭載の Mac でも問題なく動作する。
Dockerイメージ作成
まずはMinCamlをビルド可能なDockerイメージを作成する。
min-caml-dev-image
上記のリポジトリをクローンして docker build を実行。
code:sh
$ cd src
$ cd min-caml-dev-image
$ docker build -t min-caml-dev .
イメージ一覧に min-caml-dev が表示されることを確認
code:shell
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
min-caml-dev latest dacc6b510615 9 hours ago 814MB
MinCamlのビルド
min-caml のソースファイルを取得し、min-caml-dev のコンテナを起動。
code:sh
$ cd ~/src
$ cd min-caml
$ docker run -it --rm -v "$PWD":/app min-caml-dev bash
コンテナ内で min-caml をビルド。ヘルプを表示してみる。
code:sh
$ ./to_x86
$ make min-caml
$ ./min-caml --help
Mitou Min-Caml Compiler (C) Eijiro Sumii
-inline maximum size of functions inlined
-iter maximum number of optimizations iterated
-help Display this list of options
--help Display this list of options
テストプログラムのコンパイル
ビルドした min-caml を使って test/fib.ml をコンパイルして実行、test/fib.ml の結果が表示されれば成功。
code:sh
$ make test/fib
$ ./test/fib
sp = 0x3ff0b560, hp = 0x3f157010
832040
レイトレーサーのビルドと実行
レイトレーサー min-rt をビルドして実行。
code:sh
$ cd min-rt
$ make contest.mincaml.ppm
レイトレーシング結果の画像ファイル contest.mincaml.ppm が生成される。
https://gyazo.com/5f4698a4821e4f4234a5474d8ac6fc85
ビルドの詳細
ビルドの詳細は以下を参照。
作業ログ
ソースコードの取得とコンテナの起動
min-caml のソースコードを取得し、コンテナを起動
code:sh
cd min-caml
docker run -it --rm -v "$PWD":/app min-caml-dev bash
ビルド
min-caml をビルド
code:sh
./to_x86
make min-caml
レイトレをビルド
code:sh
cd min-rt
make min-rt.min-caml
レイトレを実行
code:sh
./min-rt.min-caml < contest.sld > contest.ppm
Dockerコンテナから抜けて、レイトレーシング結果 min-rt/contest.mincaml.ppm を確認する
code:sh
open min-rt/contest.ppm
https://gyazo.com/5f4698a4821e4f4234a5474d8ac6fc85