Add basic rpi2040 blink demo app

Phew, things build!  Lets check in how far we got.

Change-Id: Id82e2f4c73eed6620b2b4661726f931e79a6b0c1
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/third_party/pico-sdk/BUILD b/third_party/pico-sdk/BUILD
new file mode 100644
index 0000000..ab6ff56
--- /dev/null
+++ b/third_party/pico-sdk/BUILD
@@ -0,0 +1,420 @@
+exports_files(["src/rp2_common/pico_standard_link/memmap_default.ld"])
+
+cc_library(
+    name = "pico-sdk",
+    srcs = [
+        "src/common/pico_sync/critical_section.c",
+        "src/common/pico_sync/lock_core.c",
+        "src/common/pico_sync/mutex.c",
+        "src/common/pico_sync/sem.c",
+        "src/common/pico_time/time.c",
+        "src/common/pico_time/timeout_helper.c",
+        "src/common/pico_util/datetime.c",
+        "src/common/pico_util/pheap.c",
+        "src/common/pico_util/queue.c",
+        "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_gpio/gpio.c",
+        "src/rp2_common/hardware_irq/irq.c",
+        "src/rp2_common/hardware_irq/irq_handler_chain.S",
+        "src/rp2_common/hardware_pll/pll.c",
+        "src/rp2_common/hardware_sync/sync.c",
+        "src/rp2_common/hardware_timer/timer.c",
+        "src/rp2_common/hardware_uart/uart.c",
+        "src/rp2_common/hardware_vreg/vreg.c",
+        "src/rp2_common/hardware_watchdog/watchdog.c",
+        "src/rp2_common/hardware_xosc/xosc.c",
+        "src/rp2_common/pico_bit_ops/bit_ops_aeabi.S",
+        "src/rp2_common/pico_bootrom/bootrom.c",
+        "src/rp2_common/pico_divider/divider.S",
+        "src/rp2_common/pico_double/double_aeabi.S",
+        "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_float/float_aeabi.S",
+        "src/rp2_common/pico_float/float_init_rom.c",
+        "src/rp2_common/pico_float/float_math.c",
+        "src/rp2_common/pico_float/float_v1_rom_shim.S",
+        "src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S",
+        "src/rp2_common/pico_malloc/pico_malloc.c",
+        "src/rp2_common/pico_mem_ops/mem_ops_aeabi.S",
+        "src/rp2_common/pico_platform/platform.c",
+        "src/rp2_common/pico_printf/printf.c",
+        "src/rp2_common/pico_runtime/runtime.c",
+        "src/rp2_common/pico_standard_link/binary_info.c",
+        "src/rp2_common/pico_standard_link/crt0.S",
+        "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_stdlib/stdlib.c",
+        #"src/common/pico_util/doc.h",
+    ],
+    hdrs = [
+        "src/boards/include/boards/pico.h",
+        "src/common/pico_base/include/pico.h",
+        "src/common/pico_base/include/pico/assert.h",
+        "src/common/pico_base/include/pico/config.h",
+        "src/common/pico_base/include/pico/config_autogen.h",
+        "src/common/pico_base/include/pico/error.h",
+        "src/common/pico_base/include/pico/types.h",
+        "src/common/pico_base/include/pico/version.h",
+        "src/common/pico_binary_info/include/pico/binary_info.h",
+        "src/common/pico_binary_info/include/pico/binary_info/code.h",
+        "src/common/pico_binary_info/include/pico/binary_info/defs.h",
+        "src/common/pico_binary_info/include/pico/binary_info/structure.h",
+        "src/common/pico_stdlib/include/pico/stdlib.h",
+        "src/common/pico_sync/include/pico/critical_section.h",
+        "src/common/pico_sync/include/pico/lock_core.h",
+        "src/common/pico_sync/include/pico/mutex.h",
+        "src/common/pico_sync/include/pico/sem.h",
+        "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_util/include/pico/util/datetime.h",
+        "src/common/pico_util/include/pico/util/pheap.h",
+        "src/common/pico_util/include/pico/util/queue.h",
+        "src/rp2040/hardware_regs/include/hardware/platform_defs.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/adc.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/addressmap.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/busctrl.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/clocks.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/dma.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/dreq.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/i2c.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/intctrl.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/io_bank0.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/io_qspi.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/m0plus.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/pads_bank0.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/pads_qspi.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/pio.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/pll.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/psm.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/pwm.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/resets.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/rosc.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/rtc.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/sio.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/spi.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/ssi.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/syscfg.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/sysinfo.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/tbman.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/timer.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/uart.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/usb.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/usb_device_dpram.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/vreg_and_chip_reset.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/watchdog.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/xip.h",
+        "src/rp2040/hardware_regs/include/hardware/regs/xosc.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/adc.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/bus_ctrl.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/clocks.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/dma.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/i2c.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/interp.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/iobank0.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/ioqspi.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/mpu.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/pads_qspi.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/padsbank0.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/pio.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/pll.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/psm.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/pwm.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/resets.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/rosc.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/rtc.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/scb.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/sio.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/spi.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/ssi.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/syscfg.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/systick.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/timer.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/uart.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/usb.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/vreg_and_chip_reset.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/watchdog.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/xip_ctrl.h",
+        "src/rp2040/hardware_structs/include/hardware/structs/xosc.h",
+        "src/rp2_common/cmsis/include/cmsis/rename_exceptions.h",
+        "src/rp2_common/hardware_base/include/hardware/address_mapped.h",
+        "src/rp2_common/hardware_claim/include/hardware/claim.h",
+        "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_gpio/include/hardware/gpio.h",
+        "src/rp2_common/hardware_irq/include/hardware/irq.h",
+        "src/rp2_common/hardware_pll/include/hardware/pll.h",
+        "src/rp2_common/hardware_resets/include/hardware/resets.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",
+        "src/rp2_common/hardware_vreg/include/hardware/vreg.h",
+        "src/rp2_common/hardware_watchdog/include/hardware/watchdog.h",
+        "src/rp2_common/hardware_xosc/include/hardware/xosc.h",
+        "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_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",
+        "src/rp2_common/pico_mem_ops/include/pico/mem_ops.h",
+        "src/rp2_common/pico_platform/include/pico/asm_helper.S",
+        "src/rp2_common/pico_platform/include/pico/platform.h",
+        "src/rp2_common/pico_printf/include/pico/printf.h",
+        "src/rp2_common/pico_runtime/include/pico/runtime.h",
+        "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",
+    ],
+    copts = [
+        "-Wno-unused-function",
+    ],
+    defines = [
+        "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_FLOAT=1",
+        "LIB_PICO_FLOAT_PICO=1",
+        "LIB_PICO_INT64_OPS=1",
+        "LIB_PICO_INT64_OPS_PICO=1",
+        "LIB_PICO_MALLOC=1",
+        "LIB_PICO_MEM_OPS=1",
+        "LIB_PICO_MEM_OPS_PICO=1",
+        "LIB_PICO_PLATFORM=1",
+        "LIB_PICO_PRINTF=1",
+        "LIB_PICO_PRINTF_PICO=1",
+        "LIB_PICO_RUNTIME=1",
+        "LIB_PICO_STANDARD_LINK=1",
+        "LIB_PICO_STDIO=1",
+        "LIB_PICO_STDIO_UART=1",
+        "LIB_PICO_STDLIB=1",
+        "LIB_PICO_SYNC=1",
+        "LIB_PICO_SYNC_CORE=1",
+        "LIB_PICO_SYNC_CRITICAL_SECTION=1",
+        "LIB_PICO_SYNC_MUTEX=1",
+        "LIB_PICO_SYNC_SEM=1",
+        "LIB_PICO_TIME=1",
+        "LIB_PICO_UTIL=1",
+        "PICO_COPY_TO_RAM=0",
+        "PICO_CXX_ENABLE_EXCEPTIONS=0",
+        "PICO_NO_FLASH=0",
+        "PICO_USE_BLOCKED_RAM=0",
+    ],
+    includes = [
+        "src/boards/include",
+        "src/common/pico_base/include",
+        "src/common/pico_binary_info/include",
+        "src/common/pico_stdlib/include",
+        "src/common/pico_sync/include",
+        "src/common/pico_time/include",
+        "src/common/pico_util/include",
+        "src/rp2040/hardware_regs/include",
+        "src/rp2040/hardware_structs/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_gpio/include",
+        "src/rp2_common/hardware_irq/include",
+        "src/rp2_common/hardware_pll/include",
+        "src/rp2_common/hardware_resets/include",
+        "src/rp2_common/hardware_sync/include",
+        "src/rp2_common/hardware_timer/include",
+        "src/rp2_common/hardware_uart/include",
+        "src/rp2_common/hardware_vreg/include",
+        "src/rp2_common/hardware_watchdog/include",
+        "src/rp2_common/hardware_xosc/include",
+        "src/rp2_common/pico_bootrom/include",
+        "src/rp2_common/pico_double/include",
+        "src/rp2_common/pico_float/include",
+        "src/rp2_common/pico_int64_ops/include",
+        "src/rp2_common/pico_malloc/include",
+        "src/rp2_common/pico_mem_ops/include",
+        "src/rp2_common/pico_platform/include",
+        "src/rp2_common/pico_printf/include",
+        "src/rp2_common/pico_runtime/include",
+        "src/rp2_common/pico_stdio/include",
+        "src/rp2_common/pico_stdio_uart/include",
+    ],
+    linkopts = [
+        "-Wl,--wrap=" + fn
+        for fn in [
+            "sprintf",
+            "snprintf",
+            "vsnprintf",
+            "__clzsi2",
+            "__clzdi2",
+            "__ctzsi2",
+            "__ctzdi2",
+            "__popcountsi2",
+            "__popcountdi2",
+            "__clz",
+            "__clzl",
+            "__clzll",
+            "__aeabi_idiv",
+            "__aeabi_idivmod",
+            "__aeabi_ldivmod",
+            "__aeabi_uidiv",
+            "__aeabi_uidivmod",
+            "__aeabi_uldivmod",
+            "__aeabi_dadd",
+            "__aeabi_ddiv",
+            "__aeabi_dmul",
+            "__aeabi_drsub",
+            "__aeabi_dsub",
+            "__aeabi_cdcmpeq",
+            "__aeabi_cdrcmple",
+            "__aeabi_cdcmple",
+            "__aeabi_dcmpeq",
+            "__aeabi_dcmplt",
+            "__aeabi_dcmple",
+            "__aeabi_dcmpge",
+            "__aeabi_dcmpgt",
+            "__aeabi_dcmpun",
+            "__aeabi_i2d",
+            "__aeabi_l2d",
+            "__aeabi_ui2d",
+            "__aeabi_ul2d",
+            "__aeabi_d2iz",
+            "__aeabi_d2lz",
+            "__aeabi_d2uiz",
+            "__aeabi_d2ulz",
+            "__aeabi_d2f",
+            "sqrt",
+            "cos",
+            "sin",
+            "tan",
+            "atan2",
+            "exp",
+            "log",
+            "ldexp",
+            "copysign",
+            "trunc",
+            "floor",
+            "ceil",
+            "round",
+            "sincos",
+            "asin",
+            "acos",
+            "atan",
+            "sinh",
+            "cosh",
+            "tanh",
+            "asinh",
+            "acosh",
+            "atanh",
+            "exp2",
+            "log2",
+            "exp10",
+            "log10",
+            "pow",
+            "powint",
+            "hypot",
+            "cbrt",
+            "fmod",
+            "drem",
+            "remainder",
+            "remquo",
+            "expm1",
+            "log1p",
+            "fma",
+            "__aeabi_lmul",
+            "__aeabi_fadd",
+            "__aeabi_fdiv",
+            "__aeabi_fmul",
+            "__aeabi_frsub",
+            "__aeabi_fsub",
+            "__aeabi_cfcmpeq",
+            "__aeabi_cfrcmple",
+            "__aeabi_cfcmple",
+            "__aeabi_fcmpeq",
+            "__aeabi_fcmplt",
+            "__aeabi_fcmple",
+            "__aeabi_fcmpge",
+            "__aeabi_fcmpgt",
+            "__aeabi_fcmpun",
+            "__aeabi_i2f",
+            "__aeabi_l2f",
+            "__aeabi_ui2f",
+            "__aeabi_ul2f",
+            "__aeabi_f2iz",
+            "__aeabi_f2lz",
+            "__aeabi_f2uiz",
+            "__aeabi_f2ulz",
+            "__aeabi_f2d",
+            "sqrtf",
+            "cosf",
+            "sinf",
+            "tanf",
+            "atan2f",
+            "expf",
+            "logf",
+            "ldexpf",
+            "copysignf",
+            "truncf",
+            "floorf",
+            "ceilf",
+            "roundf",
+            "sincosf",
+            "asinf",
+            "acosf",
+            "atanf",
+            "sinhf",
+            "coshf",
+            "tanhf",
+            "asinhf",
+            "acoshf",
+            "atanhf",
+            "exp2f",
+            "log2f",
+            "exp10f",
+            "log10f",
+            "powf",
+            "powintf",
+            "hypotf",
+            "cbrtf",
+            "fmodf",
+            "dremf",
+            "remainderf",
+            "remquof",
+            "expm1f",
+            "log1pf",
+            "fmaf",
+            "malloc",
+            "calloc",
+            "free",
+            "memcpy",
+            "memset",
+            "__aeabi_memcpy",
+            "__aeabi_memset",
+            "__aeabi_memcpy4",
+            "__aeabi_memset4",
+            "__aeabi_memcpy8",
+            "__aeabi_memset8",
+            "printf",
+            "vprintf",
+            "puts",
+            "putchar",
+            "getchar",
+        ]
+    ] + [
+        "-Wl,-z,max-page-size=4096",
+    ],
+    target_compatible_with = [
+        "@platforms//os:none",
+        "//tools/platforms/hardware:cortex_m0plus",
+    ],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//third_party/pico-sdk/src/rp2_common/boot_stage2:boot_stage2_header",
+    ],
+)