Visual Studio 2010 ExpressとninjaでChromiumをビルドする
環境
以下の環境でChromiumをビルドできるようにします。
- Windows 7
- Visual Studio 2010 Express Edition
- cygwin
- git
- ninja (ビルドシステム)
インストール手順の概要
大まかな手順は以下の通りです。
- Windows 7のインストール
- Visual Studio 2010 Expressのインストール
- depot_toolsのインストール
- コードの取得
- ツールチェーンのインストール(自動)
- 環境変数の設定
- gclient syncの実行
- ninjaによるビルド
- Visual Studioでのソースコードブラウズ
基本的には以下に従いました。
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からは実行できないとあったので、コマンドプロンプトを立ち上げて以下を実行しました。
Cygwinのpythonが使えるか不安だったので、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の準備が完了すると、クラスや関数の定義が簡単に参照できるようになります。