if(CONFIG_BUILD_OUTPUT_ADJUST_LMA)
math(EXPR adjustment "${CONFIG_BUILD_OUTPUT_ADJUST_LMA}" OUTPUT_FORMAT DECIMAL)
# 1. Текст вашего интеллектуального алгоритма фильтрации секций 0x8
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. Кодируем скрипт в HEX
string(HEX "${RAW_PY_CODE}" HEX_CODE)
# 3. Формируем команду, которая передает HEX-текст через конвейер echo | python3 -
# В ней нет ни одной скобки наружу, Bash увидит только плоские буквенно-цифровые символы
list(APPEND
post_build_commands
COMMAND ${CMAKE_COMMAND} -E echo "import sys; exec(bytes.fromhex('${HEX_CODE}').decode('utf-8'))"
| ${PYTHON_EXECUTABLE} -
${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME}
${adjustment}
$<TARGET_PROPERTY:bintools,elfconvert_command>
)
endif()