/在Linux下如何搭建WebRTC的开发环境

Created Sun, 23 Apr 2023 21:28:38 +0800 Modified Sat, 27 Apr 2024 06:25:32 +0000
1354 Words 6 min

本文主要记录笔者在 Gentoo Linux 下面搭建 WebRTC 开发环境的过程。

准备工作

  1. 网络:可以科学上网的梯子
  2. 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 就会自动索引项目文件,就可以愉快地看代码和写代码啦!