気が触れて Chromium を ビルドするの巻

こんにちは。ガムを噛んでます。きたけーです。

今日の朝、夏の暑さと月初の忙しさで頭がやられて、突然Chromiumをビルドし始めました。

Chromium is なに

Chrome の基になっているブラウザ。ChromeChromium にいくつか機能が足されたものです。

ビルド手順

基本的に https://code.google.com/p/chromium/wiki/MacBuildInstructions の通りに進めます。

コードを取得する

http://dev.chromium.org/developers/how-tos/get-the-code

(XCodeがインストール済みという前提で) チェックアウトの管理とかをしてくれる depot_tools を落とします。

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=`pwd`/depot_tools:"$PATH" # パスを通す

ディレクトリを掘って、Chromiumのコードを取得します

mkdir chromium
cd $_
fetch --nohooks chromium --nosvn=True # めっちゃ時間かかる
cd src
git checkout master
gclient sync --nohooks
gclient runhook --force

ビルドする

https://code.google.com/p/chromium/wiki/NinjaBuild

ビルドには Ninja というビルドツールを使います。

ninja -C out/Debug chrome # ninja は depot_tools に含まれています
# 数時間くらいかかる... と思ったら、コケた!
FAILED:  ./gyp-mac-tool copy-bundle-resource ../../breakpad/src/client/mac/sender/English.lproj/Localizable.strings crash_report_sender.app/Contents/Resources/English.lproj/Localizable.strings
Traceback (most recent call last):
  File "./gyp-mac-tool", line 515, in <module>
    sys.exit(main(sys.argv[1:]))
  File "./gyp-mac-tool", line 28, in main
    exit_code = executor.Dispatch(args)
  File "./gyp-mac-tool", line 43, in Dispatch
    return getattr(self, method)(*args[1:])
  File "./gyp-mac-tool", line 66, in ExecCopyBundleResource
    self._CopyStringsFile(source, dest)
  File "./gyp-mac-tool", line 105, in _CopyStringsFile
    import CoreFoundation
ImportError: No module named CoreFoundation
[1344/16603] MACTOOL copy-bundle-resource ../../breakpad/src/client/mac/sender/Breakpad.xib
ninja: build stopped: subcommand failed.

CoreFoundation なんていうモジュールはないとのこと。python から CoreFoundation を扱うために pyobjc をいれれば解決するとのこと。

easy_install -U pyobjc
# エラー...

https://bitbucket.org/ronaldoussoren/pyobjc/issue/92/failed-to-install-pyobjc-301-with-pip-on#comment-11579083 ということらしいので、 しょうがなく https://pythonhosted.org/pyobjc/install.html から以下の3つのパッケージをひとつずつ落として、python setup.py installする。

終わったら、再挑戦。

ninja -C out/Debug chrome # また数時間くらいかかる
ninja: Entering directory `out/Debug'
[15196/15260] SOLINK "Chromium Framework.framework/Versions/A/Chromium Framework", POSTBUILDS
ld: warning: could not create compact unwind for _S32A_Opaque_BlitRow32_SSE4_asm: stack subl instruction is too different from dwarf stack size
[15260/15260] STAMP Chromium.app

DONE。out/Debug にビルド済みのアプリケーションがあるので、開く。

open out/Debug/Chromium.app

しあわせです。

f:id:kitak:20140805012207p:plain