NSPR 平台¶
构建系统和支持的平台¶
NSPR 已在 20 多个平台上实现。一个平台可能有多种实现其多线程和 I/O 功能的策略。本文介绍了 NSPR 构建系统以及如何在每个平台上指定特定的实现策略、编译器或编译器开关,或构建的目标操作系统。
实现策略¶
线程是 NSPR 的核心,I/O 函数与多线程功能相关联,因为许多 I/O 函数可能会阻塞调用线程。NSPR 有多种实现其多线程和 I/O 功能的策略。各种实现策略可以组织成以下层次结构
经典 NSPR(这是我们的第一个代码库,因此称为“经典 NSPR”)
仅限本地线程:所有线程都是由 NSPR 实现的用户级线程。仅限全局线程:所有线程都是操作系统供应商提供的原生线程。例如,Solaris UI(Unix 国际)线程和 Win32 线程。组合:NSPR 在原生内核级线程之上复用用户级线程。这也称为 MxN 模型。目前,组合模型有三种实现。
IRIX:sprocs + NSPR 用户级线程
Windows NT:Win32 线程 + NT 纤维
Pthreads-user:内核级 pthreads + NSPR 用户级线程
Pthreads:所有线程都是 pthreads。相关代码位于 mozilla/nsprpub/pr/src/pthreads
(线程和 I/O)。经典 NSPR 和 pthreads 在线程和 I/O 区域具有相对独立的代码库
经典 NSPR:
mozilla/nsprpub/pr/src/threads/combined
(线程),mozilla/nsprpub/pr/src/io
(I/O)Pthreads:
mozilla/nsprpub/pr/src/pthreads
(线程和 I/O)
请注意,mozilla/nsprpub/pr/src/io
下的一些文件由经典 NSPR 和 pthreads 共享。请参阅 mozilla/nsprpub/pr/src/Makefile
以获取每个实现策略使用的文件的完整列表(请参阅 makefile 变量 OBJS
的定义)。
编译器¶
为了方便与可能使用原生线程的第三方库集成,NSPR 尽可能使用原生线程。因此,大多数平台都使用原生编译器来构建 NSPR,因为它们对原生线程有更好的调试支持。唯一的例外是 Solaris,它同时使用 cc 和 gcc。
NSPR 构建系统¶
NSPR 构建系统基于 GNU make。我们在 Unix 上使用 GNU make 3.74,但我们的 makefile 在更新版本的 GNU make 下应该也能正常工作。
NSPR 中的每个目录都有一个名为 Makefile
的 makefile,它包含 mozilla/nsprpub/config
中的 makefile 片段。NSPR makefile 实现常见的 Makefile 目标,例如 export
、libs
和 install
。但是,某些 makefile 目标在 NSPR 中是空操作,因为它们对于 NSPR 不是必需的。
要构建 NSPR,请更改到源代码树的根目录 cd mozilla/nsprpub
,然后发出命令 gmake
。Make 将递归进入所有子目录,并执行正确的操作。
下表列出了常见的 NSPR makefile 目标。
|
默认目标。与 |
|
执行完整构建。 |
|
空操作。 |
|
空操作。 |
|
空操作。这意味着 NSPR makefile 没有头文件依赖项。 |
|
删除 |
|
删除 |
|
删除所有生成的文件和目录。 |
|
与 |
下表列出了可以在命令行上指定以自定义构建的常用 makefile 变量。
|
优化构建(默认:调试构建)。 |
|
在 NT 上进行交叉编译时设置为目标操作系统( |
|
使用 gcc 和 g++(默认:原生编译器)。 |
|
构建 pthreads 版本。 |
|
构建经典 NSPR 版本(通常是仅限本地线程)。 |
|
构建 pthreads-user 版本。 |
|
构建仅限本地线程的版本。 |
|
在 Win32 上,在调试构建中使用 |
|
在 IRIX 上,使用 |
|
启用 IPv6。 |
|
为 Netscape Client (mozilla) 调整 NSPR 构建系统。 |