构建 NSS¶
简介¶
此页面详细介绍了如何构建 NSS。由于 NSS 是一个跨平台库,它可以在许多不同的平台上构建,并且具有许多选项,因此构建过程可能很复杂。_ 同时维护了两个构建系统:基于 Make
的系统和基于 gyp
的系统。
先决条件¶
NSS 需要 C 和 C++ 编译器。它具有最少的依赖项,仅包括标准 C 和 C++ 库,以及 zlib。 构建时,还需要 make。理想情况下,还要安装 gyp-next 和 ninja 并将其放在您的路径中。 建议这样做,因为构建速度更快且更可靠。请注意,我们目前 gyp
未维护,并且我们对 gyp-next
的支持处于实验阶段,可能不稳定。
要在不同的平台上安装先决条件,可以使用以下命令
在 Linux 上
sudo apt install mercurial git ninja-build python3-pip
python3 -m pip install gyp-next
在 MacOS 上
brew install mercurial git ninja python3-pip
python3 -m pip install gyp-next
还需要确保路径中存在 python(不仅仅是 python3)可执行文件。Homebrew Python 安装具有必要的符号链接,但可能需要显式添加到 PATH 变量中,例如
export PATH="/opt/homebrew/opt/python/libexec/bin:$PATH"
在 Windows 上
<TODO>
注意
要从项目存储库中检索源代码,用户需要下载发布版本或使用他们喜欢的版本控制系统(git 或 Mercurial)提取源代码。当以压缩存档的形式下载时,构建 NSS 发布版本不需要安装 VCS。
默认情况下,Mozilla 对 NSS 使用 Mercurial 存储库。如果您希望为 NSS 贡献代码并使用 git
而不是 Mercurial,我们建议您安装 git-cinnabar。
源代码¶
NSS 和 NSPR 与其他 Mozilla 项目一样,使用 Mercurial 进行源代码控制。要检出 NSS 和 NSPR 的最新源代码(可能不是稳定版本的一部分),请使用以下命令
hg clone https://hg.mozilla.org/projects/nspr
hg clone https://hg.mozilla.org/projects/nss
**要获取特定版本的源代码,请参阅:** ref:mozilla_projects_nss_releases 。
要使用 git-cinnabar
下载源代码
git clone hg::https://hg.mozilla.org/projects/nspr
git clone hg::https://hg.mozilla.org/projects/nss
使用 gyp 和 ninja 构建¶
使用 nss
目录中的构建脚本构建 NSS 和 NSPR
cd nss
./build.sh
这将在名为 dist
的父目录中构建 NSPR 和 NSS。
此脚本提供了构建选项:-o
将以 **发布** 模式而不是 **调试** 模式构建,而 -c
将在构建之前 **清理** dist
目录。
可以通过运行 ./build.sh --help
显示其他构建选项。
使用 make 构建¶
或者,可以使用 make
目标,它会产生类似的结果。这支持一些备选选项,但速度可能会慢得多。
USE_64=1 make -j
NSS 的基于 make 的构建系统使用各种变量来控制构建。以下是一些变量,以及它们可能设置为的值。
BUILD_OPT |
|
---|---|
0 |
构建 NSS 的调试(非优化)版本。**这是默认值。** |
1 |
构建 NSS 的优化(非调试)版本。 |
USE_64 |
|
---|---|
0 |
为 32 位环境/ABI 构建。**这是默认值。** |
1 |
为 64 位环境/ABI 构建。建议使用此选项。 |
USE_ASAN |
|
---|---|
0 |
不创建 AddressSanitizer 构建。**这是默认值。** |
1 |
创建 AddressSanitizer 构建。 |
单元测试¶
NSS 包含广泛的单元测试。运行这些测试的脚本位于 tests
目录中。通过以下方式运行标准套件
HOST=localhost DOMSUF=localdomain USE_64=1 ./tests/all.sh
单元测试配置¶
NSS 测试使用环境变量进行配置。脚本将尝试推断 HOST
和 DOMSUF
的值,但可能会失败。将 localhost
和 localdomain
替换为主机的主机名和域名后缀。您需要能够连接到 $HOST.$DOMSUF
。
如果您没有域名后缀,可以向 /etc/hosts
(在 Windows 上为 c:\Windows\System32\drivers\etc\hosts
)添加如下条目
127.0.0.1 localhost.localdomain
通过打开命令行并键入以下命令验证此操作:ping localhost.localdomain
。
如果使用 32 位构建,请删除 USE_64=1
覆盖。
测试结果¶
运行所有测试可能需要相当长的时间。
测试输出存储在 tests_results/security/$HOST.$NUMBER/
中。文件 results.html
总结了结果,output.log
捕获了所有测试输出。
nss/tests
的其他子目录包含运行完整套件子集的脚本。可以直接运行这些脚本而不是 all.sh
,这可能会节省一些时间,但会降低覆盖率。