## Development
### Setting Up Prerequisites
Currently, only Ubuntu 14.04+ is officially supported as primary development environment.

There are several dependencies, that should be installed manually. The following list is required for building:
- `gcc` higher than `4.8.2`
  - native
  - arm-none-eabi
- `cmake` higher than `2.8.12.2`
- `make` higher than `3.81`
- `bash` higher than `4.3.11`
- `cppcheck` higher than 1.61
- `vera++` higher than 1.2.1

```bash
sudo apt-get install gcc g++ gcc-arm-none-eabi cmake cppcheck vera++
```

Upon first build, `make` would try to setup prerequisites, required for further development and pre-commit testing:
- STM32F3 and STM32F4 libraries

```bash
make prerequisites -j
```
It may take time, so go grab some coffee:

```bash
Setting up prerequisites... (log file: ./build/prerequisites/prerequisites.log)
```

### Building Debug Version
To build debug version for Linux:
```bash
make debug.linux -j
```

To build debug version for Linux without LTO (Link Time Optimization):
```bash
LTO=OFF make debug.linux -j
```

### Checking Patch
```bash
make precommit -j
```
If some style guidelines, build or test runs fail during precommit, then this is indicated with a message like this:
```
Build failed. See ./build/bin/unittests/make.log for details.
```
