Update pico-sdk and bazelify it

This borrows heavily from work that Austin did to initially get this
stuff working.

Merge commit 'a1fdcd85e25a8a2b1e3ca5bc31e45bedf9e58266' into HEAD

Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: Id47d383bd5fb46664083b365890fd7bad5786c1f
diff --git a/third_party/pico-sdk/BUILD b/third_party/pico-sdk/BUILD
index ab6ff56..ef2bf81 100644
--- a/third_party/pico-sdk/BUILD
+++ b/third_party/pico-sdk/BUILD
@@ -3,6 +3,24 @@
 cc_library(
     name = "pico-sdk",
     srcs = [
+        "lib/tinyusb/src/class/audio/audio_device.c",
+        "lib/tinyusb/src/class/cdc/cdc_device.c",
+        "lib/tinyusb/src/class/dfu/dfu_device.c",
+        "lib/tinyusb/src/class/dfu/dfu_rt_device.c",
+        "lib/tinyusb/src/class/hid/hid_device.c",
+        "lib/tinyusb/src/class/midi/midi_device.c",
+        "lib/tinyusb/src/class/msc/msc_device.c",
+        "lib/tinyusb/src/class/net/ecm_rndis_device.c",
+        "lib/tinyusb/src/class/net/ncm_device.c",
+        "lib/tinyusb/src/class/usbtmc/usbtmc_device.c",
+        "lib/tinyusb/src/class/vendor/vendor_device.c",
+        "lib/tinyusb/src/class/video/video_device.c",
+        "lib/tinyusb/src/common/tusb_fifo.c",
+        "lib/tinyusb/src/device/usbd.c",
+        "lib/tinyusb/src/device/usbd_control.c",
+        "lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c",
+        "lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c",
+        "lib/tinyusb/src/tusb.c",
         "src/common/pico_sync/critical_section.c",
         "src/common/pico_sync/lock_core.c",
         "src/common/pico_sync/mutex.c",
@@ -15,10 +33,14 @@
         "src/rp2_common/hardware_claim/claim.c",
         "src/rp2_common/hardware_clocks/clocks.c",
         "src/rp2_common/hardware_divider/divider.S",
+        "src/rp2_common/hardware_dma/dma.c",
+        "src/rp2_common/hardware_flash/flash.c",
         "src/rp2_common/hardware_gpio/gpio.c",
         "src/rp2_common/hardware_irq/irq.c",
         "src/rp2_common/hardware_irq/irq_handler_chain.S",
+        "src/rp2_common/hardware_pio/pio.c",
         "src/rp2_common/hardware_pll/pll.c",
+        "src/rp2_common/hardware_spi/spi.c",
         "src/rp2_common/hardware_sync/sync.c",
         "src/rp2_common/hardware_timer/timer.c",
         "src/rp2_common/hardware_uart/uart.c",
@@ -32,6 +54,7 @@
         "src/rp2_common/pico_double/double_init_rom.c",
         "src/rp2_common/pico_double/double_math.c",
         "src/rp2_common/pico_double/double_v1_rom_shim.S",
+        "src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c",
         "src/rp2_common/pico_float/float_aeabi.S",
         "src/rp2_common/pico_float/float_init_rom.c",
         "src/rp2_common/pico_float/float_math.c",
@@ -47,10 +70,32 @@
         "src/rp2_common/pico_standard_link/new_delete.cpp",
         "src/rp2_common/pico_stdio/stdio.c",
         "src/rp2_common/pico_stdio_uart/stdio_uart.c",
+        "src/rp2_common/pico_stdio_usb/reset_interface.c",
+        "src/rp2_common/pico_stdio_usb/stdio_usb.c",
+        "src/rp2_common/pico_stdio_usb/stdio_usb_descriptors.c",
         "src/rp2_common/pico_stdlib/stdlib.c",
+        "src/rp2_common/pico_unique_id/unique_id.c",
         #"src/common/pico_util/doc.h",
     ],
     hdrs = [
+        "lib/tinyusb/src/class/cdc/cdc.h",
+        "lib/tinyusb/src/class/cdc/cdc_device.h",
+        "lib/tinyusb/src/common/tusb_common.h",
+        "lib/tinyusb/src/common/tusb_compiler.h",
+        "lib/tinyusb/src/common/tusb_error.h",
+        "lib/tinyusb/src/common/tusb_fifo.h",
+        "lib/tinyusb/src/common/tusb_timeout.h",
+        "lib/tinyusb/src/common/tusb_types.h",
+        "lib/tinyusb/src/common/tusb_verify.h",
+        "lib/tinyusb/src/device/dcd.h",
+        "lib/tinyusb/src/device/dcd_attr.h",
+        "lib/tinyusb/src/device/usbd.h",
+        "lib/tinyusb/src/device/usbd_pvt.h",
+        "lib/tinyusb/src/osal/osal.h",
+        "lib/tinyusb/src/osal/osal_pico.h",
+        "lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.h",
+        "lib/tinyusb/src/tusb.h",
+        "lib/tinyusb/src/tusb_option.h",
         "src/boards/include/boards/pico.h",
         "src/common/pico_base/include/pico.h",
         "src/common/pico_base/include/pico/assert.h",
@@ -71,6 +116,7 @@
         "src/common/pico_sync/include/pico/sync.h",
         "src/common/pico_time/include/pico/time.h",
         "src/common/pico_time/include/pico/timeout_helper.h",
+        "src/common/pico_usb_reset_interface/include/pico/usb_reset_interface.h",
         "src/common/pico_util/include/pico/util/datetime.h",
         "src/common/pico_util/include/pico/util/pheap.h",
         "src/common/pico_util/include/pico/util/queue.h",
@@ -146,10 +192,16 @@
         "src/rp2_common/hardware_clocks/include/hardware/clocks.h",
         "src/rp2_common/hardware_divider/include/hardware/divider.h",
         "src/rp2_common/hardware_divider/include/hardware/divider_helper.S",
+        "src/rp2_common/hardware_dma/include/hardware/dma.h",
+        "src/rp2_common/hardware_flash/include/hardware/flash.h",
         "src/rp2_common/hardware_gpio/include/hardware/gpio.h",
         "src/rp2_common/hardware_irq/include/hardware/irq.h",
+        "src/rp2_common/hardware_pio/include/hardware/pio.h",
+        "src/rp2_common/hardware_pio/include/hardware/pio_instructions.h",
         "src/rp2_common/hardware_pll/include/hardware/pll.h",
+        "src/rp2_common/hardware_pwm/include/hardware/pwm.h",
         "src/rp2_common/hardware_resets/include/hardware/resets.h",
+        "src/rp2_common/hardware_spi/include/hardware/spi.h",
         "src/rp2_common/hardware_sync/include/hardware/sync.h",
         "src/rp2_common/hardware_timer/include/hardware/timer.h",
         "src/rp2_common/hardware_uart/include/hardware/uart.h",
@@ -159,6 +211,7 @@
         "src/rp2_common/pico_bootrom/include/pico/bootrom.h",
         "src/rp2_common/pico_bootrom/include/pico/bootrom/sf_table.h",
         "src/rp2_common/pico_double/include/pico/double.h",
+        "src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include/pico/fix/rp2040_usb_device_enumeration.h",
         "src/rp2_common/pico_float/include/pico/float.h",
         "src/rp2_common/pico_int64_ops/include/pico/int64_ops.h",
         "src/rp2_common/pico_malloc/include/pico/malloc.h",
@@ -170,17 +223,26 @@
         "src/rp2_common/pico_stdio/include/pico/stdio.h",
         "src/rp2_common/pico_stdio/include/pico/stdio/driver.h",
         "src/rp2_common/pico_stdio_uart/include/pico/stdio_uart.h",
+        "src/rp2_common/pico_stdio_usb/include/pico/stdio_usb.h",
+        "src/rp2_common/pico_stdio_usb/include/pico/stdio_usb/reset_interface.h",
+        "src/rp2_common/pico_stdio_usb/include/tusb_config.h",
+        "src/rp2_common/pico_unique_id/include/pico/unique_id.h",
     ],
     copts = [
         "-Wno-unused-function",
+        "-Wno-pointer-arith",
     ],
     defines = [
+        "CFG_TUSB_DEBUG=0",
+        "CFG_TUSB_MCU=OPT_MCU_RP2040",
+        "CFG_TUSB_OS=OPT_OS_PICO",
         "LIB_PICO_BIT_OPS=1",
         "LIB_PICO_BIT_OPS_PICO=1",
         "LIB_PICO_DIVIDER=1",
         "LIB_PICO_DIVIDER_HARDWARE=1",
         "LIB_PICO_DOUBLE=1",
         "LIB_PICO_DOUBLE_PICO=1",
+        "LIB_PICO_FIX_RP2040_USB_DEVICE_ENUMERATION=1",
         "LIB_PICO_FLOAT=1",
         "LIB_PICO_FLOAT_PICO=1",
         "LIB_PICO_INT64_OPS=1",
@@ -195,6 +257,7 @@
         "LIB_PICO_STANDARD_LINK=1",
         "LIB_PICO_STDIO=1",
         "LIB_PICO_STDIO_UART=1",
+        "LIB_PICO_STDIO_USB=1",
         "LIB_PICO_STDLIB=1",
         "LIB_PICO_SYNC=1",
         "LIB_PICO_SYNC_CORE=1",
@@ -202,6 +265,7 @@
         "LIB_PICO_SYNC_MUTEX=1",
         "LIB_PICO_SYNC_SEM=1",
         "LIB_PICO_TIME=1",
+        "LIB_PICO_UNIQUE_ID=1",
         "LIB_PICO_UTIL=1",
         "PICO_COPY_TO_RAM=0",
         "PICO_CXX_ENABLE_EXCEPTIONS=0",
@@ -209,24 +273,36 @@
         "PICO_USE_BLOCKED_RAM=0",
     ],
     includes = [
+        "lib/tinyusb/hw",
+        "lib/tinyusb/src",
+        "lib/tinyusb/src/common",
         "src/boards/include",
         "src/common/pico_base/include",
         "src/common/pico_binary_info/include",
+        "src/common/pico_bit_ops/include",
+        "src/common/pico_divider/include",
         "src/common/pico_stdlib/include",
         "src/common/pico_sync/include",
         "src/common/pico_time/include",
+        "src/common/pico_usb_reset_interface/include",
         "src/common/pico_util/include",
         "src/rp2040/hardware_regs/include",
         "src/rp2040/hardware_structs/include",
+        "src/rp2_common/boot_stage2/include",
         "src/rp2_common/cmsis/include",
         "src/rp2_common/hardware_base/include",
         "src/rp2_common/hardware_claim/include",
         "src/rp2_common/hardware_clocks/include",
         "src/rp2_common/hardware_divider/include",
+        "src/rp2_common/hardware_dma/include",
+        "src/rp2_common/hardware_flash/include",
         "src/rp2_common/hardware_gpio/include",
         "src/rp2_common/hardware_irq/include",
+        "src/rp2_common/hardware_pio/include",
         "src/rp2_common/hardware_pll/include",
+        "src/rp2_common/hardware_pwm/include",
         "src/rp2_common/hardware_resets/include",
+        "src/rp2_common/hardware_spi/include",
         "src/rp2_common/hardware_sync/include",
         "src/rp2_common/hardware_timer/include",
         "src/rp2_common/hardware_uart/include",
@@ -235,6 +311,7 @@
         "src/rp2_common/hardware_xosc/include",
         "src/rp2_common/pico_bootrom/include",
         "src/rp2_common/pico_double/include",
+        "src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include",
         "src/rp2_common/pico_float/include",
         "src/rp2_common/pico_int64_ops/include",
         "src/rp2_common/pico_malloc/include",
@@ -244,6 +321,8 @@
         "src/rp2_common/pico_runtime/include",
         "src/rp2_common/pico_stdio/include",
         "src/rp2_common/pico_stdio_uart/include",
+        "src/rp2_common/pico_stdio_usb/include",
+        "src/rp2_common/pico_unique_id/include",
     ],
     linkopts = [
         "-Wl,--wrap=" + fn
@@ -394,6 +473,7 @@
             "free",
             "memcpy",
             "memset",
+            "realloc",
             "__aeabi_memcpy",
             "__aeabi_memset",
             "__aeabi_memcpy4",