A development platform for IL based languages and UWP applications targeting Cortex-M processors.
Cortex-M processors are heavily resource contrained, and yet, because of their low power consumption and optimized interrupt dispatching, are arguably the most suitable solution for IoT applications. Existing development platfoms and tool chains that target this space are based on C/C++, and no native support for higher level languages and RAD environment exist that can take advantage of what a Cortex-M HW can offer. Previous efforts in this space include .NET Micro Framework and other Java solutions, which are sometimes too large in code size, too slow or too difficult to extend for mainstream adoption. LLILUM implements a scalable alternative to C/C++ that features comparable code size and speed, as well as easy extensibility from within the Visual Studio development tool chain.
LLILUM is an optimizing compilation tool chain that, just like .NET Micro Framework, is entirely based on CLI. LLILUM relies on the well known development experience in Visual Studio to transform source code into MSIL, and then into an intermediate represenation (IR) that is optmized for size and speed, taking into account the target platform constraints, such as memory layout, native ISA, calling convention, and, first and foremost, the application requirements. The method and type closure is optimized based on application usage of system facilities, and the type system is morphed to shrink into the smallest possible footprint. Standard features of CLI environments, e.g. type system (TS) introspection, garbage collection (GC) and a full featured multi-threaded execution engine (MTEE) are provided.
LLILUM can generate runnable images for ARMv4 and ARMv5 ISA, with partial FP support. We could extend the code generator to support ARMv7-M but we decided to leverage LLVM instead, hoping we can get a wider set of targets over time. The current incarnation of the system successfully uses LLVM to target a Cortex-M ISA with a fully functional Type System. LLILUM provides GC through reference counting and full suport for MTEE. Boehm GC is in the works.
Currrent target language is C#; extensions to Python and possibly TypeScript are in the works. We are also targeting UWP app development, so that it will be possible to share code between a Windows 10 device app and a Cortex-M micro processor. Welcome to One Core!
Please see the following documents in our wiki:
- Detailed system description
- Build System
- Front End Configuration
- Repo layout
- Setup and build instruction
- Build and run test demo
- Performance considerations
- Next steps
A big thanks to Miguel Perez Martinez for helping bringing up this proof of concepts with exceptional dedication, perseverance and competency. An even bigger thanks to D.M., who created the vast majority of this codebase single-handedly.