#はじめに
ESP32をArduinoIDEで開発していると妙にコンパイルが遅い気がします。AVRに比べれば機能が多いのでコンパイルに時間がかかるのはわかるのですが、1度ビルドし直すだけでも長いプログラムだと1分以上かかってしまい非常に非効率です。
原因はコンパイルするたびにフルビルドしてしまうため、少し変えただけでもフルビルドがかかってしまいます。そのような問題を解決するためにccacheというC,C++用のコンパイル高速化ソフトがあります。
このソフトはコンパイル時に生成されたファイルをキャッシュしておくことで2回目以降のコンパイルを高速化するというものです。初回コンパイル時にはすべてのファイルをキャッシュするため時間がかかりますが、次からは使える部分をキャッシュから流用してコンパイルするのでフルビルドする必要がなくなるため結果的に高速でコンパイルできるようになります
#ccacheを利用するための設定
ArduinoIDEの仕様でスケッチをコンパイルする際はランダムな数字の名前で生成されるフォルダにオブジェクトファイルが作られ、そのフォルダに対してコマンドを実行するためこのままではccacheを利用しにくい仕様となっているため出力先を固定します
####1.ビルド先の固定
最初にビルド先のディレクトリを作成します
コマンドプロンプトを開いて以下のコマンドでTempフォルダに作成します
cd %temp%
mkdir arduino_build
Arduinoを起動しメニューのファイルから環境設定を開きます
エクスプローラーが開かれるのでpreferemces.txtを任意のエディターで開きます
開く前にArduinoIDEを必ず閉じてください
下のテキストを末尾に貼り付けます
※ユーザー名は適宜置き換えてください
build.path=C:\Users\Owner\AppData\Local\Temp\arduino_build
上書き保存したらビルドパスの固定は完了です
※権限の関係で上書き保存できない場合があるのでその際はデスクトップに保存してから移動させると権限問題を回避できます
####2.ccacheのインストール
ccache公式サイトから最新バージョンをダウンロードします。2022年3月28日現在、最新バージョンは4.6です。
適当な解凍ソフトでZIPファイルを任意の場所に解凍してください
4つのファイルのうちccache.exeのみをコピーします。
コピー先はArduinoがインストールされているフォルダとしておきます。
デフォルトのインストール場所を変えていない人はC:\Program Files (x86)\Arduinoになります。
管理者権限が必要なので警告が出ますがそのまま続行してOKです。
このようにarduino.exeと同じ階層に配置します
####3.パスを通す
ArduinoIDEがインストールされているフォルダにはパスが通っていないためパスを通します
スタートメニューを開いてpathと入力してシステム環境変数の編集を開きます
環境変数をクリックします
今回はユーザーのpathのみ通すのでユーザー環境変数のpathを選択して編集をクリックします
新規作成してArduinoのインストールフォルダにpathを通します
※インストール場所を変えている人は適宜変更してください
OKを何度かクリックして閉じれば完了です
念のためパスが通っているかコマンドプロンプト等で確認しておくと安心です
####4.ArduinoIDEのビルドオプションの変更
ccacheをインストールしただけではビルド時に有効にならないのでArduinoIDEのビルド設定を変更してccacheを使うように設定する必要があります。
Arduino core for the ESP32を使って開発しいる場合は
C:\Users\Owner\Documents\Arduino\hardware\espressif\esp32
に設定ファイルがあります
(ユーザー名は適宜読み替えてください)
[追記]
2022年3月29日現在、platform.txtは”C:\Users(ユーザー名)\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6”という場所にある可能性があります(要検証)
platform.txtという設定ファイルがあるので任意のエディターで開いてください
Compile c FilesとCompile c++ Filesいう行があるのでそこにccacheを使うオプションを追記します。
recipe/c/o/pattern=とrecipe/cpp/o/pattern=の後ろにccacheと追記します
また、ccache と次の**”**の間にはスペースがいるので忘れずに入れてください
上書き保存したら設定は完了です。
#Arduino IDE でビルド
ビルドする際にccacheが有効になっているかを確認するために環境設定からより詳細な情報を表示するのコンパイルにチェックを入れてコンパイラの警告は全てにしておきます
適当なコードをビルドしてみます。
このように**スケッチをコンパイルしています...**の後にccacheが先頭の文字に入っていたら成功です。
初回ビルドはフルビルドなので遅いですが2回目以降のビルドはキャッシュが効いてくるので高速でコンパイルできます。
###結果
商用電源周波数監視装置のプログラムをビルドしてみました
ccacheなし | ccache有効 | 倍率 |
---|---|---|
58秒 | 12秒 | 4.83倍 |
特にライブラリを多用するプログラムだとそのあたりがキャッシュで高速化されるため大幅な速度向上が見込めます
(画像ではLovyanGFXのライブラリ部分が再利用されている)
#あとがき
ccacheをインストールするだけでコンパイルの速度が格段に向上するのでデバッグ作業がはかどります。(前は一つのパラメータ変更しただけでもとても時間がかかっていました)みなさんも今日からccacheを使って快適なESP32開発を楽しみましょう!!!