1
0
mirror of https://github.com/raspberrypi/pico-sdk.git synced 2025-08-06 06:02:39 +03:00

Clean extra output files (#2504)

Add bin/uf2/dis/hex output files as byproducts, so they get cleaned up

This is only best-effort, because BYPRODUCTS doesn't support generator expressions, so everything must be evaluated at the time pico_add_extra_outputs is called
This commit is contained in:
will-v-pi
2025-06-18 23:07:34 +01:00
committed by GitHub
parent 5ddb441cf1
commit c3c62675e8
3 changed files with 22 additions and 3 deletions

View File

@@ -15,24 +15,38 @@ function(pico_get_runtime_output_directory TARGET output_path_name)
set(${output_path_name} ${output_path} PARENT_SCOPE) set(${output_path_name} ${output_path} PARENT_SCOPE)
endfunction() endfunction()
function(pico_get_output_name TARGET output_name_var)
get_target_property(output_name ${TARGET} OUTPUT_NAME)
# Generator expressions not supported in byproducts
set(output_name_copy ${output_name})
string(GENEX_STRIP "${output_name}" output_name)
if (NOT output_name OR (NOT output_name STREQUAL output_name_copy))
get_target_property(output_name ${TARGET} NAME)
endif()
set(${output_name_var} ${output_name} PARENT_SCOPE)
endfunction()
# pico_add_hex_output(TARGET) # pico_add_hex_output(TARGET)
# \brief\ Generate a hex file for the target # \brief\ Generate a hex file for the target
function(pico_add_hex_output TARGET) function(pico_add_hex_output TARGET)
pico_get_runtime_output_directory(${TARGET} output_path) pico_get_runtime_output_directory(${TARGET} output_path)
add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${TARGET}> ${output_path}$<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.hex VERBATIM) pico_get_output_name(${TARGET} output_name)
add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${TARGET}> ${output_path}$<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.hex VERBATIM BYPRODUCTS "${output_path}${output_name}.hex")
endfunction() endfunction()
# pico_add_bin_output(TARGET) # pico_add_bin_output(TARGET)
# \brief\ Generate a bin file for the target # \brief\ Generate a bin file for the target
function(pico_add_bin_output TARGET) function(pico_add_bin_output TARGET)
pico_get_runtime_output_directory(${TARGET} output_path) pico_get_runtime_output_directory(${TARGET} output_path)
add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${TARGET}> ${output_path}$<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.bin VERBATIM) pico_get_output_name(${TARGET} output_name)
add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${TARGET}> ${output_path}$<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.bin VERBATIM BYPRODUCTS "${output_path}${output_name}.bin")
endfunction() endfunction()
# pico_add_dis_output(TARGET) # pico_add_dis_output(TARGET)
# \brief\ Generate a disassembly file for the target # \brief\ Generate a disassembly file for the target
function(pico_add_dis_output TARGET) function(pico_add_dis_output TARGET)
pico_get_runtime_output_directory(${TARGET} output_path) pico_get_runtime_output_directory(${TARGET} output_path)
pico_get_output_name(${TARGET} output_name)
# PICO_CMAKE_CONFIG: PICO_NO_COPRO_DIS, Disable disassembly listing postprocessing that disassembles RP2350 coprocessor instructions, type=bool, default=0, group=build # PICO_CMAKE_CONFIG: PICO_NO_COPRO_DIS, Disable disassembly listing postprocessing that disassembles RP2350 coprocessor instructions, type=bool, default=0, group=build
if (NOT (PICO_NO_COPRO_DIS OR PICO_NO_PICOTOOL OR PICO_RISCV OR PICO_RP2040)) if (NOT (PICO_NO_COPRO_DIS OR PICO_NO_PICOTOOL OR PICO_RISCV OR PICO_RP2040))
@@ -48,6 +62,7 @@ function(pico_add_dis_output TARGET)
COMMAND ${CMAKE_OBJDUMP} -d ${PICO_DISASM_OBJDUMP_ARGS} $<TARGET_FILE:${TARGET}> >> ${output_path}$<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.dis COMMAND ${CMAKE_OBJDUMP} -d ${PICO_DISASM_OBJDUMP_ARGS} $<TARGET_FILE:${TARGET}> >> ${output_path}$<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.dis
${EXTRA_COMMAND} ${EXTRA_COMMAND}
VERBATIM VERBATIM
BYPRODUCTS "${output_path}${output_name}.dis"
) )
endfunction() endfunction()
@@ -88,6 +103,7 @@ function(pico_add_extra_outputs TARGET)
COMMAND rm -f "${PICO_SYMLINK_ELF_AS_FILENAME}" COMMAND rm -f "${PICO_SYMLINK_ELF_AS_FILENAME}"
COMMAND ln -s -r $<TARGET_FILE:${TARGET}> "${PICO_SYMLINK_ELF_AS_FILENAME}" COMMAND ln -s -r $<TARGET_FILE:${TARGET}> "${PICO_SYMLINK_ELF_AS_FILENAME}"
COMMENT "Symlinking from ${PICO_SYMLINK_ELF_AS_FILENAME} to ${TARGET}" COMMENT "Symlinking from ${PICO_SYMLINK_ELF_AS_FILENAME} to ${TARGET}"
BYPRODUCTS "${PICO_SYMLINK_ELF_AS_FILENAME}"
) )
endif () endif ()
# PICO_CMAKE_CONFIG: PICO_NO_UF2, Disable UF2 output, type=bool, default=0, group=build # PICO_CMAKE_CONFIG: PICO_NO_UF2, Disable UF2 output, type=bool, default=0, group=build

View File

@@ -556,6 +556,7 @@ function(pico_add_uf2_output TARGET)
else() else()
set(output_path "") set(output_path "")
endif() endif()
pico_get_output_name(${TARGET} output_name)
get_target_property(${TARGET}_uf2_package_addr ${TARGET} PICOTOOL_UF2_PACKAGE_ADDR) get_target_property(${TARGET}_uf2_package_addr ${TARGET} PICOTOOL_UF2_PACKAGE_ADDR)
if (${TARGET}_uf2_package_addr) if (${TARGET}_uf2_package_addr)
@@ -594,7 +595,8 @@ function(pico_add_uf2_output TARGET)
--family ${picotool_family} --family ${picotool_family}
${extra_uf2_args} ${extra_uf2_args}
COMMAND_EXPAND_LISTS COMMAND_EXPAND_LISTS
VERBATIM) VERBATIM
BYPRODUCTS "${output_path}${output_name}.uf2")
endif() endif()
endfunction() endfunction()

View File

@@ -57,6 +57,7 @@ allowed_missing_functions = set([
"pico_init_picotool", "pico_init_picotool",
"pico_add_platform_library", "pico_add_platform_library",
"pico_get_runtime_output_directory", "pico_get_runtime_output_directory",
"pico_get_output_name",
"pico_set_printf_implementation", "pico_set_printf_implementation",
"pico_expand_pico_platform", "pico_expand_pico_platform",
]) ])