(2022-10-27)
参考資料 (2022-10-27)
Firefox Source Tree Documentation — Firefox Source Docs documentation
firefox-source-docs.mozilla.org
Firefoxのビルド (2022-10-27)
今回はwsl2(Arch Linux) on Windows11で試す。
bootstrap (2022-10-27)
Building Firefox On Linux — Firefox Source Docs documentation
firefox-source-docs.mozilla.org
mercurialって使ったことないけどmercurialがおすすめと書いてあるので一応そうしとく。gitでも使えるらしいが・・・
sudo pacman -S mercurial
curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O
python3 bootstrap.py
Understanding Artifact Builds — Firefox Source Docs documentation
firefox-source-docs.mozilla.org
build (2022-10-27)
cd mozilla-unified
./mach build
(2022-10-27)
せっかくなので次はgitを使ってみる。
git-cinnabar
というものが必要らしい。paru -S git-cinnabar
curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O
python3 bootstrap.py --vcs=git
cd mozilla-unified
./mach build
ちなみにi7-12700、メモリ32GBでビルド時間は約18分だった。メモリによって並列実行数か決められてるような表示が一瞬見えたからwslのメモリ割り当て増やしたら速くなるのかな?
あと現時点でのmozilla-unifiedフォルダの容量は約24GBだった。
実行 (2022-10-27)
./mach run

あと設定が開けない。
about:preferences
は開ける。謎だ。(2022-10-27)
Releaseタグでビルド (2022-10-27)
git fetch --tags hg::tags: [tag "*"]
git checkout -b 106.0.2 refs/tags/FIREFOX_106_0_2_RELEASE
./mach build
とりあえず書いてる通りに実行する。
./mach clobber
./mach build
./mach run
Windowsでビルド (2022-10-27)
Building Firefox On Windows — Firefox Source Docs documentation
firefox-source-docs.mozilla.org
mozilla-build\start-shell.bat
で専用のシェルを起動しないといけないらしい。cd /d/dev
mkdir mozilla-source
cd mozilla-source
wget https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py
python3 bootstrap.py --vcs=git
~\.mozbuild\git-cinnabar
を通すgit fetch --tags hg::tags: [tag "*"]
git checkout -b 106.0.2 refs/tags/FIREFOX_106_0_2_RELEASE
./mach bootstrap
./mach build
1759544 - ERROR: Cannot find a wasi sysroot. Please give its location with --with-wasi-sysroot. on mozilla-release
bugzilla.mozilla.org
.mozconfig
を作成し、ac_add_options --enable-bootstrap
今度は成功した。ビルド時間は約22分。やっぱりLinuxより遅いか
./mach run
(2022-10-27)
Cross compiling Windows binaries from Linux
jake-shadle.github.io
Floorp (2022-10-27)
GitHub - Floorp-Projects/Floorp: The source code of version 10 or later of Floorp Browser, the most Advanced and Fastest Firefox derivative 🦊
github.com
/floorp
ディレクトリに集約されていて元のFirefoxのコードにそれを呼び出すものがあるようだ。いろいろ (2022-10-27)
気づいたこと (2022-10-27)
- Firefoxのソースはフロント部分とバックエンド部分に分かれている。フロント部分をいじるだけでけっこういろいろなことができそうだ。
Meta
- Firefoxのソースは最新ソースコード
mozilla-central
、リリースのmozilla-release
などがある。自動でダウンロードされたリポジトリはmozilla-unified
だがこれには全部含まれているらしい。mercurialに精通していないのでよくわからない。
フロント
- FirefoxではFirefox自体のUIがhtmlなどのweb技術で書かれている。まあuserChrome.cssなどもあったしこれは驚くことでもない。
- 開発者ツールの設定から有効にするとブラウザーツールボックスというFirefoxのUIを調査できる開発ツールを使える。
- 見たことがない拡張子として
jsm
がある。jsmファイルはそのまま使えるがjs
とcss
はコンパイル作業が必要というようなことが書いてある(https://firefox-source-docs.mozilla.org/browser/components/newtab/docs/index.html#for-jsm-files)。 .xhtml
・・・まだ生きてたのか- jsソース内では
Preferences
などのオブジェクトが使われているがこれはtoolkit/content/
で定義されている。が、恐らくここ以外にもある。 - xhtml内では
<browser>
など独自要素が使われている。これらの要素についてドキュメントがあるかは不明。 - 残念ながらまともに型はついていないが一応eslintプラグインがある。
mach npm i
でインストールできる。これで間違ったことをすると多少教えてくれるようだが…?(https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint-plugin-mozilla.html)
ディレクトリ構成 (2022-10-27)
browser
│ base <- ブラウザのUI全体
│ └ content
│ branding
│ components <- 色んなコンポーネント
│ extensions <- ビルトインの拡張(pipとか)
ベンチマーク (2022-10-27)
公式ビルド 106.0.2

手製ビルド 106.0.2

(2022-10-27)
--enable-release
はほとんど意味なし。どうやら公式ビルドではPGOとLTOが有効になってるのでそれをしないと公式と同じ数値には達しなさそうだがWindowsでのPGOはサポートされてないっぽい?
Linux上のクロスコンパイルビルドだとできるってことかな
1718171 - Windows 10 PGO build fails with undefined symbol: __llvm_profile_instrument_memop
bugzilla.mozilla.org
(2022-10-27)
多分これが公式リリースのciだと思うけどようわからん