This guide walks through building the core compiler and runtime parts of IREE from source. Auxiliary components like the Python bindings and Vulkan driver are documented separately, as they require further setup.
Install CMake version >= 3.13 from the downloads page.
Tip:
Your editor of choice likely has plugins for CMake, such as the Visual Studio Code CMake Tools extension.
Ninja is a fast build system that you can use as a CMake generator. Download it from the releases page, extract somewhere, and add it to your PATH.
We recommend MSVC from either the full Visual Studio or from “Build Tools For Visual Studio”:
Choose either option from the downloads page and during installation make sure you include “C++ Build Tools”
Initialize MSVC by running vcvarsall.bat
:
> & "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
Using your shell of choice (such as PowerShell or cmder), clone the repository and initialize its submodules:
> git clone https://github.com/google/iree.git > cd iree > git submodule update --init
Tip:
Clone to a short path likeC:\projects\
to avoid issues with Windows maximum path lengths (260 characters).
Tip:
Editors and other programs can also clone the repository, just make sure that they initialize the submodules.
Configure:
> cmake -G Ninja -B ..\iree-build\ .
Tip:
The root CMakeLists.txt file has options for configuring which parts of the project to enable.
These are further documented in CMake Options and Variables.
Build all targets:
> cmake --build ..\iree-build\
-iree-hal-target-backends=dylib-llvm-aot
can be used to generate modules with ahead-of-time compiled kernels stored in DLLs. Run the iree-opt/iree-translate tools from a command prompt with lld-link.exe
or link.exe
tools on the PATH
and the MSVC/Windows SDK environment variables; the easiest way to get this configured is to use the vsvarsall.bat
or vcvars64.bat
files to set your environment. See the Microsoft documentation for details on configuring the toolchain.
If you want to manually specify the linker used, set the IREE_LLVMAOT_LINKER_PATH
environment variable to the path of the linker:
> set IREE_LLVMAOT_LINKER_PATH="C:\Tools\LLVM\bin\lld-link.exe"
Translate a source MLIR file into an IREE module:
> ..\iree-build\iree\tools\iree-translate.exe \ -iree-mlir-to-vm-bytecode-module \ -iree-hal-target-backends=dylib-llvm-aot \ iree/tools/test/simple.mlir \ -o %TMP%/simple-llvm_aot.vmfb
Note that this will use the host machine as the target by default, and the exact target triple and architecture can be specified with flags when cross-compiling:
> ..\iree-build\iree\tools\iree-translate.exe \ -iree-mlir-to-vm-bytecode-module \ -iree-hal-target-backends=dylib-llvm-aot \ -iree-llvm-target-triple=x86_64-pc-windows-msvc \ -iree-llvm-target-cpu=host \ -iree-llvm-target-cpu-features=host \ iree/tools/test/simple.mlir \ -o %TMP%/simple-llvm_aot.vmfb
Check out the contents of the ‘tools’ build directory:
> dir ..\iree-build\iree\tools > ..\iree-build\iree\tools\iree-translate.exe --help
Translate a MLIR file and execute a function in the compiled module:
> ..\iree-build\iree\tools\iree-run-mlir.exe .\iree\tools\test\simple.mlir -function-input="i32=-2" -iree-hal-target-backends=vmla -print-mlir