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. )