天天看点

chromium编译

本文主要讲解源码下载与编译,适用:vs2010+ninja编译,windows7+windows 8 sdk平台。

源码下载、代码同步

0,官方参考文档:http://www.chromium.org/developers/how-tos/get-the-code

1,准备vpn,如果没有vpn,碰到gfw抽风的时候,非常抓狂,使用vpn省心省力。

2,安装msysgit,并将其bin目录加入到PATH中。

3,下载google的depot tools,git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git,将其目录(形如e:\depot_tools)加入到PATH中。

4,新建文件夹,其名称不能带空格,形如e:\chromium,在此目录下,执行E:\depot_tools\gclient.bat config –git-deps https://chromium.googlesource.com/chromium/src.git,将使用git方式下载源代码。

5,为了减少代码下载量,去掉测试代码等,可以配置custom_deps,copy下列代码到e:\chromium\.gclient中

“custom_deps” : {

“src/webkit/data/layout_tests/LayoutTests”:None,

“src/third_party/WebKit/LayoutTests”: None,

“src/chrome_frame/tools/test/reference_build/chrome_win”: None,

“src/chrome/test/data/perf/canvas_bench”: None,

“src/chrome/test/data/perf/frame_rate/content”: None,

“src/chrome/tools/test/reference_build/chrome_mac”: None,

“src/chrome/tools/test/reference_build/chrome_win”: None,

“src/chrome/tools/test/reference_build/chrome_linux”: None,

‘src/chrome/test/data/layout_tests/LayoutTests/fast/workers’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/platform/chromium/fast/workers’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/fast/js/resources’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/platform/chromium-mac/http/tests/workers’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/http/tests/resources’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/storage/domstorage’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/fast/events’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/http/tests/workers’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/http/tests/xmlhttprequest’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/platform/chromium-win/storage/domstorage’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/http/tests/appcache’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/platform/chromium-win/fast/events’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/platform/chromium-mac/fast/events’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/platform/chromium-mac/storage/domstorage’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/websocket/tests/workers’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/platform/chromium-win/fast/workers’: None,

‘src/chrome/test/data/layout_tests/LayoutTests/platform/chromium-win/http/tests/workers’: None,

‘o3d/samples’: None,

},

6,因为后续需要适用到ninja编译,需要先设置变量:set GYP_GENERATORS=ninja,msvs,开始执行代码同步gclient.bat sync –force,最好是每次执行都加上–force;如果执行错误或者中途退出,再次同步需要gclient.bat sync –force。

编译前准备

0,官方参考文档:http://www.chromium.org/developers/how-tos/build-instructions-windows

1,windows平台编译,需要windows8的sdk:http://msdn.microsoft.com/en-us/windows/hardware/hh852363.aspx,安装时选择默认路径。

2,适用于vs2010+windows 8 sdk的安装补丁,修改C:\Program Files (x86)\Windows Kits\8.0\Include\winrt\asyncinfo.h,将66行的class注释或者删除;注意此文件修改需要管理员权限。

编译

0,官方ninja参考文档:https://code.google.com/p/chromium/wiki/NinjaBuild

1,后续将适用ninja编译,先设置环境变量:set GYP_GENERATORS=ninja,msvs

2,执行gclient runhooks –force后,会生成vs的sln文件和ninja工程文件,生成sln工程文件(共700+的子工程),打开工程文件后,开始编译,不过此方法编译比较慢,使用i5双核cpu,8G内存,ssd硬盘的机器,耗用100%的cpu和3G的内存,编译时间推测比较长。

3,根据官方文档说明,可以选择msbuild.exe、devenv.exe、ninja编译等,但推荐使用ninja编译,因为此方式比vs编译速度快不少,可以考虑使用ninja编译,但是看代码和智能提示又需要vs的环境,所以最好是同时生成两份工程文件,一个给ninja适用,另外一个给vs适用,只是时间比较长,并且2份的生成的中间文件不可共享使用。

5,ninja编译

set GYP_DEFINES=component=shared_library #此项必须设置,可以提升链接速度
set GYP_GENERATORS=ninja,msvs #为python执行做准备
python build\gyp_chromium
ninja -C out\Debug chrome.exe      

可能出现的问题

0,gclient.bat sync –force同步代码发现不可识别编码问题

现象:

Error processing node

<?xml version=”1.0″ encoding=”UTF-8″?><structure allowexternalscript=”true” file=”bookmark_manager/main.html” flattenhtml=”true” name=”IDR_BOOKMARK_MANAGER_MAIN” type=”chrome_html” />

d_windows_registry()

File “E:\depot_tools\python276_bin\lib\mimetypes.py“, line 259, in read_windows_registry

for subkeyname in enum_types(hkcr):

File “E:\depot_tools\python276_bin\lib\mimetypes.py”, line 249, in enum_types

ctype = ctype.encode(default_encoding) # omit in 3.x!

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xb0 in position 1: ordinal

not in range(128)

从提示来看,应该是属于编码问题,查看mimetypes.py的代码249行,遍历mime类型时发生了编码问题,具体的位置:HKEY_CLASSES_ROOT\MIME\Database\Content Type,提示显示,存在非ascii码不能处理的其他编码类型的字符。

解决:直接修改mimetypes.py的源码,将其中的UnicodeEncodeError替换为UnicodeError,重新编译即可,官方的patch位置:http://bugs.python.org/file18143/9291.patch

c++

继续阅读