本文以Linux/Mac平臺(tái)為例背捌,簡(jiǎn)單歸納總結(jié)WebRTC本地C++開(kāi)發(fā)的基本步驟拜隧。
1. 先決條件
Google使用一個(gè)腳本工具集depot_tools進(jìn)行代碼檢出伸头、下載管理酪术、代碼審查阶剑、代碼提交等日常開(kāi)發(fā)工作[1]吃沪。該工具集中的常用工具包括gclient汤善,gcl,git-cl票彪,repo等等红淡。在Linux/Mac平臺(tái)上安裝depot_tools工具集非常簡(jiǎn)單[2]:下載源代碼并添加到PATH中即可:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=`pwd`/depot_tools:"$PATH"
需要注意的是,我們要把depot_tools放在PATH的最前端降铸,否則gcl命令會(huì)指向GNU Common Lisp編譯器在旱。另外,export這一句最好添加到.bashrc中推掸,這樣就不必每次都設(shè)置桶蝎。
對(duì)于Ubuntu/Debian系統(tǒng),除安裝depot_tools工具集谅畅,還有另外一項(xiàng)先決條件:在獲取WebRTC源代碼后登渣,需要運(yùn)行源代碼中的install-build-deps.sh腳本安裝一系列依賴軟件:
./build/install-build-deps.sh
對(duì)于Mac,只需要xcode版本大于5即可毡泻,推薦使用最新的xcode胜茧。
2. 獲取WebRTC源代碼
2.1 下載WebRTC源碼
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync
WebRTC源碼的代碼量很大(PC平臺(tái)大概6.4GB),因?yàn)樾枰褂肅hromium的編譯工具鏈和第三方依賴庫(kù)仇味。整個(gè)下載過(guò)程尤其是gclient sync需要耐心等待呻顽。
2.2 配置及創(chuàng)建分支
假設(shè)我們?cè)趍aster分支上進(jìn)行開(kāi)發(fā)。首先我們需要針對(duì)分支作一些配置丹墨,包括如何合并遠(yuǎn)程分支芬位,是否需要自動(dòng)rebase,等等[3]:
git config branch.autosetupmerge always // 自動(dòng)合并遠(yuǎn)程分支到本地分支带到。
git config branch.autosetuprebase always // git pull時(shí)自動(dòng)rebase昧碉。
并創(chuàng)建本地master分支:
cd src
git checkout –b master origin/master
2.3 更新代碼
更新當(dāng)前分支:
git pull origin master
更新編譯工具鏈和第三方依賴庫(kù):
gclient sync
3. 編譯WebRTC
Ninja是WebRTC的默認(rèn)跨平臺(tái)編譯系統(tǒng)[4]英染,其構(gòu)建文件通過(guò)GN生成[5]。Ninja構(gòu)建文件默認(rèn)生成在out/Release被饿、out/Debug目錄下四康,當(dāng)然這個(gè)目錄是可以指定的。在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多個(gè)源文件闪金,編譯時(shí)長(zhǎng)視機(jī)器的性能而定,從幾分鐘到幾十分鐘不等论颅。gn也支持使用其他IDE構(gòu)建系統(tǒng)哎垦,例如在Mac上用xcode生成工程文件:
gn gen out/Default --ide=xcode
就會(huì)在out/Default下生成all.xcworkspace工程文件,用xcode打開(kāi)即可進(jìn)行編譯恃疯。
4. 在Release分支開(kāi)發(fā)
查看當(dāng)前已發(fā)布的所有Release分支:
gclient sync --with_branch_heads
git fetch origin
git branch –r
檢出branch 60分支進(jìn)行開(kāi)發(fā):
git checkout –b branch_60 refs/remotes/branch-heads/60
gclient sync
5. 總結(jié)
本文對(duì)WebRTC的本地C++開(kāi)發(fā)進(jìn)行總結(jié)漏设,是一個(gè)操作手冊(cè)。
參考文獻(xiàn)
[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