用的国产电脑,统信麒麟自带的chromium版本都是83版本,lceda要求超过100版本,低版本没法打开编辑器,只能用客户端版本。都是JS,还整这么多事...
刚开始想着一步到位直接在阿里云香港主机上买高配置的竞价虚拟机,结果居然编译不过,老是报有个东西没安装,试了好几次都不行,本来都计划放弃了的。周末闲着没事,想着家里的12核32GB的x86电脑也不弱了,再来搞一次交叉编译试试。
必要条件是必须有办法有梯子,没梯子,代码都拉不下来。
编译过程参考的步骤,官网有2个网页。但是都太简单了,还有个stackexchange的问答,里面详细一些。
https://chromium.googlesource.com/chromium/src/+/main/docs/linux/build_instructions.md
https://chromium.googlesource.com/chromium/src/+/main/docs/linux/chromium_arm.md
https://unix.stackexchange.com/questions/527627/compile-chromium-browser-for-arm-2019
基本上参考这3个地址就能正常编译了。
这里主要记录下我编译过程:
先配置git和http代理
/usr/bin/git config --global http.proxy http://xxx:xx
/usr/bin/git config --global https.proxy http://xxx:xx
export http_proxy="http://xxx:xx"
export https_proxy="http://xxx:xx"
然后拉工具配置环境
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH="$PATH:$HOME/chromium/depot_tools"
然后拉代码
mkdir ~/chromium && cd ~/chromium
fetch --nohooks --no-history chromium
--no-history能节约好多空间。
然后就开始安装依赖
./build/install-build-deps.sh
这个过程报了个错,看了下是拉谷歌字体的时候用的个Py调用的curl,Py里面没法把环境变量的代理传进去,手工编辑下
vi ./build/linux/install-chromeos-fonts.py
#找到curl的那行,添加
'-x', 'http://192.168.5.221:20171',
改好后的调用如下
subprocess.check_call(['curl', '-x', 'http://192.168.5.221:20171', '-L', url, '-o', tarball])
再执行install-build-deps.sh就好了。
然后再安装arm交叉编译的环境
./build/install-build-deps.sh --arm
./build/linux/sysroot_scripts/install-sysroot.py --arch=arm
./build/linux/sysroot_scripts/install-sysroot.py --arch=arm64
接下来开始配置并编译
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="arm64" chrome_pgo_phase=0'
gclient runhooks
autoninja -C out/arm chrome
我机器编译大概一两个小时,看机器配置,编译完成后,网上很多文章说直接运行chrome就行,但我拷贝到飞腾机器上直接运行报错。后面打包了文件夹内容就正常了。
cd out
tar zcf ./arm.tar.gz --exclude=./arm/obj --exclude=./arm/thinlto-cache --exclude=./arm/clang_x64_v8_arm64 --exclude=./arm/clang_x86_v8_arm --exclude=./arm/gen --exclude=./arm/clang_x64 --exclude=./arm/irt_arm --exclude=./arm/nacl_helper ./arm
里面应该还打包了不少不需要的文件,不过体积大的基本被exclude掉了,拷贝到飞腾机器上解压后运行正常。
但是发现无法播放视频网站的视屏,但播放youtube的是可以的。搜索了下,有人早遇到过了
https://www.cdsy.xyz/computer/programme/compilers/230713/cd44659.html
原因是部分通用的H264 解码codec没编译进去,解决办法就是在生成配置的时候添加2个参数重新编译就好了。
proprietary_codecs = true ffmpeg_branding = “Chrome"
最后编译配置参数为:
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="arm64" chrome_pgo_phase=0 proprietary_codecs=true ffmpeg_branding="Chrome" chrome_pgo_phase=0'
如果想进一步了解,可以查看这些参数的说明,比如:
gn args --list out/arm | grep -C10 ffmpeg_branding
后续如果遇到需要从源码编译什么版本,增加禁用什么功能就可以自己搞定了,不用再看国内浏览器厂商脸色了。