# Объект работы
Система сборки весь софт, который нужен, чтоб получать из исходных кодов *.bin файлы с корректным отслеживанием зависимостей
Исходные коды и документация этого софта
# Требования
1. Позволяет собрать *.bin и *.elf файлы указанной прошивки
2. Позволяет залить бинарь на контроллер
3. Позволяет разбить исходники разных прошивок на несколько директорий с произвольной глубиной иерархии
4. Учитывает модули pnet/master и pnet/slave (разделяемые модули, которые могут быть подключены в прошивки без существенного изменения Makefile)
5. Учитывает util директорию (разделяемые модули, которые могут быть подключены в любые программы без существенного изменения Makefile)
6. Учитывает генерацию файла с хэшем залитой прошивки (заголовочник, создаваемый внешним скриптом; должен перегенерироваться при каждой сборке)
7. Учитывает тестовые стенды (отдельная директория, в которой лежат вспомогательные прошивки; прошивки в ней могут подключать utils)
8. Отслеживает зависимости заголовочников, в т.ч. транзитивные
9. Стек и окружение:
ОСь: debian 12
интерпретатор bash: 5.2.15
система сборки: make 4.3
библиотека периферии: libopencm3
тулчейн: arm-none-eabi
прошивка/отладка: openocd
# Ожидаемый результат
1. Прописан Makefile
2. Определена структура директорий (где лежит libopencm3, где pnet, где utils, где прошивки, где тестовые стенды)
3. Описание системы задокументировано (какие есть правила и ограничения; структура директорий; как добавить ещё узел, какие файлы для этого нужно актуализировать)
4. Архив с заглушечным кодом для проверки сборки, включающий:
произвольный код в utils (какой-нибудь разделяемый модуль, с любой функцией)
моковая прошивка тестового стенда (использует libopencm3 и utils); прошивка собирается и прошивается через make
моковая прошивка узла (использует libopencm3, pnet и utils); прошивка собирается и прошивается через make
# Приёмка
На машине с debian 12:
1. Распаковали архив с заглушечным кодом
2. из инструкции дали команду для сборки прошивки получили *.elf и *.bin файлы для указанной прошивки
3. Изменили main.c файл прошивки, повторили команду файлы *.elf и *.bin обновились
4. Добавили модуль (.h + .c файлы), подключили модуль в main.c, повторили команду файлы *.elf и *.bin обновились
5. Сделали так, что скрипт генерирует другой файл с хэшем, повторили команду файлы *.elf и *.bin обновились
6. Пересобрали библиотеку libopencm3, повторили команду файлы *.elf и *.bin обновились
7. Изменили .h файл в модуле pnet, повторили команду файлы *.elf и *.bin обновились
8. Изменили .c файл в модуле pnet, повторили команду файлы *.elf и *.bin обновились
# Пожелания к реализации
Основаны на статье
1. Предпочитать include рекурсивному make (исключение сборка libopencm3)
2. Скорее всего, в каждом модуле должен быть файл с перечнем исходников, входящих в этот модуль
3. Скорее всего, удобнее будет организовать это в виде монорепозитория