M5Stack-IDFの仕掛け
M5Stack-IDFはESP-IDFでArduinoとM5Stackのライブラリを使う環境を提供しています。実はESP-IDFは外部ライブラリを追加して使うメカニズムを持っていてM5Stack-IDFはそれを利用します。 使える外部ライブラリは内部ライブラリとの相性である程度制限されます。
ESP-IDFはビルド(make)時に決め打ちのディレクトリとそのサブディレクトリを見に行きそこにcomponent.mkという名前のファイルがあるかどうか調べます。 もしあるとそれぞれのcomponent.mkの中にある指示をビルドへの指示として追加します。 ESP-IDFのサンプルプログラムを見ると必ずmain/component.mkがあってたいていは中身は空です。 この場合は単にここにもソースがあるよという意味になります。 少し複雑なライブラリでよく使われるのは
COMPONENT_ADD_INCLUDEDIRS := include src
COMPONENT_SRCDIRS := src
CXXFLAGS += -fno-rtti -Wno-error=unused-value
の3つの変数あたりでこの例の場合component.mkのあるディレクトリ下のsrcの中にソースがあり、includeとsrcの2つのディレクトリをインクルードのサーチパスに加え、c++でのコンパイル時にオプション -fno-rtti -Wno-error=unused-value を追加することを指示しています。 arduino-esp32にはさらに複雑な指示のあるcomponent.mkがあります。
決め打ちのディレクトリとしてmakeするディレクトリの中にあるmainとcomponentsがあります。 なのでcomponentsにいろいろなライブラリを並べライブラリのルートとなるところに各ライブラリに対応する component.mkを置いてやればライブラリ・コンポーネントの追加ができるというわけです。 例えば
.
├── Makefile
├── README.md
├── components
│ ├── arduino …