Загрузка данных


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()