谷歌開源項目Chromium的源碼獲取與項目構(gòu)建(Win7+vs10/vs13)
從12年那會兒開始獲取源碼和構(gòu)建chromium項目都是按照那時候的官方要求用win7+vs2010,相對來說也比較簡單,按照步驟來也很快能編譯出來。
1.官網(wǎng)的編譯配置介紹:http://www.chromium.org/developers/how-tos/build-instructions-windows
2.編譯需要的工具:vs2010/sp1,win8sdk,DXSDK,depot_tools
我用的工具都是在這里了:2010CompilerToolsForChrome
depot_tools也可以從官方獲取:depot_tools?(命令行下執(zhí)行 gclient 它會自動下載安裝構(gòu)建項目解決方案所需要的工具?
python, git 和 svn ),下載下來之后找個地方解壓出來,比如我是解壓到E:盤下。
3.修改配置
按照官網(wǎng)說的,配置環(huán)境變量:GYP_MSVS_VERSION和depot_tools的path路徑。
如果win8SDK的安裝路徑不是默認(rèn)的 C:Program Files (x86)Windows Kits8.0 的話,就需要增加一個環(huán)境變量。
GYP_DEFINES 值為你真正安裝win8SDK的位置,比如C:UsersKuerjinjinDownloadsWindows Kits8.0
?
配置DirectX sdk的頭文件及l(fā)ib庫路徑:
windows鍵 + r鍵,輸入%localappdata%MicrosoftMSBuildv4.0 并運(yùn)行,在彈出的文件夾列表中找到Microsoft.Cpp.Win32.user.props和Microsoft.Cpp.x64.user.props并修改這兩個文件。
[html]
view plaincopyprint????????
$(DXSDK_DIR)Include;$(IncludePath)$(DXSDK_DIR)Libx86;$(LibraryPath)$(DXSDK_DIR)Include;$(IncludePath)$(DXSDK_DIR)Libx64;$(LibraryPath)
修改WRL的頭文件,默認(rèn)C:Program Files (x86)Windows Kits8.0Includewinrtasyncinfo.h
找到 enum class AsyncStatus { ... }
改成 enum /*class*/ AsyncStatus { ... }
4.代碼獲?。?br />找一個空間超過60G的磁盤比如E:,創(chuàng)建文件夾chromium30,命令行下切換到該目錄,
[plain]
view plaincopyprint?>e:??>cd?chromium30??>gclient?config?http://src.chromium.org/svn/releases/30.0.1559.0/???
>e: >cd?chromium30 >gclient?config?http://src.chromium.org/svn/releases/30.0.1559.0/
拉取目前最新的源碼配置,當(dāng)然你也可以在http://src.chromium.org/svn/releases/中選擇自己想要的源碼版本。
一般會在當(dāng)前目錄下生成一個.gclient的配置文件。為了減少不必要的代碼獲得的時間浪費(fèi),打開.gclient文件在“custom_deps”節(jié)里忽略掉部分測試代碼,如:
[plain]
view plaincopyprint?solutions?=?[?{?"name"????????:?"30.0.1559.0",??????????????????????????"url"?????????:?"http://src.chromium.org/svn/releases/30.0.1559.0",??????????????????????????"deps_file"???:?"DEPS",??????????????????????????"managed"?????:?True,??????????????????????????"custom_deps"?:?{?????????????????????????????????????"src/webkit/data/layout_tests/LayoutTests":?None,?????????????????????????????????????"src/third_party/WebKit/LayoutTests":?None,?????????????????????????????????????"src/chrome/tools/test/reference_build/chrome":?None,?????????????????????????????????????"src/chrome_frame/tools/test/reference_build/chrome":?None,?????????????????????????????????????"src/chrome/tools/test/reference_build/chrome_linux":?None,?????????????????????????????????????"src/chrome/tools/test/reference_build/chrome_mac":?None,??????????????????????????},?????????????????????????"safesync_url":?"",????????????????????????},??]??
solutions?=?[?{?"name"????????:?"30.0.1559.0", ????????????????????????"url"?????????:?"http://src.chromium.org/svn/releases/30.0.1559.0", ????????????????????????"deps_file"???:?"DEPS", ????????????????????????"managed"?????:?True, ????????????????????????"custom_deps"?:?{ ???????????????????????????????????"src/webkit/data/layout_tests/LayoutTests":?None, ???????????????????????????????????"src/third_party/WebKit/LayoutTests":?None, ???????????????????????????????????"src/chrome/tools/test/reference_build/chrome":?None, ???????????????????????????????????"src/chrome_frame/tools/test/reference_build/chrome":?None, ???????????????????????????????????"src/chrome/tools/test/reference_build/chrome_linux":?None, ???????????????????????????????????"src/chrome/tools/test/reference_build/chrome_mac":?None, ????????????????????????}, ???????????????????????"safesync_url":?"", ??????????????????????}, ]
不要關(guān)閉命令提示,直接在當(dāng)前目錄下輸入gclient sync --force 進(jìn)行源碼的同步。接下來就等吧,這個同步的時間會很長,要同步十幾G的文件下來。正常情況下會在同步完成之后生成解決方案。如果沒有,在當(dāng)前目錄下接著輸入gclient runhooks --force。如果確保已經(jīng)100%同步完成了,生成解決方案的話可以直接輸入?
python build/gyp_chromium
如果是第一次接觸這個項目,那么找一下 src/chrome/chrome.sln 打開,將chrome項目設(shè)置為啟動項目,然后調(diào)試就OK。
-------------------------------------------------------------------------------------------------------------------------------
自美國時間2014年3月1日開始,谷歌對chromium源碼的構(gòu)建方式做了調(diào)整。
關(guān)于系統(tǒng)版本只支持Windows 7 x64或更高版本, x86的操作系統(tǒng)已經(jīng)不再支持。
從chromium r254340(chromium33)之后的版本,默認(rèn)的調(diào)試工具唯一指定為Visual Studio 2013,
所以如果使用最近的源碼進(jìn)行構(gòu)建,需要安裝VS2013并修改 GYP_MSVS_VERSION=2013
而構(gòu)建工具除了之前一直在使用的 depot_tools ,還增加了 ninja 工具的配合(ninja也是整合在了depot_tools中)。
所以一直在使用舊版本depot_tools的開發(fā)者們,需要先更新 depot_tools (之前也就300M左右,更新后約1.86G)了。
另外一個就是要獲取VS2013的工具鏈腳本(toolchain script)
該工具鏈腳本不會修改系統(tǒng)環(huán)境,所以使用VS13或者之前的VS10都木有問題。
下載后的工具鏈腳本存放在 depot_tools win_toolchain vs2013_files?
如果系統(tǒng)中安裝了VS2013,你可以用它來編輯和調(diào)試,ninja 將仍然使用depot_tools來構(gòu)建版本。
具體就以下兩步:
[plain]
view plaincopyprint?python?srctoolswintoolchaintoolchain.py???win_toolchainenv.bat??
python?srctoolswintoolchaintoolchain.py? win_toolchainenv.bat
其實(shí),說白了就是要更新一下原來的depot_tools工具。如果depot_tools更新好了,其他的跟之前的大同小異。 比如: [plain] view plaincopyprint?>e:??>cd?E:chromium35??E:chromium35>gclient?config?http://src.chromium.org/svn/releases/35.0.1900.0??E:chromium35>gclient?sync?--force(以往這一步會強(qiáng)制同步代碼后生成解決方案,現(xiàn)在則會在同步一部分后出現(xiàn)找不到文件的錯誤)??E:chromium35>cd?src??E:chromium35>gclient?sync(確保源碼同步完成)??構(gòu)建方式有兩種,一個是使用?ninja?構(gòu)建??E:chromium35src>ninja?-C?outDebug?chrome??然后在?out/Debug?下就能看到編譯出來的文件。??另一種就是使用我們熟悉的VS來構(gòu)建,需要設(shè)置一個環(huán)境變量??GYP_GENERATORS=msvs-ninja,ninja??然后直接??E:chromium35src>gclient?runhooks??然后就能在?src/chrome/下找到chrome.sln的解決方案,調(diào)試方式就跟以前一樣了。??
>e: >cd?E:chromium35 E:chromium35>gclient?config?http://src.chromium.org/svn/releases/35.0.1900.0 E:chromium35>gclient?sync?--force(以往這一步會強(qiáng)制同步代碼后生成解決方案,現(xiàn)在則會在同步一部分后出現(xiàn)找不到文件的錯誤) E:chromium35>cd?src E:chromium35>gclient?sync(確保源碼同步完成) 構(gòu)建方式有兩種,一個是使用?ninja?構(gòu)建 E:chromium35src>ninja?-C?outDebug?chrome 然后在?out/Debug?下就能看到編譯出來的文件。 另一種就是使用我們熟悉的VS來構(gòu)建,需要設(shè)置一個環(huán)境變量 GYP_GENERATORS=msvs-ninja,ninja 然后直接 E:chromium35src>gclient?runhooks 然后就能在?src/chrome/下找到chrome.sln的解決方案,調(diào)試方式就跟以前一樣了。
-------------------------------------------------------------------------------------------------------------------------------------------
TIPS:如果是使用了chromium r254340(chromium33)之后的版本,可以直接下載我安裝好的depot_tools工具,然后配置一下環(huán)境變量就可以直接用了。
1.depot_tools工具,下載后解壓配置環(huán)境變量。
2.git的更新包(1.9的,下載后解壓到depot_tools文件夾下就OK)
3.VS2013開發(fā)工具
已經(jīng)生成解決方案的幾個源碼包:
1.Chromium36.0.1922.0
2.Chromium35.0.1913.0
3.Chromium35.0.1900.0
4.Chromium34.0.1847.116(chrome的最新正式版)
5.Chromium34.0.1757.0
之前一些舊版本的源碼包:(可供學(xué)習(xí)研究用,VS10的項目,部分已經(jīng)生成解決方案)
1.Chromium32.0.1678.0
2.Chromium31.0.1650.63
3.Chromium30.0.1587.0
4.Chromium29.0.1547.49
5.Chromium29.0.1544.0
6.Chromium28.0.1500.95
7.Chromium24.0.1301.0
?
在這里再說一下幾個問題:
1.是使用VS10和VS13編譯項目的一些區(qū)別:如果是用的33之前的版本源碼生成的10的解決方案,那么vs2010/sp1,win8sdk,DXSDK,depot_tools這些都需要有的,如果是用的最近的源碼,只需要弄好最新版的depot_tools,再安裝個13就一切OK!(其實(shí)使用ninja+vs13混合編譯最終調(diào)用的vs13是depot_tools下的那個,而我們要再安裝個VS13不過是修改和查看代碼用而已)運(yùn)行那個批處理設(shè)置一下直接用就行了!
2.一般的設(shè)置我們可以放在批處理中設(shè)置好,讓ninja知道我們要用的vs13,win8sdk等在我們下載好的depot_tools中!在src的同級目錄(或者說就是那個.gclient所在的目錄)新建一個批處理CreateBuild.bat 運(yùn)行這個批處理文件可能會比較慢,耐心等待命令行窗口退出后再打開chrome.sln開始編譯!批處理的內(nèi)容如下:
@echo off
for /f %%a in ('where gclient.bat') do set pwd=%%a
set pwd=%pwd:~0,-11%
set file=%pwd%win_toolchaindata.json
set pwd=%pwd:=\%
echo {"runtime_dirs": ["%pwd%win_toolchain\vs2013_files\sys64", "%pwd%win_toolchain\vs2013_files\sys32"], "path": "%pwd%win_toolchain\vs2013_files", "version": "2013e", "wdk": "%pwd%win_toolchain\vs2013_files\wdk", "win8sdk": "%pwd%win_toolchain\vs2013_files\win8sdk"}
> %file%
set GYP_MSVS_VERSION=2013
set GYP_GENERATORS=msvs-ninja,ninja
set GYP_DEFINES=component=shared_library
call python ?srcbuildgyp_chromium
3.在最終的Release版本產(chǎn)品發(fā)布的時候,為了打包的需要可以把shared_library注釋掉rem?set GYP_DEFINES=component=shared_library改為靜態(tài)編譯,這個時候的編譯會比較慢特別是是最后的連接chrome.dll !
4.由于ninja+vs13這種混合編譯模式調(diào)用的都是depot_tools下的,所以直接在打開vs13中添加文件是不會被編譯到的,所以如果有在項目中添加文件就需要修改項目對應(yīng)的gyp或者gypi文件,將我們添加的文件目錄添加到sources節(jié)點(diǎn)下,然后重新運(yùn)行上邊的批處理文件!
5.最后再說一點(diǎn),那就是如果以前使用過vs2010編譯,在運(yùn)行CreateBuild.bat 這個批處理之前要刪除“C:Users$(username)AppDataLocalMicrosoftMSBuildv4.0”下props文件中關(guān)于$(DXSDK_DIR)的內(nèi)容。(重要)
?