(由于RV-V拓展目前仍处于draft状态,该分支针对的0.8版的标准)
地址:https://github.com/riscv/riscv-gnu-toolchain/tree/rvv-0.8.x
用途:用于生成含RV-V拓展的二进制文件
spike地址:https://github.com/riscv/riscv-isa-sim
pk地址:https://github.com/riscv/riscv-pk
用途:测试运行含RV-V拓展的二进制文件
#拉分支代码(需要科学上网,不然拉的很慢)
git clone -b rvv-0.8 [email protected]:riscv/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
git submodule update --init --recursive
#安装环境依赖
sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
#设置RISCV环境变量并编译
mkdir build && cd build
export RISCV=/path/to/install
../configure --prefix=$RISCV
make linux
make install
如果之前安装过不含V拓展的riscv-gnu-toolchain工具链(即主分支),建议把之前的工具链的环境变量先去掉,否则可能编译失败(因为含V拓展的工具链名字一样,会冲突)。
同时该工具链目前只支持将含V拓展的汇编文件(.s)转化为二进制文件(.o)。
# void
# saxpy(size_t n, const float a, const float *x, float *y)
# {
# size_t i;
# for (i=0; i
用as工具将汇编转化为可重定位的二进制文件(saxpy.o)
(注意添加参数-march制定使用的ISA,如rv64gv,其中64代表64位指令,G为general 包括IMAFD拓展的指令,v代表v拓展指令(默认是不包含v拓展指令的。))
riscv64-unknown-linux-gnu-as -march=rv64gcv --mabi=lp64d saxpy.s -o saxpy.o
加一个主文件去调用saxpy函数
#include
#include
extern void saxpy(size_t n, const float a, const float *x, float *y);
int main(){
size_t size=3;
const float a=1.0;
const float array1[]={
1.0,2.0,3.0};
float array2[]={
1.0,2.0,3.0};
for(int i =0;i<size;i++){
printf("%f\n", array2[i]);
}
printf("----------------\n");
//调用saxpy函数
saxpy(size,a,array1,array2);
for(int i =0;i<size;i++){
printf("%f\n", array2[i]);
}
return 0;
}
进行链接得到可执行二进制文件out
#将callsaxpy.c转化为可重定位的二进制文件
riscv64-unknown-linux-gnu-gcc -c callsaxpy.c -o callsaxpy.o
#注意要静态链接(spike+pk目前仅支持运行静态链接的二进制文件)
riscv64-unknown-linux-gnu-gcc -static saxpy.o callsaxpy.o -o out
($RISCV为上一步设置的RISCV环境变量)
git clone [email protected]:riscv/riscv-isa-sim.git
apt-get install device-tree-compiler
mkdir build
cd build
../configure --prefix=$RISCV
make
[sudo] make install
($RISCV为上上步设置的RISCV环境变量)
git clone [email protected]:riscv/riscv-pk.git
mkdir build
cd build
../configure --prefix=$RISCV --host=riscv64-unknown-elf
make
[sudo] make install
spike --isa=RV64GCV pk out
#--isa指定使用的isa,默认是不带有V拓展的
riscv-v拓展的官方说明地址(draft):https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc