Skip to content

Instantly share code, notes, and snippets.

@zhanghb97
Last active November 11, 2022 08:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zhanghb97/ad44407e169de298911b8a4235e68497 to your computer and use it in GitHub Desktop.
Save zhanghb97/ad44407e169de298911b8a4235e68497 to your computer and use it in GitHub Desktop.
Environment for MLIR + RVV Integration Test.

MLIR RVV Integration Test Environment

Build riscv-gnu-toolchain and qemu

  1. 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
  1. Build RVV tool-chain
cd riscv-gnu-toolchain
mkdir build-linux
cd build-linux
../configure --prefix=<gnu-toolchain-install-dir>
make linux
  1. Clone and build qemu
git clone git@github.com:sifive/qemu.git
cd qemu
git checkout 856da0e94f
mkdir build
cd build
../configure
make

Build clang lli mlir

  1. Clone llvm-project
git clone git@github.com:llvm/llvm-project.git
  1. 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
  1. 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
  1. 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
  1. 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
  1. 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment