写作本文时使用的 webrtc 版本为:branch heads/67

一、 准备工作

1.0 请确保可以访问国外网站

1.1 系统语言切换到英文

系统 Windows 7/10 都可以,在“控制面板”–>”区域和语言”–>”管理”–>”更改系统区域设置”中切换到“英语(美国)”,然后重启系统。

1.2 卸载部分软件

1.3 安装 VS2017

Visual Studio 2017 现在只提供在线安装包,为了加快在线安装的速度,可以只选择如下几个安装项:

  • Desktop development with C++
  • MFC and ATL support

1.4 安装 Windows 10 SDK

虽然官方指南上面写的是支持 10.0.15063 及以后的版本,但编译选项中默认指定的是 10.0.15063 版本,所以建议安装 10.0.15063 版本。如果要使用其他版本的 SDK,可以在三、 生成vs解决方案 这一步中指定--winsdk=<sdk_version>参数。

10.0.15063 下载地址:

1
https://download.microsoft.com/download/0/1/1/01111605-8CDF-4A88-BB06-C20E97E8B3D5/iso_windowssdk/15063.468.170612-1856.rs2_release_svc_sec_WindowsSDK.iso

1.5 安装 DirectX SDk

下载地址:

1
http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe

安装 DirectX SDK June 2010,安装完成后可能会提示“s1023”这样的错误,这是因为与系统已有的 visual c++ redistributable packages 版本冲突,可以忽略不管。

二、 源码获取

2.1 配置 depot_tools

depot_tools 是 webrtc 或 chromium 使用的源码管理工具,从此处下载:

1
https://storage.googleapis.com/chrome-infra/depot_tools.zip

解压到 D:\webrtc\depot_tools 中,添加该目录到到系统环境变量 PATH。

因为 webrtc 或 chromium 使用的编译系统会自动下载与之匹配的 Python 和 Git,为了防止编译系统错误使用原有的版本,需要将D:\webrtc\depot_tools路径放到 PATH 的最前面,至少也要放到 Python 和 Git 的前面。

2.2 环境初始化

先设置如下环境变量:

1
2
DEPOT_TOOLS_WIN_TOOLCHAIN = 0
GYP_GENERATORS = ninja,msvs-ninja

然后以管理员权限运行系统 cmd 命令行(不要使用其他命令行工具,如 cmder),依次执行下面的命令:

1
2
3
d:
cd D:\webrtc # 用来进入webrtc目录,目录名不一样,命令也不一样
gclient # 需要使用网络代理,耗时较长

2.3 下载源码和依赖项

新建 webrtc-checkout 目录,下载源码到该目录,命令如下:

1
2
3
4
5
mkdir webrtc-checkout      # 也可以手动新建
cd webrtc-checkout
fetch --nohooks webrtc # 获取源码
gclient sync # 更新源码
gclient runhooks # 获取DEPS文件中指定的依赖项

三、 生成 vs 解决方案

进入 webrtc-checkout\src 目录(2.3 步骤中下载的源码会自动存储到该目录),执行:

1
gn gen --ide=vs out/Debug

或者加入详细的配置参数:

1
gn gen out/x64/Debug --ide=vs --args="is_debug=true target_cpu=\"x64\""

执行成功之后,在 out/Debug 目录中会生成 all.sln 解决方案文件。

另外,可以使用gn gen --help查看帮助,节选如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
IDE options

GN optionally generates files for IDE. Possibilities for <ide options>

--ide=<ide_name>
Generate files for an IDE. Currently supported values:
"eclipse" - Eclipse CDT settings file.
"vs" - Visual Studio project/solution files.
(default Visual Studio version: 2017)
"vs2013" - Visual Studio 2013 project/solution files.
"vs2015" - Visual Studio 2015 project/solution files.
"vs2017" - Visual Studio 2017 project/solution files.
"xcode" - Xcode workspace/solution files.
"qtcreator" - QtCreator project files.
"json" - JSON file containing target information

--filters=<path_prefixes>
Semicolon-separated list of label patterns used to limit the set of
generated projects (see "gn help label_pattern"). Only matching targets
and their dependencies will be included in the solution. Only used for
Visual Studio, Xcode and JSON.

Visual Studio Flags

--sln=<file_name>
Override default sln file name ("all"). Solution file is written to the
root build directory.

--no-deps
Don't include targets dependencies to the solution. Changes the way how
--filters option works. Only directly matching targets are included.

--winsdk=<sdk_version>
Use the specified Windows 10 SDK version to generate project files.
As an example, "10.0.15063.0" can be specified to use Creators Update SDK
instead of the default one.

--ninja-extra-args=<string>
This string is passed without any quoting to the ninja invocation
command-line. Can be used to configure ninja flags, like "-j".

在编译解决方案中的某些工程(如freetype_source, harfbuzz_source)时,可能会遇到诸如下面的错误提示:

1
error C2220: 警告被视为错误 - 没有生成“object”文件

这时我们需要调低警告等级,编译对应的 ninja 文件,将其中的/WX改成/W3即可。

参考:
https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md