@@ -155,4 +155,104 @@ if (EXISTS ${PICO_CYW43_DRIVER_PATH}/${CYW43_DRIVER_TEST_FILE})
155155 endfunction ()
156156
157157 pico_promote_common_scope_vars()
158+
159+ # Set env var, so it can be accessed in the function
160+ set (ENV{PICO_CYW43_DRIVER_CURRENT_PATH} ${CMAKE_CURRENT_LIST_DIR} )
161+ function (pico_use_partition_firmware TARGET )
162+ target_compile_definitions (${TARGET} PRIVATE CYW43_USE_PARTITION_FIRMWARE=1)
163+ pico_embed_pt_in_binary(${TARGET} $ENV{PICO_CYW43_DRIVER_CURRENT_PATH} /wifi_pt.json)
164+
165+ find_package (Python3 REQUIRED COMPONENTS Interpreter)
166+
167+ # Wifi firmware blob
168+ add_custom_target (${TARGET} _firmware_w_blob DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /firmware_w_blob.S)
169+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /firmware_w_blob.S
170+ COMMAND ${Python3_EXECUTABLE} $ENV{PICO_CYW43_DRIVER_CURRENT_PATH} /cyw43_firmware.py ${PICO_CYW43_DRIVER_PATH} /firmware/w43439A0_7_95_49_00_combined.h ${CMAKE_CURRENT_BINARY_DIR} /firmware_w_blob.S
171+ )
172+
173+ # Wifi and bluetooth firmware blob
174+ add_custom_target (${TARGET} _firmware_wb_blob DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /firmware_wb_blob.S)
175+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /firmware_wb_blob.S
176+ COMMAND ${Python3_EXECUTABLE} $ENV{PICO_CYW43_DRIVER_CURRENT_PATH} /cyw43_firmware.py ${PICO_CYW43_DRIVER_PATH} /firmware/wb43439A0_7_95_49_00_combined.h ${CMAKE_CURRENT_BINARY_DIR} /firmware_wb_blob.S
177+ )
178+
179+ # Create UF2s for all the variants - Wifi vs Wifi+Bluetooth, and TBYB
180+ add_executable (${TARGET} _firmware_w
181+ $ENV{PICO_CYW43_DRIVER_CURRENT_PATH} /wifi_firmware.S)
182+ add_executable (${TARGET} _firmware_w_tbyb
183+ $ENV{PICO_CYW43_DRIVER_CURRENT_PATH} /wifi_firmware.S)
184+ add_executable (${TARGET} _firmware_wb
185+ $ENV{PICO_CYW43_DRIVER_CURRENT_PATH} /wifi_firmware.S)
186+ add_executable (${TARGET} _firmware_wb_tbyb
187+ $ENV{PICO_CYW43_DRIVER_CURRENT_PATH} /wifi_firmware.S)
188+
189+ add_dependencies (${TARGET} _firmware_w ${TARGET} _firmware_w_blob)
190+ add_dependencies (${TARGET} _firmware_w_tbyb ${TARGET} _firmware_w_blob)
191+ add_dependencies (${TARGET} _firmware_wb ${TARGET} _firmware_wb_blob)
192+ add_dependencies (${TARGET} _firmware_wb_tbyb ${TARGET} _firmware_wb_blob)
193+
194+ target_include_directories (${TARGET} _firmware_w PRIVATE ${CMAKE_CURRENT_BINARY_DIR} )
195+ target_include_directories (${TARGET} _firmware_w_tbyb PRIVATE ${CMAKE_CURRENT_BINARY_DIR} )
196+ target_include_directories (${TARGET} _firmware_wb PRIVATE ${CMAKE_CURRENT_BINARY_DIR} )
197+ target_include_directories (${TARGET} _firmware_wb_tbyb PRIVATE ${CMAKE_CURRENT_BINARY_DIR} )
198+
199+ target_compile_definitions (${TARGET} _firmware_w PRIVATE
200+ NO_PICO_PLATFORM=1
201+ )
202+ target_compile_definitions (${TARGET} _firmware_w_tbyb PRIVATE
203+ NO_PICO_PLATFORM=1
204+ PICO_CRT0_IMAGE_TYPE_TBYB=1
205+ )
206+ target_compile_definitions (${TARGET} _firmware_wb PRIVATE
207+ NO_PICO_PLATFORM=1
208+ WB_FIRMWARE=1
209+ )
210+ target_compile_definitions (${TARGET} _firmware_wb_tbyb PRIVATE
211+ NO_PICO_PLATFORM=1
212+ PICO_CRT0_IMAGE_TYPE_TBYB=1
213+ WB_FIRMWARE=1
214+ )
215+
216+ target_link_options (${TARGET} _firmware_w PRIVATE -nostartfiles -nodefaultlibs -Ttext=0x20000000)
217+ target_link_options (${TARGET} _firmware_w_tbyb PRIVATE -nostartfiles -nodefaultlibs -Ttext=0x20000000)
218+ target_link_options (${TARGET} _firmware_wb PRIVATE -nostartfiles -nodefaultlibs -Ttext=0x20000000)
219+ target_link_options (${TARGET} _firmware_wb_tbyb PRIVATE -nostartfiles -nodefaultlibs -Ttext=0x20000000)
220+
221+ target_link_libraries (${TARGET} _firmware_w boot_picobin_headers)
222+ target_link_libraries (${TARGET} _firmware_w_tbyb boot_picobin_headers)
223+ target_link_libraries (${TARGET} _firmware_wb boot_picobin_headers)
224+ target_link_libraries (${TARGET} _firmware_wb_tbyb boot_picobin_headers)
225+
226+ get_target_property (hasSigfile ${TARGET} PICOTOOL_SIGFILE)
227+ if (hasSigfile)
228+ pico_sign_binary(${TARGET} _firmware_w ${sigfile} )
229+ pico_sign_binary(${TARGET} _firmware_w_tbyb ${sigfile} )
230+ pico_sign_binary(${TARGET} _firmware_wb ${sigfile} )
231+ pico_sign_binary(${TARGET} _firmware_wb_tbyb ${sigfile} )
232+ endif ()
233+
234+ pico_hash_binary(${TARGET} _firmware_w)
235+ pico_hash_binary(${TARGET} _firmware_w_tbyb)
236+ pico_hash_binary(${TARGET} _firmware_wb)
237+ pico_hash_binary(${TARGET} _firmware_wb_tbyb)
238+
239+ pico_set_uf2_family(${TARGET} _firmware_w 0x12345678)
240+ pico_set_uf2_family(${TARGET} _firmware_w_tbyb 0x12345678)
241+ pico_set_uf2_family(${TARGET} _firmware_wb 0x12345678)
242+ pico_set_uf2_family(${TARGET} _firmware_wb_tbyb 0x12345678)
243+
244+ pico_package_uf2_output(${TARGET} _firmware_w 0x10000000)
245+ pico_package_uf2_output(${TARGET} _firmware_w_tbyb 0x10000000)
246+ pico_package_uf2_output(${TARGET} _firmware_wb 0x10000000)
247+ pico_package_uf2_output(${TARGET} _firmware_wb_tbyb 0x10000000)
248+
249+ pico_add_extra_outputs(${TARGET} _firmware_w)
250+ pico_add_extra_outputs(${TARGET} _firmware_w_tbyb)
251+ pico_add_extra_outputs(${TARGET} _firmware_wb)
252+ pico_add_extra_outputs(${TARGET} _firmware_wb_tbyb)
253+
254+ add_dependencies (${TARGET}
255+ ${TARGET} _firmware_w ${TARGET} _firmware_w_tbyb
256+ ${TARGET} _firmware_wb ${TARGET} _firmware_wb_tbyb)
257+ endfunction ()
158258endif ()
0 commit comments