diff --git a/.clion.ini b/.clion.ini new file mode 100644 index 000000000..d2e2b0459 --- /dev/null +++ b/.clion.ini @@ -0,0 +1,2 @@ +[platformio] +init_default_env = tasmota diff --git a/.gitignore b/.gitignore index 647235e30..00349fe54 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,6 @@ managed_components .dummy sdkconfig.* sdkconfig.defaults -CMakeLists.txt data unpacked_fs unpacked_boards @@ -58,3 +57,4 @@ lib/libesp32/berry/berry ## Python virtual environments for Platformio ## venv .venv +compile_commands.json diff --git a/CLION_BUILD.md b/CLION_BUILD.md new file mode 100644 index 000000000..2d9cf51e2 --- /dev/null +++ b/CLION_BUILD.md @@ -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. diff --git a/CMakeLists.txt b/CMakeLists.txt index 0bb697982..72ddb87c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,107 @@ -cmake_minimum_required(VERSION 3.16.0) -include($ENV{IDF_PATH}/tools/cmake/project.cmake) +cmake_minimum_required(VERSION 3.16) +project(Tasmota) -project(tasmota) - -if(CONFIG_IDF_TARGET_ESP32C2) - include(relinker) +# Find PlatformIO executable +find_program(PLATFORMIO_CMD NAMES pio platformio) +if(NOT PLATFORMIO_CMD) + message(FATAL_ERROR "PlatformIO not found. Please install PlatformIO CLI.") 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_: Build specific environment") +message(STATUS " - generate_compile_commands: Update code intelligence")