if(TARGET zephyr_interface)
# 1. Задаем путь к нашему кастомному скрипту-обертке
set(WR_OBJCOPY "${CMAKE_BINARY_DIR}/objcopy_wrapper.sh")
# 2. Создаем shell-скрипт, который выполнит перехват
file(WRITE ${WR_OBJCOPY}
"#!/bin/bash\n"
"ARGS=\"$*\"\n"
"# Проверяем, что objcopy вызван для изменения LMA основного файла zephyr.elf\n"
"if [[ \"$ARGS\" == *\"--change-section-lma\"* && \"$ARGS\" == *\"zephyr.elf zephyr.elf\"* ]]; then\n"
" # Сохраняем оригинальный ELF со всей отладкой в файл zephyr_debug.elf\n"
" cp -f zephyr.elf zephyr_debug.elf 2>/dev/null || true\n"
" # Вырезаем debug-секции из основного файла, чтобы настоящий objcopy не упал\n"
" ${CMAKE_STRIP} --strip-debug zephyr.elf 2>/dev/null || true\n"
"fi\n"
"# Вызываем настоящий objcopy из SDK с исходными аргументами\n"
"exec ${CMAKE_OBJCOPY} \"$@\"\n"
)
# 3. Делаем созданный скрипт исполняемым
execute_process(COMMAND chmod +x ${WR_OBJCOPY})
# 4. Переопределяем переменную CMAKE_OBJCOPY для Zephyr.
# Теперь везде, где Zephyr вызывает objcopy, он будет неявно вызывать наш скрипт!
set(CMAKE_OBJCOPY ${WR_OBJCOPY} CACHE INTERNAL "Objcopy wrapper" FORCE)
endif()