Skip to content

Commit

Permalink
Add build instructions to the README (#27)
Browse files Browse the repository at this point in the history
  • Loading branch information
j2kun authored Oct 27, 2023
1 parent b909ff3 commit 6734cbe
Showing 1 changed file with 128 additions and 0 deletions.
128 changes: 128 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
This is the code repository for a series of articles
on the [MLIR framework](https://mlir.llvm.org/) for building compilers.

## Articles

1. [Build System (Getting Started)](https://jeremykun.com/2023/08/10/mlir-getting-started/)
2. [Running and Testing a Lowering](https://jeremykun.com/2023/08/10/mlir-running-and-testing-a-lowering/)
3. [Writing Our First Pass](https://jeremykun.com/2023/08/10/mlir-writing-our-first-pass/)
Expand All @@ -14,3 +16,129 @@ on the [MLIR framework](https://mlir.llvm.org/) for building compilers.
9. [Canonicalizers and Declarative Rewrite Patterns](https://jeremykun.com/2023/09/20/mlir-canonicalizers-and-declarative-rewrite-patterns/)
10. [Dialect Conversion](https://jeremykun.com/2023/10/23/mlir-dialect-conversion/)
11. Lowering through LLVM


## Bazel build

Bazel is one of two supported build systems for this tutorial. The other is
CMake. If you're unfamiliar with Bazel, you can read the tutorials at
[https://bazel.build/start](https://bazel.build/start). Familiarity with Bazel
is not required to build or test, but it is required to follow the articles in
the tutorial series and explained in the first article, [Build System (Getting
Started)](https://jeremykun.com/2023/08/10/mlir-getting-started/). The CMake
build is maintained, but was added at article 10 (Dialect Conversion) and will
not be explained in the articles.

### Prerequisites

Install Bazelisk via instructions at
[https://github.com/bazelbuild/bazelisk#installation](https://github.com/bazelbuild/bazelisk#installation).
This should create the `bazel` command on your system.

You should also have a modern C++ compiler on your system, either `gcc` or
`clang`, which Bazel will detect.

### Build and test

Run

```bash
bazel build ...:all
bazel test ...:all
```

## CMake build

CMake is one of two supported build systems for this tutorial. The other is
Bazel. If you're unfamiliar with CMake, you can read the tutorials at
[https://cmake.org/getting-started/](https://cmake.org/getting-started/).
The CMake build is maintained, but was added at article 10 (Dialect Conversion)
and will not be explained in the articles.

### Prerequisites

* Make sure you have installed everything needed to build LLVM
https://llvm.org/docs/GettingStarted.html#software
* For this recipe Ninja is used so be sure to have it as well installed
https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages

### Checking out the code

Checkout the tutorial including the LLVM dependency (submodules):

```bash
git clone --recurse-submodules https://github.com/j2kun/mlir-tutorial.git
cd mlir-tutorial
```

### Building dependencies

Note: The following steps are suitable for macOs and use ninja as building
system, they should not be hard to adapt for your environment.

*Build LLVM/MLIR*

```bash
#!/bin/sh

BUILD_SYSTEM=Ninja
BUILD_TAG=ninja
THIRDPARTY_LLVM_DIR=$PWD/externals/llvm-project
BUILD_DIR=$THIRDPARTY_LLVM_DIR/build
INSTALL_DIR=$THIRDPARTY_LLVM_DIR/install

mkdir -p $BUILD_DIR
mkdir -p $INSTALL_DIR

pushd $BUILD_DIR

cmake ../llvm -G $BUILD_SYSTEM \
-DCMAKE_CXX_COMPILER="$(xcrun --find clang++)" \
-DCMAKE_C_COMPILER="$(xcrun --find clang)" \
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
-DLLVM_LOCAL_RPATH=$INSTALL_DIR/lib \
-DLLVM_PARALLEL_COMPILE_JOBS=7 \
-DLLVM_PARALLEL_LINK_JOBS=1 \
-DLLVM_BUILD_EXAMPLES=OFF \
-DLLVM_INSTALL_UTILS=ON \
-DCMAKE_OSX_ARCHITECTURES="$(uname -m)" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_CCACHE_BUILD=ON \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DLLVM_ENABLE_PROJECTS='mlir' \
-DDEFAULT_SYSROOT="$(xcrun --show-sdk-path)" \
-DCMAKE_OSX_SYSROOT="$(xcrun --show-sdk-path)"

cmake --build . --target check-mlir

popd
```

### Build and test

```bash
#!/bin/sh

BUILD_SYSTEM="Ninja"
BUILD_DIR=./build-`echo ${BUILD_SYSTEM}| tr '[:upper:]' '[:lower:]'`

rm -rf $BUILD_DIR
mkdir $BUILD_DIR
pushd $BUILD_DIR

LLVM_BUILD_DIR=externals/llvm-project/build
cmake -G $BUILD_SYSTEM .. \
-DLLVM_DIR="$LLVM_BUILD_DIR/lib/cmake/llvm" \
-DMLIR_DIR="$LLVM_BUILD_DIR/lib/cmake/mlir" \
-DCMAKE_BUILD_TYPE=Debug

popd

cmake --build $BUILD_DIR --target MLIRAffineFullUnrollPasses
cmake --build $BUILD_DIR --target MLIRMulToAddPasses
cmake --build $BUILD_DIR --target mlir-headers
cmake --build $BUILD_DIR --target mlir-doc
cmake --build $BUILD_DIR --target tutorial-opt
cmake --build $BUILD_DIR --target check-mlir-tutorial
```

0 comments on commit 6734cbe

Please sign in to comment.