对做了b、k扩展的工具链进行构建和测试

对做了b、k扩展的工具链进行构建和测试

首先明确,collab给出的toolchain是没有b、k扩展的,带b、k扩展的分支是如下的链接,我们先构建分支拉取指定下面这三个链接里的新的内容(自行Google,即需要将原先toolchain文件夹里的riscv-gcc等三个文件夹的内容更新成已经做了bk扩展的内容)。
riscv-gcc:https://github.com/pz9115/riscv-gcc/tree/riscv-gcc-experimental
riscv-binutils:https://github.com/pz9115/riscv-binutils-gdb/tree/riscv-binutils-experimental
qemu:https://github.com/plctlab/plct-qemu/tree/plct-k-dev
然后先准备构建需要的很多东西,需要很多包,要提前装避坑(嗯,每个包基本都是自己被报错之后一个个加上去的,看上去很轻松,其实不知道要装什么就会原地兜圈):

sudo apt-get install gcc gawk build-essential bison flex texinfo libglib2.0-dev expect expat libexpat1-dev tcl

以下是缺工具出现的一些bug:
在这里插入图片描述
在这里插入图片描述
然后需要进入qemu文件夹,riscv-gnu-toolchain/qemu/target/riscv/cpu.c需要使能bk扩展:

vi ~/riscv-gnu-toolchain/qemu/target/riscv/cpu.c     #(根据自己文件夹来啦)
// DEFINE_PROP_BOOL("x-b", RISCVCPU, cfg.ext_b, false),  #将这个注释掉;
DEFINE_PROP_BOOL("x-b", RISCVCPU, cfg.ext_b, true),      #加上这个;
//DEFINE_PROP_BOOL("x-k", RISCVCPU, cfg.ext_k, false),   #将这个注释掉;
DEFINE_PROP_BOOL("x-k", RISCVCPU, cfg.ext_k, true),      #加上这个;

然后再修改一下riscv-gnu-toolchain/scripts/wrapper/qemu/riscv32-unknown-elf-run文件(根据32位和64位需求打开对应的文件改):

vi ~/riscv-gnu-toolchain/scripts/wrapper/qemu/riscv32-unknown-elf-run
qemu-riscv$xlen -cpu rv32,x-b=true -r 5.10 "${qemu_args[@]}" -L ${RISC_V_SYSROOT} "$@"  #(32位就用这个)
qemu-riscv$xlen -cpu rv64,x-b=true -r 5.10 "${qemu_args[@]}" -L ${RISC_V_SYSROOT} "$@"  #(64位就用这个)
#qemu-riscv$xlen -r 5.10 "${qemu_args[@]}" -L ${RISC_V_SYSROOT} "$@"                    #(把这个注释掉) 

然后配置环境变量:

vim ~/.bashrc
export RISCV="/opt/riscv" #工具的安装链接(普通用户就不要装在根目录文件里面了,老老实实建一个build文件夹做安装路径)
export PATH=$PATH:$RISCV/bin #该路径下为链接工具
:wq   #保存退出 
source ~/.bashrc

然后还是在riscv-gnu-toolchain目录中,新建一个build32和一个build64文件夹做安装路径:

mkdir build32 build64

接下来,构建32位toolchain的步骤:

cd build32
../configure --prefix=$RISCV --with-arch=rv32g_zba_zbb_zbc_zbs_zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh --with-abi=ilp32d --with-multilib-generator="rv32g_zba_zbb_zbc_zbs_zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh-ilp32d--"
make newlib

生成的32位:
在这里插入图片描述

make report-newlib SIM=qemu 

(注:make newlib 和make report-newlib其实可以直接合一起,但是为了更明晰知道自己在make和report过程的问题,建议一步步来,另外,make默认情况下是使用newlib的,SIM默认也是qemu的)
在这里插入图片描述
对64位:

cd build64
../configure --prefix=$RISCV --with-arch=rv64g_zba_zbb_zbc_zbs_zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh --with-abi=lp64d --with-multilib-generator="rv64g_zba_zbb_zbc_zbs_zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh-lp64d--"
make newlib
make report-newlib

生成的64位:
在这里插入图片描述

make report-newlib SIM=qemu

在这里插入图片描述
可以看到两边的生成和测试都完美通过,gcc g++ gfortran都 0 bug。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部