The project contains the runtime libraries that are used by the MARCO compiler during the link phase.
According to their purpose, they can be categorized as follows:
-
Skeleton libraries
They handle the basic aspects of the executable (e.g., arguments parsing) and manage the various stages of the simulation. -
Driver libraries
They implement the logic that is specific to the chosen integration method. In other words, they control the evolution of the dynamic model. -
Solver libraries
They can be thought as the backbone of driver libraries. They implement the code to perform numerical integration or the classes used to interface with external solvers. Differently from driver libraries, they do not handle more basic aspects of the simulation like printing values at the end of each time step. -
Support libraries
Differently from the other categories, the purpose of support libraries is to provide the implementation of functions that are called by the compiled model and are not generated by the compiler. This is useful in case of operations whose generation in terms of LLVM-IR -- or even higher abstractions -- would be inconvenient when comparing performance improvements and maintainability.