ARTICLES

macOS で Servo をビルドしてみた

2019-06-18

Build 済みの Servo

Servo というのは、Mozilla が開発しているブラウザエンジンです。Rust 製で将来が楽しみなプロダクトです。

以前の記事でも紹介をしているので、概要はそちらをご覧ください。

さて、この Servo を今回はソースコードからビルドしてみます。噂によると、Servo のビルドは大変とのことで、やってみたらやっぱり大変でした。( MacBook 12インチ Retina, 12-inch, 2017 / 1.4 GHz Intel Core i7 / 16 GB 1867 MHz LPDDR3 )

Servo のビルド開始

まずはじめに、ビルドする環境によってエラーが出たり出なかったりしますし、現時点で全てのプロセスを理解しているわけではない「やってみた」系のコンテンツであることを踏まえて閲覧ください。

以下を参考にビルドしていきます。

とにかく、GitHub のリポジトリから、Clone してきましょう。

$ git clone https://github.com/servo/servo.git

続いて virtualenv の環境を整えます。以下を参考にしました。

mach ファイルにもあるように、ビルドファイルは Python 2 でないと現状動作しないようです。

# Check for the current python version as some users (especially on archlinux)
# may not have python 2 installed and their /bin/python binary symlinked to
# python 3.
if sys.version_info >= (3, 0):
    print("mach does not support python 3, please install python 2")
    sys.exit(1)

env 環境を切って以下のようにビルドコマンドを実行してみます。

$ ./mach build --dev

...

warning: build failed, waiting for other jobs to finish...
error: build failed
[Warning] Could not generate notification! Optional Python module 'pyobjc' is not installed.
Build FAILED in 1:01:13

まあ、エラーは出ますよねという感じで、そんなにすんなりいくとは思っていません。 エラーメッセージに沿って追加で必要な作業をしていきます。

以下を実行して pyobjc をインストールします。pyobjc で Objective-C との連携をするのですねきっと。

$ pip install pyobjc

続いて、再びビルドコマンドを実行したものの、またエラーが出ました。

Error running mach:

    ['build', '--dev']

The error occurred in code that was called by the mach command. This is either
a bug in the called code itself or in the way that mach is calling it.

You should consider filing a bug for this issue.

If filing a bug, please include the full output of mach, including this error
message.

The details of the failure are as follows:

Exception: Your system's gstreamer libraries are out of date (we need at least 1.12). If you're unable to install them, let us know by filing a bug!

どうも必要なライブラリやミドルウェアが足りていないようです。servo のリポジトリには etc フォルダがあり、その中に brew でインストールするための Brewfile ファイルが含まれております。それを最初にやるべきでした。

ということで brew で実行します。

$ brew bundle install --file=etc/taskcluster/macos/Brewfile

この Brewfile 中身は、以下のようになっています

brew "autoconf@2.13"
brew "automake"
brew "cmake"
brew "openssl"
brew "pkg-config"
brew "llvm"
brew "yasm"

# For sccache
brew "openssl@1.1"

続いてこちらも。

$ brew bundle install --file=etc/taskcluster/macos/Brewfile-gstreamer

こちらの中身は以下のようになっています。gstreamer 関係で先ほどエラーが出ていたので、こちらだけ入れれば済む人もいるかもしれません。

brew "gnutls"
brew "gstreamer"
brew "gst-plugins-base"
brew "gst-libav"
brew "./etc/taskcluster/macos/Formula/gst-plugins-bad.rb"
brew "gst-plugins-good"
brew "gst-rtsp-server"

いくつか必要な環境変数を定義します。

export OPENSSL_INCLUDE_DIR="$(brew --prefix openssl)/include"
export OPENSSL_LIB_DIR="$(brew --prefix openssl)/lib"

また、以下も実行します。

$ pkg-config gstreamer-1.0 --debug

以下の環境変数も定義

export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"

再度ビルドを実行しましょう。

$ ./mach build --dev

ビルドが成功したら以下を実行します。

$ ./mach run tests/html/about-mozilla.html

about-mozilla.html がウインドウ内で表示されれば、ビルド済みの Servo は無事動いているということになります。ここまでの流れを文にすると少しですが、ビルド時間は結構かかります。あと、メモリも CPU も相当食うので、非力なマシンだとめちゃくちゃ時間がかかりますよ。


ARTICLES


    AUTHOR

    原 一浩 の顔写真

    (はら) 一浩(かずひろ)

    カンソクインダストリーズ代表 / グレーティブ合同会社代表

    1998年に独立し、同年、ウェブデザイン専門のメールメディア DesignWedgeの発行を開始。Webデザイン業の傍ら、海外のWebデザインに関する情報発信を行う。
    雑誌への寄稿多数。主な著書に『はじめてのフロントエンド開発』『プロセスオブウェブデザイン』、『Play framework徹底入門』、『ウェブデザインコーディネートカタログ』など。自社製のWebデザインのクロール&キャプチャシステムvaqumをベースに、様々なリサーチを行っている。Web 検定プロジェクトメンバー

    著作一覧はこちら