WebKit 在Windows 平台下编译小结
WebKit 是世界公认的优秀的开源浏览器内核。具有渲染速度快,灵活可定制,多平台支持等优点。国内知名的Maxthon 和 UCWeb 都将WebKit选作浏览器内核。谷歌公司和苹果公司也分别在WebKit 基础上只做了Chrome 浏览器和Safari 浏览器。
虽然WebKit 已经越来越多的被广大程序员接受,但其编译过程却非常之痛苦。下面将我编译WebKit 代码的经验与大家分享。
1) 获取WebKit 源代码
WebKit 源代码是使用Subversion 工具做管理的。因此,只要具备Subversion 客户端就可以从http://svn.webkit.org/repository/webkit/trunk 获取源代码。但是,这并不是最好的方式。在实际编译过程中通过svn拿下来的代码有可能为你带来许多的烦恼。因此,我推荐从WebKit的Nightly build 直接下载WebKit 源代码压缩包。具体地址是:http://nightly.webkit.org/builds/trunk/src/1 像WebKit 这么大的项目仍然遵循Daily Build 的原则,真是挺了不起的。
WebKit 源代码在本文写作时,版本是r52221 但我最近两天都没有将该版本的WebKit编译成功。原因是,使用Visual Studio 2005 打开项目几分钟后,Visual Studio 2005 会停止响应。我测试过r50006版,也就是5字头的第一版,就没有这个问题。版本号越大说明源代码越新,反之就越古老。
2) WebKit 编译环境的搭建
WebKit 网站有一篇文章说明了一下WebKit 在Windows 平台下的环境搭建:http://webkit.org/building/tools.html 但这篇文章写得也太过简单了。这也是WebKit 最最蹂躏人的地方。我在历经十数次失败之后,终于找到了通往目标的捷径。
硬件方面
内存最好找一台内存大于2G的计算机。 因为WebKit 项目太过庞大了,会生成数以百计的.obj 文件。在执行链接操作时,内存会需要大概1.6G内存。如果你机器安装的又是Vista 之类的吃内存操作系统,那就等着看link.exe 告诉你"Out of memory"吧。 我安装了Vista的机器的内存只有区区2G,链接了数次都没有成功,最后逼得我在安全模式下(连网卡驱动都没敢加载)编译,终于在内存峰值到达1.99G 时涉险过关,真是太刺激了,太刺激了。
硬盘当然是越大越好,因为WebKit 源代码展开后需要占用160M-190M磁盘空间,编译过程产生的中间文件需要大约4G的存储空间。外加上Cygwin Visual Studio 等占据的磁盘空间,这些还是挺大的。 最最重要的是系统盘最好预留出4G左右的空间。
其实使用多核的CPU对编译WebKit 也是有好处的,编译脚本可以同时并行的调用cl.exe 编译WebKit,大大缩短了编译时间。
软件方面
首先你需要安装Visual Studio 2005 SP1 如果是Vista 或者Window 7 需要安装 SP1 update for vista。 Visual C++ 2005 Express 也是可以编译WebKit的,但是需要单独安装 Platform SDK。 实践证明WebKit 在Platform 5.0 6.0 上都可以编译通过。
这里也会引申出一个问题,如果你的机器上已经安装了Visual Studio 2008 怎么办? 别担心,Visual Studio 2005 和Visual Studio 2008 是可以共存的,并且Visual Studio 2005 可以在Viusal Studio 2008 之后安装。但是,需要注意的是,当Visual Studio 2005 在Visual Studio 2008 之后安装后,WebKit 的perl脚本只会到 “系统盘\Program Files\Microsoft Visual Studio\” 下面去找VC 的bin文件夹(也就是cl.exe 所在文件夹)。如果你安装的VS 2005 不在系统盘,需要将VC的bin文件夹拷贝到系统盘的那个目录中去。
在安装完Visual Studio 2005 之后,需要安装另一个大块头Cygwin。Cygwin实际上是在Windows 上模拟了一个Unix 环境。 安装Cygwin最好不要直接使用Cygwin网站上给出的setup.exe 文件。而是使用WebKit.org网站上给出的cygwin-downloader 工具。 cygwin-downloader 会下载编译WebKit 所需的101 个工具(现在可能又多了几个),诸如perl、zlib、bash 等等。待下载完成后,再运行Cygwin的安装工具 Setup.exe 选择从本地目录安装。请注意!Cygwin 要安装到系统盘分区下,如C盘是系统盘,那么Cygwin就必须安装在C:\cygwin 下。安装完成后,大约会占据几百兆的空间。
下一步,仍需要安装的是QuickTime SDK。 据有人说可以不安装这个QuickTime SDK,但我发现如果不安装的话WebKit 解决方案中的QTMovie 项目一定是无法编译成功的。 QuickTime 一定要安装在 系统盘:\Program Files\QucikTime SDK\ 下面,千万别改动安装路径。
最后,在解压缩WebKit 源代码文件之后,还需要到webKit.org 站点下载 WebKitSupportLibrary.zip 文件,这个文件是一些第三方库在Windows 平台上预先编译好的版本。供WebKit 链接时使用。下载后,zip文件无需解压缩,直接放在WebKit的根目录下即可。
编译步骤
1) 设定环境变量。将WEBKITLIBRARIESDIR设定为 WebKit 源代码目录\WebKitLibraries\win 路径; 将WEBKITOUTPUTDIR 设为你打算要存放obj和dll 的输出文件夹,当然这个文件夹所在的分区至少要有4G的剩余空间。
2) 执行更新脚本。 请在桌面上运行cygwin 的命令行窗口,然后通过CD 命令(和DOS的CD命令一样) 跳转至WebKit 源代码目录\WebKitTools\Scripts 文件夹下。比如,我的WebKit 源代码放在F盘,就是 cd F:/WebKit/WebKitTools/Scripts/ 运行该目录下的 Update-WebKit 和 Update-WebKit-Support-libs 两个脚本。 很多博客上都没有提到这个步骤,实际上这个步骤是能否成功编译的关键。
3) 成功执行完上面两步后,就可以使用Visual Studio 2005 打开位于 WebKit 源代码目录\WebKit\win\WebKit.vcproj\ 目录下的 WebKit.sln 解决方案了。这个sln默认带有六个编译配置 Debug、Debug_all、Debug_Cairo、Release、Debug_Internal、Release_Cairo。用Release 编译出来的就是用苹果自己的渲染引擎的版本,和Safari 的一致。 用Release_Cairo 编译出来的是支持Cairo渲染引擎的版本,这个版本可以脱离苹果的环境单独跑,但同时也无法放到苹果的Safari 环境中运行。要想监测编译是否成功,可使用WinLauncher.exe 这个应用程序加载WebKit 进行测试。
先写到这里,以后想起什么来再补充吧。