blob: 9bb05a99cb80db505336a4527dab7a3b392e14d8 [file] [log] [blame]
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(),
)