cmake_minimum_required(VERSION 3.0) project(jlv135_cli C) option(BUILD_FOR_JLV135 "Build for JLV135 firmware" ON) if (BUILD_FOR_JLV135) # Настройка кросс-компиляции set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_C_COMPILER arm-uclinuxfdpiceabi-gcc) set(CMAKE_STRIP arm-uclinuxfdpiceabi-strip) # Настройки компиляции set(CMAKE_C_FLAGS "-Os -fdata-sections -ffunction-sections -mno-unaligned-access") set(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections") else() # Для разработки/тестирования на обычной системе используем файловую систему add_compile_definitions(JL_CONFIG_USE_FILE) endif() # Генерация версии из git execute_process( COMMAND git describe --tags --abbrev=0 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_TAG ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT GIT_TAG) set(GIT_TAG "none") endif() execute_process( COMMAND git branch --show-current WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( COMMAND git show -s --format=%h WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) # Получаем дату и время сборки string(TIMESTAMP BUILD_DATE "%Y-%m-%d %H:%M:%S" UTC) # Формируем короткую версию (без хеша и даты) if(GIT_BRANCH STREQUAL "main") set(VERSION_SHORT "${GIT_TAG}") set(VERSION_STRING "${GIT_TAG} ${GIT_HASH} (${BUILD_DATE})") else() set(VERSION_SHORT "${GIT_TAG}-${GIT_BRANCH}") set(VERSION_STRING "${GIT_TAG}-${GIT_BRANCH} ${GIT_HASH} (${BUILD_DATE})") endif() configure_file( ${CMAKE_SOURCE_DIR}/inc/jlv135_cli/version.h.in ${CMAKE_BINARY_DIR}/inc/jlv135_cli/version.h @ONLY ) # Создание исполняемого файла add_executable(${PROJECT_NAME} src/jl_modbus/jl_modbus_config.c src/jl_modbus/jl_config.c src/jlv135_cli/jl_block.c src/jlv135_cli/jl_block_modbus.c src/jlv135_cli/jl_block_wifi.c src/jlv135_cli/jl_block_display.c src/jlv135_cli/jl_block_feature.c src/jlv135_cli/jl_block_datatime.c src/jlv135_cli/jl_block_sensor.c src/jlv135_cli/jl_block_secure.c src/jlv135_cli/jl_block_service.c src/jlv135_cli/main.c) # Настройка библиотек target_link_libraries(${CMAKE_PROJECT_NAME} pthread) # Добавление каталогов для поиска заголовков target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE inc ${CMAKE_BINARY_DIR}/inc) if (BUILD_FOR_JLV135) # Опция strip if(CMAKE_BUILD_TYPE STREQUAL "Release") add_custom_command( TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} $ COMMENT "Stripping debug symbols (Release only)" DEPENDS $ ) endif() endif()