Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into llama-merge
Browse files Browse the repository at this point in the history
  • Loading branch information
WuXintong123 committed Aug 13, 2024
2 parents bdc9db7 + f2d027d commit 73b7da5
Show file tree
Hide file tree
Showing 101 changed files with 63,169 additions and 667 deletions.
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,7 @@
path = thirdparty/mimalloc
url = https://github.com/microsoft/mimalloc.git
shallow = true
[submodule "thirdparty/riscv-gnu-toolchain"]
path = thirdparty/riscv-gnu-toolchain
url = https://github.com/riscv-collab/riscv-gnu-toolchain.git
shallow = true
42 changes: 29 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ project(buddy-mlir LANGUAGES CXX C)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
include(ExternalProject)

#-------------------------------------------------------------------------------
# Options and settings
Expand All @@ -41,13 +42,15 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR BUDDY_MLIR_OUT_OF_TREE_
message(STATUS "Using MLIRConfig.cmake in: ${MLIR_DIR}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")

set(LLVM_MLIR_BINARY_DIR ${MLIR_DIR}/../../../bin)
set(LLVM_MLIR_LIBRARY_DIR ${MLIR_DIR}/../../../lib)
set(LLVM_PROJECT_BUILD_DIR ${MLIR_DIR}/../../../)
if(NOT DEFINED LLVM_PROJECT_SOURCE_DIR)
get_filename_component(LLVM_PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/llvm/ ABSOLUTE)
# LLVM_MAIN_SRC_DIR is a private variable for the LLVM in-tree build.
# To provide compatibility for unifying the one-step and two-step build,
# we set LLVM_MAIN_SRC_DIR ourselves here.
# This could benefit users who want to specify a custom LLVM source directory,
# but also not interfere with normal users who just want to use the buddy-mlir provided LLVM sources.
if(NOT DEFINED LLVM_MAIN_SRC_DIR)
get_filename_component(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/llvm/llvm ABSOLUTE)
endif()
set(LLVM_MLIR_SOURCE_DIR ${LLVM_PROJECT_SOURCE_DIR}/mlir)
set(MLIR_MAIN_SRC_DIR ${LLVM_MAIN_SRC_DIR}/../mlir)

list(APPEND CMAKE_MODULE_PATH "${MLIR_CMAKE_DIR}")
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
Expand All @@ -65,16 +68,9 @@ else()
#-------------------------------------------------------------------------------
# MLIR/LLVM Configuration
#-------------------------------------------------------------------------------

# Allow using out-of-tree llvm directory
set(LLVM_PROJECT_SOURCE_DIR ${LLVM_MAIN_SRC_DIR}/..)
message(STATUS "Using LLVM Project ${LLVM_PROJECT_SOURCE_DIR}")

set(MLIR_MAIN_SRC_DIR ${LLVM_MAIN_SRC_DIR}/../mlir)
set(MLIR_INCLUDE_DIR ${MLIR_MAIN_SRC_DIR}/include)
set(MLIR_GENERATED_INCLUDE_DIR ${LLVM_BINARY_DIR}/tools/mlir/include)
set(LLVM_MLIR_BINARY_DIR ${CMAKE_BINARY_DIR}/bin)
set(MLIR_INCLUDE_DIRS "${MLIR_INCLUDE_DIR};${MLIR_GENERATED_INCLUDE_DIR}")
endif()

#-------------------------------------------------------------------------------
Expand Down Expand Up @@ -188,6 +184,24 @@ if(BUDDY_MLIR_USE_MIMALLOC)
find_package(mimalloc REQUIRED)
endif()

#-------------------------------------------------------------------------------
# The RISC-V toolchain
#-------------------------------------------------------------------------------

if(BUDDY_MLIR_ENABLE_RISCV_GNU_TOOLCHAIN)
set(RISCV_GNU_TOOLCHAIN_DIR "${BUDDY_SOURCE_DIR}/thirdparty/riscv-gnu-toolchain")
set(RISCV_GNU_TOOLCHAIN_INSTALL_DIR "${CMAKE_BINARY_DIR}/thirdparty/riscv-gnu-toolchain")
ExternalProject_Add(
riscv-gnu-toolchain
SOURCE_DIR ${RISCV_GNU_TOOLCHAIN_DIR}
PREFIX ${RISCV_GNU_TOOLCHAIN_INSTALL_DIR}
CONFIGURE_COMMAND ${RISCV_GNU_TOOLCHAIN_DIR}/configure --prefix=${RISCV_GNU_TOOLCHAIN_INSTALL_DIR}
BUILD_COMMAND make clean && make linux build-qemu -j
BUILD_IN_SOURCE TRUE
INSTALL_COMMAND ""
)
endif()

