Linux(Debian/Ubuntu)でFirefoxを自分でコンパイルする方法

Linux(Debian/Ubuntu)でFirefoxをコンパイルする方法

Linuxではあらゆるパッケージを簡単にコンパイル可能です。
通常ですと自力でパッケージをコンパイルする意味は薄いのですが
ブラウザの場合ですと、使用頻度も多く
また自力でのコンパイルによる高速化の恩恵も大きいので
コンパイルしてみることにしました。

同じようなことをする人のために、簡潔にですが手順をメモしておきます。
(ただし環境はDebianなのでUbuntuではひと工夫が必要な可能性あり)

まずは依存関係をインストール

aptではコマンド一発でビルドに必要な環境を構築できます。

sudo apt build-dep firefox-esr

これだけでビルド環境の構築は完了。楽々ですね。

ソースコードをダウンロード

これもaptならコマンド一発でダウンロードが可能です。
Ubuntuですと初期状態では
ソースコード用のリポジトリが無効化されているので
ソフトウェアとアップデートの設定画面からソースコード用のパッケージを有効化しておきましょう。
※ パスに日本語が入っているとコンパイルに失敗するので注意
 例:ドキュメント、デスクトップ

mkdir firefox
cd firefox
apt source firefox-esr

容量が大きいので注意

いよいよコンパイル

先程ダウンロードしたfirefox-esr○○の中身を
~/home/firefoxに移動させます。

何で?

パスが長すぎるとコンパイルに失敗するので。
パスに日本語があっても駄目で、長すぎてもだめ。

仮にユーザー名がめっちゃ長かった場合にはコンパイルに失敗するかもしれません。
その場合にはhome以下ではなく別のフォルダに移動させるか
今後の不便も考えていっそのことユーザー名自体を変更してしましましょう。

微妙に足りない依存関係を解決しておく

Debian環境の場合
apt build-depでは解決しきれない依存関係があるので
追加でいくつかのパッケージをインストールしておきます。

sudo apt install libgconf2-dev cbindgen nasm alien

コンパイル時に最適化(高速化)をしたい場合

コンパイル時のオプションは
browser/config/mozconfigを編集することで設定する。

例えば、最適化用のオプションを盛り盛りにしたい場合には

ac_add_options --enable-optimize=-Ofast -march=native

clangでコンパイルしたい場合には

CC="/usr/bin/clang"
CXX="/usr/bin/clang++"

のように追記しておく(安定感はなくなるので注意)

詳細は公式を参照
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Configuring_Build_Options

あとはmakeを打ち込むだけ

ここまで完了したら

make

と打ち込めばビルドが始まります。
完了までだいたい2時間程度はかかるので気長に待ちましょう。

ビルドが終わったら
今度はdebパッケージに変換する作業。

./mach package
cd ./obj-x86_64-pc-linux-gnu/dist
sudo alien -d ./firefox-67.0.2.en-US.linux-x86_64.tar.bz2

あとはインストールするだけ

sudo apt install ./*.deb