0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cobalt 25.lts を x86_64 Linux と Raspberry Pi 2 向けにビルドしてバイナリサイズを比較する

Last updated at Posted at 2025-07-21

はじめに

Google が開発する軽量クロスプラットフォームアプリケーションフレームワーク Cobalt は、主にスマートテレビやセットトップボックス向けに使用されています。現在は Chromium ベースへの移行が進められていますが、本記事ではその移行前に提供されていたバージョンのひとつ 25.lts.1+ に注目し、Ubuntu Linux (x86_64) と Raspberry Pi 2 (ARM) の両プラットフォームでのビルドを試みます。

目的は、Cobalt のビルド手順の検証と、ビルド後に生成されるバイナリサイズの比較です。Chromium ベースと比較して「軽量」とされる Cobalt の実態を確認します。

まとめ

ビルドして確認したファイルサイズは以下のとおりです。

x86_64 向けの cobalt 実行ファイルは、strip 後でも 64bit バイナリとして わずか 41MB に収まり、Chromium ベースと比較して非常に小さなサイズです。

一方、ARM 向けの libcobalt.socobalt_roader が追加が必要になるが、それを除いて 33MB に収まっており、ChromiumなどのWebブラウザの搭載が難しい組み込み機器向けとして十分に実用的なサイズであることがわかります。

バイナリサイズ比較

プラットフォーム ビルド種別 サイズ(strip 前) サイズ(strip 後)
x86_64 Linux cobalt 実行ファイル 176MB 41MB
Raspberry Pi 2 (ARM) libcobalt.so 148MB 33MB

ファイル形式情報

プラットフォーム ファイル名 file コマンド出力(要約)
x86_64 Linux cobalt ELF 64-bit LSB pie executable, x86-64, dynamically linked
Raspberry Pi 2 (ARM) libcobalt.so ELF 32-bit LSB shared object, ARM, dynamically linked

ビルド環境

本記事では以下の環境で検証を行いました:

uname -a
Linux ubuntu 6.11.0-17-generic #17~24.04.2-Ubuntu SMP PREEMPT_DYNAMIC Mon Jan 20 22:48:29 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
  • OS: Ubuntu 24.04 LTS (x86_64)
  • Cobalt: 25.lts.1+
  • clang バージョン: version 17.0.0
  • Python: 3.12

公式リファレンス

Cobalt のビルド手順については、以下の公式ガイドを参考にしています

1. ビルド準備(共通)

depot_tools の取得

まず Chromium 系のビルドツール depot_tools を取得して PATH に追加します。

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH="$PWD/depot_tools:$PATH"

パッケージのインストール

sudo apt update && sudo apt install -qqy --no-install-recommends \
  bison clang libasound2-dev libgles2-mesa-dev libglib2.0-dev \
  libxcomposite-dev libxi-dev libxrender-dev nasm ninja-build \
  python3-venv

筆者の環境で追加で必要だったパッケージ

sudo apt install python3.12-dev generate-ninja

ccache によるビルド高速化

ビルドの高速化を有効にするために ccache をインストールします。
ビルド高速化はデフォルトで有効になっており、ccache をインストールしない場合は無効にする必要があります。

sudo apt install -qqy --no-install-recommends ccache
ccache --max-size=20G

Node.js のセットアップ(nvm 使用)

export NVM_DIR=~/.nvm
export NODE_VERSION=12.17.0

curl --silent -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

. $NVM_DIR/nvm.sh \
    && nvm install --lts \
    && nvm alias default lts/* \
    && nvm use default

2. ソースコードの取得と環境構築

git clone -b 25.lts.1+ --depth 1 https://github.com/youtube/cobalt.git
cd cobalt
export COBALT_SRC=${PWD}
export PYTHONPATH=${PWD}:${PYTHONPATH}

Python 仮想環境と依存パッケージ

python3 -m venv ~/.virtualenvs/cobalt_dev
source ~/.virtualenvs/cobalt_dev/bin/activate
pip install -r requirements.txt

Git フックの初期化は cobalt の開発が chromium ベースに移ったため実行してはいけない

# 実行不要
pre-commit install -t post-checkout -t pre-commit -t pre-push --allow-missing-config
git checkout -b test2 origin/master

Clang ダウンロード

./starboard/tools/download_clang.sh

${HOME}/starboard-toolchains/x86_64-linux-gnu-clang-chromium-17-init-8029-g27f27d15-3/bin/clang に保存される

3. x86_64 Linux 向けビルドとバイナリサイズ

ビルドコマンド

python cobalt/build/gn.py -c gold -p linux-x64x11
ninja -C out/linux-x64x11_gold cobalt

バイナリ情報の確認

ファイル概要:

$ file ./out/linux-x64x11_gold/cobalt
ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked,
interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0,
with debug_info, not stripped

バイナリサイズの確認:

$ du -h ./out/linux-x64x11_gold/cobalt
176M	./out/linux-x64x11_gold/cobalt

strip 後のバイナリサイズ:

$ strip ./out/linux-x64x11_gold/cobalt
$ du -h ./out/linux-x64x11_gold/cobalt
41M	./out/linux-x64x11_gold/cobalt

Cobaltの実行:

out/linux-x64x11_debug/cobalt

cobalt.gif

実行環境によっては X11 ディスプレイが必要です。

4. Raspberry Pi 2 向けビルドとバイナリサイズ

必要パッケージのインストール:

sudo apt install -qqy --no-install-recommends g++-multilib \
    wget xz-utils libxml2 binutils-aarch64-linux-gnu \
    binutils-arm-linux-gnueabi libglib2.0-dev

ツールチェインの取得:

echo $RASPI_HOME
/home/raiko/raspi_tools
mkdir -p $RASPI_HOME
curl -O https://storage.googleapis.com/cobalt-static-storage-public/cobalt_raspi_tools.tar.bz2
tar xvpf cobalt_raspi_tools.tar.bz2

ビルドコマンド

Cobaltのソースディレクトリのルートに移動する

cd <COBALT_SRC>
export COBALT_SRC=${PWD}
export PYTHONPATH=${PWD}:${PYTHONPATH}
cobalt/build/gn.py -p raspi-2 -C gold
ninja -C out/raspi-2_gold cobalt_install

バイナリ情報の確認

$ file out/raspi-2_gold/libcobalt.so
out/raspi-2_gold/libcobalt.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=d8c6ad5eb501ba10e6044103c86bc18f186cd7d1, with debug_info, not stripped

バイナリサイズ:

$ du -h out/raspi-2_gold/libcobalt.so
148M	out/raspi-2_gold/libcobalt.so

strip 後のファイルサイズ:

$ arm-linux-gnueabi-strip ./out/raspi-2_gold/libcobalt.so
$ du -h out/raspi-2_gold/libcobalt.so
33M	out/raspi-2_gold/libcobalt.so

蛇足

ビルドした Cobalt を Raspberry Pi 2 の仮想環境で動作させようと試みたが残念ながらGPUの問題でうまくいかなかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?