From ad6a3593dadb8c5211c3f1f54087f366b75ee542 Mon Sep 17 00:00:00 2001 From: Egor Tsyganchuk Date: Tue, 6 May 2025 20:15:25 +0300 Subject: [PATCH] Assembly description has been moved to a separate file --- CMakeLists.txt | 22 +++++++++++++--------- build.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ readme.md | 14 -------------- 3 files changed, 62 insertions(+), 23 deletions(-) create mode 100644 build.md diff --git a/CMakeLists.txt b/CMakeLists.txt index bc9e9e7..9691da0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,9 @@ cmake_minimum_required(VERSION 3.0) project(jlv135_cli C) -if(CMAKE_BUILD_TYPE STREQUAL "Release") +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) @@ -25,12 +27,14 @@ target_link_libraries(${CMAKE_PROJECT_NAME} pthread) target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE inc) -# Опция 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 $ - ) +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() \ No newline at end of file diff --git a/build.md b/build.md new file mode 100644 index 0000000..1ea72e8 --- /dev/null +++ b/build.md @@ -0,0 +1,49 @@ +# Инструкция по сборке + +## Общее описание +Этот файл CMakeLists.txt настраивает сборку проекта `jlv135_cli` на языке C, с возможностью кросс-компиляции для прошивки JLV135. + +## Основные параметры +1. **Минимальная версия CMake**: 3.0 +2. **Язык проекта**: C +3. **Имя проекта**: `jlv135_cli` + +## Опции сборки +- `BUILD_FOR_JLV135` (по умолчанию ON) - включает настройки для кросс-компиляции под JLV135 + +## Настройки кросс-компиляции +1. **Система**: Linux +2. **Компилятор**: `arm-uclinuxfdpiceabi-gcc` +3. **Утилита strip**: `arm-uclinuxfdpiceabi-strip` +4. **Флаги компиляции**: + - `-Os` - оптимизация по размеру + - `-fdata-sections -ffunction-sections` - размещение каждой функции/данных в отдельной секции + - `-mno-unaligned-access` - запрет невыровненного доступа к памяти +5. **Флаги линковки**: `-Wl,--gc-sections` - удаление неиспользуемых секций + +## Структура проекта +1. **Исходные файлы**: + - `src/jl_modbus/jl_modbus_config.c` + - `src/jl_modbus/jl_config.c` + - `src/jlv135_cli/main.c` +2. **Заголовочные файлы**: включаются из директории `inc` + +## Библиотеки +- Проект линкуется с библиотекой `pthread` + +## Дополнительные действия при сборке +- В режиме `Release` выполняется удаление debug-символов с помощью `strip` + +## Использование +1. Создайте директорию для сборки: `mkdir build && cd build` +2. Запустите CMake: + - Для сборки под JLV135 (по умолчанию): `cmake ..` + - Для сборки без кросс-компиляции: `cmake -DBUILD_FOR_JLV135=OFF ..` +3. Соберите проект: `cmake --build .` +4. (Опционально) Укажите тип сборки: + - `cmake -DCMAKE_BUILD_TYPE=Release ..` + - `cmake -DCMAKE_BUILD_TYPE=Debug ..` + +## Примечания +- Для кросс-компиляции должны быть установлены соответствующие инструменты (arm-uclinuxfdpiceabi-gcc) +- Настройки оптимизации и удаления debug-символов применяются только при сборке для JLV135 \ No newline at end of file diff --git a/readme.md b/readme.md index 8664020..e5cdf0f 100644 --- a/readme.md +++ b/readme.md @@ -1,19 +1,5 @@ # Руководство по использованию команды `jlv135_cli` -## Сборка - -Генерируем файлы сборки в указанной директории сборки. - -```sh -cmake -DCMAKE_BUILD_TYPE=Release -S . -B build -``` - -Собираем проект, используя сгенерированные файлы сборки. - -```sh -cmake --build build --config Release -``` - ## Описание Команда `jlv135_cli` представляет собой интерфейс командной строки для работы с устройством JLV135.