Building EdgeTX¶
This guide covers how to build EdgeTX firmware, the SDL simulator, and the Companion application from source using CMake Presets. For platform-specific environment setup (installing toolchains, Qt, etc.), see the platform guides in this section.
Note
The instructions here are meant to help you develop or test changes to EdgeTX on your PC, not to build flight/radio-safe versions of binaries.
Prerequisites¶
| Component | Required for | Notes |
|---|---|---|
| CMake >= 3.21 | Everything | |
| arm-none-eabi-gcc | Firmware | 14.2.rel1 recommended |
| Python >= 3.10 | Firmware, Companion | Code generation at build time |
| Qt 6 | Companion | 6.9+ recommended |
| SDL2 | Simulator | |
| Ninja (optional) | Everything | Faster than Make |
Python dependencies¶
The build invokes Python scripts for code generation (YAML parsers, hardware definitions, bitmap encoding, etc.). Install the required packages with uv:
The virtual environment must stay activated when running CMake, so that the build can find the installed packages. On Windows, use .venv\Scripts\activate instead.
Quick start with CMake Presets¶
The repository ships CMake presets for all supported radios and build types. These work in VSCode (CMake Tools), CLion, and the command line.
Firmware¶
# Configure for a specific radio
cmake --preset tx16s
# Build
cmake --build build/tx16s --target firmware
Replace tx16s with any supported radio preset. Run cmake --list-presets to see all available presets. A few examples:
| Preset | Radio |
|---|---|
tx16s | RadioMaster TX16S |
tx16smk3 | RadioMaster TX16S MK3 |
boxer | RadioMaster Boxer |
pocket | RadioMaster Pocket |
zorro | RadioMaster Zorro |
t20 | Jumper T20 |
t14 | Jumper T14 |
tpro | Jumper T-Pro |
x9dp2019 | FrSky X9D+ 2019 |
x10 | FrSky X10 |
nv14 | FlySky NV14 |
pl18 | FlySky PL18 |
Simulator¶
Companion¶
Companion embeds a radio simulator that uses WASM plugins — one per radio target. With presets, this requires two build directories: one for the WASM plugins and one for Companion itself.
Build the WASM plugins for all radios:
tools/build-wasm-modules.sh
# or limit to specific radios
FLAVOR="tx16s;boxer" tools/build-wasm-modules.sh
Then build Companion:
When developing for a specific radio, you can build just that one WASM plugin using the superbuild instead (see Manual CMake below):
cmake -S . -B build-tx16s -DPCB=X10 -DPCBREV=TX16S
cmake --build build-tx16s --target wasi-module --parallel
cmake --build build-tx16s --target companion --parallel
Tests¶
Manual CMake (without presets)¶
If you prefer to invoke CMake directly, the superbuild takes care of toolchain selection and sub-build configuration automatically:
# configure
cmake -S . -B build-tx16s -DPCB=X10 -DPCBREV=TX16S
# build firmware
cmake --build build-tx16s --target firmware --parallel
# build simulator (same build directory)
cmake --build build-tx16s --target simu --parallel
# run tests
cmake --build build-tx16s --target tests-radio --parallel
Key CMake variables¶
| Variable | Default | Description |
|---|---|---|
PCB | (required) | Target radio family (X7, X10, PL18, ...) |
PCBREV | (varies) | Radio variant within a PCB family (TX16S, BOXER, ...) |
CMAKE_BUILD_TYPE | Release or Debug (native builds only; firmware ELF always includes debug symbols, stripped for .bin/.uf2) | |
TRANSLATIONS | EN | Firmware language (EN, FR, DE, ES, ...) |
DEFAULT_MODE | Stick mode 1-4 | |
LUA | ON | Lua scripting support |
For the full list, see Compilation Options. For radio-specific build flags (PCB, PCBREV) not covered above, refer to the build scripts at https://github.com/EdgeTX/edgetx/tree/main/tools.
FetchContent dependency cache¶
Downloaded third-party dependencies (googletest, yaml-cpp, imgui, etc.) are cached in .cache/fetchcontent/ at the repository root. This cache is shared across all build directories so that switching targets or doing clean rebuilds does not re-download dependencies.
To override the cache location, set the FETCHCONTENT_BASE_DIR environment variable or pass it as a CMake variable:
CI builds¶
CI uses the scripts in tools/:
| Script | Purpose |
|---|---|
build-gh.sh | Firmware release builds (all targets) |
commit-tests.sh | Debug builds with warnings-as-errors |
build-companion.sh | Companion app (Linux, macOS, Windows) |
build-wasm-modules.sh | WebAssembly simulator modules |
build-common.sh | Shared helpers and target definitions |
These scripts use FLAVOR environment variables and are tailored for GitHub Actions. For local development, prefer the CMake presets above.