由于項(xiàng)目需要,需要對(duì)chromium進(jìn)行修改
首先,要把代碼下載,大約11G左右珍坊,官方指引:
https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md
在國(guó)外可能按著這個(gè)做就行了,但是在國(guó)內(nèi)有偉大的墻正罢,問(wèn)題就變得復(fù)雜了
根據(jù)文檔阵漏,首先要下載depot_tools,這是谷歌的下載翻具,編譯工具包履怯,depot_tools本身不大,等一段時(shí)間就能下載完裆泳。下載完之后設(shè)置環(huán)境變量
export PATH="$PATH:/path/to/depot_tools"
繼續(xù)安裝文檔執(zhí)行
git config --global core.precomposeUnicode true
mkdir chromium && cd chromium
fetch chromium
這時(shí)候問(wèn)題來(lái)了叹洲,fetch是depot_tools里面的下載工具,從谷歌的5-6個(gè)源上面拽代碼下來(lái)工禾,我試了一下运提,基本只能ping通一個(gè),就算是設(shè)置了http代理闻葵,下載速度也十分緩慢民泵,峰值大概30k,這么下載是不現(xiàn)實(shí)的笙隙。我在網(wǎng)上看了一個(gè)方案是使用國(guó)外的服務(wù)器fetch代碼洪灯,再通過(guò)百度云盤傳回國(guó)內(nèi)坎缭,這個(gè)方案是可行的竟痰。我自己在國(guó)外的服務(wù)器上fetch代碼,速度達(dá)到了19m/s??掏呼。在服務(wù)器上上傳百度網(wǎng)盤坏快,使用的是百度云python命令行bypy,網(wǎng)上搜一下就行憎夷,命令是
bypy upload xxx
第一次執(zhí)行會(huì)讓你授權(quán)莽鸿,彈出一個(gè)鏈接,復(fù)制到瀏覽器中打開就行拾给,授權(quán)完畢就會(huì)開始上傳(最好把代碼tar打包一下)
國(guó)外服務(wù)器上傳百度云不是特別快祥得,我在等待的同時(shí)研究了一下ipfs,看看通過(guò)ipfs能傳的快一點(diǎn)不(可惜自己部署的節(jié)點(diǎn)無(wú)法被其他節(jié)點(diǎn)發(fā)現(xiàn)蒋得,可能哪里配錯(cuò)了级及,還沒(méi)研究明白百度網(wǎng)盤就上傳完畢了??)
然后就是從百度網(wǎng)盤上下載代碼了,我建議著急的話還是充個(gè)會(huì)員额衙,不然實(shí)在太慢饮焦,我就充了一個(gè)月的怕吴,30大洋,心疼了好一陣
下載完了我開開心心的接著執(zhí)行
cd src
gn gen out/Default
設(shè)置好args.gn
然后執(zhí)行
autoninja -C out/Default chrome
卡住县踢,沒(méi)反應(yīng)转绷,去掉auto,執(zhí)行
ninja -C out/Default chrome
能看到在預(yù)編譯階段少了很多文件硼啤,剛開始我天真的從git上把缺失的文件下載下來(lái)议经,把文件補(bǔ)全。再執(zhí)行ninja -C out/Default chrome谴返,接著報(bào)chromium/thirdparty/.../...clang++不是可執(zhí)行的二進(jìn)制文件爸业,這時(shí)我就有點(diǎn)納悶了。經(jīng)過(guò)一番研究亏镰,我發(fā)現(xiàn)我本地是mac系統(tǒng)扯旷,下代碼的服務(wù)器是centos,本來(lái)源碼中不帶clang++索抓,fetch完了之后出現(xiàn)在chromium的文件夾下面钧忽,可能谷歌工具檢查了本地環(huán)境,下載的是linux64的clang++逼肯。
想清楚了之后耸黑,我把xcode的clang++等等替換掉了原來(lái)的clang++,接著編譯篮幢,結(jié)果第一個(gè)文件就出錯(cuò)了
看報(bào)錯(cuò)的意思貌似是我本地環(huán)境是gun c而編譯需要c99的樣子
然后我就查ninja的編譯配置大刊,改了半天這個(gè)報(bào)錯(cuò)一點(diǎn)沒(méi)變,只改變了報(bào)錯(cuò)的文件位置??
是在沒(méi)招了三椿,上論壇上搜缺菌,我發(fā)現(xiàn)我可能代碼還是不全的,因?yàn)樵赾entos上fetch的和在mac上fetch的有些出入搜锰,與其我自己在這里改來(lái)改去伴郁,不如繼續(xù)讓depot_tools發(fā)揮應(yīng)有的作用
使用gclient sync繼續(xù)同步代碼,這里如果報(bào)錯(cuò)缺少.gclient的話蛋叼,在執(zhí)行g(shù)client sync的目錄下面創(chuàng)建 .gclient文件焊傅,內(nèi)容
solutions = [
{
"managed": False,
"name": "src",
"url": "https://chromium.googlesource.com/chromium/src.git",
"custom_deps": {},
"deps_file": ".DEPS.git",
"safesync_url": "",
},
]
sync 過(guò)程中一度假死,等了一小時(shí)fetch失敗狈涮,wtf
我接著設(shè)置了http代理
git config --global http.proxy xxxx
git config --global https.proxy xxxx
export http_proxy=xxxx
export https_proxy=xxxx
(xxxx 按自己本地的vpn軟件設(shè)置)
然后sync狐胎,這時(shí)候它能工作了,顯示我代碼下載了94/98歌馍,完事之后握巢,又卡住沒(méi)輸出,被我關(guān)了好幾次骆姐,后來(lái)我又是抓包又是監(jiān)控流量镜粤,確認(rèn)它是在工作...然后上床睡覺(jué)了捏题,第二天爬起來(lái)看,同步完畢肉渴,gclient sync后自動(dòng)進(jìn)行了gclient runhooks公荧,我猜hook是做了本地編譯環(huán)境的設(shè)置,sync+hook一共進(jìn)行了快10小時(shí)??(還是網(wǎng)速原因)
接下來(lái)
ninja -C out/Default chrome
能成功編譯了同规,中間一點(diǎn)錯(cuò)都沒(méi)報(bào)循狰,雖然編譯時(shí)間有點(diǎn)長(zhǎng),我用了3-4個(gè)小時(shí)券勺,mac風(fēng)扇呼呼滴绪钥,最后成功編譯成了chromium
前后花了4天,大部分時(shí)間都在等关炼,??
最后吐槽一下程腹,偉大的墻讓我們科技工作者摔倒在起跑線上