Visual Studio 2010 ExpressとninjaでChromiumをビルドする

はじめに

Windows 7環境が汚れてきたので、Windows 7の再インストールのついでにChromiumをビルドできるようにしました。

環境

以下の環境でChromiumをビルドできるようにします。

インストール手順の概要

大まかな手順は以下の通りです。

基本的には以下に従いました。
http://www.chromium.org/developers/how-tos/build-instructions-windows

今回は「Automatic simplified toolchain setup」の手順を踏むことにしました。
これに従うことで、以下が自動ダウンロード&デプロイされます。

ちなみにこのやり方は、2013年に入ってから整備されたようです。
http://src.chromium.org/viewvc/chrome?revision=175004&view=revision

Windows 7のインストール

再インストールしました。
余計なソフトは入っていないクリーンな状態です。
Windows 7インストール直後にWindows Updateを実施しました。

Visual Studio 2010 Expressのインストール

ここから入手してインストールしました。
http://www.microsoft.com/visualstudio/jpn/downloads

depot_toolsのインストール

Cygwinがあると便利なので、Cygwinを前提にインストールすることにしました。
Wikiの「Cygwin:」の説明に従います。
http://www.chromium.org/developers/how-tos/install-depot-tools

Cygwinをインストールします。
Cygwinのインストール時には依存パッケージ(required_packages)をインストールするように注意します。
あと、ca-certificatesパッケージも必要です。
インストールし忘れると、git cloneできません。

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
Cloning into 'depot_tools'...
error: error setting certificate verify locations:
  CAfile: /usr/ssl/certs/ca-bundle.crt
  CApath: none while accessing https://chromium.googlesource.com/chromium/tools/depot_tools.git/info/refs
fatal: HTTP request failed

PuTTYCygもついでにインストールしておきます。
http://www.chromium.org/developers/how-tos/cygwin

コードの取得

Chromiumのビルドに必要なコードを取得します。

Gitの方がなにかと俊敏に動くのでGitを使います。
https://code.google.com/p/chromium/wiki/UsingGit

$ git config --global user.name "My Name"
$ git config --global user.email "my@email"
$ git config --global core.autocrlf false
$ git config --global core.filemode false

$ fetch blink --nosvn=True

説明によると、gclient syncしないように、とあったので、--nohooksを指定してフックだけ走らせないようにしました。

$ gclient sync --nohooks

ツールチェーンのインストール(自動)

cygwinからは実行できないとあったので、コマンドプロンプトを立ち上げて以下を実行しました。

Cygwinpythonが使えるか不安だったので、Python 2.7を別途インストールしておきました。

C:\Python27\python src\tools\win\toolchain\toolchain.py

しばらくすると、ネットからダウンロードしてきたツールチェーンがデプロイされます。

環境変数の設定

ツールチェーンのデプロイが完了すると、「win_toolchain」フォルダ以下に「env.bat」が生成されます。

@echo off
:: Generated by tools\win\toolchain\toolchain.py.
:: Targeting VS2010.
set GYP_DEFINES=windows_sdk_path="c:\cygwin\home\fixme\win_toolchain\win8sdk" component=shared_library
set GYP_MSVS_VERSION=2010e
set GYP_MSVS_OVERRIDE_PATH=c:\cygwin\home\fixme\win_toolchain
set GYP_GENERATORS=ninja
set GYP_PARALLEL=1
set WDK_DIR=c:\cygwin\home\fixme\win_toolchain\WDK
set DXSDK_DIR=c:\cygwin\home\fixme\win_toolchain\DXSDK
set WindowsSDKDir=c:\cygwin\home\fixme\win_toolchain\win8sdk
echo Environment set for toolchain in c:\cygwin\home\fixme\win_toolchain.
cd /d c:\cygwin\home\fixme\win_toolchain\..

このバッチファイルは、コマンドプロンプトでしか使えないので(Cygwinを使うと決めたので)、バッチファイルは実行はせず、Windows環境変数にそれぞれの値を設定することにしました。

ただし1点変更を加えました。
「Using both Ninja and MSBuild」にあるように、「GYP_GENERATORS」が「ninja,msvs」となるようにしました。
Visual Studioでコードを見たいためです。こうすることで、Visual Studioのソリューションファイル(*.sln)も生成されます。
http://www.chromium.org/developers/how-tos/build-instructions-windows

gclient syncの実行

環境変数を設定したので、反映させるためCygwinシェルを新たに起動します。
その上で以下のコマンドを実行します。

$ cd src
$ gclient sync

ninjaでのビルドに必要なファイルとVisual Studioのソリューションファイル等が生成されます。

ninjaによるビルド

Cygwinシェルで続けて以下を実行します。ビルド時間を計測するため、timeコマンドを先頭に追加します。

time ninja -C out/Debug chrome

これでビルドが始まります。

Windowsのタスクマネージャでリソースを監視していると、ビルド中は全コアのCPUが100%稼動状態になりました。

今回試した環境では、これくらいの時間でビルドできました。

[...]
[13835/13836] CXX obj\chrome\common\chrome.crash_keys.obj
[13836/13836] LINK chrome.exe

real    96m51.894s
user    0m0.841s
sys     0m2.166s

Chromiumの起動確認

ビルドが成功すると、out/Debug/chrome.exeが生成されます。
上がビルドしたChromiumで、下が現時点で最新のChromeです。
バージョン番号からも最新のChromiumがビルドできたことが確認できます。


Visual Studioでのソースコードブラウズ

src/chrome/chrome.slnを開くとVisual Studioが起動します。
Intellisenseのデータベース構築がはじまります。
Intellisenseの準備が完了すると、クラスや関数の定義が簡単に参照できるようになります。