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 目标,例如 exportlibsinstall。但是,某些 makefile 目标在 NSPR 中是空操作,因为它们对于 NSPR 不是必需的。

要构建 NSPR,请更改到源代码树的根目录 cd mozilla/nsprpub,然后发出命令 gmake。Make 将递归进入所有子目录,并执行正确的操作。

下表列出了常见的 NSPR makefile 目标。

all

默认目标。与 export libs install 相同。

export

执行完整构建。

libs

空操作。

install

空操作。

depend

空操作。这意味着 NSPR makefile 没有头文件依赖项。

clean

删除 .o 文件。

clobber

删除 .o 文件、库和可执行程序。

realclean

删除所有生成的文件和目录。

clobber_all

realclean 相同。

下表列出了可以在命令行上指定以自定义构建的常用 makefile 变量。

BUILD_OPT

优化构建(默认:调试构建)。

OS_TARGET

在 NT 上进行交叉编译时设置为目标操作系统(WIN95WIN16)(默认:与主机操作系统相同)。

NS_USE_GCC

使用 gcc 和 g++(默认:原生编译器)。

USE_PTHREADS

构建 pthreads 版本。

CLASSIC_NSPR

构建经典 NSPR 版本(通常是仅限本地线程)。

PTHREADS_USER

构建 pthreads-user 版本。

LOCAL_THREADS_ONLY

构建仅限本地线程的版本。

USE_DEBUG_RTL

在 Win32 上,在调试构建中使用 /MDd 编译(默认:/MD)。优化构建始终使用 /MD

USE_N32

在 IRIX 上,使用 -n32 编译(默认:-32)。

USE_IPV6

启用 IPv6。

MOZILLA_CLIENT

为 Netscape Client (mozilla) 调整 NSPR 构建系统。