1load("//bazel:defs.bzl", "compatible_with_rp2", "incompatible_with_config") 2 3package(default_visibility = ["//visibility:public"]) 4 5_WRAP_DOUBLE_FLAGS = [ 6 "-Wl,--wrap=__aeabi_dadd", 7 "-Wl,--wrap=__aeabi_ddiv", 8 "-Wl,--wrap=__aeabi_dmul", 9 "-Wl,--wrap=__aeabi_drsub", 10 "-Wl,--wrap=__aeabi_dsub", 11 "-Wl,--wrap=__aeabi_cdcmpeq", 12 "-Wl,--wrap=__aeabi_cdrcmple", 13 "-Wl,--wrap=__aeabi_cdcmple", 14 "-Wl,--wrap=__aeabi_dcmpeq", 15 "-Wl,--wrap=__aeabi_dcmplt", 16 "-Wl,--wrap=__aeabi_dcmple", 17 "-Wl,--wrap=__aeabi_dcmpge", 18 "-Wl,--wrap=__aeabi_dcmpgt", 19 "-Wl,--wrap=__aeabi_dcmpun", 20 "-Wl,--wrap=__aeabi_i2d", 21 "-Wl,--wrap=__aeabi_l2d", 22 "-Wl,--wrap=__aeabi_ui2d", 23 "-Wl,--wrap=__aeabi_ul2d", 24 "-Wl,--wrap=__aeabi_d2iz", 25 "-Wl,--wrap=__aeabi_d2lz", 26 "-Wl,--wrap=__aeabi_d2uiz", 27 "-Wl,--wrap=__aeabi_d2ulz", 28 "-Wl,--wrap=__aeabi_d2f", 29 "-Wl,--wrap=sqrt", 30 "-Wl,--wrap=cos", 31 "-Wl,--wrap=sin", 32 "-Wl,--wrap=tan", 33 "-Wl,--wrap=atan2", 34 "-Wl,--wrap=exp", 35 "-Wl,--wrap=log", 36 "-Wl,--wrap=ldexp", 37 "-Wl,--wrap=copysign", 38 "-Wl,--wrap=trunc", 39 "-Wl,--wrap=floor", 40 "-Wl,--wrap=ceil", 41 "-Wl,--wrap=round", 42 "-Wl,--wrap=sincos", 43 "-Wl,--wrap=asin", 44 "-Wl,--wrap=acos", 45 "-Wl,--wrap=atan", 46 "-Wl,--wrap=sinh", 47 "-Wl,--wrap=cosh", 48 "-Wl,--wrap=tanh", 49 "-Wl,--wrap=asinh", 50 "-Wl,--wrap=acosh", 51 "-Wl,--wrap=atanh", 52 "-Wl,--wrap=exp2", 53 "-Wl,--wrap=log2", 54 "-Wl,--wrap=exp10", 55 "-Wl,--wrap=log10", 56 "-Wl,--wrap=pow", 57 "-Wl,--wrap=powint", 58 "-Wl,--wrap=hypot", 59 "-Wl,--wrap=cbrt", 60 "-Wl,--wrap=fmod", 61 "-Wl,--wrap=drem", 62 "-Wl,--wrap=remainder", 63 "-Wl,--wrap=remquo", 64 "-Wl,--wrap=expm1", 65 "-Wl,--wrap=log1p", 66 "-Wl,--wrap=fma", 67] 68 69alias( 70 name = "pico_double", 71 actual = select({ 72 "//bazel/constraint:pico_double_auto_enabled": ":pico_double_auto", 73 "//bazel/constraint:pico_double_compiler_enabled": ":pico_double_auto", 74 "//bazel/constraint:pico_double_dcp_enabled": ":pico_double_pico", 75 "//bazel/constraint:pico_double_rp2040_enabled": ":pico_double_pico", 76 "//conditions:default": ":pico_double_none", 77 }), 78) 79 80alias( 81 name = "pico_double_auto", 82 actual = select({ 83 "@platforms//cpu:riscv32": ":pico_double_compiler", 84 "//bazel/constraint:rp2040": ":pico_double_pico", 85 "//conditions:default": ":pico_double_dcp", 86 }), 87) 88 89# An empty stub that just lets the compiler handle the implementation. 90cc_library( 91 name = "pico_double_compiler", 92 hdrs = ["include/pico/double.h"], 93 defines = ["PICO_DOUBLE_COMPILER=1"], 94 includes = ["include"], 95 target_compatible_with = compatible_with_rp2(), 96) 97 98cc_library( 99 name = "pico_double_pico", 100 srcs = [ 101 "double_aeabi_rp2040.S", 102 "double_init_rom_rp2040.c", 103 "double_math.c", 104 "double_v1_rom_shim_rp2040.S", 105 ], 106 hdrs = ["include/pico/double.h"], 107 defines = ["LIB_PICO_DOUBLE_PICO=1"], 108 includes = ["include"], 109 linkopts = _WRAP_DOUBLE_FLAGS, 110 target_compatible_with = compatible_with_rp2() + incompatible_with_config("@platforms//cpu:riscv32") + ["//bazel/constraint:rp2040"], 111 visibility = ["//visibility:private"], 112 deps = [ 113 "//src/rp2_common:pico_platform", 114 "//src/rp2_common/hardware_divider", 115 "//src/rp2_common/pico_bootrom", 116 ], 117 alwayslink = True, # Ensures the wrapped symbols are linked in. 118) 119 120cc_library( 121 name = "pico_double_dcp", 122 srcs = [ 123 "double_aeabi_dcp.S", 124 "double_conv_m33.S", 125 "double_fma_dcp.S", 126 "double_math.c", 127 "double_sci_m33.S", 128 ], 129 hdrs = ["include/pico/double.h"], 130 defines = ["LIB_PICO_DOUBLE_PICO=1"], 131 includes = ["include"], 132 linkopts = _WRAP_DOUBLE_FLAGS, 133 target_compatible_with = compatible_with_rp2() + incompatible_with_config("@platforms//cpu:riscv32") + incompatible_with_config("//bazel/constraint:rp2040"), 134 visibility = ["//visibility:private"], 135 deps = [ 136 "//src/rp2_common:pico_platform", 137 "//src/rp2_common/hardware_dcp", 138 "//src/rp2_common/hardware_divider", 139 "//src/rp2_common/pico_bootrom", 140 ], 141 alwayslink = True, # Ensures the wrapped symbols are linked in. 142) 143 144cc_library( 145 name = "pico_double_none", 146 srcs = ["double_none.S"], 147 hdrs = ["include/pico/double.h"], 148 defines = [ 149 "LIB_PICO_DOUBLE_PICO=0", 150 "PICO_PRINTF_SUPPORT_FLOAT=0", 151 ], 152 includes = ["include"], 153 linkopts = _WRAP_DOUBLE_FLAGS, 154 target_compatible_with = compatible_with_rp2(), 155 visibility = ["//visibility:private"], 156 deps = [ 157 "//src/rp2_common:pico_platform", 158 "//src/rp2_common/hardware_divider", 159 "//src/rp2_common/pico_bootrom", 160 ], 161 alwayslink = True, # Ensures the wrapped symbols are linked in. 162) 163