webdino / gecko-embedded

Main (meta) repository for Project GEM (Gecko Embedded)
https://gecko-embedded.org
22 stars 2 forks source link

ESR60対応 #60

Closed ashie closed 6 years ago

ashie commented 6 years ago

ESR60に向けた調査を以下のブランチで開始している。

https://github.com/webdino/meta-browser/tree/firefox-60-wip

ざっとビルドは通るようにしたが、まだ動作は確認できていない(起動直後にクラッシュ)

ashie commented 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ではビルド可。

ashie commented 6 years ago

パッチの移植はまだできていない。

ただしWaylandパッチはmozilla-centralにマージされており、追加パッチ無しでビルドできるようになっている。 gecko-embeddedで当てていたWayland版の追加修正も、bugzilla.redhat.comに報告してたやつがbugzilla.mozilla.orgの方に移行してmozilla-centralに入り始めているので、Wayland対応に関してはほぼパッチ無しで対応できる見込み。

ashie commented 6 years ago

ビルドには、これまでの手順に加えて、rustupで最新のRustをインストールする必要がある

meta-rustで対応する方法も検討中だが、入ってるRustのバージョンが追いつかなくなったので保留中。 いずれ追いついたら再開したい。

ashie commented 6 years ago

現在遭遇している問題

makotokato commented 6 years ago

知ってる話書いておきます

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だとビルド通らないコードになってる

ashie commented 6 years ago

情報ありがとうございます!試してみます!

makotokato commented 6 years ago

WebRTC: https://bugzilla.mozilla.org/show_bug.cgi?id=1433725

ashie commented 6 years ago

gcc-5.xだと多分armの生成コードの問題で色々問題あるので、4.9か6.4以降くらいじゃないと多分動かないです

確かに、gcc-4.9で動くバリナリが作成できることを確認できました。 ありがとうござます!

Yoctoの場合はYoctoで導入するgccも入れ替える必要があるので、手順をまとめる必要がある。

ashie commented 6 years ago

魚拓

wayland-screenshot

ashie commented 6 years ago

Yoctoの場合はYoctoで導入するgccも入れ替える必要があるので、手順をまとめる必要がある。

現状は以下の手順(レシピを直接変更しなくて済むようにしたい):

-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 \

ashie commented 6 years ago

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でどう汎化させてレシピに落とし込むかというところが悩みどころ。

以下、関連箇所のメモ:

https://dxr.mozilla.org/mozilla-central/rev/0d806b3230fe4767fa70cdee57db87d1e9a5ba49/old-configure.in#4141:

BINDGEN_SYSTEM_FLAGS="$_BINDGEN_CFLAGS $NSPR_CFLAGS $NSS_CFLAGS $MOZ_PIXMAN_CFLAGS $MOZ_CAIRO_CFLAGS"
AC_SUBST_TOML_LIST(BINDGEN_SYSTEM_FLAGS)

https://dxr.mozilla.org/mozilla-central/rev/0d806b3230fe4767fa70cdee57db87d1e9a5ba49/build/moz.configure/toolchain.configure#1070

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)

https://dxr.mozilla.org/mozilla-central/rev/0d806b3230fe4767fa70cdee57db87d1e9a5ba49/layout/style/bindgen.toml.in#3

[build]
args = [
    @BINDGEN_SYSTEM_FLAGS@
]
ashie commented 6 years ago

gcc-5.xだと多分armの生成コードの問題で色々問題あるので、4.9か6.4以降くらいじゃないと多分動かないです

Yoctoのバージョン毎に使えるgccのバージョンを調査してみた:

ashie commented 6 years ago
  • configure時のRustのtargetの検出でサポートしていないtargetが検出される
    • rustc --print target-listrustup target listの不一致が関係していそう

状況としては以下のような感じ

RZ/G1Mの場合armv7-unknown-linux-gnueabihfが引っかかって欲しいところだけど、検出コードを見るとraw_oslinux-gnueabiの部分)のhfの有無の違いでヒットしていないようだ。ビルドオプションには-mfloat=hardが付いているので、指定ターゲットも arm-poky-linux-gnueabihfになっていて欲しいところだが...

