refactor objdump pio script

This commit is contained in:
Jason2866 2025-08-21 21:24:26 +02:00 committed by GitHub
parent bdea647435
commit 2ab3c0078d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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): 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() board = env.BoardConfig()
mcu = board.get("build.mcu", "esp32") mcu = board.get("build.mcu", "esp32").lower()
print("Create firmware.asm") objdump_tool = resolve_objdump_tool(mcu)
if mcu == "esp8266": out_file = "$BUILD_DIR/${PROGNAME}.asm"
env.Execute("xtensa-lx106-elf-objdump "+ "-D -C " + str(target[0]) + " > "+ "$BUILD_DIR/${PROGNAME}.asm") print(f"Create {out_file} using {objdump_tool}")
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")
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 = 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) env.AddPostAction("$BUILD_DIR/${PROGNAME}.elf", silent_action)