为 ARM 编译 Chromium 浏览器 (2019)

为 ARM 编译 Chromium 浏览器 (2019)

我已经尝试在 Ubuntu 18、16 和 14 上多次尝试为 arm 编译 Chromium,但它们都有自己的问题(大部分是过时的、不存在的软件包)。 amd64 的构建已经完美运行,所以我知道环境相对不错。

我一直在关注这个但它并没有深入探讨。

我尝试过理解这一点人的问题但它已经非常过时并且非常难以遵循。

目前我一直在遵循这一点并取得了最大的成功https://www.olimex.com/forum/index.php?topic=4109.0

这是初始化 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.

根据我的阅读,这意味着某些东西正在尝试从错误的体系结构运行。

有人可以指出我正确的方向吗?

答案1

感谢 Google 的 openscreen 作者,这是一个已知的漏洞一种解决方案是将修复程序反向移植到正在构建的 chromium 版本或使用 78.0.3890.0 或更高版本。

我认为向后移植很容易,但是包含修复程序的提交还包含对 openscreen src 结构的更改,这些更改导致构建失败...我通过比较最后两个提交来仔细挑选修复程序,然后应用这些修复程序我的铬分支的变化。

该错误中提到的解决方法是使用 gn args“enable_opencreen=false”禁用 openscreen。

相关内容