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


if(CONFIG_BUILD_OUTPUT_ADJUST_LMA)
  math(EXPR adjustment "${CONFIG_BUILD_OUTPUT_ADJUST_LMA}" OUTPUT_FORMAT DECIMAL)
  
  # 1. Пишем чистый плоский Python-код вашей идеи
  set(RAW_PY_CODE "import sys, subprocess
elf, adj, bin_obj = sys.argv[1], sys.argv[2], sys.argv[3]
res = subprocess.run(['arm-zephyr-eabi-readelf', '-S', elf], capture_output=True, text=True)
lines = [l.split() for l in res.stdout.splitlines() if len(l.split()) >= 4]
secs = [p[1].replace('[','').replace(']','') for p in lines if p[2].startswith('8') and 'bss' not in p[1] and 'noinit' not in p[1]]
args = []
for s in secs: args.extend(['--change-section-lma', f'{s}+{adj}'])
if args: subprocess.run([bin_obj] + args + [elf, elf], check=True)
")

  # 2. Кодируем его в Base64 прямо средствами CMake во время генерации проекта
  string(TO_HEX "${RAW_PY_CODE}" HEX_CODE)
  # Чтобы не зависеть от версии CMake с поддержкой BASE64, передаем через hex-escape в Python на лету
  
  list(APPEND
    post_build_commands
    COMMAND ${PYTHON_EXECUTABLE} -c "import sys, exec; exec(bytes.fromhex('${HEX_CODE}').decode('utf-8'))"
            ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} 
            ${adjustment}
            $<TARGET_PROPERTY:bintools,elfconvert_command>
    )
endif()