#-------------------------------------------------------------------------------
# Initialize Python packages
#-------------------------------------------------------------------------------
Expand All @@ -201,6 +215,8 @@ if(BUDDY_MLIR_ENABLE_PYTHON_PACKAGES)
# Create empty __init__.py files to make these directories Python packages
file(WRITE ${BUDDY_MLIR_PYTHON_PACKAGES_DIR}/buddy/__init__.py "")
file(WRITE ${BUDDY_MLIR_PYTHON_PACKAGES_DIR}/buddy/compiler/__init__.py "")

install(DIRECTORY ${BUDDY_MLIR_PYTHON_PACKAGES_DIR}/buddy DESTINATION python_packages)
endif()

#-------------------------------------------------------------------------------
Expand Down
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,17 @@ If you want to add domain-specific framework support, please add the following c
| -------------- | ------------- | ------------- |
| OpenCV | `-DBUDDY_ENABLE_OPENCV=ON` | Add `-DOpenCV_DIR=</PATH/TO/OPENCV/BUILD/>` or install OpenCV release version on your local device. |

To build buddy-mlir with custom LLVM sources:

```
$ cmake -G Ninja .. \
-DMLIR_DIR=PATH/TO/LLVM/lib/cmake/mlir \
-DLLVM_DIR=PATH/TO/LLVM/lib/cmake/llvm \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DCMAKE_BUILD_TYPE=RELEASE \
-DLLVM_MAIN_SRC_DIR=PATH/TO/LLVM_SOURCE
```

<h3 id="one-step">One-step building strategy</h3>

