win7下编译chromium

chromium(http://www.chromium.org/Home)是google chrome浏览器的开发版,极具研究价值,是学习c++代码和desktop程序框架的好东西。当然如果想研究浏览器技术,chromium更是必看的代码。本文主要介绍chromium在win7上基于Visual Studio平台的编译,稍后随着对chromium研究的深入,会记录更多的学习总结。

    一、准备条件
    首先要说的是chromium的代码维护和编译还是很方便的,google的工具做的非常好。
    但是,chromium的代码量非常大(包括第三方库大于2G),编译时会生成约5000个目标文件,约100个库文件,因此对编译环境的要求很高。需要确认的准备条件如下:
    1,需要支持64位的系统,原因是编译链接时需要4G以上的内存,因此最好不要用winxp。
    2,需要大于60G的硬盘空间,这是官方的要求,我build debug版以后,大概占用了25G。当然,还要预留出安装vs2010和其他sdk的空间。
    3,越多越好的cpu和内存,否则build会很痛苦。
    4,通畅的网络,速度要快,且不要频繁被墙,获取源码的时候很重要。

    二、基本步骤
    详细说明之前先来了解基本步骤,心里有个谱。
    1,安装vs2010及SP1;
    2,安装Win8 SDK;
    3,安装June 2010 DirectX SDK;
    4,获取source code;
    5,生成makefile及工程文件;
    6,build,运行。

    三、动手
    终于开始动手了,不过还要先下载需要的安装包(具体参考http://dev.chromium.org/developers/how-tos/build-instructions-windows),包括:vs2010(我装的Ultimate版),vs2010 SP1Win8 SDKDirectX SDK
    1,安装vs2010及SP1
    需要说明的是vs2010和vs2005,vs2008都不冲突的,直接装即可。为了节省硬盘空间,安装的时候可以选择只安装C++和C#的支持,C++下面有个x64编译的支持选项一定保留。
    另外一个注意的地方是,安装完vs2010首次启动时,会提示选择是否从之前的vs版本继承配置参数,我的建议是不选择,防止vs2005或vs2008中的配置捣乱,后面还涉及到一个修改的动作与此有关。
    2,安装Win8 SDK
    这一步也很简单,安装时可能会提示没有安装.Net framework 4.5,不用管,继续安装即可。
    另外请注意安装到默认路径“C:Program Files (x86)Windows Kits8.0”,否则需要手动配置环境变量。
    3,安装DirectX SDK
    安装时如果出现“Error Code: S1023”错误,请将“Microsoft Visual C++ 2010 x64 Redistributable”和“Microsoft Visual C++ 2010 x86 Redistributable”都卸载,如果还想用装完DirectX SDK后可以重新安装。
    此时所需的编译环境和sdk都已安装完毕,但还需要配置一下vs2010的环境。在vs2008等环境中,我们可以在“Tools -> Options -> Projects and Solutions -> VC++ Directories”设置引用的头文件和库文件目录,不过vs2010去掉了这个功能。我们需要用其他的办法达到这个效果,将dxsdk目录加入到环境中。
    进入你的用户目录下的“AppDataLocal”目录,或者按Win+R键输入“%LOCALAPPDATA%”回车,在下面的“MicrosoftMSBuildv4.0”目录中有两个文件:“Microsoft.Cpp.Win32.user.props”和“Microsoft.Cpp.x64.user.props”。我们通过修改这两个配置文件引用dxsdk目录。注意如果没有MSBuild目录,请先运行一次vs2010就会自动生成。
    由于这个目录在win7下需要有管理员权限才能修改,因此需要用管理员权限打开文本编辑软件加载这两个文件。或者在开始菜单中搜索“cmd”,选择cmd.exe右键“以管理员身份运行”,输入类似“notepad C:UsersmynameAppDataLocalMicrosoftMSBuildv4.0Microsoft.Cpp.Win32.user.props”的命令行,启动记事本编辑保存。改动如下:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludePath>$(DXSDK_DIR)include;$(IncludePath)</IncludePath>
    <LibraryPath>$(DXSDK_DIR)libx86;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
</Project> 

将红色部分添加进文件。“Microsoft.Cpp.x64.user.props”文件的修改类似,将“x86”改为“x64”。
    4,Win8 SDK补丁
    Win8 SDK头文件asyncinfo.h中定义了一种vs2010不支持的类型,编译chromium的时候需要将这个文件修改一下。文件路径:C:Program Files (x86)Windows Kits8.0Includewinrtasyncinfo.h,第66行按如下所示修改

#pragma once
 #ifdef __cplusplus
 namespace ABI { namespace Windows { namespace Foundation {
 enum AsyncStatus {
 enum class AsyncStatus {
   Started = 0,
   Completed, 
   Canceled,

将class关键字注释掉即可。同样,如有权限问题按前述的方法进行修改。
    5,获取代码
    chromium的代码库是通过git和svn进行管理的,维护时还配合一系列的python脚本。google官方不推荐直接用git或svn来check out代码,那样速度将会非常慢。比较好的做法是先下载一个源码压缩包,然后再更新代码。
    首先下载源码包2G多一点),然后解压缩,为方便后续描述,我们定义这个目录在“D:chromium”。(注意该目录尽量不包含空格和中文,以免出现异常情况。) 解压的过程很漫长,完毕后源码都在“D:chromiumhomesrc_tarball arballchromiumsrc”这个目录下。你会发现其中已经包含了svn文件,这样我们就可以用google的工具depot_tools来同步最新的代码了。
    depot_tools是一个管理代码脚本集,可以checkout、生成工程文件、提交review代码等。windows下安装很简单,只需要下载depot_tools包,解压到某目录下,然后将该目录添加到系统环境变量Path中即可。
    安装好后,启动一个cmd,进入depot_tools目录运行“gclient”命令。该命令将更新depot_tools内的脚本,并负责安装配置git、svn、pyhton等工具,因此时间会比较长,耐心等待。
    启动一个cmd,进入chromium代码目录“D:chromiumhomesrc_tarball arballchromiumsrc”,运行命令“gclient sync --force”,将会进行代码更新及第三方代码库的更新,并生成工程文件。实际上,该命令首先根据.glcient文件设置代码库参数,然后搜索所有的DEPS文件,根据文件中的列表下载源代码(根据平台下载本平台支持的代码);之后会执行“gclient runhooks”命令的内容,生成平台支持的工程文件。如果我们不想更新代码,不运行“gclient sync”而直接运行“gclient runhooks”也可以,这样直接生成工程文件。这一步时间会更久一些,一定要耐心。(后续再更新代码可以去掉--force参数)
    不过由于网络或网站的原因,有时一些代码或工具下载会失败,导致sync error。比如我这里就出现“download_nacl_toolchains.py”返回失败的现象,原因是到“commondatastorage.googleapis..com”下载native client支持的工具包(共4个)时失败,请参考这篇文章中的方法,基本思路就是找到工具包下载地址,手动下载后再放到相关目录下执行。[注]:以上问题追踪发现原因的https地址下载失败率比较高,尝试改为http下载方式后成功。具体方法为:打开“D:chromiumhomesrc_tarball arballchromiumsrc ative_clientuild oolchainbinaries.py”文件,将头部的“BASE_DOWNLOAD_URL”和“BASE_ONCE_DOWNLOAD_URL”定义中的https改为http即可。
    如果想生成makefile等文件,可以进入代码目录“D:chromiumhomesrc_tarball arballchromiumsrc”,运行命令“gclient runhooks”,chromium将用GYP文件生成makefile和工程文件。同样是漫长的等待。不过执行该步骤前,请先参考执行第6步的“component build”设置
    6,编译
    开始编译前还要做一个动作,设置“component build”(也叫“shared library”或“multi-dll build”),即将chrome默认build一个静态库改为编译多个动态库,原因是默认编译静态库时,将会生成一个非常大的“chrome_dll.pdb”文件(超过1G),而vs2010不支持生成超过1G的文件。
    具体方法请参考官方说明Component build / Shared Library / Multi-DLL build,采用的是第3种方法,
即在D:chromiumhomesrc_tarball arballchromium”目录下新建一个“chromium.gyp_env”文件,在其中输入“{'GYP_DEFINES': 'component=shared_library'} # use space to delimit additional defines.”保存。然后再执行“gclient runhooks”重新生成工程文件。
    OK,现在打开“D:chromiumhomesrc_tarball arballchromiumsrcchromechrome.sln”文件编译吧,这次的时间更长(这里竟然有6个小时),但编译成功的喜悦更重要,如果编译的是debug,那么在“D:chromiumhomesrc_tarball arballchromiumsrcuildDebug”下已经生成了chrome.exe,运行一下看看效果吧!

    chromium代码是非常值得研究的,chrome是基于webkit的,对于webkit的研究是重中之重。源码目录下“srcwebkitwebkit.sln”中有个test_shell工程,是一个最简单的基于webkit的浏览器,可以从这里入手。
原文地址:https://www.cnblogs.com/hzcya1995/p/13318724.html