Skip to content

Configure Guide

dingli edited this page May 27, 2021 · 6 revisions

JDK on RISCV32交叉编译配置简介

相比于构建相同架构的JDK,当使用RISCV32工具链来交叉编译JDK时,我们需要增加一些配置。

RISCV32交叉编译的常用配置详解

现在以交叉编译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