min-caml/SPARC
今はmin-camlはx86に対応しているんだけど、もともとはSPARC専用コンパイラだった。 そういうわけで今回はmin-camlが吐いたコードを適当にSPARCの上で走らせます。
はじめに
DigilentのAtlysが都合により手元にあったからこれを使いますけど、別にXilinxが好きなわけではなし。
とにかく以下を見よ
- Leon3 srccodeなど
- BCC manual ここで言うBCCはアノBCCではなく、Bare-C Cross-compilerなのだということです。
hardware setup
- install Xilinx ISE or something like so
$ export XILINX=/opt/Xilinx/14.4/ISE_DS/ISE
$ source $XILINX/../settingsXX.Xsh
- enter the directory named designs/leon3-${vendor}-${board}
- 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となりますから、今回は整数を相手にしました。 OCamlをSPARC向けにコンパイルしてパチってくればよろしいはずだが、意外と面倒くさそうだからやりません。 やったら教えてください。