Reduce Bazel compiler flags

Cuts out most of the Bazel toolchain flags and only specifies the
bare-minimum set of flags. Also, adds wrapper linker flags for functions
the SDK wraps.
diff --git a/src/rp2_common/pico_bit_ops/BUILD.bazel b/src/rp2_common/pico_bit_ops/BUILD.bazel
index ccb14f6..0bdad0f 100644
--- a/src/rp2_common/pico_bit_ops/BUILD.bazel
+++ b/src/rp2_common/pico_bit_ops/BUILD.bazel
@@ -9,4 +9,18 @@
         "//src/rp2_common/pico_platform:pico_platform",
     ],
     srcs = ["bit_ops_aeabi.S"],
+    linkopts = [
+        "-Wl,--wrap=__clzsi2",
+        "-Wl,--wrap=__clzsi2",
+        "-Wl,--wrap=__clzdi2",
+        "-Wl,--wrap=__ctzsi2",
+        "-Wl,--wrap=__ctzdi2",
+        "-Wl,--wrap=__popcountsi2",
+        "-Wl,--wrap=__popcountdi2",
+        "-Wl,--wrap=__clz",
+        "-Wl,--wrap=__clzl",
+        "-Wl,--wrap=__clzsi2",
+        "-Wl,--wrap=__clzll",
+    ],
+    alwayslink=True,  # Ensures the wrapped symbols are linked in.
 )
diff --git a/src/rp2_common/pico_divider/BUILD.bazel b/src/rp2_common/pico_divider/BUILD.bazel
index 2b94262..1cc2a7f 100644
--- a/src/rp2_common/pico_divider/BUILD.bazel
+++ b/src/rp2_common/pico_divider/BUILD.bazel
@@ -10,4 +10,13 @@
         "//src/rp2_common/pico_platform:pico_platform",
     ],
     srcs = ["divider.S"],
+    linkopts = [
+        "-Wl,--wrap=__aeabi_idiv",
+        "-Wl,--wrap=__aeabi_idivmod",
+        "-Wl,--wrap=__aeabi_ldivmod",
+        "-Wl,--wrap=__aeabi_uidiv",
+        "-Wl,--wrap=__aeabi_uidivmod",
+        "-Wl,--wrap=__aeabi_uldivmod",
+    ],
+    alwayslink=True,  # Ensures the wrapped symbols are linked in.
 )
diff --git a/src/rp2_common/pico_double/BUILD.bazel b/src/rp2_common/pico_double/BUILD.bazel
index a6a25e9..df1914f 100644
--- a/src/rp2_common/pico_double/BUILD.bazel
+++ b/src/rp2_common/pico_double/BUILD.bazel
@@ -19,4 +19,68 @@
         "double_none.S",
         "double_v1_rom_shim.S",
     ],
+    linkopts = [
+        "-Wl,--wrap=__aeabi_dadd",
+        "-Wl,--wrap=__aeabi_ddiv",
+        "-Wl,--wrap=__aeabi_dmul",
+        "-Wl,--wrap=__aeabi_drsub",
+        "-Wl,--wrap=__aeabi_dsub",
+        "-Wl,--wrap=__aeabi_cdcmpeq",
+        "-Wl,--wrap=__aeabi_cdrcmple",
+        "-Wl,--wrap=__aeabi_cdcmple",
+        "-Wl,--wrap=__aeabi_dcmpeq",
+        "-Wl,--wrap=__aeabi_dcmplt",
+        "-Wl,--wrap=__aeabi_dcmple",
+        "-Wl,--wrap=__aeabi_dcmpge",
+        "-Wl,--wrap=__aeabi_dcmpgt",
+        "-Wl,--wrap=__aeabi_dcmpun",
+        "-Wl,--wrap=__aeabi_i2d",
+        "-Wl,--wrap=__aeabi_l2d",
+        "-Wl,--wrap=__aeabi_ui2d",
+        "-Wl,--wrap=__aeabi_ul2d",
+        "-Wl,--wrap=__aeabi_d2iz",
+        "-Wl,--wrap=__aeabi_d2lz",
+        "-Wl,--wrap=__aeabi_d2uiz",
+        "-Wl,--wrap=__aeabi_d2ulz",
+        "-Wl,--wrap=__aeabi_d2f",
+        "-Wl,--wrap=sqrt",
+        "-Wl,--wrap=cos",
+        "-Wl,--wrap=sin",
+        "-Wl,--wrap=tan",
+        "-Wl,--wrap=atan2",
+        "-Wl,--wrap=exp",
+        "-Wl,--wrap=log",
+        "-Wl,--wrap=ldexp",
+        "-Wl,--wrap=copysign",
+        "-Wl,--wrap=trunc",
+        "-Wl,--wrap=floor",
+        "-Wl,--wrap=ceil",
+        "-Wl,--wrap=round",
+        "-Wl,--wrap=sincos",
+        "-Wl,--wrap=asin",
+        "-Wl,--wrap=acos",
+        "-Wl,--wrap=atan",
+        "-Wl,--wrap=sinh",
+        "-Wl,--wrap=cosh",
+        "-Wl,--wrap=tanh",
+        "-Wl,--wrap=asinh",
+        "-Wl,--wrap=acosh",
+        "-Wl,--wrap=atanh",
+        "-Wl,--wrap=exp2",
+        "-Wl,--wrap=log2",
+        "-Wl,--wrap=exp10",
+        "-Wl,--wrap=log10",
+        "-Wl,--wrap=pow",
+        "-Wl,--wrap=powint",
+        "-Wl,--wrap=hypot",
+        "-Wl,--wrap=cbrt",
+        "-Wl,--wrap=fmod",
+        "-Wl,--wrap=drem",
+        "-Wl,--wrap=remainder",
+        "-Wl,--wrap=remquo",
+        "-Wl,--wrap=expm1",
+        "-Wl,--wrap=log1p",
+        "-Wl,--wrap=fma",
+    ],
+    alwayslink=True,  # Ensures the wrapped symbols are linked in.
 )
