Skip to content

Commit c1bdf1b

Browse files
committed
Use hard copies of the firmware for Risc-V builds
The Risc-V compiler doesn't link the firmware blobs as expected, so use Arm ELFs instead
1 parent 4394654 commit c1bdf1b

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

src/rp2_common/pico_cyw43_driver/CMakeLists.txt

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,16 @@ if (EXISTS ${PICO_CYW43_DRIVER_PATH}/${CYW43_DRIVER_TEST_FILE})
213213
target_link_libraries(${TARGET}_firmware boot_picobin_headers)
214214
target_link_libraries(${TARGET}_firmware_tbyb boot_picobin_headers)
215215

216+
if (PICO_RISCV)
217+
# Use pre-generated firmware elfs on Risc-V, as the compiler has issues with the assembly
218+
add_custom_command(TARGET ${TARGET}_firmware POST_BUILD
219+
COMMAND ${CMAKE_COMMAND} -E copy ${PICO_CYW43_DRIVER_CURRENT_PATH}/firmware.elf $<TARGET_FILE:${TARGET}_firmware>
220+
)
221+
add_custom_command(TARGET ${TARGET}_firmware_tbyb POST_BUILD
222+
COMMAND ${CMAKE_COMMAND} -E copy ${PICO_CYW43_DRIVER_CURRENT_PATH}/firmware_tbyb.elf $<TARGET_FILE:${TARGET}_firmware_tbyb>
223+
)
224+
endif()
225+
216226
get_target_property(hasSigfile ${TARGET} PICOTOOL_SIGFILE)
217227
if (hasSigfile)
218228
pico_sign_binary(${TARGET}_firmware ${sigfile})
@@ -228,8 +238,19 @@ if (EXISTS ${PICO_CYW43_DRIVER_PATH}/${CYW43_DRIVER_TEST_FILE})
228238
pico_package_uf2_output(${TARGET}_firmware 0x10000000)
229239
pico_package_uf2_output(${TARGET}_firmware_tbyb 0x10000000)
230240

231-
pico_add_extra_outputs(${TARGET}_firmware)
232-
pico_add_extra_outputs(${TARGET}_firmware_tbyb)
241+
if (PICO_RISCV)
242+
# As Arm ELFs are being used for firmware, the bin & dis output generation will fail
243+
# with a Risc-V toolchain
244+
picotool_postprocess_binary(${TARGET}_firmware)
245+
picotool_postprocess_binary(${TARGET}_firmware_tbyb)
246+
if (NOT (PICO_NO_UF2 OR PICO_NO_PICOTOOL))
247+
pico_add_uf2_output(${TARGET}_firmware)
248+
pico_add_uf2_output(${TARGET}_firmware_tbyb)
249+
endif()
250+
else()
251+
pico_add_extra_outputs(${TARGET}_firmware)
252+
pico_add_extra_outputs(${TARGET}_firmware_tbyb)
253+
endif()
233254

234255
add_dependencies(${TARGET}
235256
${TARGET}_firmware ${TARGET}_firmware_tbyb)
232 KB
Binary file not shown.
232 KB
Binary file not shown.

0 commit comments

Comments
 (0)