本文以Linux/Mac平臺為例,簡單歸納總結(jié)WebRTC本地C++開發(fā)的基本步驟。
1. 先決條件
Google使用一個腳本工具集depot_tools進行代碼檢出、下載管理、代碼審查、代碼提交等日常開發(fā)工作[1]。該工具集中的常用工具包括gclient,gcl,git-cl,repo等等。在Linux/Mac平臺上安裝depot_tools工具集非常簡單[2]:下載源代碼并添加到PATH中即可:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=`pwd`/depot_tools:"$PATH"
需要注意的是,我們要把depot_tools放在PATH的最前端,否則gcl命令會指向GNU Common Lisp編譯器。另外,export這一句最好添加到.bashrc中,這樣就不必每次都設置。
對于Ubuntu/Debian系統(tǒng),除安裝depot_tools工具集,還有另外一項先決條件:在獲取WebRTC源代碼后,需要運行源代碼中的install-build-deps.sh腳本安裝一系列依賴軟件:
./build/install-build-deps.sh
對于Mac,只需要xcode版本大于5即可,推薦使用最新的xcode。
2. 獲取WebRTC源代碼
2.1 下載WebRTC源碼
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync
WebRTC源碼的代碼量很大(PC平臺大概6.4GB),因為需要使用Chromium的編譯工具鏈和第三方依賴庫。整個下載過程尤其是gclient sync需要耐心等待。
2.2 配置及創(chuàng)建分支
假設我們在master分支上進行開發(fā)。首先我們需要針對分支作一些配置,包括如何合并遠程分支,是否需要自動rebase,等等[3]:
git config branch.autosetupmerge always // 自動合并遠程分支到本地分支。
git config branch.autosetuprebase always // git pull時自動rebase。
并創(chuàng)建本地master分支:
cd src
git checkout –b master origin/master
2.3 更新代碼
更新當前分支:
git pull origin master
更新編譯工具鏈和第三方依賴庫:
gclient sync
3. 編譯WebRTC
Ninja是WebRTC的默認跨平臺編譯系統(tǒng)[4],其構(gòu)建文件通過GN生成[5]。Ninja構(gòu)建文件默認生成在out/Release、out/Debug目錄下,當然這個目錄是可以指定的。在src目錄下執(zhí)行如下命令,可生成Debug版構(gòu)建文件:
gn gen out/Default
生成Release版構(gòu)建文件:
gn gen out/Release --args=”is_debug=false”
清理Ninja構(gòu)建文件:
gn clean out/Default
gn clean out/Release
編譯WebRTC源代碼:
ninja –C out/Default
共3500多個源文件,編譯時長視機器的性能而定,從幾分鐘到幾十分鐘不等。gn也支持使用其他IDE構(gòu)建系統(tǒng),例如在Mac上用xcode生成工程文件:
gn gen out/Default --ide=xcode
就會在out/Default下生成all.xcworkspace工程文件,用xcode打開即可進行編譯。
4. 在Release分支開發(fā)
查看當前已發(fā)布的所有Release分支:
gclient sync --with_branch_heads
git fetch origin
git branch –r
檢出branch 60分支進行開發(fā):
git checkout –b branch_60 refs/remotes/branch-heads/60
gclient sync
5. 總結(jié)
本文對WebRTC的本地C++開發(fā)進行總結(jié),是一個操作手冊。
參考文獻
[1] Using depot_tools:
http://dev.chromium.org/developers/how-tos/depottools
[2] Install depot_tools:
http://dev.chromium.org/developers/how-tos/install-depot-tools
[3] WebRTC Development: https://webrtc.org/native-code/development/
[4] Ninja: https://ninja-build.org/
[5] What is GN?
https://chromium.googlesource.com/chromium/src/+/master/tools/gn/README.md