SimpleGo Build System
ESP-IDF Build System Basics
SimpleGo verwendet das ESP-IDF Build System. Dieses hat eine strikte Struktur die eingehalten werden muss.
Die zwei CMakeLists.txt Dateien
simplex_client/
├── CMakeLists.txt ← ROOT (nur 10 Zeilen!)
└── main/
└── CMakeLists.txt ← COMPONENT (hier werden Sources registriert)
WICHTIG: Diese beiden Dateien haben KOMPLETT unterschiedliche Aufgaben!
Root CMakeLists.txt
Die ROOT CMakeLists.txt darf NUR folgendes enthalten:
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(simplex_client)
Das ist ALLES! Keine Source-Files, keine idf_component_register(), nichts!
Warum?
- ESP-IDF managed das komplette Build intern
include($ENV{IDF_PATH}/tools/cmake/project.cmake)lädt das ESP-IDF Systemproject()startet den eigentlichen Build-Prozess- ESP-IDF scannt dann automatisch alle Verzeichnisse nach Components
Component CMakeLists.txt (main/)
Die Component main/CMakeLists.txt ist wo die eigentliche Registrierung passiert:
idf_component_register(
SRCS
"main.c"
"smp_crypto.c"
...
INCLUDE_DIRS
"include"
"hal"
REQUIRES
nvs_flash
esp_wifi
...
)
idf_component_register() darf NUR in Component-Verzeichnissen aufgerufen werden!
Warum unsere Device-CMakeLists nicht funktionierte
Wir hatten versucht, in der ROOT CMakeLists.txt folgendes zu machen:
# ❌ FALSCH - Das geht nicht in der ROOT!
idf_component_register(
SRCS ${ALL_SOURCES}
...
)
Error:
CMake Error: Called idf_component_register from a non-component directory.
ESP-IDF erkennt: "Hey, das ist die ROOT CMakeLists.txt, keine Component - VERBOTEN!"
Device-Selection: Der richtige Weg
Option 1: Kconfig (EMPFOHLEN für ESP-IDF)
Wir nutzen das ESP-IDF Kconfig System:
Kconfig (im Root):
menu "SimpleGo Configuration"
choice SIMPLEGO_DEVICE
prompt "Target Device"
default SIMPLEGO_DEVICE_T_DECK_PLUS
config SIMPLEGO_DEVICE_T_DECK_PLUS
bool "LilyGo T-Deck Plus"
config SIMPLEGO_DEVICE_T_EMBED_CC1101
bool "LilyGo T-Embed CC1101"
endchoice
endmenu
Dann in main/CMakeLists.txt:
# Device-spezifische Sources basierend auf Kconfig
if(CONFIG_SIMPLEGO_DEVICE_T_DECK_PLUS)
set(DEVICE_DIR "${CMAKE_SOURCE_DIR}/devices/t_deck_plus")
elseif(CONFIG_SIMPLEGO_DEVICE_T_EMBED_CC1101)
set(DEVICE_DIR "${CMAKE_SOURCE_DIR}/devices/t_embed_cc1101")
endif()
file(GLOB HAL_IMPL_SOURCES "${DEVICE_DIR}/hal_impl/*.c")
idf_component_register(
SRCS
"main.c"
${HAL_IMPL_SOURCES}
...
)
Auswahl über menuconfig:
idf.py menuconfig
# → SimpleGo Configuration → Target Device → [T-Deck Plus]
Option 2: Separate Components
Jedes Device als eigene ESP-IDF Component:
components/
├── hal_t_deck_plus/
│ ├── CMakeLists.txt