diff --git a/src/rp2_common/pico_float/BUILD.bazel b/src/rp2_common/pico_float/BUILD.bazel
index f36fe4a..e016b01 100644
--- a/src/rp2_common/pico_float/BUILD.bazel
+++ b/src/rp2_common/pico_float/BUILD.bazel
@@ -19,4 +19,68 @@
         "float_none.S",
         "float_v1_rom_shim.S",
     ],
+    linkopts = [
+        "-Wl,--wrap=__aeabi_fadd",
+        "-Wl,--wrap=__aeabi_fdiv",
+        "-Wl,--wrap=__aeabi_fmul",
+        "-Wl,--wrap=__aeabi_frsub",
+        "-Wl,--wrap=__aeabi_fsub",
+        "-Wl,--wrap=__aeabi_cfcmpeq",
+        "-Wl,--wrap=__aeabi_cfrcmple",
+        "-Wl,--wrap=__aeabi_cfcmple",
+        "-Wl,--wrap=__aeabi_fcmpeq",
+        "-Wl,--wrap=__aeabi_fcmplt",
+        "-Wl,--wrap=__aeabi_fcmple",
+        "-Wl,--wrap=__aeabi_fcmpge",
+        "-Wl,--wrap=__aeabi_fcmpgt",
+        "-Wl,--wrap=__aeabi_fcmpun",
+        "-Wl,--wrap=__aeabi_i2f",
+        "-Wl,--wrap=__aeabi_l2f",
+        "-Wl,--wrap=__aeabi_ui2f",
+        "-Wl,--wrap=__aeabi_ul2f",
+        "-Wl,--wrap=__aeabi_f2iz",
+        "-Wl,--wrap=__aeabi_f2lz",
+        "-Wl,--wrap=__aeabi_f2uiz",
+        "-Wl,--wrap=__aeabi_f2ulz",
+        "-Wl,--wrap=__aeabi_f2d",
+        "-Wl,--wrap=sqrtf",
+        "-Wl,--wrap=cosf",
+        "-Wl,--wrap=sinf",
+        "-Wl,--wrap=tanf",
+        "-Wl,--wrap=atan2f",
+        "-Wl,--wrap=expf",
+        "-Wl,--wrap=logf",
+        "-Wl,--wrap=ldexpf",
+        "-Wl,--wrap=copysignf",
+        "-Wl,--wrap=truncf",
+        "-Wl,--wrap=floorf",
+        "-Wl,--wrap=ceilf",
+        "-Wl,--wrap=roundf",
+        "-Wl,--wrap=sincosf",
+        "-Wl,--wrap=asinf",
+        "-Wl,--wrap=acosf",
+        "-Wl,--wrap=atanf",
+        "-Wl,--wrap=sinhf",
+        "-Wl,--wrap=coshf",
+        "-Wl,--wrap=tanhf",
+        "-Wl,--wrap=asinhf",
+        "-Wl,--wrap=acoshf",
+        "-Wl,--wrap=atanhf",
+        "-Wl,--wrap=exp2f",
+        "-Wl,--wrap=log2f",
+        "-Wl,--wrap=exp10f",
+        "-Wl,--wrap=log10f",
+        "-Wl,--wrap=powf",
+        "-Wl,--wrap=powintf",
+        "-Wl,--wrap=hypotf",
+        "-Wl,--wrap=cbrtf",
+        "-Wl,--wrap=fmodf",
+        "-Wl,--wrap=dremf",
+        "-Wl,--wrap=remainderf",
+        "-Wl,--wrap=remquof",
+        "-Wl,--wrap=expm1f",
+        "-Wl,--wrap=log1pf",
+        "-Wl,--wrap=fmaf",
+    ],
+    alwayslink=True,  # Ensures the wrapped symbols are linked in.
 )
