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.