Customize firmware with kbuild

The Crazyflie firmware uses a version of the KBuild build system. Similar to what the Linux Kernel or the Busybox project uses.

What to build is determined by a configuration file, which is named .config and resides in the root of the firmware repository. If you only type make in a fresh repository the build system will generate the default config. You can inspect it by going, for instance:

$ less .config
#
# Automatically generated file; DO NOT EDIT.
# Crazyflie Platform Configuration
#

#
# Build and compiler options
#
CONFIG_CROSS_COMPILE="arm-none-eabi-"
# CONFIG_DEBUG is not set

#
# Platform configuration
#
CONFIG_PLATFORM_CF2=y
# CONFIG_PLATFORM_TAG is not set

#
# Sensor configuration
#
CONFIG_SENSORS_MPU9250_LPS25H=y
CONFIG_SENSORS_BMI088_BMP388=y
[...]

If you want to customize your build you can use the menuconfig by typing:

$ make menuconfig

This will drop you into a terminal based user interface where you can configure and customize what will be included in the firmware. To use this you need to have some extra packages installed on your system, the equivelent of the following Ubuntu packages:

$ sudo apt install build-essential libncurses5-dev

To get an idea of how menuconfig will look, please see the images below.

Main menu of menuconfig

Configuring deck drivers

Platform specific options

Read more about platforms in the platform section.