FBT constructs all referenced environments & their targets' dependency trees on startup. So, to keep startup time as low as possible, we're hiding construction of certain targets behind command-line options.
## Invoking FBT
To build with FBT, call it specifying configuration options & targets to build. For example,
To run cleanup (think of `make clean`) for specified targets, all `-c` option.
## FBT targets
FBT keeps track of internal dependencies, so you only need to build the highest-level target you need, and FBT will make sure everything it needs is up-to-date.
### High-level (what you most likely need)
-`fw_dist` - build & publish firmware to `dist` folder
-`dolphin_ext` - process dolphin animations for SD card
-`icons` - generate .c+.h for icons from png assets
-`proto` - generate .pb.c+.pb.h for .proto sources
-`proto_ver` - generate .h with protobuf version
-`dolphin_internal`, `dolphin_blocking` - generate .c+.h for corresponding dolphin assets
## Command-line parameters
-`--options optionfile.py` (default value `fbt_options.py`) - load file with multiple configuration values
-`--with-updater` - enables updater-related targets and dependency tracking. Enabling this options introduces extra startup time costs, so use it when bundling update packages. Or if you have a fast computer and don't care about a few extra seconds of startup time
-`--extra-int-apps=app1,app2,appN` - forces listed apps to be built as internal with `firmware` target
-`--extra-ext-apps=app1,app2,appN` - forces listed apps to be built as external with `firmware_extapps` target
## Configuration
Default configuration variables are set in configuration file `fbt_options.py`.
Values set on command-line have higher precedence over configuration file.
You can find out available options with `./fbt -h`.
### Firmware application set
You can create customized firmware builds by modifying application list to be included in the build. Application presets are configured with `FIRMWARE_APPS` option, which is a map(configuration_name:str -> application_list:tuple(str)). To specify application set to use in a build, set `FIRMWARE_APP_SET` to its name.
For example, to build firmware image with unit tests, run `./fbt FIRMWARE_APP_SET=unit_tests`.