前段时间编译了win版本,最近捣鼓一下Ubuntu版本。
配置网络,Ubuntu在网络配置填写了代理,在终端还是要输入
set http_proxy=xxxx:xx
set https_proxy=xxxx:xx
这样避免大部分的git代码下载
为了减少下载代码和避免git那个几G内存的坑,我直接将windows下的版本复制了一份,这也为后面埋下了坑。
根据文档需求,创建了这个文件夹结构,三个子文件夹automate, chromium_git, depot_tools和一个sh文件update.sh,一个py文件 Install-build-deps.py
/media/xxx/linux/code/ (后面简化为~/code方便阅读,实际上~/代表用户根目录,在这里~=/media/xxx/linux。)
automate/
automate-git.py <-- CEF build script
chromium_git/
update.sh <-- Bootstrap script for automate-git.py
depot_tools/ <-- Chromium build tools
Install-build-deps.py <—install deps
先拉automate-git.py,为了方便,我直接git先下一份cef,然后在cef/tools/automate文件夹找到它。将它复制到~/code/automate/下。
1. 安装python3等,下载install-build-deps.py(抄书)
cd ~/code
sudo apt-get install curl file lsb-release procps python3 python3-pip
curl 'https://chromium.googlesource.com/chromium/src/+/main/build/install-build-deps.py?format=TEXT' | base64 -d > install-build-deps.py
sudo python3 ./install-build-deps.py --no-arm --no-chromeos-fonts --no-nacl
python3 -m pip install dataclasses importlib_metadata
2.编写update.sh
#!/bin/bash
python3 ./automate/automate-git.py —download-dir=~/code/chromium_git —depot-tool-dir=~/code/depot_tools —no-distrib —no-build —branch=6045
运行update.sh之后就得到
chromium_git/
cef/
chromium/
cef/
3.在~/code/chromium_git目录下运行终端
export PATH=~/code/depot_tools:$PATH
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome chrome_pgo_phase=0 use_thin_lto=false use_jumbo_build=true
set GN_ARGUMENTS=--ide=ninja --sln=cef --filters=//cef/*
python3 ./chromium/src/cef/tools/gclient_hook.py —depot-tool-dir=~/code/depot_tools
很快就在 ~/code/chromium_git/chromium/src/out 生成两个子文件夹 Release_GN_X64和Debug_GN_X64
一切看起来很顺利,不过一会就打脸了。
4.编译
export PATH=~/code/depot_tools:$PATH
cd ./chromium/src
Ninja -j8 -C out/Release_GN_X64
还没开始就结束,报错了,clang相关的库找不到。原因在上面有,指向的llvm-build下的windows版本的,根本不可能进行编译。直接删了,结果更快报错。于是相当了同步代码。在~/code/chromium_git/chromium下运行gclient sync,貌似会提示配置NO_AUTH_BOTO_CONFIG,什么鬼?这里同步就算不配置NO_AUTH_BOTO_CONFIG,命令行也没出现error字样的,但是中间会缺失很多文件。使用文档编辑器,写上类似
[Boto]
proxy = <代理服务器的地址>
proxy_port = <代理服务器的端口号>
proxy_user = <代理服务器的用户名>
proxy_pass = <代理服务器的密码>
有些没有proxy_user和proxy_pass的,可以不填。 然后保存到~/code/.boto。命令行走起:
export PATH=~/code/depot_tools:$PATH
export NO_AUTH_BOTO_CONFIG=~/code/.boto
cd ~/code/chromium_git/chromium
gclient sync -D
这样一波操作会清除windows下库,同时同步了linux的clang。查看一下~/code/chromium_git/chromium/src/third_party/llvm-build/Release+Asserts/bin/clang,如果不在,那就死磕它,继续gclient sync
完成之后重新开始,调到步骤1 。
编译中可能遇到的问题:
1 报X11问题,有人提及跳过编译client,但是我还是尝试安装一下xcb系列。
sudo apt install xcb libxcb-xkb-dev x11xkb-utils libx11-xcb-dev libxkbcommon-x11-dev
貌似安装之后不会提示X11/xxxx.h找不到之类的。
2 报vaapi的错,例如: error: no member named ‘subsampling_x’ in ‘__VAEncSequenceParameterBufferAV1….’ ,这google提到是libva的版本太低了。Ubuntu安装的libva-dev是1.14.0,我直接编译一份(2.21.0)
git clone https://github.com/intel/libva
./autogen.sh
./configure
make -j12
sudo make install
其他的修改可以参考windows编译版本。
有时候一个细节会挂系统,我之前编译一次,在ninja编译的时候没有加-j8,无限制编译模式,结果死机重启后就登录不了,黑屏,真服了。。。后来限制编译速度,不满核跑了。
还没编译完整,资源没那么快放上来。