Cross-compile chromium/Arm32bit

chromium

chromium クロスコンパイル(Linux arm32 実行ファイルをビルド)

chromium の Linux ARM 32bit 実行ファイルをビルドします。
Chromium Docs の ここ(Recipe2) を参照します。ビルド時間は通常のLinuxデスクトップ用のビルドより長くなります。ビルドのカウントが90000を超えているため、セルフコンパイルと比較して概ね2~3倍を見込んでおけばよいと思います。また、記事を読むと分かりますが i386(32bit) ライブラリをインストールしています。実際はビルド中にエラーとなって、都度インストールしましたが予め冒頭でインストールする手順として公開します。

なお、この記事の内容は、ビルドが成功していますが、動作確認ができていません。ARM 32bit 環境が入手/構築できたら別途報告したいと思います。

2023/08/19
arm 32bit 版のラズベリーパイが入手できたので動作確認しています。この記事の下にスクリーンショットを掲載しています。

chromium build用ディストリビューション

chromium build 環境は Ubuntu 20.04 (x64: AMD64) を使用しています。当初は Ubuntu 22.04を使用したのですが、32bitライブラリがサポートされなくなっていたため、最後までビルドできませんでした。

depot_tools セットアップからソースコード取得まで

ソースコード取得までは通常のビルド手順と同様です。 chromium build instructions の install を参照してそのまま構築します。こちらの記事では手順の掲載を省略します。

ツールチェーンと arm32 sysroot インストール

Google Docs の手順に従ってツールチェーンと sysroot をインストールします。

$ cd ~/chromium/src
$ ./build/install-build-deps.sh
$ ./build/linux/sysroot_scripts/install-sysroot.py --arch=arm

ARM32bit クロスコンパイルで使用するライブラリ

chromium arm32 cross コンパイルを実行すると以下のライブラリが必要とされるため、予めインストールしておきます。

$ sudo apt-get install g++-arm-linux-gnueabihf
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install libglib2.0-0:i386
$ sudo apt-get install libnss3:i386
$ sudo apt-get install libexpat1:i386
$ sudo apt-get install libx11-6:i386
$ sudo apt-get install libxcomposite1:i386
$ sudo apt-get install libxdamage1:i386
$ sudo apt-get install libxext6:i386
$ sudo apt-get install libxfixes3:i386
$ sudo apt-get install libxrandr2:i386
$ sudo apt-get install libxtst6:i386
$ sudo apt-get install libgbm1:i386
$ sudo apt-get install libasound2:i386
$ sudo apt-get install libxkbcommon0:i386
$ sudo apt-get install libpango-1.0-0:i386
$ sudo apt-get install libdbus-1-3:i386

chromium arm32 cofiguration

ARM (armhf) Linux 用として configuration します。

$ gn gen out/arm --args='target_os="linux" target_cpu="arm"'

chromium build と arm32 build 結果

chromium cross compile でも通常時と同様に autoninja を使用します。

$ autoninja -C out/arm chrome

ビルド終了後 arm 32bit バイナリであることを確認します。

$ ~/chromium/src/out/arm
$ arm-linux-gnueabihf-objdump -f ./chrome

./chrome:     file format elf32-littlearm
architecture: armv7, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x015dc551

ラズパイ (Raspberry Pi Model B v1.1) 動作

ラズベリーパイ ARM32bit 版が入手できたので動作確認しました。オリジナルのラズパイ OS もデフォルトのブラウザは chromium なので、紛らわしいのですがここで公開しているスクリーンショットはビルドした chromium です。
arm のクロスコンパイルは常には動作確認していないと言っているようです。右のterminalで少しわかりますが色々とエラーが発生しますがとりあえず表示しました。
また、デバッグシンボル等を含んでいる状態が主な理由と思いますが、動作がかなり遅い状態でした。