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