Chromiumを自分でビルドしてみよう
自分でChromeの機能を作りたい
Chromeってとっても便利ですよね。
でも使っていると、「こんな機能ほしいな...」と思うことがたまにあります。
拡張機能を探してもそれらしいのが見つからない...。
よし、自分で作ってしまえばいいんだ。
ChromeとChromium
とはいってもChromeはGoogleの著作物なのでソースを勝手に書き換えちゃお~とかはできません。
そこで登場するのが「Chromium」。一言で言ってしまえばソースコードがすべて公開されてるChrome。
詳しく知りたい人は公式サイトを見てみるといいでしょう。 www.chromium.org
さっそくビルドしてみよう
- 用意するもの
- linux環境
- 時間
以上。初回ビルドにはとにかく時間がかかります。心してかかりましょう。
WindowsやMacでもできないことはないですが、おそらく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の扱いなんかで困ったら公式サイトに使い方があるので見てみよう。
$ 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がたくさん出るかもしれないが無事に起動すればビルドは成功。