chromiumをM1チップのMacBookでビルドしたときのメモ
がんばってchromiumを手元でビルドしてみるぞ👶
環境
- MacBook Pro, M1 MAX, 32GB
- OSX 13.5.2
- Pythonはpyenvもcondaも入れていない
とりあえず'Contributing to Chromium'を読んでみると
Life of a Chromium Developer, which is mostly up-to-date.
とあるので、mostly up-to-dateならと、一旦それを読むことにする
読んでいると、mac特有のrequirementがあるとのこと("Development Machine"セクションに記載されたリンク)なので、それを確認してみる。下記。
A Mac, Intel or Arm. (More details about Arm Macs.)
Xcode. Xcode comes with...
The macOS SDK. Run...
An APFS-formatted volume (this is the default format for macOS volumes).
macOS SDKが必要なのか。
$ ls `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs
で確認できるらしいのでやってみる。
MacOSX.sdk MacOSX14.0.sdk MacOSX14.sdk
と表示され、確認先としてリンクが貼られているファイルでも保証されているっぽいバージョンなので良しとする。
ディスクもAPFSだったのでオッケーそう。
arm macだと下記を読んだほうがいいらしいとのことで読んでみる。(直前ポストの"More details about Arm Macs"の部分)
If you are on an Arm Mac, your build will by default be an Arm build, though please see the section below about building on Arm Macs for specific things to keep in mind.
Arm Macなので、"building on Arm Macs"というセクションを読みに行く
It's possible to build on an arm Mac, without Rosetta. This configuration is covered by a main waterfall bot.
とある。main waterfall botってなんだろう。
アクセスするとこんな画面が出てくる。
ビルドできるかを定期的に確認してくれているbotなのかな?
とりあえずさっきの続きを読む限り、
Checking out and building (with goma too) should just work. You should be able to run fetch chromium normally, and then build, using gn, ninja etc like normal.
とあるので、あまり気にせずにm1 macでもビルドできるんだろうと思って進めていってみる
gomaはchromiumのビルドツールでgoogle社員じゃない人が使うにはなんかいろいろ手続きがいるはずだから、一旦スルーしてみる。
というわけでm1 macだから、、、という心配事は一旦なしっぽい。
コードをゲトってビルドしていく。
コードを取得するには下記のようにするらしい。
Install Depot Tools (a collection of dev utilities)
Run fetch chromium to get all the code and generate the build files
まずはDepot Toolsとやらをインストールする。書いてある手順通りにやる。
linuxだと下記のようにするとのこと。
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ export PATH=`pwd`/depot_tools:"$PATH"
でもやることはmacでも同じでいいっぽい。実際、contributingドキュメントからリンクされてる"Mac Build Instructions"にも同じような事が書いてある。安牌?的にこっちに従ってみよう
ということで下記を実施。
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
PATHは自分でzshrcをいじって登録した。
ソースコード取得もココに書いてある通りに実施。意外とはやく終わった。
張り切ってビルド!!!下記の通りに実施。
つまりこれを実行。
$ gn gen out/XXXX(自分がやってみるバグの番号にした)
$ autoninja -C out/XXXX chrome
ダメだった。謎のエラー。調べてみると奇跡的にstackoverflowからchromium issueへたどり着く。
最初からchromium issueでcategory=Buildにして検索すべきだった。
pythonで下記を実行して
> import platform
> print(platform.machine())
arm64
って出ればいいけど、x86_64
って出る場合はrosetta(macのintel互換性担保システム)が作動しててダメらしい。自分は後者だった。
pythonアップデートしたら治ったはwwみたいな投稿をどっかで見たのでpython3.12にして再トライ。
(例のscriptはarm64と出るようになった👶)
またビルドが失敗。今度はこれっぽい。
調べてみるとpython3.12の互換性は少し闇っぽい。
python3.11.6 for macをダウンロードしてとりあえずインストールする(こんなんでいいの??)。
自分はpyenvもcondaも入れていないので、なんかこれで3.11にもどった(いいの??)。
で、例のscriptも今度はarm64と出る!!!
いくぞ、再ビルドや!
30分くらいしたらビルドこけてた。
やばい、このコメントを見落としていた。これをやってみよう
(chromium/srcで)
$ rm -rf third_party/rust-toolchain
$ gclient runhooks
$ autoninja -C out/Default chrome
gclient runhooks
で失敗する。
certificate verify failed: unable to get local issuer certificate
とのこと。
調べてみたらまさかのpythonの設定。
たしかに3.11.6を入れた時こんなファイルあったな……。
というわけで上記stackoverflowを参考にやってみる。
やってみた。もっかいgclient runhooksしてみる。
できた。もっかいビルドしてみる。
頼むからなんとかなってほしい。ビルドは成功するにも失敗するにも時間がかかるので一旦休憩。
ビルドおわった!!!!!!
src/out/XXXXにできあがっているchromiumを起動して動かせた!
ビルド所要時間は、M1 MAX, 32GBのMacBook Proで4.5時間でした。
長き旅。chromiumはドキュメントが充実していてすごいねえ😭