Through the use of GPUCompiler.jl and LLVM.jl, it is possible to cross-compile julia code to backends not officially supported by julia itself. One of these is the AVR backend, the architecture used by the arduino family of microcontrollers. This talk explores some experiments in compiling julia code to AVR, running it baremetal on an arduino as well as looking into challenges with making julia more suited to cross compilation.
With its goal of having a single language for both prototyping research code as well as highly optimized, high-performance deployed code and this goal moving closer to completion year after year, one of the remaining challenges for julia is cross compilation to CPU architectures other than the running julia session. This talk will show some exploration in compiling julia code with a target of AVR and subsequently running that julia code, without a runtime, on an arduino. For this, two new support packages are used: AVRDevices.jl, for CPU specific definitions in the AVR family and AVRCompiler.jl, for the cross compilation process. Afterwards, we'll look at some challenges for developing with such static compilation in mind, what could be done to make the experience smoother & easier to debug, as well as which features of julia are unavailable in such a restricted environment.