From 2ab3c0078d5ef892a47c6a9fcb569c72276ab21d Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Thu, 21 Aug 2025 21:24:26 +0200 Subject: [PATCH] refactor objdump pio script --- pio-tools/obj-dump.py | 56 +++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/pio-tools/obj-dump.py b/pio-tools/obj-dump.py index e4a47c21b..639396312 100644 --- a/pio-tools/obj-dump.py +++ b/pio-tools/obj-dump.py @@ -1,34 +1,38 @@ -# Little convenience script to get an object dump +# Produce an object dump (.asm) after building the ELF -Import('env') +Import("env") + +# Explicit mapping for Xtensa targets; everything else defaults to RISC-V +XTENSA_OBJDUMP = { + "esp8266": "xtensa-lx106-elf-objdump", + "esp32": "xtensa-esp32-elf-objdump", + "esp32s2": "xtensa-esp32s2-elf-objdump", + "esp32s3": "xtensa-esp32s3-elf-objdump", +} + +def resolve_objdump_tool(mcu: str) -> str: + """ + Return objdump tool for MCU. + Known Xtensa MCUs use explicit tools; all others use RISC-V objdump. + """ + mcu = (mcu or "").lower().strip() + return XTENSA_OBJDUMP.get(mcu, "riscv32-esp-elf-objdump") def obj_dump_after_elf(source, target, env): - platform = env.PioPlatform() + """ + Post-build action: run objdump on the ELF and write ${PROGNAME}.asm. + """ board = env.BoardConfig() - mcu = board.get("build.mcu", "esp32") + mcu = board.get("build.mcu", "esp32").lower() - print("Create firmware.asm") - if mcu == "esp8266": - env.Execute("xtensa-lx106-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") - if mcu == "esp32": - env.Execute("xtensa-esp32-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") - if mcu == "esp32s2": - env.Execute("xtensa-esp32s2-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") - if mcu == "esp32s3": - env.Execute("xtensa-esp32s3-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") - if mcu == "esp32c2": - env.Execute("riscv32-esp-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") - if mcu == "esp32c3": - env.Execute("riscv32-esp-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") - if mcu == "esp32c5": - env.Execute("riscv32-esp-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") - if mcu == "esp32c6": - env.Execute("riscv32-esp-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") - if mcu == "esp32p4": - env.Execute("riscv32-esp-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") - if mcu == "esp32h2": - env.Execute("riscv32-esp-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") + objdump_tool = resolve_objdump_tool(mcu) + out_file = "$BUILD_DIR/${PROGNAME}.asm" + print(f"Create {out_file} using {objdump_tool}") + cmd = f"{objdump_tool} -D -C {target[0]} > {out_file}" + env.Execute(cmd) + +# Silent post-build action silent_action = env.Action([obj_dump_after_elf]) -silent_action.strfunction = lambda target, source, env: '' # hack to silence scons command output +silent_action.strfunction = lambda target, source, env: "" env.AddPostAction("$BUILD_DIR/${PROGNAME}.elf", silent_action)