docs(build): add canonical build instructions, pyproject.toml, and add more radio presets (#7222)
Co-authored-by: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
This commit is contained in:
co-authored by
raphaelcoeffic
Claude Opus 4.6
Peter Feerick
parent
1ca4e58274
commit
a9f89323a9
@@ -1,4 +1,4 @@
|
|||||||
name: 'Setup WASI SDK'
|
name: 'Python Dependencies'
|
||||||
inputs:
|
inputs:
|
||||||
python-version:
|
python-version:
|
||||||
description: 'Python version'
|
description: 'Python version'
|
||||||
@@ -8,10 +8,16 @@ runs:
|
|||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- uses: actions/setup-python@v7
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v10.0.1
|
||||||
with:
|
with:
|
||||||
python-version: ${{ inputs.python-version }}
|
python-version: ${{ inputs.python-version }}
|
||||||
cache: 'pip' # caching pip dependencies
|
enable-cache: true
|
||||||
|
cache-dependency-glob: pyproject.toml
|
||||||
|
|
||||||
- run: python3 -m pip install -r requirements.txt
|
- name: Install Python dependencies
|
||||||
shell: bash
|
shell: bash
|
||||||
|
run: |
|
||||||
|
uv sync
|
||||||
|
echo "VIRTUAL_ENV=$PWD/.venv" >> "$GITHUB_ENV"
|
||||||
|
echo "$PWD/.venv/bin" >> "$GITHUB_PATH"
|
||||||
|
|||||||
@@ -8,7 +8,11 @@ on:
|
|||||||
- v*
|
- v*
|
||||||
paths:
|
paths:
|
||||||
- '.github/workflows/companion.yml'
|
- '.github/workflows/companion.yml'
|
||||||
|
- '.github/actions/python_dependencies/**'
|
||||||
|
- '.github/actions/wasi_sdk/**'
|
||||||
|
- '.github/actions/build_companion/**'
|
||||||
- 'companion/**'
|
- 'companion/**'
|
||||||
|
- 'pyproject.toml'
|
||||||
- 'tools/build-companion.sh'
|
- 'tools/build-companion.sh'
|
||||||
- 'tools/build-wasm-modules.sh'
|
- 'tools/build-wasm-modules.sh'
|
||||||
- 'cmake/wasm/CMakeLists.txt'
|
- 'cmake/wasm/CMakeLists.txt'
|
||||||
@@ -16,7 +20,11 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- '.github/workflows/companion.yml'
|
- '.github/workflows/companion.yml'
|
||||||
|
- '.github/actions/python_dependencies/**'
|
||||||
|
- '.github/actions/wasi_sdk/**'
|
||||||
|
- '.github/actions/build_companion/**'
|
||||||
- 'companion/**'
|
- 'companion/**'
|
||||||
|
- 'pyproject.toml'
|
||||||
- 'tools/build-companion.sh'
|
- 'tools/build-companion.sh'
|
||||||
- 'tools/build-wasm-modules.sh'
|
- 'tools/build-wasm-modules.sh'
|
||||||
- 'cmake/wasm/CMakeLists.txt'
|
- 'cmake/wasm/CMakeLists.txt'
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
- 'mkdocs.yml'
|
- 'mkdocs.yml'
|
||||||
- 'docs-requirements.txt'
|
- 'pyproject.toml'
|
||||||
- '.github/workflows/docs.yml'
|
- '.github/workflows/docs.yml'
|
||||||
tags:
|
tags:
|
||||||
- 'v[0-9]+.[0-9]+.[0-9]+' # release tags only, not -rc
|
- 'v[0-9]+.[0-9]+.[0-9]+' # release tags only, not -rc
|
||||||
@@ -15,7 +15,7 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
- 'mkdocs.yml'
|
- 'mkdocs.yml'
|
||||||
- 'docs-requirements.txt'
|
- 'pyproject.toml'
|
||||||
- '.github/workflows/docs.yml'
|
- '.github/workflows/docs.yml'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
@@ -41,15 +41,15 @@ jobs:
|
|||||||
|
|
||||||
- name: Build docs (PR check)
|
- name: Build docs (PR check)
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
run: uv run --with-requirements docs-requirements.txt mkdocs build --strict
|
run: uv run --extra docs -- mkdocs build --strict
|
||||||
|
|
||||||
- name: Deploy as latest (main branch)
|
- name: Deploy as latest (main branch)
|
||||||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||||
run: uv run --with-requirements docs-requirements.txt mike deploy --push --update-aliases latest
|
run: uv run --extra docs -- mike deploy --push --update-aliases latest
|
||||||
|
|
||||||
- name: Deploy release version
|
- name: Deploy release version
|
||||||
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
||||||
run: |
|
run: |
|
||||||
# Extract minor version from tag, e.g. v2.11.2 -> v2.11
|
# Extract minor version from tag, e.g. v2.11.2 -> v2.11
|
||||||
VERSION=$(echo "${GITHUB_REF_NAME}" | sed 's/\.[0-9]*$//')
|
VERSION=$(echo "${GITHUB_REF_NAME}" | sed 's/\.[0-9]*$//')
|
||||||
uv run --with-requirements docs-requirements.txt mike deploy --push --update-aliases "${VERSION}" stable
|
uv run --extra docs -- mike deploy --push --update-aliases "${VERSION}" stable
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
name: Validate CMakePresets.json
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'main'
|
||||||
|
- '[0-9]+.[0-9]+'
|
||||||
|
paths:
|
||||||
|
- 'CMakePresets.json'
|
||||||
|
- '.prettierrc.json'
|
||||||
|
- '.github/workflows/validate_cmake_presets.yml'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- 'main'
|
||||||
|
- '[0-9]+.[0-9]+'
|
||||||
|
paths:
|
||||||
|
- 'CMakePresets.json'
|
||||||
|
- '.prettierrc.json'
|
||||||
|
- '.github/workflows/validate_cmake_presets.yml'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
validate:
|
||||||
|
name: Validate CMakePresets.json
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v7
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v10.0.1
|
||||||
|
|
||||||
|
- name: Validate against CMake's presets schema
|
||||||
|
run: |
|
||||||
|
cmake --version
|
||||||
|
CMAKE_PREFIX="$(dirname "$(dirname "$(command -v cmake)")")"
|
||||||
|
uvx check-jsonschema --schemafile "$CMAKE_PREFIX"/share/cmake-*/Help/manual/presets/schema.json CMakePresets.json
|
||||||
|
|
||||||
|
- name: Check formatting (prettier)
|
||||||
|
run: npx --yes prettier@3.9.6 --check CMakePresets.json
|
||||||
@@ -29,7 +29,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install Python dependencies
|
- name: Install Python dependencies
|
||||||
working-directory: .
|
working-directory: .
|
||||||
run: uv venv && uv pip install -r requirements.txt
|
run: uv sync
|
||||||
|
|
||||||
- name: Check Python script syntax
|
- name: Check Python script syntax
|
||||||
run: uv run python3 -m py_compile *.py
|
run: uv run python3 -m py_compile *.py
|
||||||
|
|||||||
+6
-1
@@ -20,11 +20,16 @@ CMakeUserPresets.json
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
_deps
|
_deps
|
||||||
_wasi_sdk_fetch
|
_wasi_sdk_fetch
|
||||||
*.pyc
|
|
||||||
|
|
||||||
# MkDocs
|
# MkDocs
|
||||||
/site/
|
/site/
|
||||||
|
|
||||||
|
# Python (uv / pip)
|
||||||
|
.venv/
|
||||||
|
*.egg-info/
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
output/
|
output/
|
||||||
*.dmg
|
*.dmg
|
||||||
.devcontainer/devcontainer-lock.json
|
.devcontainer/devcontainer-lock.json
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": "CMakePresets.json",
|
||||||
|
"options": {
|
||||||
|
"printWidth": 120
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+317
-29
@@ -13,9 +13,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "firmware",
|
"name": "firmware",
|
||||||
|
"hidden": true,
|
||||||
"inherits": "default",
|
"inherits": "default",
|
||||||
"displayName": "Firmware",
|
"binaryDir": "build/${presetName}",
|
||||||
"binaryDir": "build/fw",
|
|
||||||
"toolchainFile": "cmake/toolchain/arm-none-eabi.cmake",
|
"toolchainFile": "cmake/toolchain/arm-none-eabi.cmake",
|
||||||
"cacheVariables": {
|
"cacheVariables": {
|
||||||
"EdgeTX_SUPERBUILD": false,
|
"EdgeTX_SUPERBUILD": false,
|
||||||
@@ -23,60 +23,348 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "companion",
|
"name": "native",
|
||||||
|
"hidden": true,
|
||||||
"inherits": "default",
|
"inherits": "default",
|
||||||
"displayName": "Companion",
|
"binaryDir": "build/${presetName}",
|
||||||
"binaryDir": "build/companion",
|
|
||||||
"toolchainFile": "cmake/toolchain/native.cmake",
|
"toolchainFile": "cmake/toolchain/native.cmake",
|
||||||
"cacheVariables": {
|
"cacheVariables": {
|
||||||
"EdgeTX_SUPERBUILD": false,
|
"EdgeTX_SUPERBUILD": false,
|
||||||
"NATIVE_BUILD": true
|
"NATIVE_BUILD": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "companion",
|
||||||
|
"displayName": "Companion",
|
||||||
|
"inherits": "native",
|
||||||
|
"binaryDir": "build/companion"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "simu",
|
"name": "simu",
|
||||||
"inherits": "default",
|
"displayName": "SDL Simulator",
|
||||||
"displayName": "SDL Simu",
|
"inherits": "native",
|
||||||
"binaryDir": "build/simu",
|
"binaryDir": "build/simu"
|
||||||
"toolchainFile": "cmake/toolchain/native.cmake",
|
},
|
||||||
"cacheVariables": {
|
|
||||||
"EdgeTX_SUPERBUILD": false,
|
{
|
||||||
"NATIVE_BUILD": true
|
"name": "f16",
|
||||||
}
|
"displayName": "Fatfish F16",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X10", "PCBREV": "F16" }
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "el18",
|
||||||
|
"displayName": "FlySky EL18",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "PL18", "PCBREV": "EL18" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nb4p",
|
||||||
|
"displayName": "FlySky NB4+",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "PL18", "PCBREV": "NB4P" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nv14",
|
||||||
|
"displayName": "FlySky NV14",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "PL18", "PCBREV": "NV14" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pa01",
|
||||||
|
"displayName": "FlySky PA01",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "PA01" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pl18",
|
||||||
|
"displayName": "FlySky PL18",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "PL18" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pl18ev",
|
||||||
|
"displayName": "FlySky PL18EV",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "PL18", "PCBREV": "PL18EV" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pl18u",
|
||||||
|
"displayName": "FlySky PL18U",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "PL18", "PCBREV": "PL18U" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "st16",
|
||||||
|
"displayName": "FlySky ST16",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "ST16" }
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "x10",
|
||||||
|
"displayName": "FrSky X10",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X10" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x10express",
|
||||||
|
"displayName": "FrSky Horus X10 Express",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X10", "PCBREV": "EXPRESS", "PXX1": "YES" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x12s",
|
||||||
|
"displayName": "FrSky X12S",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X12S" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x7",
|
||||||
|
"displayName": "FrSky QX7",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x7access",
|
||||||
|
"displayName": "FrSky QX7 Access",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "ACCESS", "PXX1": "YES" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x9dp",
|
||||||
|
"displayName": "FrSky X9D+",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X9D+" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x9dp2019",
|
||||||
|
"displayName": "FrSky X9D+ 2019",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X9D+", "PCBREV": "2019" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x9e",
|
||||||
|
"displayName": "FrSky X9E",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X9E" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "xlite",
|
||||||
|
"displayName": "FrSky X-Lite",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "XLITE" }
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "v12",
|
||||||
|
"displayName": "HelloRadioSky V12",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "V12" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "v14",
|
||||||
|
"displayName": "HelloRadioSky V14",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "V14" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "v14lcd",
|
||||||
|
"displayName": "HelloRadioSky V14LCD",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "V14LCD" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "v16",
|
||||||
|
"displayName": "HelloRadioSky V16",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X10", "PCBREV": "V16" }
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "commando8",
|
||||||
|
"displayName": "iFlight Commando 8",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "COMMANDO8" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "c14",
|
||||||
|
"displayName": "iFlight Commando 14",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "C14" }
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "bumblebee",
|
||||||
|
"displayName": "Jumper Bumblebee",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "BUMBLEBEE" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "t12max",
|
||||||
|
"displayName": "Jumper T12 MAX",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "T12MAX" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "t14",
|
||||||
|
"displayName": "Jumper T14",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "T14" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "t15",
|
||||||
|
"displayName": "Jumper T15",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X10", "PCBREV": "T15", "INTERNAL_MODULE_CRSF": "ON" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "t15pro",
|
||||||
|
"displayName": "Jumper T15 Pro",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "T15PRO" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "t16",
|
||||||
|
"displayName": "Jumper T16",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X10", "PCBREV": "T16", "INTERNAL_MODULE_MULTI": "ON" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "t18",
|
||||||
|
"displayName": "Jumper T18",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X10", "PCBREV": "T18" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "t20",
|
||||||
|
"displayName": "Jumper T20",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "T20" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "t20v2",
|
||||||
|
"displayName": "Jumper T20 V2",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "T20V2" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "t22",
|
||||||
|
"displayName": "Jumper T22",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "T22" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tpro",
|
||||||
|
"displayName": "Jumper T-Pro",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "TPRO" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tpros",
|
||||||
|
"displayName": "Jumper T-Pro S",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "TPROS" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tprov2",
|
||||||
|
"displayName": "Jumper T-Pro V2",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "TPROV2" }
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "boxer",
|
||||||
|
"displayName": "RadioMaster Boxer",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "BOXER" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gx12",
|
||||||
|
"displayName": "RadioMaster GX12",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "GX12" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gx15",
|
||||||
|
"displayName": "RadioMaster GX15",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "GX15" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mt12",
|
||||||
|
"displayName": "RadioMaster MT12",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "MT12" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pocket",
|
||||||
|
"displayName": "RadioMaster Pocket",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "POCKET" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tx12",
|
||||||
|
"displayName": "RadioMaster TX12",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "TX12" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tx12mk2",
|
||||||
|
"displayName": "RadioMaster TX12 MK2",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "TX12MK2" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tx15",
|
||||||
|
"displayName": "RadioMaster TX15",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "TX15" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tx16s",
|
||||||
|
"displayName": "RadioMaster TX16S",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X10", "PCBREV": "TX16S" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tx16smk3",
|
||||||
|
"displayName": "RadioMaster TX16S MK3",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "TX16SMK3" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zorro",
|
||||||
|
"displayName": "RadioMaster Zorro",
|
||||||
|
"inherits": "firmware",
|
||||||
|
"cacheVariables": { "PCB": "X7", "PCBREV": "ZORRO" }
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"buildPresets": [
|
"buildPresets": [
|
||||||
{
|
{
|
||||||
"name": "firmware",
|
"name": "firmware",
|
||||||
"displayName": "Firmware",
|
"hidden": true,
|
||||||
"configurePreset": "firmware",
|
"configurePreset": "tx16s",
|
||||||
"targets": [
|
"targets": ["firmware"]
|
||||||
"firmware"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "companion",
|
"name": "companion",
|
||||||
"displayName": "Companion",
|
"displayName": "Companion",
|
||||||
"configurePreset": "companion",
|
"configurePreset": "companion",
|
||||||
"targets": [
|
"targets": ["companion"]
|
||||||
"companion"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "simu",
|
"name": "simu",
|
||||||
"displayName": "SDL Simu",
|
"displayName": "SDL Simulator",
|
||||||
"configurePreset": "simu",
|
"configurePreset": "simu",
|
||||||
"targets": [
|
"targets": ["simu"]
|
||||||
"simu"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "tests-radio",
|
"name": "tests-radio",
|
||||||
"displayName": "Radio Tests",
|
"displayName": "Radio Tests",
|
||||||
"configurePreset": "simu",
|
"configurePreset": "simu",
|
||||||
"targets": [
|
"targets": ["tests-radio"]
|
||||||
"tests-radio"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ codegen: gen-fonts cfn-sort gen-yaml gen-radios gen-simstr
|
|||||||
check-radio-macros:
|
check-radio-macros:
|
||||||
python3 tools/check_radio_macros.py
|
python3 tools/check_radio_macros.py
|
||||||
|
|
||||||
# Needs: the Python packages in radio/util/hw_defs/requirements.txt.
|
# Needs: the Python packages in pyproject.toml (uv pip install . / pip install .).
|
||||||
[doc('Validate the hw_defs JSON and that every template renders for every board')]
|
[doc('Validate the hw_defs JSON and that every template renders for every board')]
|
||||||
[group('checks')]
|
[group('checks')]
|
||||||
check-hw-defs:
|
check-hw-defs:
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
mkdocs>=1.6
|
|
||||||
mkdocs-material>=9.5
|
|
||||||
mkdocs-minify-plugin>=0.8
|
|
||||||
mike>=2.0
|
|
||||||
+3
-2
@@ -7,13 +7,14 @@ This folder contains the source for the EdgeTX developer documentation site, bui
|
|||||||
Install the required packages from the repo root. Using [`uv`](https://docs.astral.sh/uv/getting-started/installation/) is recommended:
|
Install the required packages from the repo root. Using [`uv`](https://docs.astral.sh/uv/getting-started/installation/) is recommended:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install -r docs-requirements.txt
|
uv sync --extra docs
|
||||||
|
source .venv/bin/activate
|
||||||
```
|
```
|
||||||
|
|
||||||
Or with plain pip:
|
Or with plain pip:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install -r docs-requirements.txt
|
pip install ".[docs]"
|
||||||
```
|
```
|
||||||
|
|
||||||
[`mike`](https://github.com/jimporter/mike) is included as a dependency — it manages versioned deployments of the site (e.g. publishing a new release). You won't need it for local editing or preview.
|
[`mike`](https://github.com/jimporter/mike) is included as a dependency — it manages versioned deployments of the site (e.g. publishing a new release). You won't need it for local editing or preview.
|
||||||
|
|||||||
+176
-5
@@ -1,9 +1,180 @@
|
|||||||
# Building EdgeTX
|
# Building EdgeTX
|
||||||
|
|
||||||
This section contains step-by-step build instructions for every supported platform. Whether you want to build a custom firmware binary, run the EdgeTX simulator, or contribute to development, pick the guide that matches your environment.
|
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.
|
||||||
|
|
||||||
## Notes
|
!!! 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.
|
||||||
|
|
||||||
- The document here is meant to help you develop or test changes to EdgeTX on your PC, not to build flight/radio safe version of binaries.
|
## Prerequisites
|
||||||
- For a list of all available CMake build options, see [Compilation Options](compilation-options.md).
|
|
||||||
- For radio-specific build flags (`PCB`, `PCBREV`), refer to the build scripts at [https://github.com/EdgeTX/edgetx/tree/main/tools](https://github.com/EdgeTX/edgetx/tree/main/tools).
|
| 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](https://docs.astral.sh/uv/):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 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
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tools/build-wasm-modules.sh
|
||||||
|
|
||||||
|
# or limit to specific radios
|
||||||
|
FLAVOR="tx16s;boxer" tools/build-wasm-modules.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Then build Companion:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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](#manual-cmake-without-presets)
|
||||||
|
below):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 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](compilation-options.md). For
|
||||||
|
radio-specific build flags (`PCB`, `PCBREV`) not covered above, refer to the
|
||||||
|
build scripts at
|
||||||
|
[https://github.com/EdgeTX/edgetx/tree/main/tools](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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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.
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ Since Python 3.11+, macOS uses an externally managed Python environment. Create
|
|||||||
```bash
|
```bash
|
||||||
uv venv --python 3.14
|
uv venv --python 3.14
|
||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
uv pip install -r requirements.txt
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
Activate the virtual environment in every new terminal session before building:
|
Activate the virtual environment in every new terminal session before building:
|
||||||
@@ -101,7 +101,7 @@ cmake -DPCB=X10 -DPCBREV=TX16S \
|
|||||||
| Variable | Purpose |
|
| Variable | Purpose |
|
||||||
|----------|---------|
|
|----------|---------|
|
||||||
| `CMAKE_PREFIX_PATH` | Path to your Qt installation (`$QTDIR`) |
|
| `CMAKE_PREFIX_PATH` | Path to your Qt installation (`$QTDIR`) |
|
||||||
| `CMAKE_OSX_DEPLOYMENT_TARGET` | Minimum macOS version for Companion. `14.0` (Sonoma) is a convenient local-dev default; release builds (CI) target `11.0` for broader compatibility — pass `-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0` if you want a build matching what CI ships. If omitted entirely, no `-mmacosx-version-min` flag is passed and clang targets whatever OS version your Mac is running |
|
| `CMAKE_OSX_DEPLOYMENT_TARGET` | Minimum macOS version for Companion. `14.0` (Sonoma) is a convenient local-dev default; release builds (CI) target `12.0` for broader compatibility — pass `-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0` if you want a build matching what CI ships. If omitted entirely, no `-mmacosx-version-min` flag is passed and clang targets whatever OS version your Mac is running |
|
||||||
| `ARM_TOOLCHAIN_DIR` | Path to ARM GCC binaries. Must end with `/` |
|
| `ARM_TOOLCHAIN_DIR` | Path to ARM GCC binaries. Must end with `/` |
|
||||||
|
|
||||||
## Build firmware
|
## Build firmware
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
[project]
|
||||||
|
name = "edgetx"
|
||||||
|
version = "3.0.0"
|
||||||
|
description = "Build-time Python dependencies for EdgeTX"
|
||||||
|
requires-python = ">=3.10"
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
"asciitree",
|
||||||
|
"clang",
|
||||||
|
"jinja2",
|
||||||
|
"lz4",
|
||||||
|
"pillow",
|
||||||
|
"pydantic",
|
||||||
|
"pyelftools",
|
||||||
|
"typing_extensions",
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.optional-dependencies]
|
||||||
|
docs = [
|
||||||
|
"mkdocs>=1.6",
|
||||||
|
"mkdocs-material>=9.5",
|
||||||
|
"mkdocs-minify-plugin>=0.8",
|
||||||
|
"mike>=2.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["setuptools>=61.0"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
|
[tool.setuptools]
|
||||||
|
packages = []
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
asciitree
|
|
||||||
clang
|
|
||||||
jinja2
|
|
||||||
pillow
|
|
||||||
lz4
|
|
||||||
pydantic
|
|
||||||
pyelftools
|
|
||||||
typing_extensions
|
|
||||||
Reference in New Issue
Block a user