domotic/CMakeLists.txt

147 lines
4.4 KiB
CMake

# --------------------------------------------------
# 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")
set(BUILD_ELF "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.elf")
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}
COMMAND ${CMAKE_COMMAND} -E copy
${BUILD_ELF}
${OTA_DIR}/latest.elf
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
)