Skip to content

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:

uv sync
source .venv/bin/activate   # CMake needs the venv activated to find Python

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

cmake --preset simu -DPCB=X10 -DPCBREV=TX16S
cmake --build build/simu --target simu

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:

cmake --preset companion
cmake --build build/companion --target companion --parallel

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

cmake --preset simu -DPCB=X10 -DPCBREV=TX16S
cmake --build build/simu --target tests-radio

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:

export FETCHCONTENT_BASE_DIR=~/edgetx-deps
cmake --preset tx16s

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.