最近要搞chromium,虽然之前下载、编译过一次两次,但是都没有时间认真看代码(拖延症患者)。后来机器上又装了其它东西,也不知道是不是因为装了vs2005的原因,现在把以前拉的代码拿过来就编译不过,需要每个工程都去修改platform toolset,把它从v100修改为windows7.1,面对chromium650个工程,逐个修改太累,所以重装系统再来一遍,好在SSD硬盘够快。
一、安装环境流程如下:
1、安装win7 64位 专业版。(C盘剩下33G空间)
2、安装驱动\安装工作常用软件(压缩、输入法、IM...)
3、安装vs2010 Ultimate (网上只下载到这个2010版本)
4、安装vs2010SP1补丁(虽然使用了离线安装包,但还是很慢)[下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=23691]
5、安装Windows SDK7.1。出现错误,按照网络上的说法,安装时不要勾选Visual C++ compiler,装完之后安装KB2519277补丁。[下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=8279]
6、安装Windows SDK7.1的编译补丁VC-Compiler-KB2519277.exe [下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=4422]
7、安装DirectX SDK DXSDK_Jun10.exe 。出现S1023的错误,按照官方提示卸载掉Microsoft Visual C++ 2010 x64 Redistributable , 安装完重启。 [下载地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=6812]
8、安装Windows 8 SDK sdksetup.exe。安装完成后,C:\Program Files (x86)\Windows Kits\8.0\Include\winrt\asyncinfo.h里的第66行,删掉 class。 [下载地址:http://msdn.microsoft.com/en-us/windows/hardware/hh852363.aspx]
9、安装WDK
GRMWDK_EN_7600_1.ISO。[
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=11800]
二、拉取代码:
1、下载到depot_tools。[细节参考: http://www.chromium.org/developers/how-tos/install-depot-tools]
2、把depot_tools文件夹路径加入到环境变量Path中。
3、命令行下进入到打算存储代码的路径,执行:gclient config http://src.chromium.org/svn/releases/27.0.1417.1/ [拉取目前最新的分支代码,可以从 http://src.chromium.org/svn/releases/看到所有分支版本,主干则是:http://src.chromium.org/svn/trunk/src],第一次会触发安装subversion、python,会花费比较多的时间。
安装完成之后,可能会有错误提示,注意使用最新版本depot_tools,有影响google一下就解决。
打开chromium源代码目录下的.gclient,在“custom_deps”节里忽略掉部分测试代码,例如:
solutions = [ { "name" : "27.0.1417.1",
"url" : "http://src.chromium.org/svn/releases/27.0.1417.1",
"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": "",
},
]
我因为忘记了编辑.gclient,代码全拉了(839个工程),还好是在我睡觉的时候拉取的代码:)
4、代码路径下,命令行执行:gclient sync 拉取代码,需要较长时间。拉取代码时没有一个进度条是很不好的事情。中间可能出现各种意外错误。
5、代码路径下,命令行执行:gclient runhooks --force 生成sln
6、开始编译,中途出现了蓝屏!可能是SSD硬盘或者是CPU超频或者是杀毒软件导致的,最好不要安装杀毒软件,可能影响编译速度。编译的时候,不要全部编译,只选择编译chrome工程,估计可以少编译些工程。编译耗时:i5-3210M CPU @ 2.50GHz,8.00GB内存,64位 win7专业版,三星840系列固态硬盘,编译时间超过2小时。
今天试了下使用thinkpad x230,i5 + SSD + 4G内存,编译31分支代码,时间大约两个半小时。4G内存也不算很慢,但是调试的时候比较吃力,内存总是用满。(2013.9.30)
三、
最终效果
工程目录:
这个跟我之前拉取主干生成的目录不一样,之前的样子是:
不知道为啥。
在chrome_exe_main_win.cc的wWinMain里下个断点,OK,能调试。
四、其它相关问题:
1、上一次编译主干代码的时候,在最后生成阶段失败了,据说是vs2010不支持生成超过1G大小的生成物,但这次编译却没发生错误,chrome.dll.pdb大小超过了1G。如果遇上这种错误,可以通过http://dev.chromium.org/developers/how-tos/component-build 的提示,把生成物打散解决。debug下,
如果没有打散,
chrome.dll大小超过200M,如果打散了,chrome超过90M。
2、如果出现了引用计数编译的错误,那是因为之前安装了vs2005,设置了include、lib目录,要把它清理掉。在%localappdata%\Microsoft\MSBuild\v4.0 目录下,
打开“Microsoft.Cpp.Win32.user.props”
修改成:
$(DXSDK_DIR)\include;$(IncludePath)
$(DXSDK_DIR)\lib\x86;$(LibraryPath)
打开 “Microsoft.Cpp.x64.user.props”
修改成:
$(DXSDK_DIR)\include;$(IncludePath)
$(DXSDK_DIR)\lib\x64;$(LibraryPath)
上次我出现过这个错误,这次我没设置该值,编译没出大问题。
3、如果出现了找不到atlthunk的错误。那是因为没有安装wdk。
4、如果出现了如下错误:
D:\svn_chrome\src\third_party\wtl\include\atlapp.h(848): error C2220: warning treated as error - no 'object' file generated
4>D:\svn_chrome\src\third_party\wtl\include\atlapp.h(848): warning C4996: 'vswprintf': swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS.
没办法,按照警告说的,在Preprocessor Definitions 设置了_CRT_NON_CONFORMING_SWPRINTFS。设置了好几个工程,顺利通过编译。上次我遇到了,这次没遇到该问题。
5、我没有设置environment variable
GYP_MSVS_VERSION=2010e, 不确定是否会对编译其它非必要工程造成影响。
五、 参考信息
http://www.chromium.org/developers/how-tos/build-instructions-windows
http://blog.sina.com.cn/s/blog_48f93b530101ergp.html
http://blog.csdn.net/cyxisgreat/article/details/7475054
还有其他网络上的其它资料不列举。
---
http://www.chromium.org/developers/