Llvm.NET
Llvm.NET is a managed wrapper around an extended LLVM-C API including an Object Oriented model that closely matches the underlying LLVM internal object model. This allows for building code generation and other utilities leveraging LLVM from .NET applications.
For more details see the full API documentation
Guiding principles
- Mirror the underlying LLVM model as much as possible while
providing a well behaved .NET projection including:
- Class names and hierarchies
- Object identity and reference equality
- Fluent APIs when plausible and appropriate
- Hide low-level interop details and the raw LLVM-C API.
The native model for LLVM is a C++ class hierarchy and not the LLVM-C API used for most language/runtime bindings. Llvm.NET is designed to provide an OO model that faithfully reflects the underlying LLVM model while fitting naturally into .NET programming patterns. - Leverage existing LLVM-C APIs underneath whenever possible
- Extend only when needed with custom wrappers
- FxCop/Code Analysis Clean
Features
- LLVM Cross target code generation from .NET code
- JIT engine support for creating dynamic domain specific language runtimes with full lazy JIT support. (See Kaleidoscope language tutorial for more details)
- Ahead of time compilation with support for Link time optimization
- Object model that reflects the underlying LLVM classes