min-caml/SPARC

今はmin-camlはx86に対応しているんだけど、もともとはSPARC専用コンパイラだった。 そういうわけで今回はmin-camlが吐いたコードを適当にSPARCの上で走らせます。

はじめに

DigilentのAtlysが都合により手元にあったからこれを使いますけど、別にXilinxが好きなわけではなし。

とにかく以下を見よ

hardware setup

  1. install Xilinx ISE or something like so
  2. $ export XILINX=/opt/Xilinx/14.4/ISE_DS/ISE
  3. $ source $XILINX/../settingsXX.Xsh
  4. enter the directory named designs/leon3-${vendor}-${board}
  5. see, talk, and obey make's output

とにかくRTEのここでも読みなさい。

software setup

BCC manualを読みなさい。

build min-caml

$ git clone git@github.com:esumii/min-caml.git
$ cd min-caml
$ ./to_sparc
$ make

ここで、makeが失敗しちゃいます。これは、SPARCでのself-hostingを前提に走るからです。しかし、min-camlコンパイラ自体は完成していることでしょう。 以下、ただのハックです。きちんとやった人は私に教えること(任意同行です)。

min-caml as cross-compiler

$ mkdir test/cross-test
$ ../../min-caml ../fib # - ☆
$ cp ../../libmincaml.S .
$ cp ../../stub.c .
$ sparc-elf-gcc libmincaml.S stub.c fib.s -lm 

☆で、fib.sが生成されることを確認すること。これが一番あなたがよみたかったものですよ。 これで生成されたバイナリはgrmonから食わせて走らせることができます。

こんなかんじ:

sp = 0x47f0bd28, hp = 0x40012690 832040

たねあかし

float.cで依存している、caml_copy_int32のシンボルが見つからないので、/usr/lib/ocamlを食わせたりしても、とうぜんundefined-refernceとなりますから、今回は整数を相手にしました。 OCamlSPARC向けにコンパイルしてパチってくればよろしいはずだが、意外と面倒くさそうだからやりません。 やったら教えてください。