Skip to content
SMACCMPilot flight controller
JavaScript C++ Haskell C HTML Elm Other
Branch: master
Clone or download


Build Status


The SMACCMPilot project is an embedded systems software research project by Galois, Inc. We're building open-source autopilot software for small unmanned aerial vehicles (UAVs) using new high-assurance software methods.

Complete documentation for this repository and related SMACCMPilot work is available at

Developers are encouraged to join our mailing list for project updates. You can also file issues on Github.


  • The src directory contains a collection of Cabal packages for components of the SMACCMPilot build. There is a README in each package directory describing the libraries and executables provided.


This repository has several external dependencies which may be burdensome to install. For convenience, we have provided a smaccmpilot-build repository which packages this repository and all of the required dependencies using git submodules. We recommend you clone smaccmpilot-build, or provide the following environment variables pointing to the following repositories:

name env variable
ivory-tower-stm32 BSP_REPO

Haskell Tools

This project requires the Stack build tool, which will automatically download and configure the appropriate Haskell compiler.

Cross Compiler

This project expects the gcc-arm-embedded toolchain to be present in your PATH.


The build system uses recursive makefiles. Individual cabal packages each have a local Makefile with targets for building, testing, and generating Ivory/Tower programs.

Ivory/Tower programs are Haskell programs which generate C sources and an appropriate makefile. We call these makefiles recursively to build binaries from the generated C sources.

Generated Code Pitfall

Two of the packages in this repository, smaccm-comm-schema-native and smaccm-comm-schema-tower, are generated by gidl. If the generated code for these packages is missing, the default Stack targets will not work. As a temporary fix, running make smaccm-comm-schema in the root of this repository should perform the necessary bootstrapping.


This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unaccpetable behavior to

You can’t perform that action at this time.