| load("//bazel:defs.bzl", "compatible_with_rp2") |
| |
| package(default_visibility = ["//visibility:public"]) |
| |
| # This is split between the headers and a link-time requirement to fix issues |
| # with circular dependencies introduced by the implementations. |
| alias( |
| name = "pico_clib_interface", |
| actual = select({ |
| "//bazel/constraint:pico_clib_llvm_libc_enabled": ":llvm_libc_interface", |
| "//bazel/constraint:pico_clib_newlib_enabled": ":newlib_interface", |
| "//bazel/constraint:pico_clib_picolibc_enabled": ":picolibc_interface", |
| "//conditions:default": ":pico_clib_interface_auto", |
| }), |
| ) |
| |
| alias( |
| name = "pico_clib_interface_link", |
| actual = select({ |
| "//bazel/constraint:pico_clib_llvm_libc_enabled": ":llvm_libc_interface_link", |
| "//bazel/constraint:pico_clib_newlib_enabled": ":newlib_interface_link", |
| "//bazel/constraint:pico_clib_picolibc_enabled": ":picolibc_interface_link", |
| "//conditions:default": ":pico_clib_interface_auto_link", |
| }), |
| ) |
| |
| # TODO: Provide a way to hook up Arm Compiler for Embedded into the automagic |
| # flow. |
| alias( |
| name = "pico_clib_interface_auto", |
| actual = select({ |
| "//bazel/constraint:pico_toolchain_clang_enabled": ":llvm_libc_interface", |
| "//conditions:default": ":newlib_interface", |
| }), |
| ) |
| |
| alias( |
| name = "pico_clib_interface_auto_link", |
| actual = select({ |
| "//bazel/constraint:pico_toolchain_clang_enabled": ":llvm_libc_interface_link", |
| "//conditions:default": ":newlib_interface_link", |
| }), |
| ) |
| |
| cc_library( |
| name = "llvm_libc_interface", |
| hdrs = [ |
| "include/llvm_libc/sys/cdefs.h", |
| "include/llvm_libc/sys/stat.h", |
| "include/llvm_libc/sys/time.h", |
| "include/llvm_libc/sys/times.h", |
| "include/llvm_libc/sys/types.h", |
| "include/llvm_libc/time.h", |
| "include/llvm_libc/unistd.h", |
| ], |
| includes = ["include/llvm_libc"], |
| # It's hard to properly constrain compatibility since `auto` may select this, |
| # so just tag as manual. |
| tags = ["manual"], |
| target_compatible_with = compatible_with_rp2(), |
| ) |
| |
| cc_library( |
| name = "llvm_libc_interface_link", |
| srcs = ["llvm_libc_interface.c"], |
| implementation_deps = [ |
| ":llvm_libc_interface", |
| "//src/rp2_common/pico_atomic", |
| "//src/rp2_common/pico_bootrom", |
| "//src/rp2_common/pico_runtime_init", |
| "//src/rp2_common/pico_stdio:pico_stdio_headers", |
| ], |
| # It's hard to properly constrain compatibility since `auto` may select this, |
| # so just tag as manual. |
| tags = ["manual"], |
| target_compatible_with = compatible_with_rp2(), |
| ) |
| |
| # For now, newlib doesn't need to provide any headers. |
| alias( |
| name = "newlib_interface", |
| actual = "//bazel:empty_cc_lib", |
| ) |
| |
| cc_library( |
| name = "newlib_interface_link", |
| srcs = ["newlib_interface.c"], |
| implementation_deps = [ |
| "//src/common/pico_time", |
| "//src/rp2_common/pico_bootrom", |
| "//src/rp2_common/pico_printf", |
| "//src/rp2_common/pico_runtime_init", |
| "//src/rp2_common/pico_stdio:pico_stdio_headers", |
| ], |
| # It's hard to properly constrain compatibility since `auto` may select this, |
| # so just tag as manual. |
| tags = ["manual"], |
| target_compatible_with = compatible_with_rp2(), |
| ) |
| |
| # For now, picolibc doesn't need to provide any headers. |
| alias( |
| name = "picolibc_interface", |
| actual = "//bazel:empty_cc_lib", |
| ) |
| |
| cc_library( |
| name = "picolibc_interface_link", |
| srcs = ["picolibc_interface.c"], |
| implementation_deps = [ |
| "//src/common/pico_time", |
| "//src/rp2_common/pico_bootrom", |
| "//src/rp2_common/pico_printf", |
| "//src/rp2_common/pico_runtime_init", |
| "//src/rp2_common/pico_stdio:pico_stdio_headers", |
| ], |
| # It's hard to properly constrain compatibility since `auto` may select this, |
| # so just tag as manual. |
| tags = ["manual"], |
| target_compatible_with = compatible_with_rp2(), |
| ) |