【Chrome源碼學(xué)習(xí)(一)】源代碼編譯

前言:2017年2月6號谷歌宣布iOS版的Chrome瀏覽器的代碼并歸到Chromium項(xiàng)目開源出來了,正好自己最近做的項(xiàng)目瀏覽器相關(guān),心想去扒一扒Chrome的代碼找一些好東西出來。


源代碼編譯

由于源代碼中大部分都是C++的代碼,并且沒有工程文件,也是無法使用IDE打開的,代碼閱讀起來還是非常吃力了,想著還是編譯一下代碼用Xcode來閱讀。筆者參考了一篇大神的博客來一步步的開始編譯源代碼,這里主要是對自己遇到的一些問題進(jìn)行記錄,防備以后忘記了。


工具準(zhǔn)備

由于Chromium的源碼都是基于Google自己的depot_tools進(jìn)行構(gòu)建的,所以第一步就是安裝depot_tools工具包,首先我是使用Mac電腦來編譯的,depot_tools的安裝很簡單,直接從Chromium開源地址找到depot_tools對應(yīng)的項(xiàng)目文件夾并下載對應(yīng)的壓縮包到本地,解壓到任意目錄并添加到環(huán)境變量(注意bashzsh),如下:

CHROME_DEPOT_TOOLS=/xxx/xxx/depot_tools
export PATH=$PATH:$CHROME_DEPOT_TOOLS:

工具包安裝好之后,就可以使用里面的很多的命令了,其中fetch、ninjagn就是我們后面要用到的命令。


源碼下載

由于Chromium的源碼有幾十萬個(gè)文件,項(xiàng)目非常大,我這邊下載下來解壓好有10個(gè)G的大小。根據(jù)我參考的博客主要有兩種下載源碼的方式:
使用工具包中fetch命令下載源代碼

fetch chromium --no-history

使用git clone下載源代碼

git clone https://chromium.googlesource.com/chromium/src

//如果上面下載失敗了并報(bào)了下面的錯(cuò)則使用下面命令繼續(xù)下載,節(jié)省時(shí)間
//fatal: The remote end hung up unexpectedly
//fatal: early EOF
//fatal: index-pack failed
git config --global core.compression 0
git clone --depth 1 https://chromium.googlesource.com/chromium/src

可能大家和我一樣都是先用git clone先進(jìn)行了嘗試,并且下載好了源代碼,這里我很想哭一會。。。我在走投無路的時(shí)候選擇fetch命令重新下載了才發(fā)現(xiàn)git clone下載下來的源代碼是不全的,少了好多的文件。


開始編譯

工具安裝好了源代碼也下載好了,現(xiàn)在可以執(zhí)行下面命令生產(chǎn)build的文件:

gn gen out/gn --ide=xcode  //–ide=xcode是為了能夠使用蘋果的XCode進(jìn)行可視化進(jìn)行調(diào)試

這個(gè)命令卡了好一會兒,從gn.py的源代碼中才發(fā)現(xiàn)需要配置一個(gè)全局變量CHROMIUM_BUILDTOOLS_PATH,這個(gè)全局變量是要配置build_tools的路徑的,如下圖所示:

build_tools路徑

CHROMIUM_BUILDTOOLS_PATH=/xxx/xxx/src/buildtools
export CHROMIUM_BUILDTOOLS_PATH

上面這個(gè)文件夾就是我說git clone不靠譜的原因,因?yàn)?code>git clone下來的源碼里面沒有這個(gè)文件夾。

最后一步就是編譯了,執(zhí)行下面命令:

ninja -C out/gn chrome

上面這個(gè)命令我執(zhí)行了5個(gè)小時(shí),可能是我的Mac配置太低了吧。運(yùn)行完之后就可以在目錄out/gn找到了對應(yīng)的.xcodeproj文件,點(diǎn)擊out/gn/Chromium.app/Contents/MacOS/Chromium文件,就可以直接打開Chrome瀏覽器了,并且用Xode的attach process可以進(jìn)行debug了。

總結(jié):Chrome源碼閱讀這條路上我只是一個(gè)小白,學(xué)一步記一步,有問題的地方請不吝賜教。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容