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