Merge pull request 'Getting CLion to build using platformIO with the Cmake system' (#1) from CLion_Build into development

Reviewed-on: #1
This commit is contained in:
mgeppert 2026-01-09 03:45:03 +00:00
commit e69e5ff497
4 changed files with 190 additions and 7 deletions

2
.clion.ini Normal file
View File

@ -0,0 +1,2 @@
[platformio]
init_default_env = tasmota

2
.gitignore vendored
View File

@ -20,7 +20,6 @@ managed_components
.dummy .dummy
sdkconfig.* sdkconfig.*
sdkconfig.defaults sdkconfig.defaults
CMakeLists.txt
data data
unpacked_fs unpacked_fs
unpacked_boards unpacked_boards
@ -58,3 +57,4 @@ lib/libesp32/berry/berry
## Python virtual environments for Platformio ## ## Python virtual environments for Platformio ##
venv venv
.venv .venv
compile_commands.json

82
CLION_BUILD.md Normal file
View File

@ -0,0 +1,82 @@
# Building Tasmota in CLion with PlatformIO
## Setup Complete
PlatformIO CLI has been installed and a CMake wrapper has been configured to integrate PlatformIO with CLion's native build system.
## Building from CLion UI
CLion will now show PlatformIO targets in the build configurations dropdown:
- **pio_build** - Build the default environment (tasmota)
- **pio_clean** - Clean build files
- **pio_upload** - Upload firmware to device
- **pio_monitor** - Open serial monitor
- **build_tasmota** - Build tasmota environment
- **build_tasmota32** - Build tasmota32 environment
- **build_tasmota-minimal** - Build minimal environment
- **build_tasmota-sensors** - Build with sensors
- **build_tasmota-display** - Build with display support
- **build_tasmota-ir** - Build with IR support
- **generate_compile_commands** - Update code intelligence
Simply select a target from the dropdown and click the Build button (hammer icon) or press Ctrl+F9.
## Building from CLion Terminal
You can also use the embedded terminal in CLion (View → Tool Windows → Terminal):
### List all available environments:
```bash
pio run --list-targets
```
### Build a specific environment:
```bash
pio run -e tasmota # Build standard tasmota for ESP8266
pio run -e tasmota32 # Build for ESP32
pio run -e tasmota-minimal # Build minimal version
```
### Clean build:
```bash
pio run -e tasmota -t clean
```
### Upload to device:
```bash
pio run -e tasmota -t upload
```
### Monitor serial output:
```bash
pio device monitor
```
## Code Intelligence
The `compile_commands.json` file has been generated for CLion to provide proper code completion and navigation.
The CMake configuration includes a `generate_compile_commands` target to regenerate it, or use:
```bash
pio run -t compiledb -e tasmota
```
## Available Environments
See `platformio.ini` for the full list of build environments. Common ones include:
- `tasmota` - Standard ESP8266 build
- `tasmota32` - Standard ESP32 build
- `tasmota-sensors` - Build with sensor support
- `tasmota-display` - Build with display support
- `tasmota-ir` - Build with IR support
## How It Works
The `CMakeLists.txt` file is a wrapper that:
- Defines custom CMake targets that invoke PlatformIO commands
- Provides source file indexing for CLion's code intelligence
- Integrates PlatformIO with CLion's native build system
- Allows you to use CLion's build UI instead of terminal commands
The actual compilation is still done by PlatformIO, but CLion can manage it through the CMake interface.

View File

@ -1,8 +1,107 @@
cmake_minimum_required(VERSION 3.16.0) cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(Tasmota)
project(tasmota) # Find PlatformIO executable
find_program(PLATFORMIO_CMD NAMES pio platformio)
if(CONFIG_IDF_TARGET_ESP32C2) if(NOT PLATFORMIO_CMD)
include(relinker) message(FATAL_ERROR "PlatformIO not found. Please install PlatformIO CLI.")
endif() endif()
message(STATUS "Found PlatformIO: ${PLATFORMIO_CMD}")
# Set default environment
set(PIO_ENV "tasmota" CACHE STRING "PlatformIO environment to build")
# Create a dummy target for CLion to parse
add_custom_target(tasmota_dummy ALL
COMMAND ${CMAKE_COMMAND} -E echo "Use PlatformIO targets to build"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
# PlatformIO build target
add_custom_target(pio_build
COMMAND ${PLATFORMIO_CMD} run -e ${PIO_ENV}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Building PlatformIO environment: ${PIO_ENV}"
)
# PlatformIO clean target
add_custom_target(pio_clean
COMMAND ${PLATFORMIO_CMD} run -e ${PIO_ENV} -t clean
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Cleaning PlatformIO environment: ${PIO_ENV}"
)
# PlatformIO upload target
add_custom_target(pio_upload
COMMAND ${PLATFORMIO_CMD} run -e ${PIO_ENV} -t upload
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Uploading PlatformIO environment: ${PIO_ENV}"
)
# PlatformIO monitor target
add_custom_target(pio_monitor
COMMAND ${PLATFORMIO_CMD} device monitor
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Starting PlatformIO serial monitor"
)
# Common Tasmota environments as separate targets
set(TASMOTA_ENVS
tasmota
tasmota32
tasmota-minimal
tasmota-sensors
tasmota-display
tasmota-ir
)
foreach(env ${TASMOTA_ENVS})
add_custom_target(build_${env}
COMMAND ${PLATFORMIO_CMD} run -e ${env}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Building ${env}"
)
endforeach()
# Generate compile_commands.json for code intelligence
add_custom_target(generate_compile_commands
COMMAND ${PLATFORMIO_CMD} run -t compiledb -e ${PIO_ENV}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Generating compile_commands.json"
)
# Parse source files for CLion indexing (using tasmota directory)
file(GLOB_RECURSE TASMOTA_SOURCES
"${CMAKE_SOURCE_DIR}/tasmota/*.ino"
"${CMAKE_SOURCE_DIR}/tasmota/*.cpp"
"${CMAKE_SOURCE_DIR}/tasmota/*.c"
"${CMAKE_SOURCE_DIR}/tasmota/*.h"
)
# Create a library target for indexing (won't actually build)
if(TASMOTA_SOURCES)
add_library(tasmota_indexing EXCLUDE_FROM_ALL ${TASMOTA_SOURCES})
set_target_properties(tasmota_indexing PROPERTIES LINKER_LANGUAGE CXX)
target_include_directories(tasmota_indexing PRIVATE
${CMAKE_SOURCE_DIR}/tasmota
${CMAKE_SOURCE_DIR}/tasmota/include
)
# Set some basic defines for indexing
target_compile_definitions(tasmota_indexing PRIVATE
ARDUINO=10816
ARDUINO_ARCH_ESP8266
ESP8266
TASMOTA
)
endif()
message(STATUS "CMake wrapper for PlatformIO configured")
message(STATUS "Available targets:")
message(STATUS " - pio_build: Build default environment (${PIO_ENV})")
message(STATUS " - pio_clean: Clean build files")
message(STATUS " - pio_upload: Upload firmware to device")
message(STATUS " - pio_monitor: Serial monitor")
message(STATUS " - build_<env>: Build specific environment")
message(STATUS " - generate_compile_commands: Update code intelligence")