Closed ashie closed 6 years ago
ビルドには、これまでの手順に加えて、rustupで最新のRustをインストールする必要がある
$ curl https://sh.rustup.rs -sSf | sh
$ rustup target add armv7-unknown-linux-gnueabihf
$ echo PATH=\"\$HOME/.cargo/bin:\$PATH\" >> ~/.bashrc
あとgcc-4.9以上が必要。Ubuntu-14.04だとつらいかも。Ubuntu-16.04ではビルド可。
パッチの移植はまだできていない。
ただしWaylandパッチはmozilla-centralにマージされており、追加パッチ無しでビルドできるようになっている。 gecko-embeddedで当てていたWayland版の追加修正も、bugzilla.redhat.comに報告してたやつがbugzilla.mozilla.orgの方に移行してmozilla-centralに入り始めているので、Wayland対応に関してはほぼパッチ無しで対応できる見込み。
ビルドには、これまでの手順に加えて、rustupで最新のRustをインストールする必要がある
meta-rustで対応する方法も検討中だが、入ってるRustのバージョンが追いつかなくなったので保留中。 いずれ追いついたら再開したい。
現在遭遇している問題
rustc --print target-list
とrustup target list
の不一致が関係していそう--enable-release
が無いと、--disable-gold
としていてもgoldリンカーが使われる
--disable-stylo
で保留中--disable-webrtc
で保留中--disable-av1
で保留中#0 0x4ae1294c in raise (sig=11) at ../sysdeps/unix/sysv/linux/pt-raise.c:36
36 return INLINE_SYSCALL (tgkill, 3, pid, THREAD_GETMEM (THREAD_SELF, tid),
(gdb) where
#0 0x4ae1294c in raise (sig=11) at ../sysdeps/unix/sysv/linux/pt-raise.c:36
#1 0xb58dd78c in nsProfileLock::FatalSignalHandler(int, siginfo_t*, void*) () from /usr/lib/firefox/libxul.so
#2 0xb58dd78c in nsProfileLock::FatalSignalHandler(int, siginfo_t*, void*) () from /usr/lib/firefox/libxul.so
#3 0xb58dd78c in nsProfileLock::FatalSignalHandler(int, siginfo_t*, void*) () from /usr/lib/firefox/libxul.so
#4 0xb58dd78c in nsProfileLock::FatalSignalHandler(int, siginfo_t*, void*) () from /usr/lib/firefox/libxul.so
#5 0xb58dd78c in nsProfileLock::FatalSignalHandler(int, siginfo_t*, void*) () from /usr/lib/firefox/libxul.so
...(以下延々同じ)
知ってる話書いておきます
60の段階だと--disable-styloは有効ですが、将来的にはstyloオフにするオプション無くします。もしStyloをビルドするのであれば、こんな感じ(gcc-4.9.3を使ってるの例) で.mozconfigにBINDGEN_CFLAGSを指定してください (クロスビルドは必須)
export BINDGEN_CFLAGS="--target=arm-linux-gnueabihf -I/usr/arm-linux-gnueabihf/include/c++/4.9.3 -I/usr/arm-linux-gnueabihf/include/c++/4.9.3/arm-linux-gnueabihf -I/usr/lib/llvm-3.9/lib/clang/3.9.1/include"
gcc-5.xだと多分armの生成コードの問題で色々問題あるので、4.9か6.4以降くらいじゃないと多分動かないです
av1はnightlyビルドだけなので、stableチャンネルだとデフォルトでビルドされないはず。armだとビルドする設定にはなってるけど、あれビルド通らないです (Makefile.inでアセンブラコード生成するコード書き忘れてる)
webrtcのコードはGYPからGNに移行した段階で壊れてるのですが、というかそもそも59くらいからLinux/armだとビルド通らないコードになってる
情報ありがとうございます!試してみます!
gcc-5.xだと多分armの生成コードの問題で色々問題あるので、4.9か6.4以降くらいじゃないと多分動かないです
確かに、gcc-4.9で動くバリナリが作成できることを確認できました。 ありがとうござます!
Yoctoの場合はYoctoで導入するgccも入れ替える必要があるので、手順をまとめる必要がある。
魚拓
Yoctoの場合はYoctoで導入するgccも入れ替える必要があるので、手順をまとめる必要がある。
現状は以下の手順(レシピを直接変更しなくて済むようにしたい):
(for Ubuntu-16.04)
$ sudo apt-get install g++-4.9
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
$ sudo rm /usr/bin/cpp
$ sudo update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-5 10
$ sudo update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-4.9 20
$ sudo update-alternatives --set cc /usr/bin/gcc
$ sudo update-alternatives --set c++ /usr/bin/g++
diff --git a/meta-rzg1/conf/machine/include/rzg-providers.inc b/meta-rzg1/conf/machine/include/rzg-providers.inc
index b5d6993..83f0e40 100644
--- a/meta-rzg1/conf/machine/include/rzg-providers.inc
+++ b/meta-rzg1/conf/machine/include/rzg-providers.inc
@@ -6,4 +6,4 @@
#PREFERRED_VERSION_gcc-crosssdk-initial = "linaro-5.2"
#PREFERRED_VERSION_gcc-crosssdk-intermediate = "linaro-5.2"
#PREFERRED_VERSION_gcc-cross-canadian-${TRANSLATED_TARGET_ARCH} = "linaro-5.2"
-GCCVERSION = "linaro-5.2"
+GCCVERSION = "linaro-4.9"
meta-linaroを以下のように変更
diff --git a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9.inc b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9.inc
index 852a316..d3b30bb 100644
--- a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9.inc
+++ b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9.inc
@@ -8,7 +8,7 @@ BINV = "4.9.4"
FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/gcc-${PV}' ], d)}"
-SRC_URI = "https://releases.linaro.org/${MMYY}/components/toolchain/gcc-linaro/${BASEPV}/gcc-${PV}-${RELEASE}.tar.xz \ +SRC_URI = "https://releases.linaro.org/archive/${MMYY}/components/toolchain/gcc-linaro/${BASEPV}/gcc-${PV}-${RELEASE}.tar.xz \ file://0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch \ file://0002-uclibc-conf.patch \ file://0003-gcc-uclibc-locale-ctype_touplow_t.patch \
60の段階だと--disable-styloは有効ですが、将来的にはstyloオフにするオプション無くします。もしStyloをビルドするのであれば、こんな感じ(gcc-4.9.3を使ってるの例) で.mozconfigにBINDGEN_CFLAGSを指定してください (クロスビルドは必須) export BINDGEN_CFLAGS="--target=arm-linux-gnueabihf -I/usr/arm-linux-gnueabihf/include/c++/4.9.3 -I/usr/arm-linux-gnueabihf/include/c++/4.9.3/arm-linux-gnueabihf -I/usr/lib/llvm-3.9/lib/clang/3.9.1/include"
教えてもらった方針でStyloをビルドできることは確認できたが、Yoctoでどう汎化させてレシピに落とし込むかというところが悩みどころ。
以下、関連箇所のメモ:
BINDGEN_SYSTEM_FLAGS="$_BINDGEN_CFLAGS $NSPR_CFLAGS $NSS_CFLAGS $MOZ_PIXMAN_CFLAGS $MOZ_CAIRO_CFLAGS"
AC_SUBST_TOML_LIST(BINDGEN_SYSTEM_FLAGS)
option(env='BINDGEN_CFLAGS',
nargs=1,
default=bindgen_cflags_defaults,
help='Options bindgen should pass to the C/C++ parser')
@depends('BINDGEN_CFLAGS')
@checking('bindgen cflags', lambda s: s if s else 'no')
def bindgen_cflags(value):
if value and len(value):
return value[0].split()
add_old_configure_assignment('_BINDGEN_CFLAGS', bindgen_cflags)
[build]
args = [
@BINDGEN_SYSTEM_FLAGS@
]
gcc-5.xだと多分armの生成コードの問題で色々問題あるので、4.9か6.4以降くらいじゃないと多分動かないです
Yoctoのバージョン毎に使えるgccのバージョンを調査してみた:
- configure時のRustのtargetの検出でサポートしていないtargetが検出される
rustc --print target-list
とrustup target list
の不一致が関係していそう
状況としては以下のような感じ
arm-poky-linux-gnueabi
armv5te-unknown-linux-gnueabi
RZ/G1Mの場合armv7-unknown-linux-gnueabihf
が引っかかって欲しいところだけど、検出コードを見るとraw_os
(linux-gnueabi
の部分)のhf
の有無の違いでヒットしていないようだ。ビルドオプションには-mfloat=hard
が付いているので、指定ターゲットも arm-poky-linux-gnueabihf
になっていて欲しいところだが...
関連コード
if rustc_target is None:
rustc_target = rust_supported_targets.per_raw_os.get(
(host_or_target.cpu, host_or_target.endianness,
host_or_target_raw_os))
armv5te-unknown-linux-gnueabi
は割と最近、以下のPRで追加されたようだ。
これがなければ、arm-unknown-linux-gnueabi
がヒットしてconfigureは一応通る。
とはいえ上記のような状況(検出コードのせいというよりは、Yoctoで与えているターゲット名の方が悪い)なので、これのせいとは言い難い。
webrtcのコードはGYPからGNに移行した段階で壊れてるのですが、というかそもそも59くらいからLinux/armだとビルド通らないコードになってる
GNの対応は以下で行われたようだ。
media/webrtc/gn-configs/に各ターゲット向けの設定があるが、ここにLinux/ARMのターゲットがないためにビルドできないようだ。ここのファイルの生成は
$ ./mach build-backend -b GnConfigGen
で行い、media/webrtc/trunk/gn-output/に生成されたjsonファイルをmedia/webrtc/gn-configs/に置いて
$ ./mach build-backend -b GnMozbuildWriter
でmoz.buildを生成し直すと、Linux/ARM向けにもビルドできるようになる。
ただし、GnConfigGenの際にgnコマンドが必要になる。 gnコマンドは以下のスクリプトでビルドできる
ビルドの際には新しめのninjaが必要になる。以下から最新版をダウンロードするのが無難
生成済みのjsonをfirefox-60-wipブランチに入れた(gnやninja不要)
WebRTC on Linux/ARM関連Bug
GCC を 4.9 に落とすのではなく逆に最新の GCC にしていく方向を検討する場合のためのメモ:
GCC 4.9 は捨てて GCC 6 移行にしたいという bug は立っているが Hazard builds が GCC 6 に移行できるまで無理といって今のところはなしは止まっている。GCC 4.9 のサポートは ESR 的には ESR60 が最後になるのかも?バージョンアップ毎に移行をせずに済むと良いのだが。。。
OpenMAXパッチが動作するようになったのでレシピに投入した
せっかくmozilla-centralに追いついたのでパッチの整理はもう少し進めたいが、そのへんはBuzgillaの方で
- 間違ってたのでさらに修正
https://github.com/webdino/meta-browser/commit/be2dacda5c7abcf7ba5b67ae68b3ec34c13fb321
これである程度は動くのだが、しばらく使ってみると、動画をいくつも再生しているとやがて再生が止まるとまるという問題があることが発覚。まだ何かおかしそう。
ビルド手順の検証がてらに、Vagrant Boxを作ってみている
VagrantとVirtualBoxが入っている環境なら、以下でビルドまでいけると思う。
ホスト側:
$ vagrant plugin install vagrant-disksize
$ vagrant init ashie/renesas-gecko-dev
$ vagrant up
$ vagrant ssh
ゲスト側:
$ cd rzg1-bsp
(プロプライエタリドライバをコピー)
$ source poky/oe-init-build-env
$ bitbake core-image-weston
ただし、今は取得するFirefoxのリポジトリがgecko-devのmasterに向いているので、その時の状況次第ではビルドに失敗することもあると思う。実際、これを書いている時点ではANGLEのビルドで引っかかる(誠さんの修正が入れば解消する)。
プロプライエタリドライバのダウンロードは自動化するわけにはいかないので、ちょっと面倒だけどここは手動でやってもらわないといけない。
教えてもらった方針でStyloをビルドできることは確認できたが、Yoctoでどう汎化させてレシピに落とし込むかというところが悩みどころ。
一応、以下でStyloのビルドも通るようにしてある(まだやり方が雑だが)
PACKAGECONFIG_append_pn-firefox = " stylo "
名前の付け方しくじったな...対象Geckoバージョンはbranchかtagで切り分けておくべきだった。 後でリポジトリ作り直す。
https://github.com/webdino/meta-browser/commit/be2dacda5c7abcf7ba5b67ae68b3ec34c13fb321
これである程度は動くのだが、しばらく使ってみると、動画をいくつも再生しているとやがて再生が止まるとまるという問題があることが発覚。まだ何かおかしそう。
修正した
https://github.com/webdino/meta-browser/commit/b8de3b0344567a8750214aa323b24f1c0b5f40b0
名前の付け方しくじったな...対象Geckoバージョンはbranchかtagで切り分けておくべきだった。 後でリポジトリ作り直す。
名前変えた
GitHubって割とカジュアルにリポジトリのリネームできるのね。 単にリネームすると、以前の名前でアクセスしてもリダイレクトされる。
meta-rustで対応する方法も検討中だが、入ってるRustのバージョンが追いつかなくなったので保留中。 いずれ追いついたら再開したい。
追いついたようだけど、そのままではビルドが通らなかったので試行錯誤中。 Upstreamとのやり取りは以下:
EGLパッチもFirefox 60向けに更新したものをレシピに投入しておいた。
もう少し改善したいところはあるが、その辺はBugzillaの方で。
ちなみにFirefox 52の頃はGDK側と描画処理が取り合っていてワークアラウンドを入れないとまともに描画ができていなかったので、GdkGLContextに対応したGLContextProviderを新規に作る形で根本的に書き直さないといけないと考えていた。が、Firefox 60ではGecko側で独自のwl_surfaceを作るようになってGDK側と描画を取り合うことがなくなったので、本パッチのようにGLContextProviderEGLをほぼそのまま使う形で行けるようになった。
教えてもらった方針でStyloをビルドできることは確認できたが、Yoctoでどう汎化させてレシピに落とし込むかというところが悩みどころ。
一応、以下でStyloのビルドも通るようにしてある(まだやり方が雑だが)
PACKAGECONFIG_append_pn-firefox = " stylo "
core-image-westonをスクラッチからビルドするときにエラーになる問題が発覚したので、コメントアウトした。Styloをビルドしたい場合は該当箇所をアンコメントし、一度Firefox抜きでcore-image-westonをビルドして、Firefoxをビルドする必要がある。
meta-rustを導入すればBINDGEN_CFLAGS
を指定せずに済む算段はついているので、meta-rustでのビルド手順を整備できたら該当箇所は完全に削除する。
meta-rustを導入すればBINDGEN_CFLAGSを指定せずに済む算段はついているので、meta-rustでのビルド手順を整備できたら該当箇所は完全に削除する。
と思ったら、そんなことはなかったのでそのことについて調査中です。
こっちにも記しておきます。
https://github.com/webdino/meta-browser/commit/8487ebca6b7ee74b71f768b621c869563e09d377 にてスクラッチからの bitbake core-image-weston
を動作させることが可能になりました。Rustについてはmeta-rustがきちんと使えているかどうかは調査中です。
meta-rustについても https://github.com/webdino/meta-browser/tree/firefox-60-wip-with-meta-rust ブランチにてビルドに使用できることを確認済み。このブランチではrustupのインストールが不要になった。
別件でlibrsvgのクロスビルドの方法を調べていたら、Rustのtarget指定に関するドキュメントが見つかった。
60ESRのソースが公開されたので、作業ブランチを firefox-60esr
に移動しました。
EGLパッチもFirefox 60向けに更新したものをレシピに投入しておいた。
もう少し改善したいところはあるが、その辺はBugzillaの方で。
以下にて進行中。
https://bugzilla.mozilla.org/show_bug.cgi?id=1438144
EGLパッチ自体はほぼそのまま本体に入った。 あとは同期描画でのフリーズ問題を修正したいところ。
ESR60対応のブランチとビルド手順は公開済み:
課題は残っているが、ESR60のビルド・動作は一応確認できているので、本issueはそろそろ閉じて個別のissueに分けた方が良さそう。
こちらのissueは閉じます。 他の問題は個別にissueに切り出します。
ESR60に向けた調査を以下のブランチで開始している。
https://github.com/webdino/meta-browser/tree/firefox-60-wip
ざっとビルドは通るようにしたが、まだ動作は確認できていない(起動直後にクラッシュ)