如何在Windows平台上编译Firefox原创
金蝶云社区-墨家总院
墨家总院
9人赞赏了该文章 2429次浏览 未经作者许可,禁止转载编辑于2019年03月27日 09:46:37
封面

(本文独家发布在金蝶云社区上)


最近,我需要从源代码来构建Firefox浏览器。 我是按照火狐官方文档Build Firefox for Windows来进行操作的,但是发现他不是百分之百work的。有些问题没有在官方教程中被提到,但是这些问题足以让你的编译旅程裹足不前。,所以我写了这篇文章来填补漏洞。顺便说一句,官方教程里的大部分内容都不会在这里重复叙述,我只是概述了一些重点,因此我强烈建议你先阅读之前的官方教程。

必要的软硬件前提条件

要在Windows上构建Firefox,你需要64位版本的Windows 7或更高版本,以及硬盘容量大约有40 GB的可用空间。 你可以通过右键单击“开始”菜单中的“计算机”,单击“属性”,然后单击“系统”,确保Windows 7上的Windows版本为64位。 在Windows 8.1和Windows 10上,右键单击“Windows”菜单按钮并选择“系统”将显示相同的信息。你也可以在任何版本的Windows上同时按下键盘上的“Windows”和“暂停中断”按钮。以上是基本的软硬件要求,下面是特殊的软件依赖:

从官方教程上可以得知,在编译Firefox之前必须先安装好三个软件:

  1. Visual Studio 2017 或者 Visual Studio 2015, 我强烈建议安装2017.

  2. Rust软件包

  3. 以及Mozila自己的build工具MozillaBuild.

等这些软件装好之后,官方网站的教程其他部分非常简单:

准备源代码目录:

cd c:/
mkdir mozilla-source
cd mozilla-source

下载源代码:

hg clone https://hg.mozilla.org/mozilla-central

编译源代码:

mach build

运行build脚本:

mach run

你认为你将完美得将源代码编成可执行程序?那几乎是白日做梦,还有很多困难需要去解决。

屠杀魔鬼—解决遇到得问题

现在我们将阻碍我们hacking firefox的拦路虎全部干掉!

在编译之前

在运行“mach build”之前, 需要运行“mach bootstrap”来对初始化编译环境。但是在运行“bootstrap”之后,我们需要做出如下选择:

$ mach bootstrap
mach bootstrap is not fully implemented in MozillaBuild

Please choose the version of Firefox you want to build:
1. Firefox for Desktop Artifact Mode
2. Firefox for Desktop
3. Firefox for Android Artifact Mode
4. Firefox for Android

我自己经过几次测试后,选项2更好,根本原因我目前还没调查清楚。然后顺着提示,你可以选择yes或者no,这些都无所谓。

在编译过程中

运行“mach build”后,首先启动检查程序。检查程序主要是用来查看有哪些依赖得软件包,其中 最重要的是llvm-config,但是LLVM官方站点的Windows二进制文件不包含llvm-config!我们必须自己编译。 他妈的教程根本没有提到这一点!并且LLVM源代码版本必须高于3.9.0,我已经成功地构建了llvm和clang 4.0。下面这部分内容主要包括llvm的官方文档没有提及的关于如何构建llvm的一些细节和技巧,如果没有兴趣可以跳过。

如何在64位Windows系统上编译llvm和clang

除了来llvm的官方教程http://clang.llvm.org/get_started.html里说的步骤之外, 我必须用Cygwin64bit来做一些设置:

cmake -G "Visual Studio 15 2017 Win64" -t host=x64 ..

这个命令将会生成正确的VS工程文件!

将llvm二进制目录加到.bash_profile文件中

因为mozila编译系统使用类似unix的终端(MINGW32)在Windows上编译,所以在用户目录下的.bash_profile中设置路径会生效:

PATH=$PATH:c/llvm/Release/bin

最后

还有两件事需要调查:

  • 熟悉源代码,火狐浏览器是个规模庞大的工程,类似操作系统的代码量,因此探索代码将会是一场漫长的旅途。

  • 第二个问题是如何从源代码构建Windows安装包,目前我已经知道火狐浏览器的安装包是nsis语言编写的,但是如何制作安装包还没有在官方文档里出现。

参考

  1. LLVM官方网站

  2. Mozila官方网站


赞 9