web-dev-qa-db-ja.com

ARM(2019)のChromiumブラウザをコンパイル

私は、Ubuntu 18、16、14で数回アーム用のChromiumをコンパイルしてみましたが、すべて問題があります(ほとんどが古い、既存のものではないパッケージ)。 AMD64向けのビルドは完全に実行されているので、環境は比較的良好です。

私はこれに従いました ページ しかし、それはあまり深く入りません。

私はこれを理解しようとしました 人の質問 しかし、それはかなり時代遅れで、追跡するのが非常に困難です。

現在、私はこれに従って最も成功しています https://www.olimex.com/forum/index.php?topic=4109.

これがinit dockerファイルです:

FROM ubuntu:xenial

RUN apt-get update && \
apt-get -y install build-essential \
                   git \
                   python \
                   gcc-arm-linux-gnueabihf \
                   g++-4.8-multilib-arm-linux-gnueabihf \
                   Sudo

RUN apt-get -y install wget

RUN apt-get install -y python-software-properties \
                   software-properties-common

RUN apt-get update

RUN echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections && \
apt-get install -y ttf-mscorefonts-installer

RUN apt-get install -y gcc-4.8-multilib g++-4.8-multilib

そして、Docker内で実行されるビルドスクリプトを次に示します。

#!/bin/sh

ROOT_DIR=/root
CHROM_DIR="$ROOT_DIR/chromium"

apt-get update

cd "$ROOT_DIR"
mkdir -pv "$CHROM_DIR"
cd "$CHROM_DIR"

git config --global user.name "[USER]" &&
git config --global user.email "[EMAIL]" &&
git config --global core.autocrlf false &&
git config --global core.filemode false &&
git config --global color.ui true &&
[ -d depot_tools ] || git clone https://chromium.googlesource.com/chromium/tools/depot_tools &&
PATH="$PATH:$CHROM_DIR/depot_tools" &&

BUILD_DIR="$CHROM_DIR/buildhost" &&
[ -d "$BUILD_DIR" ] || mkdir -v "$BUILD_DIR" &&
cd "$BUILD_DIR" &&

[ -d src ] || yes | fetch --nohooks --no-history chromium &&
cd src &&
rm -rf out &&

./build/install-build-deps.sh --no-Prompt && 
yes | ./build/install-build-deps.sh --arm &&
./build/linux/sysroot_scripts/install-sysroot.py --Arch=arm &&

mkdir out
mkdir out/arm

gclient sync && gclient runhooks &&

gn gen out/arm --args='is_official_build=true is_debug=false is_component_build=false symbol_level=0 enable_nacl=false blink_symbol_level=0 use_jumbo_build=true target_cpu="arm"'
gclient runhooks
autoninja -C out/arm chrome

これは私がヒットするまでうまくいきます:

[8519/35281] STAMP obj/chrome/browser/resources/settings/unpak.stamp
[8520/35281] ACTION //third_party/blink/public:scaled_resources_100_percent(//build/toolchain/linux:clang_arm)
[8521/35281] ACTION //third_party/openscreen/src/osp/msgs:cddl_gen(//build/toolchain/linux:clang_arm)
FAILED: gen/third_party/openscreen/src/osp/msgs/osp_messages.h gen/third_party/openscreen/src/osp/msgs/osp_messages.cc 
python ../../third_party/openscreen/src/tools/cddl/cddl.py --header third_party/openscreen/src/osp/msgs/osp_messages.h --cc third_party/openscreen/src/osp/msgs/osp_messages.cc --gen-dir gen --log third_party/openscreen/src/osp/msgs/cddl.log ../../third_party/openscreen/src/osp/msgs/osp_messages.cddl
Traceback (most recent call last):
 File "../../third_party/openscreen/src/tools/cddl/cddl.py", line 116, in <module>
main()
File "../../third_party/openscreen/src/tools/cddl/cddl.py", line 37, in main
False, log, args.verbose)
File "../../third_party/openscreen/src/tools/cddl/cddl.py", line 84, in echoAndRunCommand
process = subprocess.Popen(commandArray, stdout=logfile, stderr=logfile)
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 8] Exec format error
[8522/35281] ACTION //third_party/blink/public:scaled_resources_200_percent(//build/toolchain/linux:clang_arm)
[8523/35281] CXX obj/third_party/ots/ots/cff.o
[8524/35281] ACTION //chrome/browser/resources/downloads:build(//build/toolchain/linux:clang_arm)
[8525/35281] ACTION //chrome/browser/resources/extensions:build(//build/toolchain/linux:clang_arm)
[8526/35281] ACTION //chrome/browser/resources/print_preview:build(//build/toolchain/linux:clang_arm)
[8527/35281] ACTION //chrome/browser/resources/settings:build(//build/toolchain/linux:clang_arm)
ninja: build stopped: subcommand failed.

私が読んだことから、これは何かが間違ったアーキテクチャのために/から実行しようとしていることを意味します。

誰かが私を正しい方向に向けてもらえますか?

3
Kc Gibson

Googleのopenscreen作成者のおかげで、これは既知の bug であり、1つの解決策は、ビルドされているchromeバージョンに修正をバックポートするか、78.0.3890.0以降を使用することです。

バックポートするのは簡単だと思いましたが、修正を含むコミットには、ビルドに失敗するopenscreen src構造への変更も含まれています...最後の2つのコミットを比較し、それらを適用することにより、修正を慎重に厳選しました。私のクロムブランチに変更します。

バグで言及されている回避策は、gn引数「enable_opencreen = false」を使用してopenscreenを無効にすることです。

1
AboulFad