98 lines
3.0 KiB
CMake
98 lines
3.0 KiB
CMake
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} $<TARGET_FILE:${CMAKE_PROJECT_NAME}>
|
|
COMMENT "Stripping debug symbols (Release only)"
|
|
DEPENDS $<TARGET_FILE:${CMAKE_PROJECT_NAME}>
|
|
)
|
|
endif()
|
|
endif() |