https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md
システム要求
- 64bitインテルマシン、RAM最低8G、16G以上が望ましい。
- 100G以上のNTFSディスク容量、FAT32はだめ。
- Visual Studio 2015 Update 3。
- Windows 7 or newer
64bitは絶対必要らしい、インテルじゃなきゃダメかどうかは不明。AMDでもできた。インテルとはx86CPUのことか?、RAMは4Gでもできたが時間がかかる。ハードディスクは100G近くいくがNTFS圧縮が結構効く。
セットアップ
2016年12月現在、Visual Studio 2015とWindows SDK 14393が必要。このSDKじゃないとだめらしいが詳細は不明。
depot_toolsのインストール
depot_toolsをダウンロードし、どこかに解凍。ここではY:\src\depot_tools。
PATHにY:\src\depot_toolsを追加する。システムを変更してもいいがここではbatファイルC:\src\startcmd.batを作成し対応。
@echo off REM always launch 64bit cmd, https://stackoverflow.com/a/27093204 set "SystemPath=%SystemRoot%\System32" if not "%ProgramFiles(x86)%"=="" ( if exist %SystemRoot%\Sysnative\* set "SystemPath=%SystemRoot%\Sysnative" ) REM set path to depot_tools set PATH=%~dp0depot_tools;%PATH% REM This tells depot_tools to use your locally installed version of Visual Studio REM (by default, depot_tools will try to use a google-internal version). set DEPOT_TOOLS_WIN_TOOLCHAIN=0 REM make current directory the location this script exists. cd %~dp0 REM always launch 64bit cmd %SystemPath%\cmd.exe /k
DEPOT_TOOLS_WIN_TOOLCHAINはgoogle用、0を設定
コマンドプロンプト上でgclientを実行。プラットフォームごとに必要なものをdepot_tools内にダウンロードしインストールする。最初は少し時間がかかる。
Y:\src>gclient
終わったらwhere pythonを実行し、pythonを実行したとき、python.batになるかを確認。
Y:\src>where python Y:\src\depot_tools\python.bat Y:\src>
コードの取得
最初にGitの設定
> git config --global user.name "My Name" > git config --global user.email "my-name@chromium.org" > git config --global core.autocrlf false > git config --global core.filemode false > git config --global branch.autosetuprebase always
autocrlfはちゃんとしないとパッチがうまくいかないことがある。
chromiumディレクトリを作成し移動。
Y:\src>mkdir chromium Y:\src>cd chromium Y:\src\chromium>
fetchでソースをとってくる。
Y:\src\chromium>fetch --no-history chromium
すごく時間がかかる。chromiumは外部リポジトリからもソースを取り込むのでメタツールgclientを使うが、fetchはラッパー。fetch_config\chromium.pyを読んで取り込む。fetchを使うのは初めの一回だけ、プラットフォーム依存の初期化処理。次からのアップデートはgclientを使う。中核はgit clone https://chromium.googlesource.com/chromium/src.git
。--no-historyをつけるとレポジトリの履歴を取得しない。最初にgclientのマスターファイルY:\src\chromium\.gclientを作成し、gclientを起動する。全部やり直すときは.gclien
tを消してfetch。
ビルド
チェックアウトが終わったらsrcに移動してビルドを行う。
> cd src > Y:\src\chromium\src>gn gen --ide=vs out\Default
ビルドは2段階で行う。まずgnで依存関係を解決しその結果を.ninjaファイルに書き込む。次にninjaが実際のビルドをする。genは作成のサブコマンド、--ide=vsはVisual Studio 2015用のプロジェクトファイルも作成してくれるが、ビルドはninjaを使う。VSでやるときはdepot_toolsにパスが通っていないとならない。out\Defaultはここにすべてが作成される出力先。出力先を複数つくることができる。
gn genが終わったらout\Defaultのいろいろな設定。all.slnも作られるがすごく重いのでまだ開かない方がいい。
> Y:\src\chromium\src>gn args out\Default
メモ帳でargs.gnが開かれる。ここに設定を書く。例えば以下。
enable_basic_printing=true enable_nacl=false enable_print_preview=false enable_widevine=true is_component_build=false is_debug=true is_win_fastlink=false target_cpu="x86"
メモ帳を閉じるとこの設定に基づいて.ninjaファイルが生成される。ビルドを2段階に分けることで、今後のデバッグ作業はninjaだけでよくなりビルド時間が短縮する。ninjaは軽量に作られている。
設定の一覧は以下のコマンドで見れる。
Y:\src\chromium\src>gn args --list out\Default
objディレクトリ配下に.ninjaやVSのプロジェクトファイルが作成され、ビルドの準備が整ったのでビルド。すごく時間がかかるがninjaはmakeみたいなツールなので途中でやめても問題ない。
> Y:\src\chromium\src>ninja -C out\Default chrome
is_win_fastlinkをtrueにするとpartialPDBがつくられる。windbgはこのPDBに対応してないようなので、ここではfalseにしている。