本文介绍了在Windows上从源代码构建Firefox浏览器的详细过程,指出官方教程的不足并补充了未提及的问题和解决方案,如安装必要的软件、选择编译版本、编译llvm和clang的注意事项等,同时提出了构建安装包等进一步探索的方向。
(本文独家发布在金蝶云社区上)
最近,我需要从源代码来构建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之前必须先安装好三个软件:
Visual Studio 2017 或者 Visual Studio 2015, 我强烈建议安装2017.
Rust软件包
以及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语言编写的,但是如何制作安装包还没有在官方文档里出现。
参考
LLVM官方网站
Mozila官方网站
推荐阅读