2018年10月25日木曜日

ESP-IDF+Arduinoで書いたプログラムをバイナリ配布する


LGPLなライブラリを使用している場合、当該ライブラリが静的リンクなら製品のソースを配布しなければならない等いろいろありますが、少なくともArduino coreを使用している場合には、ユーザ自身の環境でビルドしてライブラリのバージョンアップなどに対応できるようになっていればソース公開の必要はないとされています(※下記FAQの記載ですが実際に利用する際には弁護士などに確認してください)。

個人の開発であれば、面倒なのでgithubでソース公開しちゃえば良いのですが、企業での製品開発だとソース公開ができない場合も多いです。

そこでESP-IDFを利用している場合に製品のバイナリだけ配布する方法を調べてみました。試行錯誤でずいぶん手間取ってしまったのですが…結果としてはとても簡単です。コンポーネントはlib〜.aとしてまとめられるので、これをcomponent.mkで指定してmakeするだけです。通常はlibmain.aですが、componentsに自身で書いたコードが置いているときには、lib+コンポーネント名のlibができます。

  1. esp-idfでmake
  2. build/main下にあるlibmain.aをプロジェクトディレクトリに移動
  3. その他の自作コンポーネントがあれば同様にlib〜.aを移動
  4. main下のcomponent.mkに
    COMPONENT_ADD_LDFLAGS := libmain.a
    を追加する。他の自作コンポーネントがあればスペース区切りで列挙
  5. main下および自作コンポーネントのソース(.c, .cpp, .h)を消す
  6. buildディレクトリなど不要な要素を消す

これだけです。makeでビルドできるはずです。ビルドが確認できたら、component.mkへの追加事項などビルドに必要な情報を記載したreadmeとlib〜aを配布すれば、ライセンス要件をカバーできます(くれぐれも弁護士さんに確認してから実施することをおすすめします)。

ライブラリを追加すれば良いのはわかっていたのですが、COMPONENT_ADD_LDFLAGSで追加するという方法を見つけるまでさんざん苦労しました…お役に立てば幸いです。