やりかた
Ragnaroekさんが公開してくれているdocker imageを使うと簡単。ありがとうございます。
https://github.com/Ragnaroek/rust-on-raspberry-docker
で、このdocker imageを使いやすくするためにMakefileを書いた。
https://gist.github.com/kmtr/d28e28eac9d0b54ddbd0dbaaecee7267
このMakefileをcargoプロジェクトのルートに置いて、make docker-pull
とすると、rust-on-raspberry-dockerのimageをpullする。
その後、make cargo-build-pi
とすると、raspi用のバイナリがtarget/arm-unknown-linux-gnueabihf/release
以下にビルドされる。
前処理の中でjq
を使っているので、それだけhomebrewか何かで入れる必要がある。
動機
Mac上で書いたRustプログラムをraspi3上でベアメタルではなく、普通にLinux(Raspbian)で動かしたかった。
しかし単純にrustupでtargetを追加しただけだと、gcc-armとか諸々を入れる必要があり、Macの世界が汚れてしまうので微妙。ということでDockerでやることにした。
Web上でも似たような悩みを持つ人はいるようだが、「Dockerでやれば?」「ありがとう動いたよ」で完結していて具体的なやりかたが分からず、また2年前の情報とかでいろいろ古いケースもあり、未来の自分のために現時点でのやり方を(2017/06)まとめておきたかった。