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