If you only want to use our tools and integrate them more easily into your projects, you can choose to use the one-step build strategy.
Expand Down Expand Up @@ -134,7 +145,7 @@ This repository have nix flake support. You can follow the [nix installation ins
nix develop .
```

This will setup a bash shell with `clang`, `clangd`, `cmake`, `ninja`, and other necessary dependencies to build buddy-mlir from source.
This will setup a bash shell with `clang`, `ccls`, `cmake`, `ninja`, and other necessary dependencies to build buddy-mlir from source.

- If you want to use the buddy-mlir bintools

Expand Down
2 changes: 1 addition & 1 deletion backend/include/llvm/IR/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
include_directories(${LLVM_PROJECT_SOURCE_DIR}/llvm/include/llvm/IR/)
include_directories(${LLVM_MAIN_SRC_DIR}/include/llvm/IR/)

set(LLVM_TARGET_DEFINITIONS IntrinsicsBuddyExt.td)
tablegen(LLVM IntrinsicImpl.inc -gen-intrinsic-impl)
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Analysis/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_Analysis_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Analysis)
set(LLVM_Analysis_DIR ${LLVM_MAIN_SRC_DIR}/lib/Analysis)

add_llvm_component_library(LLVMBuddyAnalysis

Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/AsmParser/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# AsmParser

set(LLVM_AsmParser_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/AsmParser)
set(LLVM_AsmParser_DIR ${LLVM_MAIN_SRC_DIR}/lib/AsmParser)

add_llvm_component_library(LLVMBuddyAsmParser
${LLVM_AsmParser_DIR}/LLLexer.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Bitcode/Reader/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_Reader_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Bitcode/Reader)
set(LLVM_Reader_DIR ${LLVM_MAIN_SRC_DIR}/lib/Bitcode/Reader)

add_llvm_component_library(LLVMBuddyBitReader
${LLVM_Reader_DIR}/BitcodeAnalyzer.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Bitcode/Writer/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_Writer_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Bitcode/Writer)
set(LLVM_Writer_DIR ${LLVM_MAIN_SRC_DIR}/lib/Bitcode/Writer)


add_llvm_component_library(LLVMBuddyBitWriter
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_AsmPrinter_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/CodeGen/AsmPrinter)
set(LLVM_AsmPrinter_DIR ${LLVM_MAIN_SRC_DIR}/lib/CodeGen/AsmPrinter)

add_llvm_component_library(LLVMBuddyAsmPrinter
${LLVM_AsmPrinter_DIR}/AccelTable.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/CodeGen/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_CodeGen_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/CodeGen)
set(LLVM_CodeGen_DIR ${LLVM_MAIN_SRC_DIR}/lib/CodeGen)

add_llvm_component_library(LLVMBuddyCodeGen
${LLVM_CodeGen_DIR}/AggressiveAntiDepBreaker.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/CodeGen/MIRParser/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_MIRParser_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/CodeGen/MIRParser)
set(LLVM_MIRParser_DIR ${LLVM_MAIN_SRC_DIR}/lib/CodeGen/MIRParser)

add_llvm_component_library(LLVMBuddyMIRParser
${LLVM_MIRParser_DIR}/MILexer.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/CodeGen/SelectionDAG/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_SelectionDAG_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/CodeGen/SelectionDAG)
set(LLVM_SelectionDAG_DIR ${LLVM_MAIN_SRC_DIR}/lib/CodeGen/SelectionDAG)

add_llvm_component_library(LLVMBuddySelectionDAG
${LLVM_SelectionDAG_DIR}/DAGCombiner.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/IR/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_IR_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/IR)
set(LLVM_IR_DIR ${LLVM_MAIN_SRC_DIR}/lib/IR)

add_llvm_component_library(LLVMBuddyCore
${LLVM_IR_DIR}/AbstractCallSite.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/IRReader/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_IRReader_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/IRReader)
set(LLVM_IRReader_DIR ${LLVM_MAIN_SRC_DIR}/lib/IRReader)

add_llvm_component_library(LLVMBuddyIRReader
${LLVM_IRReader_DIR}/IRReader.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Object/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_Object_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Object)
set(LLVM_Object_DIR ${LLVM_MAIN_SRC_DIR}/lib/Object)

add_llvm_component_library(LLVMBuddyObject
${LLVM_Object_DIR}/Archive.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/ProfileData/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_ProfileData_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/ProfileData)
set(LLVM_ProfileData_DIR ${LLVM_MAIN_SRC_DIR}/lib/ProfileData)

add_llvm_component_library(LLVMBuddyProfileData
${LLVM_ProfileData_DIR}/GCOV.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Remarks/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_Remarks_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Remarks)
set(LLVM_Remarks_DIR ${LLVM_MAIN_SRC_DIR}/lib/Remarks)

add_llvm_component_library(LLVMBuddyRemarks
${LLVM_Remarks_DIR}/BitstreamRemarkParser.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Target/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ list(APPEND LLVM_COMMON_DEPENDS buddy_intrinsics_gen)

list(APPEND LLVM_TABLEGEN_FLAGS -I ${LLVM_MAIN_SRC_DIR}/lib/Target)

set(LLVM_Target_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Target)
set(LLVM_Target_DIR ${LLVM_MAIN_SRC_DIR}/lib/Target)

add_llvm_component_library(LLVMBuddyTarget
${LLVM_Target_DIR}/Target.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Target/RISCV/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ macro(buddy_add_llvm_target target_name)
set( CURRENT_LLVM_TARGET LLVM${target_name} )
endmacro(buddy_add_llvm_target)

set(LLVM_TARGET_RISCV_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Target/RISCV)
set(LLVM_TARGET_RISCV_DIR ${LLVM_MAIN_SRC_DIR}/lib/Target/RISCV)

# ------------------------------------------------------------------------------
# Configure RISC-V Buddy Extension.
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Transforms/IPO/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_IPO_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Transforms/IPO)
set(LLVM_IPO_DIR ${LLVM_MAIN_SRC_DIR}/lib/Transforms/IPO)

add_llvm_component_library(LLVMBuddyIPO
${LLVM_IPO_DIR}/AlwaysInliner.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Transforms/Scalar/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_Scalar_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Transforms/Scalar)
set(LLVM_Scalar_DIR ${LLVM_MAIN_SRC_DIR}/lib/Transforms/Scalar)

add_llvm_component_library(LLVMBuddyScalarOpts
${LLVM_Scalar_DIR}/ADCE.cpp
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Transforms/Utils/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_Utils_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Transforms/Utils)
set(LLVM_Utils_DIR ${LLVM_MAIN_SRC_DIR}/lib/Transforms/Utils)


add_llvm_component_library(LLVMBuddyTransformUtils
Expand Down
2 changes: 1 addition & 1 deletion backend/llvm/lib/Transforms/Vectorize/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_Vectorize_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Transforms/Vectorize)
set(LLVM_Vectorize_DIR ${LLVM_MAIN_SRC_DIR}/lib/Transforms/Vectorize)

add_llvm_component_library(LLVMBuddyVectorize
${LLVM_Vectorize_DIR}/LoadStoreVectorizer.cpp
Expand Down
153 changes: 153 additions & 0 deletions docs/RVVEnviroment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# Environment Setup Guide for MLIR and RVV Testing and Experiments

This guide provides instructions on setting up an environment to test the RISC-V Vector Extension using the buddy-mlir project.
The target platform for emulation is QEMU.

## Requirements

Before proceed any further make sure that you installed dependencies below

* [LLVM dependecies](https://llvm.org/docs/GettingStarted.html#requirements)
* [GNU Toolchain dependecies](https://github.com/riscv-collab/riscv-gnu-toolchain#prerequisites)
* [QEMU dependecies](https://wiki.qemu.org/Hosts/Linux)

## Build Steps

> **_NOTE:_** The build process includes several heavy stages. It may take significant time to clone and build all components.
0. Prepare `buddy-mlir` and Submodules

```
$ git clone https://github.com/buddy-compiler/buddy-mlir.git
$ cd buddy-mlir
$ git submodule update --init
```

1. Build Local LLVM/MLIR

```
$ cd buddy-mlir
$ mkdir llvm/build
$ cd llvm/build
$ cmake -G Ninja ../llvm \
-DLLVM_ENABLE_PROJECTS="mlir;clang;openmp" \
-DLLVM_TARGETS_TO_BUILD="host;RISCV" \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DOPENMP_ENABLE_LIBOMPTARGET=OFF \
-DCMAKE_BUILD_TYPE=RELEASE \
-DMLIR_ENABLE_BINDINGS_PYTHON=ON \
-DPython3_EXECUTABLE=$(which python3)
$ ninja check-clang check-mlir omp
$ export BUILD_LOCAL_LLVM_DIR=$PWD
```

2. Build Local `buddy-mlir`

```
$ cd buddy-mlir
$ mkdir build
$ cd build
$ cmake -G Ninja .. \
-DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \
-DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DCMAKE_BUILD_TYPE=RELEASE \
-DBUDDY_MLIR_ENABLE_RISCV_GNU_TOOLCHAIN=ON \
-DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON \
-DPython3_EXECUTABLE=$(which python3)
$ ninja
$ ninja check-buddy
$ export BUILD_RISCV_GNU_TOOLCHAIN_DIR=$PWD/thirdparty/riscv-gnu-toolchain/
$ export RISCV_GNU_TOOLCHAIN_SYSROOT_DIR=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}/sysroot/
```

3. Build Cross-Compiled Clang

```
$ cd buddy-mlir
$ mkdir llvm/build-cross-clang-rv
$ cd llvm/build-cross-clang-rv
$ cmake -G Ninja ../llvm \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_TARGETS_TO_BUILD="RISCV" \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_C_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang \
-DCMAKE_CXX_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang++ \
-DCMAKE_C_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \
-DCMAKE_CXX_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \
-DLLVM_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/llvm-tblgen \
-DCLANG_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/clang-tblgen \
-DLLVM_DEFAULT_TARGET_TRIPLE=riscv64-unknown-linux-gnu \
-DLLVM_TARGET_ARCH=RISCV64 \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ZSTD=Off
$ ninja clang lli
```

4. Build Cross-Compiled MLIR

```
$ cd buddy-mlir
$ mkdir llvm/build-cross-mlir-rv
$ cd llvm/build-cross-mlir-rv
$ cmake -G Ninja ../../llvm/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=${BUILD_LOCAL_LLVM_DIR}/bin/clang \
-DCMAKE_CXX_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang++ \
-DCMAKE_C_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \
-DCMAKE_CXX_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \
-DMLIR_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/mlir-tblgen \
-DLLVM_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/llvm-tblgen \
-DMLIR_LINALG_ODS_YAML_GEN=${BUILD_LOCAL_LLVM_DIR}/bin/mlir-linalg-ods-yaml-gen \
-DMLIR_PDLL_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/mlir-pdll \
-DLLVM_ENABLE_ZSTD=Off
$ ninja
$ export BUILD_CROSS_MLIR_DIR=$PWD
```

5. Build Cross-Compiled `buddy-mlir`

```
$ cd buddy-mlir
$ mkdir build-cross-rv
$ cd build-cross-rv
$ cmake -G Ninja .. \
-DCMAKE_SYSTEM_NAME=Linux \
-DMLIR_DIR=${BUILD_CROSS_MLIR_DIR}/lib/cmake/mlir \
-DLLVM_DIR=${BUILD_CROSS_MLIR_DIR}/lib/cmake/llvm \
-DCMAKE_CROSSCOMPILING=True \
-DLLVM_TARGETS_TO_BUILD=RISCV \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_NATIVE_ARCH=RISCV \
-DLLVM_HOST_TRIPLE=riscv64-unknown-linux-gnu \
-DCMAKE_C_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang \
-DCMAKE_CXX_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang++ \
-DCMAKE_C_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \
-DCMAKE_CXX_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \
-DLLVM_ENABLE_ZSTD=Off
$ ninja StaticMLIRCRunnerUtils StaticMLIRRunnerUtils
```

## Testing RVV Environment

```
$ cd buddy-mlir
$ cd examples/RVVDialect/
$ make rvv-mul-add-run
// Expected Output:
Unranked Memref base@ = 0x55555729aaa0 rank = 1 offset = 0 sizes = [20] strides = [1] data =
[0, 12, 26, 42, 60, 80, 102, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
```

Congratulations! Your RVV environment is now fully set up. Enjoy exploring and testing!
Loading

0 comments on commit 73b7da5

Please sign in to comment.