refactor objdump pio script
This commit is contained in:
parent
bdea647435
commit
2ab3c0078d
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user