関連コード

ashie commented 6 years ago

armv5te-unknown-linux-gnueabiは割と最近、以下のPRで追加されたようだ。

これがなければ、arm-unknown-linux-gnueabiがヒットしてconfigureは一応通る。 とはいえ上記のような状況(検出コードのせいというよりは、Yoctoで与えているターゲット名の方が悪い)なので、これのせいとは言い難い。

ashie commented 6 years ago

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が必要になる。以下から最新版をダウンロードするのが無難

ashie commented 6 years ago

生成済みのjsonをfirefox-60-wipブランチに入れた(gnやninja不要)

ashie commented 6 years ago

WebRTC on Linux/ARM関連Bug

dynamis commented 6 years ago

GCC を 4.9 に落とすのではなく逆に最新の GCC にしていく方向を検討する場合のためのメモ:

dynamis commented 6 years ago

GCC 4.9 は捨てて GCC 6 移行にしたいという bug は立っているが Hazard builds が GCC 6 に移行できるまで無理といって今のところはなしは止まっている。GCC 4.9 のサポートは ESR 的には ESR60 が最後になるのかも?バージョンアップ毎に移行をせずに済むと良いのだが。。。

ashie commented 6 years ago

OpenMAXパッチが動作するようになったのでレシピに投入した

せっかくmozilla-centralに追いついたのでパッチの整理はもう少し進めたいが、そのへんはBuzgillaの方で

ashie commented 6 years ago

https://github.com/webdino/meta-browser/commit/be2dacda5c7abcf7ba5b67ae68b3ec34c13fb321

ashie commented 6 years ago
  • 間違ってたのでさらに修正

https://github.com/webdino/meta-browser/commit/be2dacda5c7abcf7ba5b67ae68b3ec34c13fb321

これである程度は動くのだが、しばらく使ってみると、動画をいくつも再生しているとやがて再生が止まるとまるという問題があることが発覚。まだ何かおかしそう。

ashie commented 6 years ago

ビルド手順の検証がてらに、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のビルドで引っかかる(誠さんの修正が入れば解消する)。

プロプライエタリドライバのダウンロードは自動化するわけにはいかないので、ちょっと面倒だけどここは手動でやってもらわないといけない。

ashie commented 6 years ago

教えてもらった方針でStyloをビルドできることは確認できたが、Yoctoでどう汎化させてレシピに落とし込むかというところが悩みどころ。

一応、以下でStyloのビルドも通るようにしてある(まだやり方が雑だが)

PACKAGECONFIG_append_pn-firefox = " stylo "
ashie commented 6 years ago

名前の付け方しくじったな...対象Geckoバージョンはbranchかtagで切り分けておくべきだった。 後でリポジトリ作り直す。

ashie commented 6 years ago

https://github.com/webdino/meta-browser/commit/be2dacda5c7abcf7ba5b67ae68b3ec34c13fb321

これである程度は動くのだが、しばらく使ってみると、動画をいくつも再生しているとやがて再生が止まるとまるという問題があることが発覚。まだ何かおかしそう。

修正した

https://github.com/webdino/meta-browser/commit/b8de3b0344567a8750214aa323b24f1c0b5f40b0

ashie commented 6 years ago

名前の付け方しくじったな...対象Geckoバージョンはbranchかtagで切り分けておくべきだった。 後でリポジトリ作り直す。

名前変えた

GitHubって割とカジュアルにリポジトリのリネームできるのね。 単にリネームすると、以前の名前でアクセスしてもリダイレクトされる。

ashie commented 6 years ago

meta-rustで対応する方法も検討中だが、入ってるRustのバージョンが追いつかなくなったので保留中。 いずれ追いついたら再開したい。

追いついたようだけど、そのままではビルドが通らなかったので試行錯誤中。 Upstreamとのやり取りは以下:

https://github.com/meta-rust/meta-rust/pull/191

ashie commented 6 years ago

