1.代码下载
openjdk github地址:https://github.com/openjdk/jdk/tree/jdk8-b120
这里我选择的是jdk8的最后一个版本
下载之后使用idea打开,如下图所示
2. 构建
2.1 获取你的电脑上要安装的软件
下面列出了各个操作系统上需要前置安装的软件
Linux | Solaris | Windows | Mac OS X |
---|---|---|---|
alsa, freetype, cups, xrender. | Studio Compilers, freetype, cups, xrender. | Visual Studio 2010,CYGWIN or MinGW/MSYS | XCode 4.5.2 |
2.1.1 Linux
使用 Linux 时,尽量优先使用系统自带的软件包,而不是自己构建或从其他地方获取软件包。大多数 Linux 构建应该可以使用系统提供的软件包完成。
请注意,一些 Linux 系统习惯于为你预先设置环境变量,例如,JAVA_HOME 可能会被预定义为指向你系统上安装的 JDK。你需要取消设置 JAVA_HOME。建议运行 env 命令,检查从系统默认设置中获取的环境变量是否适合构建 OpenJDK。
2.1.2 Solaris
至少需要 Studio 12 Update 1 Compilers (包含版本 5.10 的 C 和 C++ 编译器),并且需要包含特定的补丁。
Solaris SPARC 补丁列表如下:
118683-05: SunOS 5.10: 用于分析库和汇编器的补丁
119963-21: SunOS 5.10: C++ 共享库补丁
120753-08: SunOS 5.10: 微任务库(libmtsk)补丁
128228-09: Sun Studio 12 更新 1: Sun C++ 编译器补丁
141860-03: Sun Studio 12 更新 1: Sun C、C++、F77、F95 编译器通用补丁
141861-05: Sun Studio 12 更新 1: Sun C 编译器补丁
142371-01: Sun Studio 12.1 更新 1: dbx 补丁
143384-02: Sun Studio 12 更新 1: 调试信息处理补丁
143385-02: Sun Studio 12 更新 1: Sun C、C++、F77、F95 编译器通用补丁
142369-01: Sun Studio 12.1: 性能分析工具补丁
Solaris X86 补丁列表如下:
119961-07: SunOS 5.10_x86, x64: 用于分析库和汇编器的补丁
119964-21: SunOS 5.10_x86: C++_x86 共享库补丁
120754-08: SunOS 5.10_x86: 微任务库(libmtsk)补丁
141858-06: Sun Studio 12 更新 1_x86: x86 后端的 Sun 编译器通用补丁
128229-09: Sun Studio 12 更新 1_x86: C++ 编译器补丁
142363-05: Sun Studio 12 更新 1_x86: C 编译器补丁
142368-01: Sun Studio 12.1_x86: 性能分析工具补丁
将 bin 目录放入 PATH 中。
Oracle Solaris Studio Express 编译器也可以选择,可以在 这里 获取,尽管这些编译器还没有被广泛使用。
2.1.3 Windows
在 Windows 上进行构建需要一个类 Unix 的环境,尤其是一个类 Unix 的 shell。目前有几种这样的环境可用,其中 Cygwin 和 MinGW/MSYS 是 OpenJDK 构建所支持的。与标准的 Windows 工具相比,这些系统的一个区别在于它们处理 Windows 路径名的方式,特别是包含空格、反斜杠作为路径分隔符以及可能包含驱动器字母的路径名。根据具体的使用场景和每个环境的特点,这些路径问题可以通过以下组合来解决:引用整个路径、将反斜杠转换为正斜杠、用额外的反斜杠转义反斜杠以及将路径名转换为其 “8.3” 版本。
2.1.3.1 CYGWIN
CYGWIN 是一种开源的、类似 Linux 的环境,它试图在 Windows 上模拟一个完整的 POSIX 层。它在处理路径名时比较智能,通常可以处理各种路径,只要这些路径被正确引用或转义。内部而言,它将驱动器字母 : 映射到一个虚拟目录 /cygdrive/。
你可以始终使用 cygpath 工具将包含空格或反斜杠字符的路径名映射成 C:/ 样式的路径名(称为“混合”模式),例如 cygpath -s -m “path”。
需要注意的是,使用 CYGWIN 在设置 PATH 变量时会引发一个独特的问题。通常在 Windows 上,PATH 变量包含用 “;” 字符分隔的目录(Solaris 和 Linux 使用 “:”)。在 CYGWIN 中,它使用 “:”, 但这意味着像 “C:/path” 这样的路径不能放在 CYGWIN 版本的 PATH 中,而是需要使用类似 /cygdrive/c/path 这样的路径,这种路径只有 CYGWIN 能理解。
OpenJDK 构建需要 CYGWIN 版本 1.7.16 或更新版本。有关 CYGWIN 的信息可以从 CYGWIN 网站(www.cygwin.com)获取。
默认情况下,CYGWIN 不会安装构建 OpenJDK 所需的所有工具。除了默认安装之外,你还需要安装以下工具。
二进制名称 | 分类 | 包 | 描述 |
---|---|---|---|
ar.exe | Devel | binutils | GNU 汇编器、链接器和二进制工具 |
make.exe | Devel | make | 为 CYGWIN 构建的 GNU 版本的 ‘make’ 工具 |
m4.exe | Interpreters | m4 | 传统 Unix 宏处理器的 GNU 实现 |
cpio.exe | Utils | cpio | 一个管理文件归档的程序 |
gawk.exe | Utils | awk | 模式导向的扫描和处理语言 |
file.exe | Utils | file | 使用“魔数”确定文件类型 |
zip.exe | Archive | zip | 打包和压缩(归档)文件 |
unzip.exe | Archive | unzip | 解压 ZIP 压缩文件 |
free.exe | System | procps | 显示系统中已用和可用的内存量 |
请注意,CYGWIN 软件可能会与您 Windows 系统上的其他非 CYGWIN 软件发生冲突。CYGWIN 提供了一个常见问题解答(FAQ),其中包含已知问题和故障,特别值得关注的是关于 BLODA(干扰 CYGWIN 的应用程序)部分。
2.1.3.2 MinGW/MSYS
MinGW(“Minimalist GNU for Windows”)是一套免费的 Windows 专用头文件和导入库,结合 GNU 工具集,使得能够生成不依赖任何第三方 C 运行时 DLL 的原生 Windows 程序。MSYS 是 MinGW 的补充,允许构建依赖于传统 UNIX 工具的应用程序和程序。其中包括 bash 和 make 等工具。有关更多信息,请参见 MinGW/MSYS。
与 Cygwin 类似,MinGW/MSYS 可以处理不同类型的路径格式。它们会被内部转换为带有正斜杠的路径,并将驱动器号 : 替换为虚拟目录 /。此外,MSYS 会自动检测为 MSYS 环境编译的二进制文件,并为它们提供内部的 Unix 风格路径名。如果在 MSYS 程序中调用原生 Windows 应用程序,它们的路径参数会自动转换回带有驱动器号和反斜杠的 Windows 风格路径名。这可能会对使用正斜杠作为参数分隔符的 Windows 应用程序(例如 cl /nologo /I)造成问题,因为 MSYS 可能会错误地将这些参数替换为驱动器号。
除了默认安装的工具外,您还需要手动安装 msys-zip 和 msys-unzip 包。这可以通过 MinGW 命令行安装程序轻松完成:
mingw-get.exe install msys-zip
mingw-get.exe install msys-unzip
2.1.3.3 Visual Studio 2010 Compilers
32 位和 64 位的 OpenJDK Windows 构建需要 Microsoft Visual Studio C++ 2010 (VS2010) 专业版或 Express 编译器。编译器和其他工具应位于由 Microsoft Visual Studio 安装程序设置的变量 VS100COMNTOOLS 定义的位置。
只需要 VS2010 的 C++ 部分。尽量让安装程序安装到默认安装目录。安装 VS2010 后,请务必重新启动系统。系统环境变量 VS100COMNTOOLS 应该在您的环境中设置。
确保环境中也设置了 TMP 和 TEMP,并且它们指向存在的 Windows 路径,例如 C:\temp,而不是 /tmp,不是 /cygdrive/c/temp,也不是 C:/temp。C:\temp 只是一个示例,假设这个区域是用户私有的,因此默认情况下安装后,您应该在这些变量中看到一个唯一的用户路径。
2.1.4 mac
安装XCode即可
2.2 Configure
配置脚本的基本调用方式如下:
bash ./configure [options]
这将创建一个包含“配置”的输出目录,并设置一个用于构建结果的区域。这个目录通常看起来像这样:
build/linux-x64-normal-server-release
配置脚本将尝试确定您运行的系统类型以及所有必要的构建组件的位置。如果您已经安装了所有构建所需的前提条件,它应该能够找到所有组件。如果它无法自动检测到任何组件,它将退出并通知您问题所在。发生这种情况时,请参阅下面的配置选项以获取更多信息。
描述 | 命令行 |
---|---|
指定使用 FreeType 的 Windows 32 位构建 | bash bash ./configure --with-freetype=/cygdrive/c/freetype-i586 --with-target-bits=32 |
调试 64 位构建 | bash bash ./configure --enable-debug --with-target-bits=64 |
2.2.1 可选项
可以通过以下方式查看所有 OpenJDK 配置选项的完整详细信息:
bash ./configure --help=short
使用 -help 查看所有可用的配置选项。您可以生成任意数量的不同配置,例如调试版、发布版、32 位、64 位等。一些常用的配置选项包括:
选项 | 作用 |
---|---|
–enable-debug | 将调试级别设置为 fastdebug(这是 --with-debug-level=fastdebug 的简写 |
–with-alsa=path | 选择高级 Linux 音频架构 (ALSA) 的位置。在 Linux 上构建 OpenJDK 需要 ALSA 文件的版本 0.9.1 或更新版本。这些 Linux 文件通常可以从 “alsa” 或 “libasound” 开发包中获得,并且强烈建议您尝试使用所使用的特定 Linux 版本提供的软件包。 |
–with-boot-jdk=path | 选择引导 JDK |
–with-boot-jdk-jvmargs=“args” | 提供用于运行引导 JDK 的 JVM 选项 |
–with-cacerts=path | 选择 cacerts 文件的路径。有关证书颁发机构 (CA) 的更好理解,请参阅 http://en.wikipedia.org/wiki/Certificate_Authority。名为 “cacerts” 的证书文件代表一个包含 CA 证书的系统级密钥库。在 JDK 和 JRE 二进制包中,“cacerts” 文件包含来自多个公共 CA(例如 VeriSign、Thawte 和 Baltimore)的根 CA 证书。源码中包含一个不带 CA 根证书的 cacerts 文件。正式的 JDK 构建者需要从每个公共 CA 获取许可,并将证书包含到他们自己的自定义 cacerts 文件中。如果未提供已填充的 cacerts 文件,将导致运行时证书链验证错误。默认情况下,提供一个空的 cacerts 文件,这对于大多数 JDK 开发人员来说应该是可以的。 |
–with-cups=path | 选择 CUPS 安装位置。构建 OpenJDK 在 Solaris 和 Linux 上需要通用 UNIX 打印系统 (CUPS) 头文件。Solaris 头文件可以通过安装 Solaris Software Companion CD/DVD 中的 SFWcups 软件包获得,这些文件通常会安装到 /opt/sfw/cups 目录中。CUPS 头文件可以随时从 www.cups.org 下载。 |
–with-cups-include=path | 选择 CUPS 包含目录的位置 |
–with-debug-level=level | 选择 release、fastdebug 或 slowdebug 的调试信息级别 |
–with-dev-kit=path | 选择编译器安装位置或开发者安装位置 |
–with-freetype=path | 选择要使用的 FreeType 文件。期望 FreeType 库位于 lib/ 目录下,头文件位于 include/ 目录下。需要 FreeType 2.3 或更新版本。在 Unix 系统上,所需文件可能作为您发行版的一部分提供(尽管您可能需要升级它们)。请注意,您需要包含 FreeType 库和头文件的开发版本软件包。您可以随时从 FreeType 网站下载最新版本的 FreeType。从头开始构建 FreeType 2 库也是可能的,然而在 Windows 上请参考 Windows FreeType DLL 构建说明。请注意,由于许可限制,默认情况下 FreeType 是在禁用字节码提示支持的情况下构建的。在这种情况下,文本外观和度量预计会与 Sun 的官方 JDK 构建有所不同。有关更多信息,请参见 SourceForge FreeType2 主页。 |
–with-import-hotspot=path | 选择查找先前构建的 Hotspot 二进制文件的位置,以避免重新构建 Hotspot。 |
–with-target-bits=arg | 选择 32 位或 64 位构建 |
–with-jvm-variants=variants | 选择要构建的 JVM 变种,用逗号分隔的列表,可以包括:server、client、kernel、zero 和 zeroshark。 |
–with-memory-size=size | 选择 GNU make 将认为该系统拥有的 RAM 大小。 |
–with-msvcr-dll=path | 选择要包含在 Windows 构建中的 msvcr100.dll 文件(Visual Studio 的 C/C++ 运行时库)。这通常会从 Visual Studio 2010 的 redist 目录中自动获取。 |
–with-num-cores=cores | 选择要使用的核心数量(处理器数量或 CPU 数量)。 |
–with-x=path | 选择 X11 和 xrender 文件的位置。构建 OpenJDK 在 Solaris 和 Linux 上需要 XRender 扩展头文件。Linux 头文件通常可以从 “Xrender” 开发包中获得,建议您尝试使用您所使用的特定 Linux 发行版提供的包。Solaris 的 XRender 头文件包含在较新版本 Solaris 的 SFWxwinc 包中的其他 X11 头文件中,并将安装在 /usr/X11/include/X11/extensions/Xrender.h 或 /usr/openwin/share/include/X11/extensions/Xrender.h。 |
2.3 make
make 工具的基本调用形式如下:
make all
这将启动构建过程,并将输出生成到包含由 configure 脚本创建的“配置”的目录中。运行 make help 以获取有关可用目标的更多信息。
以下是一些常用的 make 目标:
make目标 | 描述 |
---|---|
empty | 构建所有内容,但不包括镜像。 |
all | 构建所有内容,包括镜像。 |
all-conf | 构建所有配置。 |
images | 创建完整的 j2sdk 和 j2re 镜像。 |
install | 将生成的镜像安装到本地,通常是安装在 /usr/local 目录下。 |
clean | 删除所有由 make 生成的文件,但不删除由 configure 生成的文件。 |
dist-clean | 删除所有由 make 和 configure 生成的文件(基本上是清除配置)。 |
help | 提供一些有关使用 make 的帮助,包括一些有趣的 make 目标。 |
2.4 Testing
构建完成后,你应该会在输出目录中的 j2sdk-image 目录里看到生成的二进制文件和相关文件。特别是,build/*/images/j2sdk-image/bin 目录应该包含该配置的 OpenJDK 工具和实用程序的可执行文件。需要使用测试工具 jtreg,可以在 jtreg 网站找到它。可以使用以下命令运行代码库中提供的回归测试:
cd test && make PRODUCT_HOME=`pwd`/../build/*/images/j2sdk-image all
3. 可能遇到的问题
3.1 mac环境下提示缺少GCC
通过homebrew安装gcc,执行如下命令:
brew install gcc
耐心等待安装完毕就可以了
下载完成后,通过执行如下命令来验证是否安装成功:
gcc -v
如果输出类似下图,说明安装成功