Rustで作成したライブラリをArduino(ARM Cortex-M)で読み込んで利用するサンプルアプリケーションです。
Cortex-M0/Cortex-M0+/Cortex-M3/Cortex-M4F/Cortex-M7Fに対応しています。
環境構築が面倒であればDockerの利用を推奨します。
$ docker-compose run build
もしくは、nightlyでかつthumbv6m-none-eabi, thumbv7m-none-eabi, thumbv7em-none-eabi, thumbv7em-none-eabihfがtargetに追加済の環境で以下を実行します。
環境構築についてはDockerfile
をご参照ください。
$ ./build.sh
ビルドが完了するとrust_lib_for_arduino_example.zip
が作成されているので、Arduino IDEにインストールします。
Installing Additional Arduino Libraries - Arduino.cc
Rustのプロジェクト自体はno_stdの静的ライブラリとしてビルドされます。
lib.rs
で公開されている情報をC/C++から利用することができます。(公開したい関数はマングリングを避けるために#[no_mangle]
を必ず明示してください)
C/C++から利用するためのヘッダファイルをcbindgen
を使ってビルド時に一緒に生成しています。
ビルドターゲットはCPUごとに異なるため、build.sh
で各ターゲットごとにビルドしています。
build.sh
でArduino Libraryの仕様に基づきディレクトリを構成しています。
Library specification - Arduino CLI
library.properties
をルートに、ヘッダファイルをsrc/
に配置しています。
ターゲットごとに異なるファイル(今回の場合ビルド済の.a
ファイル)はsrc/<target_name>
下にそれぞれ配置しています。
cortex-m4
、cortex-m7
についてはFPUの有無で変わりますが、現時点ではFPU有効のバイナリを配置しています。
変更する場合はbuild.sh
を修正してください。
バグやイケてる実装があったら教えて下さい... Twitter: @kamiya_owl