EGLパッチもFirefox 60向けに更新したものをレシピに投入しておいた。

https://github.com/webdino/meta-browser/blob/firefox-60-wip/recipes-mozilla/firefox/firefox/wayland/egl/0003-Use-wl_egl_window-as-a-native-EGL-window-on-Wayland.patch

もう少し改善したいところはあるが、その辺はBugzillaの方で。

ちなみにFirefox 52の頃はGDK側と描画処理が取り合っていてワークアラウンドを入れないとまともに描画ができていなかったので、GdkGLContextに対応したGLContextProviderを新規に作る形で根本的に書き直さないといけないと考えていた。が、Firefox 60ではGecko側で独自のwl_surfaceを作るようになってGDK側と描画を取り合うことがなくなったので、本パッチのようにGLContextProviderEGLをほぼそのまま使う形で行けるようになった。

ashie commented 6 years ago

教えてもらった方針でStyloをビルドできることは確認できたが、Yoctoでどう汎化させてレシピに落とし込むかというところが悩みどころ。

一応、以下でStyloのビルドも通るようにしてある(まだやり方が雑だが)

PACKAGECONFIG_append_pn-firefox = " stylo "

core-image-westonをスクラッチからビルドするときにエラーになる問題が発覚したので、コメントアウトした。Styloをビルドしたい場合は該当箇所をアンコメントし、一度Firefox抜きでcore-image-westonをビルドして、Firefoxをビルドする必要がある。

meta-rustを導入すればBINDGEN_CFLAGSを指定せずに済む算段はついているので、meta-rustでのビルド手順を整備できたら該当箇所は完全に削除する。

cosmo0920 commented 6 years ago

meta-rustを導入すればBINDGEN_CFLAGSを指定せずに済む算段はついているので、meta-rustでのビルド手順を整備できたら該当箇所は完全に削除する。

と思ったら、そんなことはなかったのでそのことについて調査中です。

cosmo0920 commented 6 years ago

こっちにも記しておきます。 https://github.com/webdino/meta-browser/commit/8487ebca6b7ee74b71f768b621c869563e09d377 にてスクラッチからの bitbake core-image-weston を動作させることが可能になりました。Rustについてはmeta-rustがきちんと使えているかどうかは調査中です。

cosmo0920 commented 6 years ago

meta-rustについても https://github.com/webdino/meta-browser/tree/firefox-60-wip-with-meta-rust ブランチにてビルドに使用できることを確認済み。このブランチではrustupのインストールが不要になった。

ashie commented 6 years ago

別件でlibrsvgのクロスビルドの方法を調べていたら、Rustのtarget指定に関するドキュメントが見つかった。

cosmo0920 commented 6 years ago

60ESRのソースが公開されたので、作業ブランチを firefox-60esr に移動しました。

ashie commented 6 years ago

EGLパッチもFirefox 60向けに更新したものをレシピに投入しておいた。

https://github.com/webdino/meta-browser/blob/firefox-60-wip/recipes-mozilla/firefox/firefox/wayland/egl/0003-Use-wl_egl_window-as-a-native-EGL-window-on-Wayland.patch

もう少し改善したいところはあるが、その辺はBugzillaの方で。

以下にて進行中。

https://bugzilla.mozilla.org/show_bug.cgi?id=1438144

EGLパッチ自体はほぼそのまま本体に入った。 あとは同期描画でのフリーズ問題を修正したいところ。

ashie commented 6 years ago

ESR60対応のブランチとビルド手順は公開済み:

https://github.com/webdino/meta-browser/wiki/Firefox-ESR60%E3%83%93%E3%83%AB%E3%83%89%E6%89%8B%E9%A0%86%EF%BC%88iWave-RainboW-G20D-Q7-Yocto-2.0%EF%BC%89

課題は残っているが、ESR60のビルド・動作は一応確認できているので、本issueはそろそろ閉じて個別のissueに分けた方が良さそう。

cosmo0920 commented 6 years ago

こちらのissueは閉じます。 他の問題は個別にissueに切り出します。