1load("@rules_python//python:defs.bzl", "py_binary") 2load("@pico-sdk//bazel:defs.bzl", "compatible_with_config", "incompatible_with_config") 3 4package(default_visibility = ["//visibility:public"]) 5 6# Expose the gatt header for pico_btstack_make_gatt_header. 7exports_files( 8 ["src/bluetooth_gatt.h"], 9 visibility = ["@pico-sdk//bazel:__pkg__"], 10) 11 12_DISABLE_WARNINGS = [ 13 "-Wno-cast-qual", 14 "-Wno-format", 15 "-Wno-maybe-uninitialized", 16 "-Wno-null-dereference", 17 "-Wno-sign-compare", 18 "-Wno-stringop-overflow", 19 "-Wno-suggest-attribute=format", 20 "-Wno-type-limits", 21 "-Wno-unused-parameter", 22] 23 24cc_library( 25 name = "pico_btstack_base_headers", 26 hdrs = glob(["**/*.h"]), 27 visibility = ["//visibility:private"], 28 defines = select({ 29 "@pico-sdk//bazel/constraint:pico_bt_enable_ble_enabled": ["ENABLE_BLE=1"], 30 "//conditions:default": [], 31 }) + select({ 32 "@pico-sdk//bazel/constraint:pico_bt_enable_mesh_enabled": ["ENABLE_MESH=1"], 33 "//conditions:default": [], 34 }) + select({ 35 "@pico-sdk//bazel/constraint:pico_bt_enable_classic_enabled": ["ENABLE_CLASSIC=1"], 36 "//conditions:default": [], 37 }), 38 includes = [ 39 ".", 40 "3rd-party/bluedroid/decoder/include", 41 "3rd-party/bluedroid/encoder/include", 42 "3rd-party/md5", 43 "3rd-party/micro-ecc", 44 "3rd-party/rijndael", 45 "3rd-party/segger-rtt", 46 "3rd-party/yxml", 47 "platform/embedded", 48 "src", 49 ], 50 deps = [ 51 "@pico-sdk//bazel/config:PICO_BTSTACK_CONFIG" 52 ], 53) 54 55cc_library( 56 name = "pico_btstack_base", 57 srcs = [ 58 "3rd-party/micro-ecc/uECC.c", 59 "3rd-party/rijndael/rijndael.c", 60 "3rd-party/segger-rtt/SEGGER_RTT.c", 61 "3rd-party/segger-rtt/SEGGER_RTT_printf.c", 62 "platform/embedded/btstack_tlv_flash_bank.c", 63 "platform/embedded/hci_dump_embedded_stdout.c", 64 "platform/embedded/hci_dump_segger_rtt_stdout.c", 65 "src/ad_parser.c", 66 "src/btstack_audio.c", 67 "src/btstack_base64_decoder.c", 68 "src/btstack_crypto.c", 69 "src/btstack_hid.c", 70 "src/btstack_hid_parser.c", 71 "src/btstack_linked_list.c", 72 "src/btstack_memory.c", 73 "src/btstack_memory_pool.c", 74 "src/btstack_resample.c", 75 "src/btstack_ring_buffer.c", 76 "src/btstack_run_loop.c", 77 "src/btstack_run_loop_base.c", 78 "src/btstack_slip.c", 79 "src/btstack_tlv.c", 80 "src/btstack_tlv_none.c", 81 "src/btstack_util.c", 82 "src/hci.c", 83 "src/hci_cmd.c", 84 "src/hci_dump.c", 85 "src/hci_event.c", 86 "src/l2cap.c", 87 "src/l2cap_signaling.c", 88 "3rd-party/md5/md5.c", 89 "3rd-party/yxml/yxml.c", 90 ], 91 copts = _DISABLE_WARNINGS, 92 target_compatible_with = incompatible_with_config("@pico-sdk//bazel/constraint:pico_btstack_config_unset"), 93 deps = [":pico_btstack_base_headers"], 94 alwayslink = True, 95) 96 97cc_library( 98 name = "pico_btstack_ble", 99 srcs = [ 100 "src/ble/att_db.c", 101 "src/ble/att_db_util.c", 102 "src/ble/att_dispatch.c", 103 "src/ble/att_server.c", 104 "src/ble/gatt-service/battery_service_server.c", 105 "src/ble/gatt-service/battery_service_client.c", 106 "src/ble/gatt-service/cycling_power_service_server.c", 107 "src/ble/gatt-service/cycling_speed_and_cadence_service_server.c", 108 "src/ble/gatt-service/device_information_service_server.c", 109 "src/ble/gatt-service/device_information_service_client.c", 110 "src/ble/gatt-service/heart_rate_service_server.c", 111 "src/ble/gatt-service/hids_client.c", 112 "src/ble/gatt-service/hids_device.c", 113 "src/ble/gatt-service/nordic_spp_service_server.c", 114 "src/ble/gatt-service/ublox_spp_service_server.c", 115 "src/ble/gatt-service/ancs_client.c", 116 "src/ble/gatt_client.c", 117 "src/ble/le_device_db_memory.c", 118 "src/ble/le_device_db_tlv.c", 119 "src/ble/sm.c", 120 ], 121 copts = _DISABLE_WARNINGS, 122 target_compatible_with = compatible_with_config("@pico-sdk//bazel/constraint:pico_bt_enable_ble_enabled"), 123 deps = [":pico_btstack_base_headers"], 124 alwayslink = True, 125) 126 127cc_library( 128 name = "pico_btstack_classic", 129 srcs = [ 130 "src/classic/a2dp.c", 131 "src/classic/a2dp_sink.c", 132 "src/classic/a2dp_source.c", 133 "src/classic/avdtp.c", 134 "src/classic/avdtp_acceptor.c", 135 "src/classic/avdtp_initiator.c", 136 "src/classic/avdtp_sink.c", 137 "src/classic/avdtp_source.c", 138 "src/classic/avdtp_util.c", 139 "src/classic/avrcp.c", 140 "src/classic/avrcp_browsing.c", 141 "src/classic/avrcp_browsing_controller.c", 142 "src/classic/avrcp_browsing_target.c", 143 "src/classic/avrcp_controller.c", 144 "src/classic/avrcp_cover_art_client.c", 145 "src/classic/avrcp_media_item_iterator.c", 146 "src/classic/avrcp_target.c", 147 "src/classic/btstack_cvsd_plc.c", 148 "src/classic/btstack_link_key_db_tlv.c", 149 "src/classic/btstack_sbc_plc.c", 150 "src/classic/device_id_server.c", 151 "src/classic/gatt_sdp.c", 152 "src/classic/goep_client.c", 153 "src/classic/goep_server.c", 154 "src/classic/hfp.c", 155 "src/classic/hfp_ag.c", 156 "src/classic/hfp_gsm_model.c", 157 "src/classic/hfp_hf.c", 158 "src/classic/hfp_msbc.c", 159 "src/classic/hid_device.c", 160 "src/classic/hid_host.c", 161 "src/classic/hsp_ag.c", 162 "src/classic/hsp_hs.c", 163 "src/classic/obex_iterator.c", 164 "src/classic/obex_message_builder.c", 165 "src/classic/obex_parser.c", 166 "src/classic/pan.c", 167 "src/classic/pbap_client.c", 168 "src/classic/rfcomm.c", 169 "src/classic/sdp_client.c", 170 "src/classic/sdp_client_rfcomm.c", 171 "src/classic/sdp_server.c", 172 "src/classic/sdp_util.c", 173 "src/classic/spp_server.c", 174 ], 175 copts = _DISABLE_WARNINGS, 176 target_compatible_with = compatible_with_config("@pico-sdk//bazel/constraint:pico_bt_enable_classic_enabled"), 177 deps = [ 178 ":pico_btstack_base", 179 ":pico_btstack_base_headers", 180 ], 181 alwayslink = True, 182) 183 184cc_library( 185 name = "pico_btstack_mesh", 186 srcs = [ 187 "src/mesh/adv_bearer.c", 188 "src/mesh/beacon.c", 189 "src/mesh/gatt_bearer.c", 190 "src/mesh/gatt-service/mesh_provisioning_service_server.c", 191 "src/mesh/gatt-service/mesh_proxy_service_server.c", 192 "src/mesh/mesh.c", 193 "src/mesh/mesh_access.c", 194 "src/mesh/mesh_configuration_client.c", 195 "src/mesh/mesh_configuration_server.c", 196 "src/mesh/mesh_crypto.c", 197 "src/mesh/mesh_foundation.c", 198 "src/mesh/mesh_generic_default_transition_time_client.c", 199 "src/mesh/mesh_generic_default_transition_time_server.c", 200 "src/mesh/mesh_generic_level_client.c", 201 "src/mesh/mesh_generic_level_server.c", 202 "src/mesh/mesh_generic_on_off_client.c", 203 "src/mesh/mesh_generic_on_off_server.c", 204 "src/mesh/mesh_health_server.c", 205 "src/mesh/mesh_iv_index_seq_number.c", 206 "src/mesh/mesh_keys.c", 207 "src/mesh/mesh_lower_transport.c", 208 "src/mesh/mesh_network.c", 209 "src/mesh/mesh_node.c", 210 "src/mesh/mesh_peer.c", 211 "src/mesh/mesh_proxy.c", 212 "src/mesh/mesh_upper_transport.c", 213 "src/mesh/mesh_virtual_addresses.c", 214 "src/mesh/pb_adv.c", 215 "src/mesh/pb_gatt.c", 216 "src/mesh/provisioning.c", 217 "src/mesh/provisioning_device.c", 218 "src/mesh/provisioning_provisioner.c", 219 ], 220 copts = _DISABLE_WARNINGS, 221 target_compatible_with = compatible_with_config("@pico-sdk//bazel/constraint:pico_bt_enable_mesh_enabled"), 222 deps = [ 223 ":pico_btstack_base_headers", 224 ":pico_btstack_ble", 225 ], 226 alwayslink = True, 227) 228 229cc_library( 230 name = "pico_btstack_sbc_common", 231 srcs = ["src/classic/btstack_sbc_bluedroid.c"], 232 deps = [":pico_btstack_base_headers"], 233 target_compatible_with = incompatible_with_config("@pico-sdk//bazel/constraint:pico_btstack_config_unset"), 234) 235 236cc_library( 237 name = "pico_btstack_sbc_encoder", 238 srcs = [ 239 "src/classic/btstack_sbc_encoder_bluedroid.c", 240 "3rd-party/bluedroid/encoder/srce/sbc_analysis.c", 241 "3rd-party/bluedroid/encoder/srce/sbc_dct.c", 242 "3rd-party/bluedroid/encoder/srce/sbc_dct_coeffs.c", 243 "3rd-party/bluedroid/encoder/srce/sbc_enc_bit_alloc_mono.c", 244 "3rd-party/bluedroid/encoder/srce/sbc_enc_bit_alloc_ste.c", 245 "3rd-party/bluedroid/encoder/srce/sbc_enc_coeffs.c", 246 "3rd-party/bluedroid/encoder/srce/sbc_encoder.c", 247 "3rd-party/bluedroid/encoder/srce/sbc_packing.c", 248 ], 249 copts = _DISABLE_WARNINGS, 250 includes = ["3rd-party/bluedroid/decoder/include"], 251 deps = [ 252 ":pico_btstack_base_headers", 253 ":pico_btstack_sbc_common", 254 ], 255 alwayslink = True, 256) 257 258cc_library( 259 name = "pico_btstack_sbc_decoder", 260 srcs = [ 261 "src/classic/btstack_sbc_decoder_bluedroid.c", 262 "3rd-party/bluedroid/decoder/srce/readsamplesjoint.inc", 263 "3rd-party/bluedroid/decoder/srce/alloc.c", 264 "3rd-party/bluedroid/decoder/srce/bitalloc.c", 265 "3rd-party/bluedroid/decoder/srce/bitalloc-sbc.c", 266 "3rd-party/bluedroid/decoder/srce/bitstream-decode.c", 267 "3rd-party/bluedroid/decoder/srce/decoder-oina.c", 268 "3rd-party/bluedroid/decoder/srce/decoder-private.c", 269 "3rd-party/bluedroid/decoder/srce/decoder-sbc.c", 270 "3rd-party/bluedroid/decoder/srce/dequant.c", 271 "3rd-party/bluedroid/decoder/srce/framing.c", 272 "3rd-party/bluedroid/decoder/srce/framing-sbc.c", 273 "3rd-party/bluedroid/decoder/srce/oi_codec_version.c", 274 "3rd-party/bluedroid/decoder/srce/synthesis-sbc.c", 275 "3rd-party/bluedroid/decoder/srce/synthesis-dct8.c", 276 "3rd-party/bluedroid/decoder/srce/synthesis-8-generated.c", 277 ], 278 copts = _DISABLE_WARNINGS, 279 includes = ["3rd-party/bluedroid/decoder/include"], 280 deps = [ 281 ":pico_btstack_base_headers", 282 ":pico_btstack_sbc_common", 283 ], 284 alwayslink = True, 285) 286 287cc_library( 288 name = "pico_btstack_bnep_lwip", 289 srcs = [ 290 "platform/lwip/bnep_lwip.c", 291 "src/classic/bnep.c", 292 ], 293 copts = _DISABLE_WARNINGS, 294 includes = ["platform/lwip"], 295 deps = [ 296 ":pico_btstack_base_headers", 297 "@pico-sdk//src/rp2_common/pico_lwip:pico_lwip_nosys", 298 ], 299) 300 301cc_library( 302 name = "pico_btstack_bnep_lwip_sys_freertos", 303 srcs = [ 304 "platform/lwip/bnep_lwip.c", 305 "src/classic/bnep.c", 306 ], 307 copts = _DISABLE_WARNINGS, 308 defines = [ 309 "LWIP_PROVIDE_ERRNO=1", 310 "PICO_LWIP_CUSTOM_LOCK_TCPIP_CORE=1", 311 ], 312 includes = [ 313 "platform/freertos", 314 "platform/lwip", 315 ], 316 deps = [ 317 ":pico_btstack_base_headers", 318 "@pico-sdk//src/rp2_common/pico_lwip:pico_lwip_freertos", 319 ], 320) 321 322py_binary( 323 name = "compile_gatt", 324 srcs = [ 325 "tool/compile_gatt.py", 326 ], 327 # TODO: Add pip pins. 328 # deps = ["@python_packages//pycryptodomex"] 329) 330