143 lines
4.2 KiB
CMake
143 lines
4.2 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")
|
|
|
|
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
|
|
) |