# -------------------------------------------------- # 1. Version de base (version.txt) # -------------------------------------------------- file(READ "${CMAKE_SOURCE_DIR}/version.txt" FW_VERSION) string(STRIP "${FW_VERSION}" FW_VERSION) # -------------------------------------------------- # 2. Détection git + branche # -------------------------------------------------- find_package(Git) set(GIT_BRANCH "") set(IS_GIT_REPO OFF) if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") set(IS_GIT_REPO ON) execute_process( COMMAND git rev-parse --abbrev-ref HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) endif() # -------------------------------------------------- # 3. Mode dev ou release # -------------------------------------------------- # Convention simple : # - branche main / master => release # - le reste => dev set(IS_DEV_BUILD OFF) if(IS_GIT_REPO AND NOT GIT_BRANCH STREQUAL "main" AND NOT GIT_BRANCH STREQUAL "master") set(IS_DEV_BUILD ON) endif() # -------------------------------------------------- # 4. Nettoyage nom de branche # -------------------------------------------------- if(IS_DEV_BUILD) # remplace / par - string(REPLACE "/" "-" GIT_BRANCH_CLEAN "${GIT_BRANCH}") set(FW_VERSION "${FW_VERSION}-${GIT_BRANCH_CLEAN}") endif() message(STATUS "Firmware version: ${FW_VERSION}") # -------------------------------------------------- cmake_minimum_required(VERSION 3.16) option(SIMULATION_QEMU "Build for QEMU simulation" OFF) message(STATUS "ROOT:: SIMULATION_QEMU = ${SIMULATION_QEMU}") # ------------------------------------------------- # CONFIGURATION AVANT project() : uniquement CMake pur # ------------------------------------------------- if(SIMULATION_QEMU) message(STATUS "SIMULATION_QEMU = ON") option(SIMULATION_QEMU "Build for QEMU simulation" ON) set(COMPONENTS components/meteofrance components/domotic_display managed_components/lvgl_lvgl main esp-timer $ENV{IDF_PATH}/examples/protocols/linux_stubs/esp_stubs ) else() message(STATUS "SIMULATION_QEMU = OFF") option(SIMULATION_QEMU "Build for QEMU simulation" OFF) # set(COMPONENTS # components/meteofrance # components/domotic_display # managed_components/lvgl_lvgl # main # $ENV{IDF_PATH}/examples/protocols/linux_stubs/esp_stubs # ) endif() #list(APPEND EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/mocks/esp_timer") include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(domotic) # ------------------------------------------------- # APRÈS project() : maintenant CONFIG_SIMULATION_QEMU existe # ------------------------------------------------- if(CONFIG_SIMULATION_QEMU) message(STATUS "Compilation IHM (simulation)") add_compile_definitions(CONFIG_SIMULATION_QEMU=1) #add_custom_target(run_ihm # COMMAND ${CMAKE_COMMAND} -E echo "Building and launching IHM native..." # COMMAND ${CMAKE_COMMAND} --build ${CMAKE_SOURCE_DIR}/components/ihm --target all # COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_SOURCE_DIR}/components/ihm ./ihm_simulator #) else() message(STATUS "Compilation standard") #add_link_options("-Wl,--disable-non-contiguous-regions") add_compile_options( -fsanitize=address -fno-omit-frame-pointer -O0 -g ) add_link_options(-fsanitize=address) endif() # --- Paramètres OTA --- set(OTA_DIR "${CMAKE_SOURCE_DIR}/../ota/fw") set(DEVICE "esp32p4") # --- Nom final du binaire --- set(OTA_BIN_NAME "${PROJECT_NAME}-v${FW_VERSION}.bin") set(BUILD_BIN "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bin") message(STATUS "Firmware version: ${FW_VERSION}") # --- Target OTA --- add_custom_target(ota_push ALL COMMAND ${CMAKE_COMMAND} -E make_directory ${OTA_DIR} COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_BIN} ${OTA_DIR}/${OTA_BIN_NAME} COMMENT "📦 Copy firmware to OTA server directory" DEPENDS app ) add_custom_target(ota_latest COMMAND ${CMAKE_COMMAND} -E echo "{ \"version\":\"${FW_VERSION}\", \ \"bin\":\"${OTA_BIN_NAME}\" }" > ${OTA_DIR}/latest.json DEPENDS ota_push )