加载中…
正文 字体大小:

Chrome编译

(2009-07-12 14:13:37)
标签:

webkit

chrome

it

编译篇
   研究Chrome,首先得把它编译出来,这对于后续的代码分析和阅读有很大的帮助,想想自己编译出一个Chrome浏览器来使用,那是一件很开心的事情。
编译环境准备
   Chrome的编译和WebKit相比起来,难度上来说,简直是一元二次方程求解和偏微分方程求解的对比(我到现在还没有完整的把WebKit编译出来,鄙视一下自己)。虽然Chrome也是从WebKit演进过来,差不多也就是把WebKit的JS引擎替换成了V8。但是不得不承认Google把WebKit的编译难度降低了几个数量级。

   言归正传,Chrome官方网站上公布的是基于Visual Studio 2005进行编译,网上也有兄弟基于Visual Studio 2008编译成功过,但我手头上没有Visual Stdio 2008,所以无从得知。本文也是以Visual Studio2005环境为例。我曾经在自己家里的电脑上用Visual C++ 2005 Express版本编译过,没有成功。在XP Professional和Vista Home两个操作系统上均编译成功。

   在下载Chrome代码前,需要安装下面几个软件:

   1. 安装Visual Studio 2005.

   2. 安装Visual Studio 2005 Service Pack 1.

   3. 安装热补丁Hotfix 947315.

   4. 如果操作系统是Vista,还需要安装Visual Studio 2005 Service Pack 1 Update for Windows Vista

   5. 安装Windows 2008 SDK。按照网上说法,如果是Visual Studio 2008,就不需要安装这个了。

   6. 配置Windows 2008 SDK。在开始->程序->Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool.。选择make current按钮,幸运的话,应该能一次成功。如果不能成功,Chrome官方网站上有一个手动配置的帮助,大家可以参考。
下载代码
   Google为Chrome提供了一个一个部署工具depot_tools,包括下载代码、同步代码、上传代码等功能。这个工具采用Python编写的,其中还包含了一些Javascript脚本。depot_tools中包含了一个gclient工具,是我们需要关注的重点。

   下载代码有几种方式:

   1. Chrome官网上提供了一个源代码包,可以直接下载下来。不过这个包并不是最新的包。我采用的是这种方法进行下载的,相对来说比较快。

   2. 采用SVN客户端工具进行下载,比如TortoiseSVN客户端工具,SVN服务器地址是http://src.chromium.org/svn/trunk/src。

   3. 采用google提供的depot_tools工具。

    (1) 下载和安装depot_tools

    (2) 把depot_tools的安装目录设置到系统目录(系统Path环境变量)中。

    (3) 创建一个存放Chrome代码的目录,比如d:\chrome。目录不要包含空格。

    (4) 在命令行下,先将当前目录切换到chrome代码的目录,例如上面的(d:\chrome)。

    (5) 运行gclient config http://src.chromium.org/svn/trunk/src命令。Gclient将会先下载svn工具和python工具,然后调用svn进行代码同步。

   注意:gclient中下载svn和python采用的是javascript实现。如果在需要设置proxy的环境中,则需要需要修改一下脚本。

   1.打开X:\depot_tools\bootstrap\win\get_file.js文件。其中X是你的安装盘符。

   将Line9-Line22行之间的代码

  try {

    xml_http = new ActiveXObject("MSXML2.ServerXMLHTTP");

  } catch (e) {

    WScript.StdOut.WriteLine("[-] XMLHTTP " + new Number(e.number).toHex() +

        ": Cannot create Active-X object (" + e.description) + ").";

    WScript.Quit(1);

  }

  try {

    xml_http.open("GET", url, false);

  } catch (e) {

    WScript.StdOut.WriteLine("[-] XMLHTTP " + new Number(e.number).toHex() +

        ": invalid URL.");

    WScript.Quit(1);

  }

修改成

try {

    xml_http = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0");

  } catch (e) {

    WScript.StdOut.WriteLine("[-] XMLHTTP " + new Number(e.number).toHex() +

        ": Cannot create Active-X object (" + e.description) + ").";

    WScript.Quit(1);

  }

  try {

    xml_http.setProxy(2, proxyIP:Port);//Proxy IP和Port

    xml_http.open("GET", url, false);

    xml_http.setProxyCredentials(username,pwd);//用户名和密码

  } catch (e) {

    WScript.StdOut.WriteLine("[-] XMLHTTP " + new Number(e.number).toHex() +

        ": invalid URL.");

    WScript.Quit(1);

  }
编译代码

   如果你是下载的源代码包,则需要先解压,这个代码包是双重压缩。估计要把所有代码解压下来,半个小时左右,我在我的本本上是花了将近半个小时时间才解压出来,解压下来所有代码的大小是3个多G。

   从网上搜索了很久相关Chrome编译相关的材料,大家都反馈在src\chrome目录下有chrome.sln文件,直接打开这个sln就可以利用Visual Studio 2005进行编译了。但是我翻遍所有代码却找不到这个文件,让我郁闷了很久,开始怀疑是我下的代码版本问题,在线查看了Chrome的SVN目录,发现最新版本也没有这个文件了。检查一下网上的那些文章基本上都是2008年的文章,开始怀疑是否是chrome做了改变,但是从chrome的官网上来看,似乎没有更新。最后在线翻阅了chrome的开发group论坛,才知道Chrome确实作了修改,原来代码中的那些.sln、.vcproj文件全部抛弃了,google自己开发了一个脚本工具GYP工具,这个工具也是采用python编写的。GYP采用了自定义的一套规则,用于生成各种工程文件。


   其实这个文件的内容和visual studio 2005中的.vcproj文件虽然有比较大的差别,但是描述的东西没有太大变化,更简单更简洁一些而已。无非描述了工程的文件,编译设置等内容。

   下面描述一下编译步骤:

   1. 运行命令行工具。

   2. 切换到Chrome主目录下(我的电脑是d:\chrome目录)。

   3. 执行gclient runhooks --force。这个命令将会调用GYP工具,对Chrome.gyp进行解析,生成各个Visual Studio2005工程文件。

   4. 双击chrome/chrome.sln文件,即可打开Visual Studio 2005,一共有215个工程,非常庞大。

   5. 右键选择解决方案,选择生成解决方案,编译开始了。这个过程在我的本本里是持续了2个小时左右,CPU前一个多小时都是持续100%,害得我连看电影都卡的不行了。编译后的文件放置在chrome\debug目录下(我编译的是debug版本)。整个编译下来,Debug目录增加了将近7个G的东东,实在是恐怖!要编译Chrome,至少要保留10个G的空间。

总结
   整个编译Chrome的过程说实话还是花了我不少的力气,不过看着编译出来的chrome,心里还是很happy的。
Chrome编译
   在我编译的过程中主要遇到的几个问题:

   1. 公司有Visual Studio2005,可是因为Proxy的原因,depot_tools工具无法进行,为了突破proxy的限制,花了不少力气。

   2.Chrome工程组织方式发生了变化,但在官网上没有更新,网上其他的资料都是基于旧的版本介绍,所以在适应新的gyp方式方面花了不少力气。

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有