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


if(CONFIG_BUILD_OUTPUT_ADJUST_LMA)
  math(EXPR adjustment "${CONFIG_BUILD_OUTPUT_ADJUST_LMA}" OUTPUT_FORMAT DECIMAL)
  
  # Абсолютно плоский однострочный Python-скрипт без переносов строк и двоеточий
  set(PY_LMA_FILTER "import sys, subprocess; elf=sys.argv[1]; adj=sys.argv[2]; bin_obj=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=[]; [args.extend(['--change-section-lma', f'{s}+{adj}']) for s in secs]; subprocess.run([bin_obj] + args + [elf, elf], check=True) if args else sys.exit(0)")

  list(APPEND
    post_build_commands
    COMMAND ${PYTHON_EXECUTABLE} -c "${PY_LMA_FILTER}" 
            ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} 
            ${adjustment}
            $<TARGET_PROPERTY:bintools,elfconvert_command>
    )
endif()