WebRTC 源码构建
Abstract |
WebRTC Source |
Authors |
Walter Fan |
Status |
WIP |
Updated |
2024-08-21 |
Source code
按照 https://webrtc.github.io/webrtc-org/native-code/development, 可以在 windows, mac 或 linux 上构建 webrtc library.
前提是你要能连接上 webrtc 的仓库,有些地方需要翻墙。
安装 Chromium 软件库工具.
参见
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH="$PATH:${HOME}/depot_tools"
下载 WebRTC 源码
$ mkdir webrtc-checkout
$ cd webrtc-checkout
$ fetch --nohooks webrtc
$ gclient sync --force
更新源码到你自己的分支
$ git checkout main
$ git pull origin main
$ gclient sync
$ git checkout my-branch
$ git merge main
构建
先要安装 ninja 这一构建工具, 通过它来生成构建脚本
在 Linux 系统上,比较简单的方法是运行 ./build/install-build-deps.sh
$ cd src
$ python build/util/lastchange.py build/util/LASTCHANGE
# generate project files using the defaults (Debug build)
$ gn gen out/Default
# clean all build artifacts in a directory but leave the current GN configuration untouched
$ gn clean out/Default
$ ninja -C out/Default
在 windows 系统上,建议安装 visual studio 和 windows 10 SDK
注意:
一定要在系统设置中选择 Windows SDK , 再选择修改,安装 debugging tool)
为了使用本地安装的 visual studio, 需要先设置一下环境变量 set DEPOT_TOOLS_WIN_TOOLCHAIN=0
gn gen --ide=vs out\Default --args='use_custom_libcxx=false'
然后用 visual studio 打开 outDefaultall.sln
GN 编译选项
gn 支持的参数很多,例如
clang_base_path=”/usr”
clang_use_chrome_plugins=false
treat_warnings_as_errors=false
rtc_build_ssl=false
rtc_ssl_root=”dummy”
在 ARM 平台上的编译
gn gen out/mac --args='target_os="mac" is_debug=false target_cpu="arm64" rtc_include_tests=false rtc_build_tools=false rtc_build_examples=false'
gn gen out/linux --args='use_custom_libcxx=false clang_base_path="/usr" clang_use_chrome_plugins=false treat_warnings_as_errors=false rtc_build_ssl=false rtc_ssl_root="dummy"'
配置文件
webrtc.gni
这个文件由其他 BUILD.gn 所包含,它包括了很多特性开关选项和模板, 例如
rtc_enable_bwe_test_logging = false
Build.gn
src/BUILD.gn
we can change the build configuration file to add some target
rtc_static_library("xxx") {
# Only the root target and the test should depend on this.
visibility = [
"//:default",
]
sources = []
complete_static_lib = true
suppressed_configs += [ "//build/config/compiler:thin_archive" ]
deps = [
"rtc_base",
"..."
]
src/build/config/compiler/BUILD.gn
e.g.
cflags_cc += [ "-std=gnu++2a" ]
cflags += [ "-fdebug-compilation-dir=." ]
#"-Wno-psabi"
#"-Wno-unused-but-set-parameter",
#"-Wno-unused-but-set-variable",
#cflags += [ "-Wmax-tokens" ]
#"-fuse-ctor-homing"