chromium 39以後版本的分支和穩定版本的編譯安裝(windows版本)
一直關注chromium的都知道從39.0.2313.2版本之後,chromium的程式碼剛好全部遷移到了git管理了,因此程式碼的獲取方式和編譯有些差別,特別是對於穩定版的編譯,官方也有文件,但沒有完全說清楚,導致些問題,為了讓同仁們少走些彎路,下面詳細說明如何編譯穩定版本。
由於google程式碼伺服器國內不好訪問,因此獲取程式碼可以vpn(推薦的方式),也可以通過https,http代理方式獲取,具體如何配置git 的https,http代理,網上一大堆,這裡從略,下面以win7 x64為例子進行說明。
下面說說獲取程式碼之前的準備工作:
1.作業系統的準備。
a. 作業系統必須win7以及後續版本,且必須是64位的,32位的將不受到支援;系統安裝好以後,進行windows update操作,重要的補丁就是windows sdk 8.1,IE10(可選)。
b.系統改成英文系統,否則的話,會遇到“The file contains a character that cannot be represented in the current code page” 。如果預設是安裝的中文系統,可以通過控制面板進行修改"開始"->"控制面板"->"時鐘,語言,地區"->"修改顯示語言"
修改時間格式:
修改你的當前置位為:
鍵盤和語言:
如果沒有列出“English”,說明你沒有安裝英文語言包,需要點選上面的“安裝/解除安裝語言...”按鈕進行安裝
管理:
登出或者重新啟動你的系統,將看到你的windows已經成了英文版本了。這時候,開啟你的vpn,以保證可以訪問chromium程式碼網站。
2.vistual studio 2013的下載安裝:
官方建議用vs2013 update 4 英文社群版或者是vs2013
update 4 英文專業版,我下載了其對應的英文專業版,安裝的時候,至少要把vc相關的都裝上,其它的可選。具體專業版本下載地址是:https://www.visualstudio.com/products/visual-studio-professional-with-msdn-vc
3.chromium包管理工具:
下載地址:https://src.chromium.org/svn/trunk/tools/depot_tools.zip,下載後不要雙擊depot_tools.zip壓縮包,從裡面拖放出壓縮的東西,而是右鍵這個壓縮包,以“解壓到當前資料夾”的方式進行解壓縮,如果不這樣做,有些隱藏檔案就拿不出來了,造成報錯。
4.環境變數的設定:
最好寫成一個指令碼,如(chromium_evn.bat),不要設定在系統或者使用者的的環境設定中,免得汙染其它的環境變數。這個指令碼在開啟命令視窗的時候執行一下
@echo off
rem 設定包管理工具的所有路徑
set PATH=%your depot_tools parent dir%depot_tools;%PATH%
rem 產生依賴時不去下載vs,winsdk等依賴工具
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
rem 產生的工程檔案是vs2013的工程
set GYP_MSVS_VERSION=2013
rem 支援ninja和msvc兩種編譯方式
set GYP_GENERATORS=msvs-ninja,ninja
rem 設定編譯選項,下面的設定是Debug版本的,每個工程編譯成dll,,禁止編譯nactive client功能,windows sdk的路徑,如果是以下的路徑安裝的,可以不設定windows_sdk_path引數,否則必須設定
set GYP_DEFINES=component=shared_library target_arch=x64 disable_nacl=1 windows_sdk_path="C:\Program Files (x86)\Windows Kits\8.1"
5.程式碼下載
建立一個乾淨的目錄如chromium,把上面的chromium_evn.bat檔案放在這個目錄中,開啟命令視窗,cd到這個目錄,執行gclient,將下載git,python,svn,perl等依賴到depot_tools目錄中,大概下載100多M,下載完成後自動解壓縮安裝的,完成後出現命令提示符。
在chromium目錄下執行fetch --nohooks chromium --target_os=mac,win,linux,將下載windwos,linux,mac平臺依賴的程式碼和編譯依賴包,視具體需要可增刪平臺選項。這將是一個漫長的過程,視你的網路情況而定,好幾個小時和一天不等,這個命令將包括下載歷史(tag和分支);如果下載過程中出錯,執行gclient sync --force --nohooks,直到下載完為止。這個時候我們工作空間的程式碼處於master分支的最新版本上,master分支的程式碼極其不穩定。所以我們要編譯穩定版本,需要調整分支。
cd src
git fetch origin --tags同步所有的tags到本地倉庫
git reset --hard 43.0.2357.130(寫這篇博文最新穩定版本),把chrome倉庫的程式碼切換到這個穩定分支,注意,這個操作只是切換了chrome的穩定版本的指標,其他依賴的倉庫如v8,blink等並沒有切換。
gclient sync --force --nohooks --with_branch_heads 同步依賴的其他git倉庫的程式碼,這樣操作後,chrome倉庫程式碼才和他依賴的程式碼搭配是正確的。官方說的是git checkout -b your_branch 43.0.2357.124;gclient sync --nohooks --with_branch_head.這樣是沒有用的,gclient在查詢chrome倉庫的git指標任然指向master的,這樣同步就是最新的master程式碼了,相信不少同仁都遇到了,好些編譯指定版本程式碼的就卡在這裡了。
gclient runhooks,這條命令將下載依賴的二進位制包,產生ninja和vc工程,其內部會呼叫src/build/gyp_chromium產生工程檔案。到此整個程式碼的準備工作就緒,剩下的就是編譯工作了。
ninja -C out\Debug_x64 chrome,將編譯64位版本的chromium,如果要編譯32位版本的就是ninja -C out\Debug chrome。根據上面指令碼中GYP_DEFINES環境變數的設定,我構建的是debug版本,所以每個工程編譯後都產生dll檔案,主要是方便斷點除錯,編譯是要較長的時間,耐心等待吧
如果是要編譯release版本那麼 GYP_DEFINES=branding=Chromium buildtype=Official target_arch=x64 disable_nacl=1 windows_sdk_path="C:\Program Files (x86)\Windows Kits\8.1"。也有網上說的是把branding選項設定成Chrome,這就是編譯chrome而不是chromium了,chrome編譯依賴和整合google的內部服務需要google的賬號才能下載這些東西,所以沒有google賬號就不要用了,否則會提示你輸入賬號和密碼相關的東西。
最後說明下,如果想在vs中進行編譯,要把上面chromium_evn指令碼的內容放在vc的事件指令碼環境中,如果覺得麻煩,那就把指令碼中的內容放在使用者或者系統的環境變數中。我建議編譯用ninja在命令列進行;除錯在vs中進行。