Chromiumを自分でビルドしてみよう

自分でChromeの機能を作りたい

Chromeってとっても便利ですよね。
でも使っていると、「こんな機能ほしいな...」と思うことがたまにあります。
拡張機能を探してもそれらしいのが見つからない...。

よし、自分で作ってしまえばいいんだ。

ChromeChromium

とはいってもChromeGoogleの著作物なのでソースを勝手に書き換えちゃお~とかはできません。
そこで登場するのが「Chromium」。一言で言ってしまえばソースコードがすべて公開されてるChrome

詳しく知りたい人は公式サイトを見てみるといいでしょう。 www.chromium.org

さっそくビルドしてみよう

  • 用意するもの

以上。初回ビルドにはとにかく時間がかかります。心してかかりましょう。
WindowsMacでもできないことはないですが、おそらく30時間程かかります。
linux上でやることを強くオススメします。私はUbuntu16.04とUbuntu18.04で行っていました。
また、WSL(Windows Subsystem for Linux、旧bash on windows)は今のところ使えません。

ちなみに、ここに書いてあることはきっとすぐに古くなるでしょう。 もしうまく行かなかったら公式のドキュメントを確認してください。

Checking out and building Chromium on Linux

ビルド準備

必要なパッケージはだいたい同梱されているので、事前準備としてはpython, build-essential, git, vimがあればいいはず。

$ sudo apt-get install python build-essential git vim

depot_toolsの取得

まずはビルドに必要なツール「depot_tools」をcloneしてくる。depot_toolsにはgclientを始めChromiumを管理するツールがたくさん含まれています。
gclientの扱いなんかで困ったら公式サイトに使い方があるので見てみよう。

www.chromium.org

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

今後の操作はこの中のツールを使って行うので必ずpathを通しておく。

相対パスを用いるとdepot_toolsがうまく読み込まないので、絶対パスを使うか

$ export PATH="$PATH:/path/to/depot_tools"

$HOMEを使って

$ export PATH="$PATH:${HOME}/depot_tools"

直接実行したり.bashrcに追加したりしましょう。

ソースの取得

ソースを保存したいディレクトリに移動しdepot_tools内のfetchを使い、ソースを持ってくる。この際デフォルトではバージョン履歴がついてくるが無くすと時間を短縮できるので--no-historyオプションを推奨します。

$ fetch --nohooks --no-history chromium

これには早くても15分ほどはかかります。ソースコードのcheckoutが完了するとsrcができているので移動する。

$ cd src

続いてUbuntuの場合、依存性を解決してくれるシェルスクリプトが用意されているので実行する。

$ sudo build/install-build-deps.sh

hooksを実行する準備ができたのでパッケージを入手。

$gclient runhooks

これでビルド準備は完了です。

ninjaでビルド

depot_tools内のninjaツールを使ってビルドしていきます。
ninjaはC++ベースで作られているオープンソースのビルドツールで...詳細は公式サイト。

Ninja, a small build system with a focus on speed

まずビルドのためにディレクトリを作成します。

$ gn gen out/Default

Defaultを任意に書き換えることでビルド環境を分けられる。
このままビルドすることもできるがいくつかビルドオプションを加えることでビルド時間を短縮できる。

$ gn args out/Default

実行するとvimが起動するのでオプションを改行区切りで記述する。
vimを普段使わない人向けに書くと、Insertで入力を始め、保存するときにはEscを押して入力を離脱したあと:wqと打ちEnterを押すと上書き保存&終了することができます。
その際の内容はout/Default/args.gnに保存されるのであとから変更したいときはそこを変更すればいい。

以下、おすすめするオプションをご紹介。

Jumbo build

use_jumbo_build=true

複数のソースファイルを一緒にコンパイルする。公式によるとChromiumはヘッダファイルが共通してるソースが多いから早くなるらしい。よくわからないけど実際早くなる。
Jumbo buildに関して詳しく知りたい人はこっち。 Jumbo / Unity builds

NaClの無効化

enable_nacl=false

多くの場合NaCl(Native Client)はなくても問題ない。無効化しちゃおう。
Welcome to Native Client - Google Chrome

他にデバッグシンボル系が多く存在するが今回はデバッグもしたいのでいじらない。 ビルドオプションに凝りたい人は公式サイトを読んでみよう。
www.chromium.org

ついにビルド

$ autoninja -C out/Default chrome

chromiumのビルドだけど名前はchromeなので間違えないようにね。
早くても2時間ほどはかかるので気長に待ちましょう。

とりあえず実行してみよう

$ out/Default/chrome

warningがたくさん出るかもしれないが無事に起動すればビルドは成功。
f:id:glycelery:20181024162804p:plain