2013年6月3日月曜日

Chromiumをビルドする(オプション/最適化ビルド/ビルド高速化編)

Chromiumをビルドする際のオプション、少しだけビルド時間を短縮する方法、できあがったChromiumを速くする方法を書いていきます。

2015/03/07 一部更新

Chromiumは、GYP(Generate Your Projects)によりOSが異なっていても適切にビルドに必要な情報を生成します。 基本的にはninjaビルド用のファイルを生成しますが、設定次第でVisual Studioのソリューションファイルを作成することも可能です。 環境変数を事前に設定することで、設定を変更することができます。ここでは「GYPオプション」と呼ぶことにします。

GYPからninjaビルド情報を手動で生成する方法

GYPオプションを変更した場合、手動で生成しない限り反映されることはありません。
GYPからninjaビルド情報を生成するには、以下のような方法で行います。

  1. VC++ コマンドプロンプトを開く。
  2. GYPオプションを設定する。(※)
    set GYP_DEFINES="<設定項目>"
    set GYP_GENERATOR=ninja
  3. ファイルを再生成する。
    gclient runhooks

※set GYP_GENERATORS=msvs-ninjaのように環境変数を設定すると、Visual Studioソリューションファイルが生成されます。

GYPオプション

環境変数GYP_DEFINESに設定します。1個以上の[変数]=[値]の組み合わせを、半角スペース区切りで指定します。

(1)オフィシャルビルドによる最適化

branding=Chromium buildtype=Official
を指定すると、リンク時のコード生成(LTCG)が有効になります。 LTCGにより、バイナリサイズが小さくなり、Chromiumの実行速度が速くなります。 「オフィシャル」という名称のせいでChrome用のビルドオプションのように見えますが、Chromiumでも使えます。

これを有効にすることによる欠点は、ビルド時間が長くなること、ビルド時のメモリ消費量とディスク消費量が増えることです。

(2)64ビット版のビルド

target_arch=x64
を指定すると、64ビット版をビルドします。

(3)プロプライエタリコーデック

ffmpeg_branding=Chrome proprietary_codecs=1
を指定すると、ビデオ、オーディオコーデックにH.264、MP3、AACが追加されます。コーデックがChromeと同じになります。 このオプションを有効にした状態でビルドしたファイルを不特定多数に配布する場合、デコーダーライセンス(特許使用料)が必要です(注)。 Tungstenではこの機能を無効にしています。

(注)非商用の場合は特許使用料が免除されるという記述も見受けられますが、非商用とみなされるケースは少ないです。 たとえフリーソフトでも、配布媒体が有料である場合や、商用利用を明確に禁止していない場合は商用利用とみなされ特許使用料を請求される可能性があります。

(4)PGOビルド(試験機能)

chrome_pgo_phase=[1,2]
を指定すると、PGOビルドを行うようになります。1を指定するとPGOのインストルメント(プロファイル収集用実行ファイルの生成)、2を指定すると収集したプロファイルをもとにPGO最適化を行います。
詳細は、「普通にビルドするより速くなる? ChromiumのPGOビルド実験」をご参照ください。

(5)その他

ここで紹介したオプションは一例です。

拡張機能を無効にしたり(enable_extensions=0)、セーフブラウジング機能を設定したり(safe_browsing=[0,1,2])いろいろ存在するようです。

ビルド時間を短縮する方法

Chromiumのビルドは非常に時間がかかります。少しでも早くしたい場合は、次の方法をお試しください。

  • [ハードウェアによる改善]
    • コア数が多い、かつ1コアあたりの性能が高いCPUにする
    • メモリは8GBより多くする (オフィシャルビルドの場合)
      オフィシャルビルドの場合、8GBでは足りなくなってしまいます。 オフィシャルビルドをあきらめるか、メモリの増設を強く推奨します。
    • ディスクをランダム書込が高速なSSDに変える
      ビルド中はランダムアクセスが頻繁に発生するので、高速なSSDに変えるだけでも効果はかなりあります。 音も静かになるというおまけつき。
  • [ソフトウェアによる改善]
    • ウィルス対策ソフトを無効化する
      セキュリティが心配であれば、Chromiumのソースコードだけを除外するなどの工夫を。
    • ビルド専用OSを作っておく
    • Chromiumフォルダー以下をインデックス対象から外す
    • 使用しているディスクがHDDならば、デフラグをしておく
      SSDでも、ビルド前にデフラグを行うことで速度低下を防げるかもしれません。(でも、やりすぎないように!!)
    • 並列ビルド数を制限する
      ninjaビルドでは、CPUの論理コア数にあわせて自動的に設定されるため、変更する必要はありません。
      しかし、ビルド以外の重い処理を常時行っているような環境では、並列ビルド数を制限するとよいかもしれません。