Compilation Options¶
This page documents the CMake options available when building EdgeTX firmware. Most options have sensible defaults set by the target's CMakeLists.txt — you only need to override them when you have a specific reason to.
Target Selection¶
These are the most important options to set, as they determine which radio you are building for.
PCB¶
Selects the radio target.
| Value | Radio |
|---|---|
X7 | FrSky Taranis Q X7 / X7S and Jumper / RadioMaster variants (see PCBREV) |
X9LITE | FrSky Taranis X9 Lite |
X9LITES | FrSky Taranis X9 Lite S |
XLITE | FrSky X-Lite |
XLITES | FrSky X-Lite S |
X9D | FrSky Taranis X9D |
X9D+ | FrSky Taranis X9D+ (see PCBREV) |
X9E | FrSky Taranis X9E |
X10 | FrSky Horus X10 / X10S and RadioMaster / Jumper variants (see PCBREV) |
X12S | FrSky Horus X12S |
PL18 | Flysky PL18 and variants (see PCBREV) |
TX15 | RadioMaster TX15 |
TX16SMK3 | RadioMaster TX16S Mark III |
T15PRO | Jumper T15 Pro |
ST16 | Siyi ST16 |
PA01 | FrSky PA01 |
PCBREV¶
Selects a specific variant within a PCB target. Valid values depend on the selected PCB:
| Value | Radio |
|---|---|
TX12 | RadioMaster TX12 |
TX12MK2 | RadioMaster TX12 Mark II |
ZORRO | RadioMaster Zorro |
BOXER | RadioMaster Boxer |
MT12 | RadioMaster MT12 |
GX12 | RadioMaster GX12 |
POCKET | RadioMaster Pocket |
T8 | RadioMaster T8 |
COMMANDO8 | RadioMaster Commando 8 |
T12 | Jumper T12 |
T12MAX | Jumper T12 Max |
TPRO | Jumper T-Pro |
TPROV2 | Jumper T-Pro V2 |
TPROS | Jumper T-Pro S |
T14 | Jumper T14 |
T20 | Jumper T20 |
T20V2 | Jumper T20 V2 |
TLITE | Jumper T-Lite |
LR3PRO | Jumper LR3 Pro |
BUMBLEBEE | Jumper Bumblebee |
ACCESS | FrSky Q X7 Access |
V12 | FrSky Q X7 V1.2 |
V14 | FrSky Q X7 V1.4 |
| Value | Radio |
|---|---|
2014 | X9D+ (original, default) |
2019 | X9D+ 2019 |
| Value | Radio |
|---|---|
STD | FrSky Horus X10 (default) |
EXPRESS | FrSky Horus X10 Express |
T16 | RadioMaster TX16S |
TX16S | RadioMaster TX16S Mark II |
F16 | Flyzone F16 |
V16 | VolantexRC V16 |
T18 | Jumper T18 |
T15 | Jumper T15 |
| Value | Radio |
|---|---|
PL18 | Flysky PL18 (default) |
PL18EV | Flysky PL18EV / Paladin EV |
PL18U | Flysky PL18U |
EL18 | Flysky EL18 |
NV14 | Flysky NV14 |
NB4P | Flysky NB4+ |
TRANSLATIONS¶
Firmware language. Default: EN
Valid values: CN CZ DA DE EN ES FI FR HE HU IT JP KO NL PL PT RU SE SK TW UA
Feature Options¶
These options enable or disable firmware features. Defaults are typically set by the target, so you only need to override them if you want to add or remove a feature for a specific build.
| Option | Default | Description |
|---|---|---|
AUTOSOURCE | ON | Automatic source detection in menus |
AUTOSWITCH | ON | Automatic switch detection in menus |
BLUETOOTH | varies | Bluetooth module support |
BOOTLOADER | ON | Include bootloader |
CURVES | ON | Curves support |
DANGEROUS_MODULE_FUNCTIONS | OFF | Enable RangeCheck / Bind / Module OFF functions |
DBLKEYS | ON | Double key shortcuts |
DISK_CACHE | ON | SD card disk cache (color screen targets) |
FAI | OFF | Competition mode — disables telemetry |
FLIGHT_MODES | ON | Flight modes |
FLYSKY_GIMBAL | varies | Flysky serial gimbal support |
GVARS | ON | Global variables |
GUI | ON | GUI |
HELI | ON | Helicopter mixer menu |
INTERNAL_GPS | varies | Internal GPS support |
KCX_BTAUDIO | OFF | KCX BT audio emitter support |
LUA | ON | Lua scripting |
LUA_COMPILER | ON | Pre-compile and cache Lua scripts on the radio |
LUA_MIXER | ON | Lua mixer / model scripts |
MODULE_PROTOCOL_D8 | ON | FrSky D8 module protocol |
MODULE_PROTOCOL_FCC | ON | FCC module protocol |
MODULE_PROTOCOL_FLEX | OFF | Non-certified FLEX module protocol |
MODULE_PROTOCOL_LBT | ON | EU / LBT module protocol |
MODULE_SIZE_STD | ON | Standard size external module bay |
MULTIMODULE | ON | DIY Multiprotocol TX Module |
OVERRIDE_CHANNEL_FUNCTION | ON | OverrideChannel function |
PPM_CENTER_ADJUSTABLE | ON | PPM centre adjustable |
PPM_LIMITS_SYMETRICAL | OFF | PPM limits symmetrical |
RAS | ON | RAS (SWR) measurement |
SPACEMOUSE | OFF | SpaceMouse support (Horus only) |
TEMPLATES | OFF | Model templates menu |
UNEXPECTED_SHUTDOWN | ON | Unexpected shutdown warning screen |
USB_SERIAL | ON | USB serial (CDC) |
WATCHDOG | ON | Hardware watchdog |
Safety and Sanitizer Options¶
Runtime sanitizers are for native host tests and simulator/fuzzer binaries only. Do not flash sanitizer builds to a radio; firmware builds should use compiler/static safety checks instead.
| Option | Default | Description |
|---|---|---|
EDGE16_SAFETY_CHECKS | OFF | Enables stricter warning coverage for firmware and native safety builds. |
EDGE16_GCC_ANALYZER | OFF | Enables GCC's static analyzer for firmware C/C++ translation units. |
EDGE16_SANITIZERS | empty | Native test sanitizers, comma-separated: address, undefined, thread, memory. Empty native test builds default to AddressSanitizer. |
EDGE16_BUILD_FUZZERS | OFF | Builds Clang/libFuzzer native fuzz targets. Requires Clang and cannot be combined with ThreadSanitizer. |
EDGE16_STACK_USAGE_LIMIT | 8192 | Static stack usage warning limit used with EDGE16_SAFETY_CHECKS for firmware builds. |
EDGE16_FRAME_SIZE_LIMIT | 4096 | Stack frame size warning limit used with EDGE16_SAFETY_CHECKS for firmware builds. |
AddressSanitizer and UndefinedBehaviorSanitizer should run together for regular native radio tests:
ThreadSanitizer is intentionally a separate build:
MemorySanitizer requires Clang and should be run separately because it cannot be combined with AddressSanitizer or ThreadSanitizer:
The fuzzer smoke targets are available with Clang:
fuzz-smoke currently covers YAML parsing and the mixer/output control path. The mixer fuzzer feeds fuzzed model mixes, expos, limits, and analog inputs through repeated evalFlightModeMixes() calls under ASan+UBSan.
Recommended sanitizer runtime options are wired into the native test and CI targets. Leak detection is disabled for these automated smoke runs because the current native UI test harness retains process-lifetime LVGL objects at exit; ASan still checks invalid accesses and UBSan still checks undefined behavior.
ASAN_OPTIONS=abort_on_error=1:detect_leaks=0:check_initialization_order=1
UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1
TSAN_OPTIONS=halt_on_error=1:second_deadlock_stack=1
Hardware Configuration¶
These string options configure hardware behaviour and are normally set by the target.
PWR_BUTTON¶
How the power button works. Default is target-specific.
| Value | Description |
|---|---|
PRESS | Momentary press to power on/off (most radios) |
SWITCH | Toggle switch |
PPM_UNIT¶
PPM display unit. Default is target-specific.
| Value | Description |
|---|---|
PERCENT_PREC1 | Percentage with one decimal place (e.g. 100.0%) |
PERCENT_PREC0 | Percentage with no decimal places (e.g. 100%) |
US | Microseconds |
DEFAULT_MODE¶
Default sticks mode. Leave blank to use the firmware default.
| Value | Description |
|---|---|
| `` | Use firmware default |
1 | Mode 1 |
2 | Mode 2 |
3 | Mode 3 |
4 | Mode 4 |
INTERNAL_GPS_BAUDRATE¶
Baud rate for the internal GPS, where supported. Default: 9600
LUA_SCRIPT_LOAD_MODE¶
Controls how Lua scripts are loaded and compiled. Leave blank to use the firmware default (bt on radio, T on simulator/debug builds). Accepts a combination of the following flags:
| Flag | Description |
|---|---|
b | Load binary (pre-compiled) scripts |
t | Load text scripts |
T | Pre-compile scripts |
x | Execute on load |
c | Compile only |
d | Decompress |
POPUP_LEVEL¶
Controls the verbosity of popup notifications. Default: 2 (set to 3 for FRSKY_RELEASE builds).
Debug & Tracing¶
These options are for development and debugging. All default to OFF.
| Option | Description |
|---|---|
ASTERISK | Show asterisk icon to identify test-only firmware |
DEBUG_SEGGER_RTT | Route debug output to Segger RTT |
DEBUG_WINDOWS | Trace UI window activity |
DEBUG_YAML | Trace YAML parser activity |
DEBUG_LABELS | Trace label activity |
JITTER_MEASURE | Enable ADC jitter measurement |
SEMIHOSTING | Enable debugger semihosting |
TEST_BUILD_WARNING | Show a warning banner on test builds |
TRACE_AUDIO | Trace audio subsystem |
TRACE_LUA_INTERNALS | Trace Lua VM internals |
UI_PERF_MONITOR | Overlay frame rate and CPU usage on screen |
WARNINGS_AS_ERRORS | Treat compiler warnings as errors (-Werror) |
Simulator Options¶
| Option | Default | Description |
|---|---|---|
SIMU_DISKIO | OFF | Enable disk I/O simulation using a sdcard.image file |
SIMU_LUA_COMPILER | ON | Pre-compile and cache Lua scripts in the simulator |
SIMU_TARGET | ON | Build the simulator target |
DISABLE_COMPANION | OFF | Skip building Companion and simulators |
Release Build Options¶
These options are used to produce official manufacturer-specific firmware releases and are not needed for general development builds.
| Option | Manufacturer |
|---|---|
FRSKY_RELEASE | FrSky (also sets POPUP_LEVEL=3) |
IMRC_RELEASE | IMRC |
TBS_RELEASE | Team BlackSheep |
JUMPER_RELEASE | Jumper |
RADIOMASTER_RELEASE | RadioMaster |
RADIOMASTER_RTF_RELEASE | RadioMaster RTF |
IFLIGHT_RELEASE | iFlight |
BETAFPV_RELEASE | BetaFPV |
Compiler & Build Flags¶
| Option | Default | Description |
|---|---|---|
OPT | s | Optimisation level (0, 1, 2, s) |
FIRMWARE_C_FLAGS | `` | Additional C compiler flags |
FIRMWARE_CXX_FLAGS | `` | Additional C++ compiler flags |
WARNINGS_AS_ERRORS | OFF | Treat all compiler warnings as errors |
VERBOSE_CMAKELISTS | OFF | Show extra information when processing CMake files |