🦀
build.rsを高速化する
はじめに
build.rsはRustのビルドスクリプトです。Rustコード自体のビルド前にCのライブラリをコンパイルしたり、コード生成したりする際に使用されます。
このbuild.rsですが、デフォルトでは(cargoに --release
を付けても付けなくても)必ずデバッグモードでコンパイルされます。
これはbuild.rs自体の最適化に時間をかけるより、build.rsのコンパイル速度を重視しているためだと思われます。例えばCのライブラリをコンパイルするようなケースではbuild.rsがやるのは外部のCコンパイラコマンドの呼び出しだけなので、最適化する必要はほとんどありません。
しかし、build.rs自体がそれなりに重い処理をする場合(たとえば parol や LALRPOP のようなパーサジェネレータによる大規模なコード生成)では最適化した方が速い場合があります。
ここではbuild.rsを最適化する場合の設定について紹介します。
設定
Cargo.tomlに以下のように追加するだけです。
Cargo.toml
# デバッグモード時のbuild.rsのオプション
[profile.dev.build-override]
opt-level = 3
# リリースモード時のbuild.rsのオプション
[profile.release.build-override]
opt-level = 3
注意点ですが、ワークスペースで使う場合はこの設定はワークスペースのルートでしか行えません。
実測値
parol によるパーサのコード生成で試した結果です。
build.rs オプション | build.rs コンパイル | build.rs 実行 | 合計 |
---|---|---|---|
デフォルト | 6.1s | 10.93s | 17.03s |
opt-level = 3 | 9.83s | 1.56s | 11.39s |
単純合計でも2倍近く速くなっていますが、実際にはコンパイルキャッシュが効くので、実行時間比で見た10倍速が開発期間の大半で感じられます。
Discussion