2015年1月28日水曜日

Chromiumをビルドする(2015年1月版)

WindowsでのChromiumのビルド方法 2015年1月版。

環境構築を自力で行ってVisual Studio上でビルド → toolchainを使用したninjaビルド → VS2013 Communityをインストールしてninjaビルド、という風に変わっています。
特に、VS2013 Communityは非常に大きなインパクトを与えました。 ライセンス条件をクリアしていれば、Professional相当が無償化されたおかげで初期構築の手間が減り、Chromiumのビルドが楽になりました。

この影響で、1年半ぐらい前に書いたビルド方法 (Visual Studio Expressninja) が古くなってしまったので新しく記事を書くことにしました。
なお、オプション/最適化ビルドは今でも十分使えるので、そのままとします。

おことわり

ここで書かれている方法は2015年1月時点のもので、公式のビルド方法を日本語版で使用するためにアレンジを加えているところがあります。
この記事をご覧になっている時には最新ではないかもしれません。その上非公式です。
公式、かつ最新のビルド方法はhttp://www.chromium.org/developers/how-tos/build-instructions-windows へどうぞ(ただし、英語です)。

ビルド動作環境

Chromiumは巨大なプロジェクトであり、高性能なPCが求められます。ビルドに必要な環境は、下記のとおりです。

  • CPU: 4コア以上のCPUを推奨
  • OS: Windows 7以上(64ビット版必須)
  • メモリ: 8GB以上
  • ディスク: NTFSフォーマットで60GB以上。SSD推奨
  • 固定インターネット回線(可能なら1Gbps)を推奨

CPUはコア数が多いほうが有利ですが、リンク時間の半分程度はシングルスレッド動作になるので1コアあたりの性能も高いほうがよいです。
メモリはビルドオプションによっては8GBでも使い切るので、メモリを増やすかページファイルを多めに取りましょう。
10GB程度のデータをダウンロードするため、安定している固定回線のほうがよいです。1Gbpsであれば100Mbpsを上回る速度を体感できます。 たったの7GBで速度制限がかかるようなモバイル回線は事実上使えないと思ってください。
ビルドだけでなく、それまでの初期構築にも時間がかかります。初期構築からビルド完了まで最短でも2時間はかかるでしょう。

この記事での前提事項

この記事では、以下のとおりにビルドするものとします。

  • Windows 8.1 x64
  • W:\Chromiumを基準とする
  • VS2013 Communityのインストール先、オプションはすべてデフォルト(ただし、MFCはインストール)とする
  • cygwinは入れない

環境構築

(1) Visual Studio 2013 Community

まず、Visual Studio 2013 Communityをインストールします。インストールオプションは最低でもMicrosoft Foundation Class(MFC)が必要です。

日本語化したい場合は、インストール後に言語パックをインストールしてください。言語パックは必須ではないのでインストールしなくても問題ありません。

(2) depot_tools

次に、depot_toolsを入手・設定を行います。

  1. Install depot_toolsから、 depot_tools.zipをダウンロード
  2. depot_tools.zipをW:\Chromium以下に解凍
    Windows標準機能で解凍する場合、ファイルを右クリック→「すべて展開...」メニューで解凍してください。 隠しファイルが解凍されない可能性があるため、D&Dによる解凍はしないでください。
  3. 解凍したパスを環境変数PATHに追加
    PATHの末尾に";W:\Chromium\depot_tools"を追加します。
  4. 環境変数DEPOT_TOOLS_WIN_TOOLCHAINを追加
    変数名DEPOT_TOOLS_WIN_TOOLCHAINに変数値0を追加します。

(3) システムロケールを英語に

[コントロールパネル]の[地域と言語]を開き、[管理]タブから[システム ロケールの変更]をクリックし、 システムロケールを[英語(米国)]に変更してください。

変更後、再起動を要求されるので再起動してください。

システムロケールを日本語以外にすると、文字化けして正常に動作しないアプリがあります。ビルドが終わったらシステムロケールを元に戻してください。

システムロケールの変更を忘れるとビルドに失敗します(※1)。さらに日本語言語パックをインストールしている場合はヘッダーファイル変更時に正常にビルドできなくなってしまいます(※2)。

※1
文字コード検出の仕様が設定されているコードページに依存していることが原因です。
ChromiumのソースコードはBOMヘッダーのないUTF-8です。 システムロケールが日本語、かつBOMヘッダーがない場合、文字コードがUTF-8ではなくShift-JISと認識されてしまい、 警告C4819が発生します。
警告が表示されたファイル全てをBOMヘッダー付きのUTF-8に変換すれば回避できますが、ファイル数が非常に多いので現実的ではありません。

※2
ninjaビルドでは、ヘッダーファイルの依存関係を取得するためにコンパイラオプションに/showIncludesを追加しています。 この表示結果はシステムロケールが適切ならば英語版の表示になり抑止されますが、他の言語で表示されるとコマンドプロンプト上に流れてしまい、依存関係が正常に取得できなくなります。
この状態でヘッダーファイルを修正しても、影響のあるファイルの再コンパイルができなくなります。

環境構築は以上です。

ソースコードの入手、ビルド

ここからは、コマンドプロンプト(cmd.exe)から操作します。

  1. cd /d W:\chromium
  2. gclient
    Git、Python、ninjaなど、ソースコードの取得やビルドに必要なツールをインストールするため、 gclientコマンドをオプションなしで一度実行する必要があります。
    ダウンロードとインストールに時間がかかります。usageが表示されれば完了です。
  3. git config --global user.name "nanashi"
    "nanashi"部分はご自由に。
  4. git config --global user.email "nanashi@dummy.com"
    メールアドレス部分はご自由に。
  5. git config --global core.autocrlf false
  6. git config --global core.filemode false
  7. git config --global color.ui true
  8. fetch chromium
    非常に時間がかかるので根気強く待ちましょう。
  9. gclient sync
    これも非常に時間がかかるので根気強く待ちましょう。
  10. cd src
  11. ninja -C out\Debug chrome
    デバッグ版の場合。リリース版の場合はDebugをReleaseに置換。
    ビルドが終わるまでひたすら待ちます。

ベータ版や安定版をビルドしたい場合

以上が、開発中のChromiumのビルド方法です。しかし、安定版(Stable)ではないので不具合が多数存在している場合があります。
ベータ版や安定版をビルドするには、以下の方法を実施してからビルドしてください。

  1. Omaha Proxyなどから、リリースされているバージョン番号を確認
    Omaha Proxyには、最新のCanary/Dev/Beta/Stableのバージョンが記載されています。 これを参考にするなどで、ほしいバージョン番号を調べておきます。
  2. コマンドプロンプトから、以下を実行 (斜体部分はご自由に)
    git fetch --tags
    git check -b <your_branch> <1.で調べたバージョン番号>
    gclient sync --with_branch_heads
    ninja -C out\Debug chrome

公式のdepot_toolsのチュートリアル も英語ですが参考になると思います。

なお、古いバージョンもGitリポジトリに存在しますが、すべてが簡単にビルドできるとは限りません。 自力で直せない場合はあきらめましょう。

将来

またビルドの方法が変わるかもしれません。

ninjaビルドに必要なデータを生成するだけなら、GYPのような複雑なものよりもっとシンプルなものでいいんじゃないかという発想で GN (Generate Ninja)が開発中です。