Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Dependencies

Dynamatic uses a number of libraries and tools to implement its full functionality. This document provides a list of these dependencies with some information on them.

Libraries

Git Submodules

Dynamatic uses git submodules to manage its software dependencies (all hosted on GitHub). We depend on Polygeist, a C/C++ frontend for MLIR which itself depends on LLVM/MLIR through a git submodule. The project is set up so that you can include LLVM/MLIR headers directly from Dynamatic code without having to specify their path through Polygeist. We also depend on godot-cpp, the official C++ bindings for the Godot game engine which we use as the frontend to our interactive dataflow circuit visualizer. See the git submodules guide for a summary on how to work with submodules in this project.

Polygeist

Polygeist is a C/C++ frontend for MLIR including polyhedral optimizations and parallel optimizations features. Polygeist is thus responsible for the first step of our compilation process, that is taking source code written in C/C++ into the MLIR ecosystem. In particular, we care that our entry point to MLIR is at a very high semantic level, namely, at a level where polyhedral analysis is possible. The latter allows us to easily identify dependencies between memory accesses in source programs in a very accurate manner, which is key to optimizing the allocation of memory interfaces and resources in our elastic circuits down the line. Polygeist is able to emit MLIR code in the Affine dialect, which is perfectly suited for this kind of analysis.

CMake & Ninja

These constitute the primary build system for Dynamatic. They are used to build Dynamatic core, Polygeist, and LLVM/MLIR. You can have more details on CMake and Ninja by checking their official documentations.

Boost.Regex

Boost.Regex is used to resolve Dynamatic regex expressions.

Scripting & Tools

Python (≥ 3.6)

Used in build systems, scripting, testing. See official documentation

Graphviz (dot)

Generates visual representations of dataflow circuits (i.e., .dot). See official documentation

JDK (Java Development Kit)

Required to run Scala/Chisel compilation. See official documentation.

Tools

Dynamatic uses some third party tools to implement smart buffer placement, simulation, and interactive dataflow circuit visualization. Below is a list of the tools:

Optimization & Scheduling: Gurobi

Gurobi solves MILP (Mixed-Integer Linear Programming) problems used during buffer placement and optimization. Dynamatic is still functional without Gurobi, but the resulting circuits often fail to achieve acceptable performance. See how to set up gurobi in the advanced build section

Simulation Tool: ModelSim/Questa

Dynamatic uses ModelSim/Questa to perform simulations. See installation page on how to setup ModelSim/Questa.

Graphical Tools: Godot

godot-cpp, the official C++ bindings for the Godot game engine which we use as the frontend to our interactive dataflow circuit visualizer.

Utility/Development Tools

clang, lld, ccache

These are optional compiler/linker improvements to speed up builds. See their official documentations for details.

Git

Dynamatic uses git for project and submodule version control

Standard UNIX Toolchain: curl, gzip, etc.

These are used for the various build scripts in the Dynamatic project.