diff --git a/src/rp2_common/pico_int64_ops/BUILD.bazel b/src/rp2_common/pico_int64_ops/BUILD.bazel
index 91cae7c..c2b3cf8 100644
--- a/src/rp2_common/pico_int64_ops/BUILD.bazel
+++ b/src/rp2_common/pico_int64_ops/BUILD.bazel
@@ -11,4 +11,6 @@
         "//src/rp2_common/pico_platform:pico_platform",
     ],
     srcs = ["pico_int64_ops_aeabi.S"],
+    linkopts = ["-Wl,--wrap=__aeabi_lmul"],
+    alwayslink=True,  # Ensures the wrapped symbols are linked in.
 )
diff --git a/src/rp2_common/pico_malloc/BUILD.bazel b/src/rp2_common/pico_malloc/BUILD.bazel
index 36a3ba8..00aeb07 100644
--- a/src/rp2_common/pico_malloc/BUILD.bazel
+++ b/src/rp2_common/pico_malloc/BUILD.bazel
@@ -11,4 +11,11 @@
         "//src/common/pico_sync:pico_sync",
     ],
     srcs = ["pico_malloc.c"],
+    linkopts = [
+        "--linkopts=malloc",
+        "--linkopts=calloc",
+        "--linkopts=realloc",
+        "--linkopts=free",
+    ],
+    alwayslink=True,  # Ensures the wrapped symbols are linked in.
 )
diff --git a/src/rp2_common/pico_mem_ops/BUILD.bazel b/src/rp2_common/pico_mem_ops/BUILD.bazel
index b351e0f..0851f7f 100644
--- a/src/rp2_common/pico_mem_ops/BUILD.bazel
+++ b/src/rp2_common/pico_mem_ops/BUILD.bazel
@@ -15,4 +15,15 @@
         "mem_ops.c",
         "mem_ops_aeabi.S",
     ],
+    linkopts = [
+        "-Wl,--wrap=memcpy",
+        "-Wl,--wrap=memset",
+        "-Wl,--wrap=__aeabi_memcpy",
+        "-Wl,--wrap=__aeabi_memset",
+        "-Wl,--wrap=__aeabi_memcpy4",
+        "-Wl,--wrap=__aeabi_memset4",
+        "-Wl,--wrap=__aeabi_memcpy8",
+        "-Wl,--wrap=__aeabi_memset8",
+    ],
+    alwayslink=True,  # Ensures the wrapped symbols are linked in.
 )
diff --git a/src/rp2_common/pico_printf/BUILD.bazel b/src/rp2_common/pico_printf/BUILD.bazel
index f0b81e2..c0665ac 100644
--- a/src/rp2_common/pico_printf/BUILD.bazel
+++ b/src/rp2_common/pico_printf/BUILD.bazel
@@ -13,6 +13,13 @@
     ],
     srcs = [
         "printf.c",
-        "printf_none.S",
     ],
+    linkopts = [
+        "-Wl,--wrap=sprintf",
+        "-Wl,--wrap=snprintf",
+        "-Wl,--wrap=vsnprintf",
+    ],
+    alwayslink=True,  # Ensures the wrapped symbols are linked in.
 )
+
+# TODO: Support printf_none.S.
diff --git a/src/rp2_common/pico_stdio/BUILD.bazel b/src/rp2_common/pico_stdio/BUILD.bazel
index ed10694..94698ed 100644
--- a/src/rp2_common/pico_stdio/BUILD.bazel
+++ b/src/rp2_common/pico_stdio/BUILD.bazel
@@ -36,6 +36,13 @@
         "//bazel/constraint:stdio_uart": ["//src/rp2_common/pico_stdio_uart:pico_stdio_uart"],
         "//bazel/constraint:stdio_usb": ["//src/rp2_common/pico_stdio_usb:pico_stdio_usb"],
     }),
-    copts = ["-Wno-unused-function"],
+    linkopts = [
+        "-Wl,--wrap=printf",
+        "-Wl,--wrap=vprintf",
+        "-Wl,--wrap=puts",
+        "-Wl,--wrap=putchar",
+        "-Wl,--wrap=getchar",
+    ],
+    alwayslink=True,  # Ensures the wrapped symbols are linked in.
     srcs = ["stdio.c"],
 )