### build LLVM/gnu toolchain/spike/pk 1. clone LLVM 版本選用 17.0.2 ``` git clone --depth 1 --branch llvmorg-17.0.2 https://github.com/llvm/llvm-project.git ``` 2. ``` cd llvm-project mkdir build && cd build ``` * 生成build files * RISC-V only ``` cmake -S ../llvm -B . -G Ninja \ -DCMAKE_INSTALL_PREFIX=../install \ -DLLVM_ENABLE_PROJECTS="clang" \ -DLLVM_TARGETS_TO_BUILD="RISCV" \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_BUILD_TYPE="Debug" \ -DBUILD_SHARED_LIBS=True \ -DLLVM_USE_SPLIT_DWARF=True \ -DLLVM_OPTIMIZED_TABLEGEN=True \ -DLLVM_CCACHE_BUILD=OFF \ -DLLVM_INSTALL_UTILS=ON \ -DLLVM_USE_LINKER=gold ``` ``` cmake -S ../llvm -B . -G Ninja \ -DCMAKE_INSTALL_PREFIX=../install \ -DLLVM_ENABLE_PROJECTS="clang" \ -DLLVM_TARGETS_TO_BUILD="RISCV" \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_BUILD_TYPE="Debug" \ -DBUILD_SHARED_LIBS=True \ -DLLVM_USE_SPLIT_DWARF=True \ -DLLVM_OPTIMIZED_TABLEGEN=True \ -DLLVM_CCACHE_BUILD=OFF \ -DLLVM_INSTALL_UTILS=ON \ -DLLVM_USE_LINKER=lld ``` * RISC-V && ARM ``` cmake -S ../llvm -B . -G Ninja \ -DCMAKE_INSTALL_PREFIX=../install \ -DLLVM_ENABLE_PROJECTS="clang" \ -DLLVM_TARGETS_TO_BUILD="RISCV;AArch64" \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_BUILD_TYPE="Debug" \ -DBUILD_SHARED_LIBS=True \ -DLLVM_USE_SPLIT_DWARF=True \ -DLLVM_OPTIMIZED_TABLEGEN=True \ -DLLVM_CCACHE_BUILD=OFF \ -DLLVM_INSTALL_UTILS=ON \ -DLLVM_USE_LINKER=gold ``` * build ``` ninja -j N # N: number of jobs ninja install ``` 3. 此時clang已經被安裝到 llvm-project/install/bin 資料夾。 我們要測試看看是否安裝成功 ``` cd llvm-project/install/bin ./clang --help ``` ### build risc-v tool chain linker, loader... ``` git clone https://github.com/riscv/riscv-gnu-toolchain.git export RISCV=/where/you/wanna/install mkdir build && cd build ../configure \ --prefix=$RISCV \ --with-arch=rv64imafdcv \ --with-abi=lp64d make -j`nproc` ``` ### build spike and pk * spike: simulator ``` git clone https://github.com/riscv/riscv-isa-sim.git cd riscv-isa-sim apt-get install device-tree-compiler # execute "echo $RISCV" to check if $RISCV is set well # if not, go back to build "risc-v tool chain" mkdir build && cd build ../configure \ --prefix=$RISCV \ --with-isa=RV64IMAFDCV \ --with-varch=vlen:1024,elen:64 make -j`nproc` install ``` * pk: proxy kernel ``` git clone https://github.com/riscv/riscv-pk.git cd riscv-pk mkdir build && cd build # requires riscv64-unknown-elf-gcc in PATH export PATH=$RISCV/bin:$PATH ../configure \ --prefix=$RISCV \ --with-arch=rv64gcv \ --with-abi=lp64d \ --host=riscv64-unknown-elf make -j`nproc` install ``` ### test our environment [rvv_saxpy](https://github.com/riscv-non-isa/rvv-intrinsic-doc/blob/main/examples/rvv_saxpy.c) ``` clang \ --target=riscv64-unknown-elf \ --sysroot=$RISCV/riscv64-unknown-elf \ --gcc-toolchain=$RISCV \ -march=rv64gcv1p0 \ rvv_saxpy.c -o rvv_saxpy # spike is installed in $RISCV/bin # pk is installed in $RISCV/riscv64-unknown-elf/bin # you can add those paths to PATH spike --isa=RV64GCV_zfh_zvfh --varch=vlen:128,elen:64 pk rvv_saxpy ``` ### instruction count measurement ```clike= // use this function to get current cycles // "rdcycle" need zicntr extension //ex: // t1 = Read_cycles(); // ... // t2 = Read_cycles(); // t2 - t1 = cycle counts unsigned long Read_cycles(void) { unsigned long a; asm volatile ("rdcycle %0" : "=r" (a)); return a; } ``` ``` spike --isa=RV64GCV_zicntr_zfh_zvfh --varch=vlen:128,elen:64 pk foo ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up