本文主要记录笔者在 Gentoo Linux 下面搭建 WebRTC 开发环境的过程。
准备工作
- 网络:可以科学上网的梯子
- IDE:VSCode 或者 CLion
安装depot_tools
Google 有自己的一套用于管理 Chromium 项目的工具,名叫depot_tools
,其中有包括git
在内的一系列工具和脚本。
# 创建google目录用于存储google相关的代码
mkdir ~/google
cd ~/google
# clone depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
克隆完成之后需要将depot_tools
的路径加到PATH
中,Linux 上添加环境变量最简单的方式是修改~/.profile
,这种方式与你的登录 shell 是什么没有关系,不管是fish
还是bash
还是zsh
都会吃这种方式:
# ~/.profile
export GOOGLE_BIN=$HOME/google/depot_tools
export PATH=$GOOGLE_BIN:$PATH
但是这种方式需要你注销重新登录。
克隆代码
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync
整个 WebRTC 的项目代码大小约 20G,克隆过程中需要保证网络畅通顺畅,如果你的梯子有大流量专用节点最好,否则可能克隆完你的流量就用光了。
克隆期间可能会因为网络问题中断,重新执行gclient sync
即可,直到所有的模块都克隆完毕。
按照官方的建议,克隆完成之后创建自己的本地分支,因为官方分支更新很快,不 checkout 的话,可能你的 commit 还没写完,就被 Remote 的 change 给覆盖了,还要手动处理冲突。
cd src
git checkout master
git new-branch <branch-name>
编译 WebRTC
关于 WebRTC 的版本可以在Chromium Dash查到:
如上图所示,113 分支是当前的稳定分支,对应的 tag 是branch-heads/5672
:
cd ~/google/webrtc-checkout/src
git checkout branch-heads/5672
git switch -c m113
创建本地分支之后就可以用gn
生成ninja
文件了:
gn gen out/Default --root="." --args='is_debug=true target_os="linux" target_cpu="x64" rtc_include_tests=false rtc_use_h264=true rtc_enable_protobuf=false is_clang=true symbol_level=0 enable_iterator_debugging=false is_component_build=false use_rtti=true rtc_use_x11=true use_custom_libcxx=false treat_warnings_as_errors=false use_ozone=true'
这里使用了clang
并且启用了h264
,详细的gn
参数可以参考gn-build-configuration和项目根目录下的webrtc.gni
文件。
之后使用autoninja
进行编译,编译时会吃满你 PC 的所有核心,编译时间取决于你 PC 的配置:
autoninja -C out/Default
可以看到默认生成了几个样例的可执行文件。
cd 到obj
目录下可以看到libwebrtc.a
文件,就是编译链接之后最终生成的可以引用的库文件。
搭建开发环境
Google 官方给出了 Chromium 项目的CLion 配置指南,所以只需要照猫画虎给 WebRTC 配置一下。
配置 CLion 属性
因为整个项目比较大,所以需要调大 CLion 的 VM 内存和 intellisence 支持的文件大小:
Help
-> Edit Custom VM Options
,在文件的末尾添加:
-Xmx8g
表示给 VM 设定8G
的可用内存,这样基本上不用担心使用过程因为内存不足而 CLion 性能不够了。
Help
->Edit Custom Properties
,在文件的末尾添加:
idea.max.intellisense.filesize=12500
表示为大小为12500KB
也就是12M
以下的文件提供 intellisense 支持。
配置 gdb
vim ~/.gdbinit
# 添加下面一行
source ~/google/webrtc-checkout/src/tools/gdb/gdbinit
之后在 CLion 中的Settings
->Toolchain
->Debugger
选择系统自带的 gdb:/usr/bin/gdb
即可。
配置 intellisense
因为 WebRTC 用的是gn
+ninja
作为构建工具,而CLion
目前只支持cmake
,所以当要求配置CMakeLists.txt
时直接无视即可。网络上有说用gn_to_cmake.py
这个脚本的,但是我没看懂这东西的功能,反正是不能生成CMakeLists.txt
,只是生成一个json
文件,并不能用于 CLion 的索引。
我这边成功开启 IDE 语法高亮和索引的姿势是这样的:
cd webrtc-checkout/src
python3 ./tools/clang/scripts/generate_compdb.py -p ./out/Default -o ./compile_commands.json --target_os=linux
这一步会生成 CLion 可以自动识别的compile_commands.json
文件,从而可以正确索引项目的代码并提供代码补全功能。
之后每次启动项目 CLion 就会自动索引项目文件,就可以愉快地看代码和写代码啦!