MLIR RVV Integration Test Environment
Build riscv-gnu-toolchain and qemu
Clone the code.
git clone git@github.com:riscv-collab/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
git checkout rvv-next
git submodule update --init --recursive
Build RVV tool-chain
cd riscv-gnu-toolchain
mkdir build-linux
cd build-linux
../configure --prefix=<gnu-toolchain-install-dir>
make linux
Clone and build qemu
git clone git@github.com:sifive/qemu.git
cd qemu
git checkout 856da0e94f
mkdir build
cd build
../configure
make
Clone llvm-project
git clone git@github.com:llvm/llvm-project.git
Build local clang with RISC-V target
cd llvm-project
mkdir build-local-clang
cd build-local-clang
cmake -G Ninja ../llvm \
-DLLVM_TARGETS_TO_BUILD="host;RISCV" \
-DLLVM_ENABLE_PROJECTS="clang" \
-DCMAKE_BUILD_TYPE=RELEASE
ninja
Build cross-compiled LLI
cd llvm-project
mkdir build-cross-clang
cd build-cross-clang
cmake -G Ninja ../llvm \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_TARGETS_TO_BUILD="RISCV" \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_C_COMPILER=</path/to/build-local-clang/bin/clang> \
-DCMAKE_CXX_COMPILER=</path/to/build-local-clang/bin/clang++> \
-DCMAKE_C_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=</path/to/gnu-toolchain/sysroot/> --gcc-toolchain=</path/to/gnu-toolchain/>" \
-DCMAKE_CXX_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=</path/to/gnu-toolchain/sysroot/> --gcc-toolchain=</path/to/gnu-toolchain/>" \
-DLLVM_TABLEGEN=</path/to/build-local-clang/bin/llvm-tblgen> \
-DCLANG_TABLEGEN=</path/to/build-local-clang/bin/clang-tblgen> \
-DLLVM_DEFAULT_TARGET_TRIPLE=riscv64-unknown-linux-gnu \
-DLLVM_TARGET_ARCH=RISCV64 \
-DCMAKE_BUILD_TYPE=Release
ninja clang lli
Build MLIR
cd llvm-project
mkdir build-local-mlir
cd build-local-mlir
cmake -G Ninja ../llvm \
-DLLVM_ENABLE_PROJECTS=mlir \
-DLLVM_TARGETS_TO_BUILD="host;RISCV" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=ON \
ninja check-mlir
Build cross-compiled MLIR
cd llvm-project
mkdir build-cross-mlir
cd build-cross-mlir
cmake -G Ninja ../llvm \
-DLLVM_ENABLE_PROJECTS="mlir" \
-DLLVM_BUILD_EXAMPLES=OFF \
-DCMAKE_CROSSCOMPILING=True \
-DLLVM_TARGET_ARCH=RISCV64 \
-DLLVM_TARGETS_TO_BUILD=RISCV \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_NATIVE_ARCH=RISCV \
-DLLVM_HOST_TRIPLE=riscv64-unknown-linux-gnu \
-DLLVM_DEFAULT_TARGET_TRIPLE=riscv64-unknown-linux-gnu \
-DCMAKE_C_COMPILER=</path/to/build-local-clang/bin/clang> \
-DCMAKE_CXX_COMPILER=</path/to/build-local-clang/bin/clang++> \
-DCMAKE_C_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=</path/to/gnu-toolchain/sysroot/> --gcc-toolchain=</path/to/gnu-toolchain/>" \
-DCMAKE_CXX_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=</path/to/gnu-toolchain/sysroot/> --gcc-toolchain=</path/to/gnu-toolchain/>" \
-DMLIR_TABLEGEN=</path/to/build-local-mlir/bin/mlir-tblgen> \
-DLLVM_TABLEGEN=</path/to/build-local-mlir/bin/llvm-tblgen> \
-DMLIR_LINALG_ODS_YAML_GEN=</path/to/build-local-mlir/bin/mlir-linalg-ods-yaml-gen> \
-DMLIR_PDLL_TABLEGEN=</path/to/build-local-mlir/bin/mlir-pdll>
ninja
MLIR integration test
cd llvm-project
mkdir build-check-integration
cd build-check-integration
cmake -G Ninja ../llvm \
-DLLVM_ENABLE_PROJECTS=mlir \
-DLLVM_BUILD_EXAMPLES=ON \
-DLLVM_TARGETS_TO_BUILD="host;RISCV" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DMLIR_INCLUDE_INTEGRATION_TESTS=ON \
-DMLIR_RUN_RISCV_VECTOR_TESTS=ON \
-DRISCV_VECTOR_EMULATOR_EXECUTABLE=</path/to/qemu-riscv64> \
-DRISCV_VECTOR_EMULATOR_OPTIONS="-L </path/to/gnu-toolchain/sysroot/> -cpu rv64,x-v=true" \
-DRISCV_EMULATOR_LLI_EXECUTABLE=</path/to/build-cross-clang/bin/lli> \
-DRISCV_EMULATOR_UTILS_LIB_DIR=</path/to/build-cross-mlir/lib/>
ninja check-mlir-integration