forked from openjdk/jdk11u
-
Notifications
You must be signed in to change notification settings - Fork 14
Configure Guide
dingli edited this page May 27, 2021
·
6 revisions
相比于构建相同架构的JDK,当使用RISCV32工具链来交叉编译JDK时,我们需要增加一些配置。
现在以交叉编译OpenJDK11 for RV32G(ZERO VM)中的命令为例,更多的编译配置可以执行bash configure --help
,或者查看:https://github.com/openjdk/jdk/blob/master/doc/building.md#common-configure-arguments
$ bash configure \
--openjdk-target=riscv32-unknown-linux-gnu \
--disable-warnings-as-errors \
--with-sysroot=/path/to/riscv32/sysroot \
--x-includes=/path/to/riscv32/sysroot/usr/include \
--x-libraries=/path/to/riscv32/sysroot/usr/lib \
--with-boot-jdk=/path/to/jdk-10 \
--with-native-debug-symbols=none \
--with-jvm-variants=zero \
--with-jvm-interpreter=cpp \
--prefix=$PWD/nodebug_32
-
--openjdk-target
用来指定编译的目标架构,将自动为autoconf设置--build, --host 和 --target,并启用交叉编译模式,而如果是在相同架构上构建位宽不同的镜像,则需要使用--with-target-bits=<bits>
。 -
--disable-warnings-as-errors
用来忽略一些警告,否则编译会在中途出现警告的时候停止 -
--with-sysroot
用来指定系统的root。该选项主要用于新系统(比如LFS)构建或交叉编译。比如指定--with-sysroot=/path/to/riscv32/sysroot
,编译器就会使用--with-sysroot=/path/to/riscv32/sysroot
目录下的header和lib,而不是host上的。 -
--x-includes
和--x-libraries
用来当编译程序找不到X11相关库时,来指定相关目录。 -
--with-boot-jdk
用来指定主机上的bootJDK路径。 -
--with-native-debug-symbols
用来指定是否以及如何构建本机调试符号,通常我们在编译debug版本的时候指定为internal
,其他时候指定为none
。 -
--with-jvm-variants
用来指定jvm构建的变体,常用的有server(默认,包含c1以及c2)、core(只包含解释器)、zero,当编译ZERO版本的时候我们还需要加上--with-jvm-interpreter=cpp
。 -
--prefix=$PWD/nodebug_32
用来指定镜像的路径。
目前我们处于移植的开始阶段,已经跑通了RISC32G版本的ZERO,在紧接下来的移植工作中我们选择了先移植汇编器、宏汇编器及解释器,所以需要使用jdk core的构建,也就是添加参数--with-jvm-variants=core
。
这样构建的镜像是只包含解释器的,可以参考其他架构的实现修改部分与rv32强相关的代码,跑通jdk core的编译来实现汇编器等模块。
例:
bash configure \
--openjdk-target=riscv32-unknown-linux-gnu \
--disable-warnings-as-errors \
--with-sysroot=/path/to/riscv32/sysroot \
--x-includes=/path/to/riscv32/sysroot/usr/include \
--x-libraries=/path/to/riscv32/sysroot/usr/lib \
--with-boot-jdk=/path/to/jdk-10 \
--with-native-debug-symbols=internal \
--with-debug-level=fastdebug \
--with-jvm-variants=core \
--prefix=$PWD/fastdebug_32_core
之后执行make -j && make install
便可以在fastdebug_32_core/jvm/openjdk-<ver>-internal
目录下找到构建完成的JDK镜像。
另外我们目前的debug级别fastdbug,是含有一些编译优化的,如果需要更多的调试信息或者查看fastdebug级别下被优化的变量,可以使用slowdebug进行编译,即修改参数--with-debug-level=fastdebug
为--with-debug-level=slowdebug
。