1load("//bazel:defs.bzl", "compatible_with_rp2")
2
3package(default_visibility = ["//visibility:public"])
4
5# This exists to break dependency cycles between
6# this library and the stdio implementations.
7# Application code should always use :pico_stdio instead.
8cc_library(
9    name = "pico_stdio_headers",
10    hdrs = [
11        "include/pico/stdio.h",
12        "include/pico/stdio/driver.h",
13    ],
14    defines = ["LIB_PICO_STDIO=1"],
15    includes = ["include"],
16    target_compatible_with = compatible_with_rp2(),
17    visibility = [
18        "//src/rp2_common/pico_clib_interface:__pkg__",
19        "//src/rp2_common/pico_stdio_rtt:__pkg__",
20        "//src/rp2_common/pico_stdio_semihosting:__pkg__",
21        "//src/rp2_common/pico_stdio_uart:__pkg__",
22        "//src/rp2_common/pico_stdio_usb:__pkg__",
23        "//src/rp2_common/tinyusb:__pkg__",
24    ],
25    # Ensure these defines are always present.
26    deps = [
27        "//src/rp2_common/pico_stdio_semihosting:LIB_PICO_STDIO_SEMIHOSTING",
28        "//src/rp2_common/pico_stdio_uart:LIB_PICO_STDIO_UART",
29        "//src/rp2_common/pico_stdio_usb:LIB_PICO_STDIO_USB",
30    ],
31)
32
33cc_library(
34    name = "pico_stdio",
35    srcs = ["stdio.c"],
36    linkopts = [
37        "-Wl,--wrap=printf",
38        "-Wl,--wrap=vprintf",
39        "-Wl,--wrap=puts",
40        "-Wl,--wrap=putchar",
41        "-Wl,--wrap=getchar",
42    ],
43    target_compatible_with = compatible_with_rp2(),
44    deps = [
45        ":pico_stdio_headers",
46        "//src/common/pico_sync",
47        "//src/common/pico_time",
48        "//src/rp2_common:pico_platform",
49        "//src/rp2_common/pico_printf",
50        "//src/rp2_common/pico_stdio_semihosting",
51        "//src/rp2_common/pico_stdio_semihosting:LIB_PICO_STDIO_SEMIHOSTING",
52        "//src/rp2_common/pico_stdio_uart",
53        "//src/rp2_common/pico_stdio_uart:LIB_PICO_STDIO_UART",
54        "//src/rp2_common/pico_stdio_usb",
55        "//src/rp2_common/pico_stdio_usb:LIB_PICO_STDIO_USB",
56    ],
57    alwayslink = True,  # Ensures the wrapped symbols are linked in.
58)
59