An extensible build system for embedded c projects which are deployed on tiny 8/16/32 bit Micro-controllers. Supports TDD+FDD. Work right out of the box for MCHP PIC micro-controllers. Comes pre-loaded with a test runner (both cui and gui versions), forked and customized versions of unity and cmock, cstub (a helpful stub generator which generates stub functions from an input header file) and a couple of other helpful tools.


What is this repository for?

This repo houses halwayi. Originally, when the development began in the Q4 of 2013, halwayi was divided into three separate SVN repos (one for the core, one for the runner and one for the combination of both). It was soon realized that this was a horrible way of doing things. Thereby, all three repos were converted into git and merged together using a tool.

Quick summary

Basically i was sick and tired of the grand old way of developing embedded software (you write a lot of code, flash it onto the micro-controller and then manually test it using CRO, multimeters etc.). I desperately wanted a solution. Basically i was intrigued by the thought that if almost all other software development processes can be automated and tested so easily then why not embedded software? All i had to do was to solve a couple of issues, like:

  • How to test the code written for embedded applications? Because the embedded code (mostly c) is usually so tightly coupled with the hw and other dependencies. If this code could be decoupled, i could get cross development as a bonus, which would further bring along with it other benefits such as faster development cycles, working remote, etc.

  • How to automate the testing process with a single command from the command line. This will help to catch regressions. Halwayi could then be installed on a separate build machine running a CI.

  • All this with Minimal overhead because ultimately the whole idea of having a build process is to automate the most error prone and mundane tasks without it getting in way of the development process.

Halwayi sits silently as a companion in the background which handles all the plumbing logic (such as generating mocks and stubs, test runners, test executables, running tests, gathering reports, managing artifacts, etc.) automagically in the background without getting into the way of the programmer. All supporting configuration of mocks/stubs/build process sits right inside the test file:


How do I get set up?

Setting up is a bit tedious as of now- needs MSBuild on %PATH% along with ruby 1.9.* or 2.3.*. i’ll be updating this section in near future with more details to setup.

Contribution guidelines


Who do I talk to?

Contact me if you’re hungry for more.