WebRTC Native M96版本开篇之旅--一篇读懂代码下载编译(ninja gn depot_tools)
Posted 一苇渡江694
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebRTC Native M96版本开篇之旅--一篇读懂代码下载编译(ninja gn depot_tools)相关的知识,希望对你有一定的参考价值。
欢迎来到苦逼的WebRTC下载、编译世界。
depot_tools
depot_tools是个工具包(depot是仓库的意思),里面包含gclient、gcl、gn和ninja等工具,这些工具都是使用python写的。其主要的功能是对git的增强,让代码管理和编译更加简单,要学这个的前提是要会使用git。
获取DEPOT TOOLS
LINUX / MAC系统:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=/path/to/depot_tools:$PATH
WINDOWS系统:
https://storage.googleapis.com/chrome-infra/depot_tools.zip
添加到系统环境变量,例如:
C:\\depot_tools
解压之后,在cmd中执行gclient命令,下载一些windows特定的软件及库。如git与python
如果出现fail,还要继续gclient
depot_tools运行gclient工具时会自动更新。要禁用自动更新,请设置环境变量DEPOT_TOOLS_UPDATE=0
配置git
省略,如果没用过git,那么你不配玩WebRTC
访问Google
这个自己弄吧!
Visual Studio 2019 以及 Windowns 10 SDK
个人版 社区版都行,能装的都装上
配置环境变量
永久变量–设置到系统环境变量中:
DEPOT_TOOLS_WIN_TOOLCHAIN=0
GYP_MSVS_VERSION=2019
WINDOWSSDKDIR=C:\\Program Files (x86)\\Windows Kits\\10\\
GYP_MSVS_OVERRIDE_PATH=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community
临时变量–每次执行
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_MSVS_VERSION=2019
set WINDOWSSDKDIR=C:\\Program Files (x86)\\Windows Kits\\10\\
set GYP_MSVS_OVERRIDE_PATH=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
告诉depot_tools使用我们本机的VS进行编译
下载源码
找个空间大的磁盘,目录
mkdir webrtc-m96
cd webrtc-m96
fetch --nohooks webrtc
gclient sync
接下来就是漫漫漫长的等待,要下的东西很多很多。
如果因为网络等原因中断了,别慌:
就再执行
gclient sync
如果卡住了,别慌:
ctrl+c
gclient sync。
下载成功后,切换分支m96
git checkout branch-heads/4664
gclient sync -D
生成sln解决方案
cd src
gn gen --ide=vs out\\Default
编译代码
一种命令行编译:
ninja -C out/Default
ninja
一种vs2019编译:
省略
会有一些错误,一些工程生成编译失败,但是无关紧要,example里是可以正常使用的。
常见错误
Exception: No supported Visual Studio can be found. Supported versions are: 16.0 (2019), 15.0 (2017).
ERROR at //build/config/win/visual_studio_version.gni:27:7: Script returned non-zero exit code.
exec_script("…/…/vs_toolchain.py", [ “get_toolchain_dir” ], “scope”)
这是由于python脚本在找vs的安装路径出错了,默认是按照C盘来查找,但是如果vs2019不是安装在C盘,那就得修改vs_toolchain.py这个文件,路径src/build,原来的代码如下,大概是176行:
path = os.path.expandvars('D:/Program Files (x86)/Microsoft Visual Studio/%s' % version)
os.path.expandvars('D:\\Program Files (x86)\\Microsoft Visual Studio/%s/Community' %version_as_year),
gn Ninja介绍
Ninja 是借由 Google Chrome 项目而诞生的一个构建工具,它的诞生目标是为了速度。
gn解决了跨平台编译问题,但是各平台的代码编辑,并不属于底层C++跨平台构建工具的范畴(全框架C++流程的Qt例外)。一种做法是,通过gn生成各个平台的工程(xcode工程、vs工程)然后再进行代码编写,源文件和工程模块的修改需要另外同步到gn工程文件中;另一种做法是使用vscode。
gn文件编写:
executable("hello")
sources = [ "hello.cc" ]
deps = [
":hello_shared",
":hello_static",
]
shared_library("hello_shared")
sources = [
"hello_shared.cc",
"hello_shared.h",
]
defines = [ "HELLO_SHARED_IMPLEMENTATION" ]
static_library("hello_static")
sources = [
"hello_static.cc",
"hello_static.h",
]
以上是关于WebRTC Native M96版本开篇之旅--一篇读懂代码下载编译(ninja gn depot_tools)的主要内容,如果未能解决你的问题,请参考以下文章
WebRtc Native M96 远端视频接收之NackRequesterNackSender-NACK丢包重传原理
WebRtc Native M96 远端视频接收之NackRequesterNackSender-NACK丢包重传原理
WebRTC Native M96 基础Base模块介绍之网络相关的封装
WebRTC Native M96 基础Base模块介绍之网络相关的封装