blob: 5e5f73e302956e14e1db7ca04e7d79ac2635aac4 [file] [log] [blame]
load("//bazel:defs.bzl", "compatible_with_rp2", "incompatible_with_config")
package(default_visibility = ["//visibility:public"])
_WRAP_DOUBLE_FLAGS = [
"-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",
]
alias(
name = "pico_double",
actual = select({
"//bazel/constraint:pico_double_auto_enabled": ":pico_double_auto",
"//bazel/constraint:pico_double_compiler_enabled": ":pico_double_auto",
"//bazel/constraint:pico_double_dcp_enabled": ":pico_double_pico",
"//bazel/constraint:pico_double_rp2040_enabled": ":pico_double_pico",
"//conditions:default": ":pico_double_none",
}),
)
alias(
name = "pico_double_auto",
actual = select({
"@platforms//cpu:riscv32": ":pico_double_compiler",
"//bazel/constraint:rp2040": ":pico_double_pico",
"//conditions:default": ":pico_double_dcp",
}),
)
# An empty stub that just lets the compiler handle the implementation.
cc_library(
name = "pico_double_compiler",
hdrs = ["include/pico/double.h"],
defines = ["PICO_DOUBLE_COMPILER=1"],
includes = ["include"],
target_compatible_with = compatible_with_rp2(),
)
cc_library(
name = "pico_double_pico",
srcs = [
"double_aeabi_rp2040.S",
"double_init_rom_rp2040.c",
"double_math.c",
"double_v1_rom_shim_rp2040.S",
],
hdrs = ["include/pico/double.h"],
defines = ["LIB_PICO_DOUBLE_PICO=1"],
includes = ["include"],
linkopts = _WRAP_DOUBLE_FLAGS,
target_compatible_with = compatible_with_rp2() + incompatible_with_config("@platforms//cpu:riscv32") + ["//bazel/constraint:rp2040"],
visibility = ["//visibility:private"],
deps = [
"//src/rp2_common:pico_platform",
"//src/rp2_common/hardware_divider",
"//src/rp2_common/pico_bootrom",
],
alwayslink = True, # Ensures the wrapped symbols are linked in.
)
cc_library(
name = "pico_double_dcp",
srcs = [
"double_aeabi_dcp.S",
"double_conv_m33.S",
"double_fma_dcp.S",
"double_math.c",
"double_sci_m33.S",
],
hdrs = ["include/pico/double.h"],
defines = ["LIB_PICO_DOUBLE_PICO=1"],
includes = ["include"],
linkopts = _WRAP_DOUBLE_FLAGS,
target_compatible_with = compatible_with_rp2() + incompatible_with_config("@platforms//cpu:riscv32") + incompatible_with_config("//bazel/constraint:rp2040"),
visibility = ["//visibility:private"],
deps = [
"//src/rp2_common:pico_platform",
"//src/rp2_common/hardware_dcp",
"//src/rp2_common/hardware_divider",
"//src/rp2_common/pico_bootrom",
],
alwayslink = True, # Ensures the wrapped symbols are linked in.
)
cc_library(
name = "pico_double_none",
srcs = ["double_none.S"],
hdrs = ["include/pico/double.h"],
defines = [
"LIB_PICO_DOUBLE_PICO=0",
"PICO_PRINTF_SUPPORT_FLOAT=0",
],
includes = ["include"],
linkopts = _WRAP_DOUBLE_FLAGS,
target_compatible_with = compatible_with_rp2(),
visibility = ["//visibility:private"],
deps = [
"//src/rp2_common:pico_platform",
"//src/rp2_common/hardware_divider",
"//src/rp2_common/pico_bootrom",
],
alwayslink = True, # Ensures the wrapped symbols are linked in.
)