### 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++
```

To make our scripts run correctly, several shell utilities should be available on the system:

- `find`
- `bc`
- `awk`
- `sed`
- `sha256sum`
- `wget`

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.
```
