OSDN Git Service

[automerger skipped] Merge "Reset the IRK after all devices are unpaired" into rvc...
[android-x86/system-bt.git] / gd / Android.bp
1 package {
2     // See: http://go/android-license-faq
3     // A large-scale-change added 'default_applicable_licenses' to import
4     // all of the 'license_kinds' from "system_bt_license"
5     // to get the below license kinds:
6     //   SPDX-license-identifier-Apache-2.0
7     //   SPDX-license-identifier-BSD
8     default_applicable_licenses: ["system_bt_license"],
9 }
10
11 cc_defaults {
12     name: "gd_defaults",
13     target: {
14         android: {
15             test_config_template: "AndroidTestTemplate.xml",
16             cflags: [
17                 "-DOS_ANDROID",
18                 "-DOS_LINUX_GENERIC",
19             ],
20             shared_libs: [
21                 "liblog",
22             ],
23         },
24         host: {
25             cflags: [
26                 "-DOS_LINUX_GENERIC",
27             ],
28         },
29         darwin: {
30             enabled: false,
31         },
32     },
33     cpp_std: "c++17",
34     cflags: [
35         "-DEXPORT_SYMBOL=__attribute__((visibility(\"default\")))",
36         "-fvisibility=hidden",
37         "-DLOG_NDEBUG=1",
38         "-DGOOGLE_PROTOBUF_NO_RTTI",
39         "-Wno-unused-parameter",
40         "-Wno-unused-result",
41     ],
42     conlyflags: [
43         "-std=c99",
44     ],
45     header_libs: ["jni_headers"],
46     sanitize: {
47         misc_undefined: ["bounds"],
48     },
49 }
50
51 // Enables code coverage for a set of source files. Must be combined with
52 // "clang_coverage_bin" in order to work. See //test/gen_coverage.py for more information
53 // on generating code coverage.
54 cc_defaults {
55     name: "gd_clang_file_coverage",
56     target: {
57         host: {
58             clang_cflags: [
59                 "-fprofile-instr-generate",
60                 "-fcoverage-mapping",
61             ],
62         },
63     },
64 }
65
66 // Enabled code coverage on a binary. These flags allow libraries that were
67 // compiled with "clang_file_coverage" to be properly linked together in
68 // order to create a binary that will create a profraw file when ran. Note
69 // these flags themselves don't enable code coverage for the source files
70 // compiled in the binary. See //test/gen_coverage.py for more information
71 // on generating code coverage.
72 cc_defaults {
73     name: "gd_clang_coverage_bin",
74     target: {
75         host: {
76             ldflags: [
77                 "-fprofile-instr-generate",
78                 "-fcoverage-mapping",
79             ],
80         },
81     },
82 }
83
84 cc_defaults {
85     name: "gd_clang_tidy",
86     tidy: true,
87     tidy_checks: [
88         "clang-analyzer-core.CallAndMessage",
89         "clang-analyzer-optin.cplusplus.UninitializedObject",
90         "-google*",
91         "-performance*",
92         "-bugprone*",
93     ],
94     tidy_checks_as_errors: [
95         "cppcoreguidelines-pro-type-member-init",
96         "clang-analyzer-core.CallAndMessage",
97         "clang-analyzer-optin.cplusplus.UninitializedObject",
98     ],
99     tidy_flags: [
100         "--header-filter=^.*system/bt/.*.h$",
101         "--extra-arg-before=-Xclang",
102         "--extra-arg-before=-analyzer-config",
103         "--extra-arg-before=-Xclang",
104         "--extra-arg-before=optin.cplusplus.UninitializedObject:Pedantic=true",
105         "--extra-arg-before=-Xclang",
106         "--extra-arg-before=-analyzer-config",
107         "--extra-arg-before=-Xclang",
108         "--extra-arg-before=optin.cplusplus.UninitializedObject:CheckPointeeInitialization=true",
109     ],
110 }
111
112 cc_defaults {
113     name: "libbluetooth_gd_defaults",
114     defaults: [
115         "gd_defaults",
116         "gd_clang_file_coverage",
117     ],
118     host_supported: true,
119     target: {
120         linux: {
121             srcs: [
122                 ":BluetoothBtaaSources_linux_generic",
123                 ":BluetoothOsSources_linux_generic",
124             ],
125         },
126         host: {
127             srcs: [
128                 ":BluetoothBtaaSources_host",
129                 ":BluetoothHalSources_hci_host",
130                 ":BluetoothOsSources_host",
131             ],
132         },
133         android: {
134             srcs: [
135                 ":BluetoothBtaaSources_android",
136                 ":BluetoothHalSources_hci_android_hidl",
137                 ":BluetoothOsSources_android",
138             ],
139             shared_libs: [
140                 "android.hardware.bluetooth@1.0",
141                 "android.hardware.bluetooth@1.1",
142                 "android.system.suspend.control-V1-ndk",
143                 "android.system.suspend@1.0",
144                 "libbinder_ndk",
145                 "libcutils",
146                 "libhidlbase",
147                 "libutils",
148                 "libstatslog",
149             ],
150         },
151     },
152     srcs: [
153         "stack_manager.cc",
154         "module.cc",
155         ":BluetoothAttSources",
156         ":BluetoothCommonSources",
157         ":BluetoothCryptoToolboxSources",
158         ":BluetoothDumpsysSources",
159         ":BluetoothHalSources",
160         ":BluetoothHciSources",
161         ":BluetoothIsoSources",
162         ":BluetoothL2capSources",
163         ":BluetoothNeighborSources",
164         ":BluetoothPacketSources",
165         ":BluetoothShimSources",
166         ":BluetoothSecuritySources",
167         ":BluetoothStorageSources",
168     ],
169     generated_headers: [
170         "BluetoothGeneratedBundlerSchema_h_bfbs",
171         "BluetoothGeneratedDumpsysDataSchema_h",
172         "BluetoothGeneratedDumpsysBundledSchema_h",
173         "BluetoothGeneratedPackets_h",
174     ],
175     shared_libs: [
176         "libchrome",
177         "libcrypto",
178         "libflatbuffers-cpp",
179         "libgrpc++",
180         "libgrpc_wrap",
181     ],
182     static_libs: [
183         "libbluetooth-protos",
184         "libbluetooth_rust_interop",
185         "libbt-platform-protos-lite",
186     ],
187     export_static_lib_headers: [ "libbluetooth_rust_interop" ],
188 }
189
190 cc_library {
191     name: "libbluetooth_gd",
192     defaults: [
193         "libbluetooth_gd_defaults",
194     ],
195 }
196
197 cc_library {
198     name: "libbluetooth_gd_fuzzing",
199     defaults: [
200         "libbluetooth_gd_defaults",
201     ],
202     srcs: [
203         ":BluetoothOsSources_fuzz",
204     ],
205     cflags: [
206         "-DFUZZ_TARGET",
207     ],
208 }
209
210 cc_binary {
211     name: "bluetooth_stack_with_facade",
212     defaults: [
213         "gd_defaults",
214         "gd_clang_coverage_bin",
215     ],
216     host_supported: true,
217     srcs: [
218         "facade/facade_main.cc",
219         "facade/grpc_root_server.cc",
220         "facade/read_only_property_server.cc",
221         "grpc/grpc_module.cc",
222         ":BluetoothFacade_hci_hal",
223         ":BluetoothFacade_hci_layer",
224         ":BluetoothFacade_l2cap_layer",
225         ":BluetoothFacade_neighbor",
226         ":BluetoothFacade_iso_layer",
227         ":BluetoothFacade_security_layer",
228         ":BluetoothFacade_shim_layer",
229     ],
230     generated_headers: [
231         "BluetoothFacadeGeneratedStub_h",
232         "BluetoothGeneratedBundlerSchema_h_bfbs",
233         "BluetoothGeneratedDumpsysDataSchema_h",
234         "BluetoothGeneratedPackets_h",
235         // Needed here to guarantee that generated zip file is created before
236         // bluetooth_cert_tests.zip is packaged
237         "BluetoothFacadeAndCertGeneratedStub_py",
238     ],
239     generated_sources: [
240         "BluetoothFacadeGeneratedStub_cc",
241     ],
242     static_libs: [
243         "breakpad_client",
244         "libbluetooth-protos",
245         "libbluetooth_gd",
246         "libflatbuffers-cpp",
247         "libbluetooth_rust_interop",
248     ],
249     shared_libs: [
250         "libbacktrace",
251         "libchrome",
252         "libcrypto",
253         "libgrpc++",
254         "libgrpc++_unsecure",
255         "libgrpc_wrap",
256         "libprotobuf-cpp-full",
257     ],
258     target: {
259         android: {
260             shared_libs: [
261                 "android.hardware.bluetooth@1.0",
262                 "android.hardware.bluetooth@1.1",
263                 "android.system.suspend.control-V1-ndk",
264                 "android.system.suspend@1.0",
265                 "libbinder_ndk",
266                 "libhidlbase",
267                 "libutils",
268                 "libcutils",
269                 "libstatslog",
270             ],
271         },
272         host: {
273             required: [
274                 "root-canal",
275             ],
276         },
277     },
278     sanitize: {
279         address: true,
280         cfi: true,
281     }
282 }
283
284 cc_test {
285     name: "bluetooth_test_gd_unit",
286     test_suites: ["device-tests"],
287     defaults: [
288         "gd_defaults",
289         "gd_clang_coverage_bin",
290     ],
291     host_supported: true,
292     test_options: {
293         unit_test: true,
294     },
295     target: {
296         linux: {
297             srcs: [
298                 ":BluetoothOsTestSources_linux_generic",
299             ],
300         },
301         host: {
302             srcs: [
303                 ":BluetoothHalTestSources_hci_host",
304                 ":BluetoothOsTestSources_host",
305             ],
306         },
307         android: {
308             srcs: [
309                 ":BluetoothHalTestSources_hci_android_hidl",
310                 ":BluetoothOsTestSources_android",
311             ],
312             shared_libs: [
313                 "android.hardware.bluetooth@1.0",
314                 "android.hardware.bluetooth@1.1",
315                 "android.system.suspend.control-V1-ndk",
316                 "android.system.suspend@1.0",
317                 "libbinder_ndk",
318                 "libhidlbase",
319                 "libutils",
320                 "libcutils",
321                 "libstatslog",
322             ],
323         },
324     },
325     srcs: [
326         "module_unittest.cc",
327         "stack_manager_unittest.cc",
328         ":BluetoothCommonTestSources",
329         ":BluetoothCryptoToolboxTestSources",
330         ":BluetoothDumpsysTestSources",
331         ":BluetoothHalTestSources",
332         ":BluetoothHciUnitTestSources",
333         ":BluetoothL2capUnitTestSources",
334         ":BluetoothPacketTestSources",
335         ":BluetoothShimTestSources",
336         ":BluetoothSecurityUnitTestSources",
337         ":BluetoothStorageUnitTestSources",
338     ],
339     generated_headers: [
340         "BluetoothGeneratedBundlerSchema_h_bfbs",
341         "BluetoothGeneratedDumpsysBundledSchema_h",
342         "BluetoothGeneratedDumpsysBundledTestSchema_h",
343         "BluetoothGeneratedDumpsysDataSchema_h",
344         "BluetoothGeneratedDumpsysTestData_h",
345         "BluetoothGeneratedPackets_h",
346     ],
347     static_libs: [
348         "libbluetooth-protos",
349         "libbluetooth_gd",
350         "libc++fs",
351         "libflatbuffers-cpp",
352         "libgmock",
353         "libbluetooth_rust_interop",
354     ],
355     shared_libs: [
356         "libchrome",
357         "libcrypto",
358         "libgrpc++",
359         "libgrpc_wrap",
360     ],
361     sanitize: {
362         address: true,
363     },
364 }
365
366 cc_test {
367     name: "bluetooth_test_gd",
368     test_suites: ["device-tests"],
369     defaults: [
370         "gd_defaults",
371         "gd_clang_coverage_bin",
372     ],
373     host_supported: true,
374     test_options: {
375         unit_test: false,
376     },
377     target: {
378         linux: {
379             srcs: [
380                 ":BluetoothOsTestSources_linux_generic",
381             ],
382         },
383         host: {
384             srcs: [
385                 ":BluetoothHalTestSources_hci_host",
386                 ":BluetoothOsTestSources_host",
387             ],
388         },
389         android: {
390             srcs: [
391                 ":BluetoothHalTestSources_hci_android_hidl",
392                 ":BluetoothOsTestSources_android",
393             ],
394             shared_libs: [
395                 "android.hardware.bluetooth@1.0",
396                 "android.hardware.bluetooth@1.1",
397                 "android.system.suspend.control-V1-ndk",
398                 "android.system.suspend@1.0",
399                 "libbinder_ndk",
400                 "libhidlbase",
401                 "libutils",
402                 "libcutils",
403                 "libstatslog",
404             ],
405         },
406     },
407     srcs: [
408         "module_unittest.cc",
409         "stack_manager_unittest.cc",
410         ":BluetoothAttTestSources",
411         ":BluetoothCommonTestSources",
412         ":BluetoothCryptoToolboxTestSources",
413         ":BluetoothDumpsysTestSources",
414         ":BluetoothHalTestSources",
415         ":BluetoothHciTestSources",
416         ":BluetoothIsoTestSources",
417         ":BluetoothL2capTestSources",
418         ":BluetoothNeighborTestSources",
419         ":BluetoothPacketTestSources",
420         ":BluetoothSecurityTestSources",
421         ":BluetoothStorageTestSources",
422     ],
423     generated_headers: [
424         "BluetoothGeneratedBundlerSchema_h_bfbs",
425         "BluetoothGeneratedDumpsysBundledSchema_h",
426         "BluetoothGeneratedDumpsysBundledTestSchema_h",
427         "BluetoothGeneratedDumpsysDataSchema_h",
428         "BluetoothGeneratedDumpsysTestData_h",
429         "BluetoothGeneratedPackets_h",
430     ],
431     static_libs: [
432         "libbluetooth-protos",
433         "libbluetooth_gd",
434         "libc++fs",
435         "libflatbuffers-cpp",
436         "libgmock",
437         "libbluetooth_rust_interop",
438     ],
439     shared_libs: [
440         "libchrome",
441         "libcrypto",
442         "libgrpc++",
443         "libgrpc_wrap",
444     ],
445     sanitize: {
446         address: true,
447     },
448 }
449
450 cc_test {
451     name: "bluetooth_packet_parser_test",
452     test_suites: ["device-tests"],
453     defaults: [
454         "gd_defaults",
455         "gd_clang_coverage_bin",
456     ],
457     host_supported: true,
458     test_options: {
459         unit_test: true,
460     },
461     srcs: [
462         "hci/address.cc",
463         ":BluetoothPacketSources",
464         ":BluetoothPacketParserTestPacketTestSources",
465     ],
466     generated_headers: [
467         "BluetoothPacketParserTestPacketPdlGen_h",
468     ],
469     sanitize: {
470         address: true,
471         cfi: true,
472     },
473     static_libs: [
474         "libchrome",
475     ],
476     shared_libs: [
477         "libgrpc++",
478         "libgrpc_wrap",
479     ],
480     target: {
481         android: {
482             shared_libs: [
483                 "android.hardware.bluetooth@1.0",
484                 "android.hardware.bluetooth@1.1",
485                 "libhidlbase",
486                 "libutils",
487                 "libcutils",
488             ],
489         },
490     },
491 }
492
493 cc_defaults {
494     name: "gd_fuzz_defaults",
495     defaults: ["gd_defaults"],
496     srcs: [
497         ":BluetoothFuzzHelperSources",
498         ":BluetoothHciFuzzHelperSources",
499     ],
500     static_libs: [
501         "libbluetooth-protos",
502         "libbluetooth_gd_fuzzing",
503         "libchrome",
504         "libgmock",
505         "libgtest",
506         "libbluetooth_rust_interop",
507     ],
508     host_supported: true,
509     generated_headers: [
510         "BluetoothGeneratedDumpsysDataSchema_h",
511         "BluetoothGeneratedPackets_h",
512     ],
513     shared_libs: [
514         "libcrypto",
515         "libflatbuffers-cpp",
516         "libgrpc++",
517         "libgrpc_wrap",
518     ],
519     cflags: [
520         "-DFUZZ_TARGET",
521     ],
522     target: {
523         android: {
524             shared_libs: [
525                 "android.hardware.bluetooth@1.0",
526                 "android.hardware.bluetooth@1.1",
527                 "android.system.suspend.control-V1-ndk",
528                 "libbinder_ndk",
529                 "libcutils",
530                 "libhidlbase",
531                 "libutils",
532                 "libstatslog",
533             ],
534         },
535     },
536 }
537
538 cc_fuzz {
539     name: "bluetooth_gd_fuzz_test",
540     defaults: ["gd_fuzz_defaults"],
541     srcs: [
542         "fuzz_test.cc",
543         ":BluetoothHciFuzzTestSources",
544         ":BluetoothL2capFuzzTestSources",
545     ],
546 }
547
548 cc_fuzz {
549     name: "bluetooth_gd_hci_layer_fuzz_test",
550     defaults: ["gd_fuzz_defaults"],
551     srcs: [
552         "hci/fuzz/hci_layer_fuzz_test.cc",
553         ":BluetoothHalFuzzSources",
554     ],
555 }
556
557 cc_fuzz {
558     name: "bluetooth_gd_acl_manager_fuzz_test",
559     defaults: ["gd_fuzz_defaults"],
560     srcs: [
561         "hci/fuzz/acl_manager_fuzz_test.cc",
562     ],
563 }
564
565 cc_benchmark {
566     name: "bluetooth_benchmark_gd",
567     defaults: ["gd_defaults"],
568     host_supported: true,
569     srcs: [
570         "benchmark.cc",
571         ":BluetoothOsBenchmarkSources",
572     ],
573     static_libs: [
574         "libbluetooth_gd",
575     ],
576     shared_libs: [
577         "libchrome",
578     ],
579 }
580
581 filegroup {
582     name: "BluetoothHciClassSources",
583     srcs: [
584         "hci/address.cc",
585         "hci/class_of_device.cc",
586     ],
587 }
588
589 genrule {
590     name: "BluetoothGeneratedPackets_h",
591     tools: [
592         "bluetooth_packetgen",
593     ],
594     cmd: "$(location bluetooth_packetgen) --include=system/bt/gd --out=$(genDir) $(in)",
595     srcs: [
596         "hci/hci_packets.pdl",
597         "l2cap/l2cap_packets.pdl",
598         "security/smp_packets.pdl",
599     ],
600     out: [
601         "hci/hci_packets.h",
602         "l2cap/l2cap_packets.h",
603         "security/smp_packets.h",
604     ],
605 }
606
607 genrule {
608     name: "BluetoothGeneratedPackets_rust",
609     tools: [
610         "bluetooth_packetgen",
611     ],
612     cmd: "$(location bluetooth_packetgen) --include=system/bt/gd --out=$(genDir) $(in) --rust",
613     srcs: [
614         "hci/hci_packets.pdl",
615     ],
616     out: [
617         "hci/hci_packets.rs",
618     ],
619 }
620
621 rust_library {
622     name: "libbt_packets",
623     defaults: ["gd_rust_defaults"],
624     crate_name: "bt_packets",
625     srcs: ["rust/packets/lib.rs", ":BluetoothGeneratedPackets_rust"],
626     edition: "2018",
627     host_supported: true,
628     proc_macros: ["libnum_derive"],
629     rustlibs: [
630         "libbytes",
631         "libnum_traits",
632         "libthiserror",
633         "libbt_hci_custom_types",
634         "liblog_rust",
635     ],
636 }
637
638 rust_test_host {
639     name: "libbt_packets_test",
640     defaults: ["gd_rust_defaults"],
641     srcs: ["rust/packets/lib.rs", ":BluetoothGeneratedPackets_rust"],
642     test_suites: ["general-tests"],
643     edition: "2018",
644     proc_macros: ["libnum_derive"],
645     rustlibs: [
646         "libbytes",
647         "libnum_traits",
648         "libthiserror",
649         "libbt_hci_custom_types",
650         "liblog_rust",
651     ],
652 }
653
654 // Generates binary schema data to be bundled and source file generated
655 genrule {
656     name: "BluetoothGeneratedDumpsysBinarySchema_bfbs",
657     tools: [
658         "flatc",
659     ],
660     cmd: "$(location flatc) -I system/bt/gd -b --schema -o $(genDir) $(in) ",
661     srcs: [
662         "btaa/activity_attribution.fbs",
663         "common/init_flags.fbs",
664         "dumpsys_data.fbs",
665         "hci/hci_acl_manager.fbs",
666         "l2cap/classic/l2cap_classic_module.fbs",
667         "shim/dumpsys.fbs",
668         "os/wakelock_manager.fbs",
669     ],
670     out: [
671         "activity_attribution.bfbs",
672         "init_flags.bfbs",
673         "dumpsys.bfbs",
674         "dumpsys_data.bfbs",
675         "hci_acl_manager.bfbs",
676         "l2cap_classic_module.bfbs",
677         "wakelock_manager.bfbs",
678     ],
679 }
680
681 genrule {
682     name: "BluetoothGeneratedDumpsysDataSchema_h",
683     tools: [
684         "flatc",
685     ],
686     cmd: "$(location flatc) -I system/bt/gd -o $(genDir) --cpp $(in) ",
687     srcs: [
688         "btaa/activity_attribution.fbs",
689         "common/init_flags.fbs",
690         "dumpsys_data.fbs",
691         "hci/hci_acl_manager.fbs",
692         "l2cap/classic/l2cap_classic_module.fbs",
693         "shim/dumpsys.fbs",
694         "os/wakelock_manager.fbs",
695     ],
696     out: [
697         "activity_attribution_generated.h",
698         "dumpsys_data_generated.h",
699         "dumpsys_generated.h",
700         "hci_acl_manager_generated.h",
701         "init_flags_generated.h",
702         "l2cap_classic_module_generated.h",
703         "wakelock_manager_generated.h",
704     ],
705 }
706
707 genrule {
708     name: "BluetoothGeneratedPackets_python3_cc",
709     tools: [
710         "bluetooth_packetgen",
711     ],
712     cmd: "$(location bluetooth_packetgen) --include=system/bt/gd --out=$(genDir) --num_shards=10 $(in)",
713     srcs: [
714         "hci/hci_packets.pdl",
715         "l2cap/l2cap_packets.pdl",
716         "security/smp_packets.pdl",
717     ],
718     out: [
719         "hci/hci_packets_python3.cc",
720         "hci/hci_packets_python3_shard_0.cc",
721         "hci/hci_packets_python3_shard_1.cc",
722         "hci/hci_packets_python3_shard_2.cc",
723         "hci/hci_packets_python3_shard_3.cc",
724         "hci/hci_packets_python3_shard_4.cc",
725         "hci/hci_packets_python3_shard_5.cc",
726         "hci/hci_packets_python3_shard_6.cc",
727         "hci/hci_packets_python3_shard_7.cc",
728         "hci/hci_packets_python3_shard_8.cc",
729         "hci/hci_packets_python3_shard_9.cc",
730         "l2cap/l2cap_packets_python3.cc",
731         "l2cap/l2cap_packets_python3_shard_0.cc",
732         "l2cap/l2cap_packets_python3_shard_1.cc",
733         "l2cap/l2cap_packets_python3_shard_2.cc",
734         "l2cap/l2cap_packets_python3_shard_3.cc",
735         "l2cap/l2cap_packets_python3_shard_4.cc",
736         "l2cap/l2cap_packets_python3_shard_5.cc",
737         "l2cap/l2cap_packets_python3_shard_6.cc",
738         "l2cap/l2cap_packets_python3_shard_7.cc",
739         "l2cap/l2cap_packets_python3_shard_8.cc",
740         "l2cap/l2cap_packets_python3_shard_9.cc",
741         "security/smp_packets_python3.cc",
742         "security/smp_packets_python3_shard_0.cc",
743         "security/smp_packets_python3_shard_1.cc",
744         "security/smp_packets_python3_shard_2.cc",
745         "security/smp_packets_python3_shard_3.cc",
746         "security/smp_packets_python3_shard_4.cc",
747         "security/smp_packets_python3_shard_5.cc",
748         "security/smp_packets_python3_shard_6.cc",
749         "security/smp_packets_python3_shard_7.cc",
750         "security/smp_packets_python3_shard_8.cc",
751         "security/smp_packets_python3_shard_9.cc",
752     ],
753 }
754
755 filegroup {
756     name: "BluetoothFacadeProto",
757     srcs: [
758         "facade/common.proto",
759         "facade/rootservice.proto",
760         "hal/hal_facade.proto",
761         "hci/facade/hci_facade.proto",
762         "hci/facade/acl_manager_facade.proto",
763         "hci/facade/controller_facade.proto",
764         "hci/facade/le_acl_manager_facade.proto",
765         "hci/facade/le_advertising_manager_facade.proto",
766         "hci/facade/le_initiator_address_facade.proto",
767         "hci/facade/le_scanning_manager_facade.proto",
768         "iso/facade.proto",
769         "neighbor/facade/facade.proto",
770         "l2cap/classic/facade.proto",
771         "l2cap/le/facade.proto",
772         "security/facade.proto",
773         "shim/facade/facade.proto",
774     ],
775 }
776
777 genrule {
778     name: "BluetoothFacadeGeneratedStub_h",
779     tools: [
780         "aprotoc",
781         "protoc-gen-grpc-cpp-plugin",
782     ],
783     cmd: "$(location aprotoc) -Isystem/bt/gd -Iexternal/protobuf/src --plugin=protoc-gen-grpc=$(location protoc-gen-grpc-cpp-plugin) $(in) --grpc_out=$(genDir) --cpp_out=$(genDir)",
784     srcs: [
785         ":BluetoothFacadeProto",
786     ],
787     out: [
788         "facade/common.grpc.pb.h",
789         "facade/common.pb.h",
790         "facade/rootservice.grpc.pb.h",
791         "facade/rootservice.pb.h",
792         "hal/hal_facade.grpc.pb.h",
793         "hal/hal_facade.pb.h",
794         "hci/facade/hci_facade.grpc.pb.h",
795         "hci/facade/hci_facade.pb.h",
796         "hci/facade/acl_manager_facade.grpc.pb.h",
797         "hci/facade/acl_manager_facade.pb.h",
798         "hci/facade/controller_facade.grpc.pb.h",
799         "hci/facade/controller_facade.pb.h",
800         "hci/facade/le_acl_manager_facade.grpc.pb.h",
801         "hci/facade/le_acl_manager_facade.pb.h",
802         "hci/facade/le_advertising_manager_facade.grpc.pb.h",
803         "hci/facade/le_advertising_manager_facade.pb.h",
804         "hci/facade/le_initiator_address_facade.grpc.pb.h",
805         "hci/facade/le_initiator_address_facade.pb.h",
806         "hci/facade/le_scanning_manager_facade.grpc.pb.h",
807         "hci/facade/le_scanning_manager_facade.pb.h",
808         "iso/facade.grpc.pb.h",
809         "iso/facade.pb.h",
810         "l2cap/classic/facade.grpc.pb.h",
811         "l2cap/classic/facade.pb.h",
812         "l2cap/le/facade.grpc.pb.h",
813         "l2cap/le/facade.pb.h",
814         "neighbor/facade/facade.grpc.pb.h",
815         "neighbor/facade/facade.pb.h",
816         "security/facade.grpc.pb.h",
817         "security/facade.pb.h",
818         "shim/facade/facade.grpc.pb.h",
819         "shim/facade/facade.pb.h",
820     ],
821 }
822
823 genrule {
824     name: "BluetoothFacadeGeneratedStub_cc",
825     tools: [
826         "aprotoc",
827         "protoc-gen-grpc-cpp-plugin",
828     ],
829     cmd: "$(location aprotoc) -Isystem/bt/gd -Iexternal/protobuf/src --plugin=protoc-gen-grpc=$(location protoc-gen-grpc-cpp-plugin) $(in) --grpc_out=$(genDir) --cpp_out=$(genDir)",
830     srcs: [
831         ":BluetoothFacadeProto",
832     ],
833     out: [
834         "facade/common.grpc.pb.cc",
835         "facade/common.pb.cc",
836         "facade/rootservice.grpc.pb.cc",
837         "facade/rootservice.pb.cc",
838         "hal/hal_facade.grpc.pb.cc",
839         "hal/hal_facade.pb.cc",
840         "hci/facade/hci_facade.grpc.pb.cc",
841         "hci/facade/hci_facade.pb.cc",
842         "hci/facade/acl_manager_facade.grpc.pb.cc",
843         "hci/facade/acl_manager_facade.pb.cc",
844         "hci/facade/controller_facade.grpc.pb.cc",
845         "hci/facade/controller_facade.pb.cc",
846         "hci/facade/le_acl_manager_facade.grpc.pb.cc",
847         "hci/facade/le_acl_manager_facade.pb.cc",
848         "hci/facade/le_advertising_manager_facade.grpc.pb.cc",
849         "hci/facade/le_advertising_manager_facade.pb.cc",
850         "hci/facade/le_initiator_address_facade.grpc.pb.cc",
851         "hci/facade/le_initiator_address_facade.pb.cc",
852         "hci/facade/le_scanning_manager_facade.grpc.pb.cc",
853         "hci/facade/le_scanning_manager_facade.pb.cc",
854         "iso/facade.grpc.pb.cc",
855         "iso/facade.pb.cc",
856         "l2cap/classic/facade.grpc.pb.cc",
857         "l2cap/classic/facade.pb.cc",
858         "l2cap/le/facade.grpc.pb.cc",
859         "l2cap/le/facade.pb.cc",
860         "neighbor/facade/facade.grpc.pb.cc",
861         "neighbor/facade/facade.pb.cc",
862         "security/facade.grpc.pb.cc",
863         "security/facade.pb.cc",
864         "shim/facade/facade.grpc.pb.cc",
865         "shim/facade/facade.pb.cc",
866     ],
867 }
868
869 genrule {
870     name: "BluetoothFacadeAndCertGeneratedStub_py",
871     tools: [
872         "aprotoc",
873         "protoc-gen-grpc-python-plugin",
874         "soong_zip",
875     ],
876     cmd: "mkdir -p $(genDir)/files && " +
877         "$(location aprotoc) -Isystem/bt/gd -Iexternal/protobuf/src --plugin=protoc-gen-grpc=$(location protoc-gen-grpc-python-plugin) $(in) --grpc_out=$(genDir)/files --python_out=$(genDir)/files && " +
878         "mkdir -p $(genDir)/files/cert && " +
879         "touch $(genDir)/files/cert/__init__.py && " +
880         "touch $(genDir)/files/facade/__init__.py && " +
881         "touch $(genDir)/files/hal/__init__.py && " +
882         "touch $(genDir)/files/hci/__init__.py && " +
883         "touch $(genDir)/files/hci/facade/__init__.py && " +
884         "touch $(genDir)/files/iso/__init__.py && " +
885         "touch $(genDir)/files/l2cap/classic/__init__.py && " +
886         "touch $(genDir)/files/l2cap/le/__init__.py && " +
887         "touch $(genDir)/files/neighbor/facade/__init__.py && " +
888         "touch $(genDir)/files/security/__init__.py && " +
889         "$(location soong_zip) -C $(genDir)/files -D $(genDir)/files -o $(out)",
890     srcs: [
891         ":BluetoothFacadeProto",
892     ],
893     out: ["bluetooth_cert_generated_py.zip"],
894 }
895
896 cc_defaults {
897     name: "bluetooth_py3_native_extension_defaults",
898     include_dirs: [
899         "external/python/cpython3/Include",
900     ],
901     target: {
902         android: {
903             include_dirs: ["external/python/cpython3/android/bionic/pyconfig"],
904         },
905         android_arm: {
906             cflags: ["-DSOABI=\"cpython-38android-arm-android-bionic\""],
907             suffix: ".cpython-38android-arm-android-bionic",
908         },
909         android_arm64: {
910             cflags: ["-DSOABI=\"cpython-38android-arm64-android-bionic\""],
911             suffix: ".cpython-38android-arm64-android-bionic",
912         },
913         android_x86: {
914             cflags: ["-DSOABI=\"cpython-38android-x86-android-bionic\""],
915             suffix: ".cpython-38android-x86-android-bionic",
916         },
917         android_x86_64: {
918             cflags: ["-DSOABI=\"cpython-38android-x86_64-android-bionic\""],
919             suffix: ".cpython-38android-x86_64-android-bionic",
920         },
921         // Regenerate include dirs with android_regen.sh
922         darwin_x86_64: {
923             include_dirs: ["external/python/cpython3/android/darwin_x86_64/pyconfig"],
924             cflags: [
925                 "-Wno-deprecated-declarations",
926                 "-Wno-pointer-arith",
927                 "-DSOABI=\"cpython-38android-x86_64-darwin\"",
928             ],
929             suffix: ".cpython-38android-x86_64-darwin",
930         },
931         linux_bionic: {
932             // NB linux_bionic is a 'host' architecture but it uses the bionic libc like 'android'
933             // targets so use the android pyconfig.
934             include_dirs: ["external/python/cpython3/android/bionic/pyconfig"],
935             cflags: ["-DSOABI=\"cpython-38android-x86_64-linux-bionic\""],
936             suffix: ".cpython-38android-x86_64-linux-bionic",
937         },
938         linux_glibc_x86: {
939             enabled: false,
940         },
941         linux_glibc_x86_64: {
942             include_dirs: ["external/python/cpython3/android/linux_x86_64/pyconfig"],
943             cflags: ["-DSOABI=\"cpython-38android-x86_64-linux-gnu\""],
944             // Commenting out the Linux suffix so that cpython-38-x86_64-linux-gnu
945             // Python 3.8 can also import the untagged .so library per PEP 3149
946             // Keep this change until Android py3-cmd can run ACTS, gRPC and can
947             // Export Python native symbols such as PyType_Type
948             // suffix: ".cpython-38android-x86_64-linux-gnu",
949         },
950         windows: {
951             enabled: false,
952         },
953     },
954     allow_undefined_symbols: true,
955 }
956
957 cc_library_host_shared {
958     name: "bluetooth_packets_python3",
959     defaults: [
960         "gd_defaults",
961         "bluetooth_py3_native_extension_defaults",
962     ],
963     srcs: [
964         "common/strings.cc",
965         "packet/python3_module.cc",
966         "l2cap/fcs.cc",
967         ":BluetoothPacketSources",
968         "hci/address.cc",
969         "hci/class_of_device.cc",
970
971     ],
972     generated_headers: [
973         "BluetoothGeneratedPackets_h",
974     ],
975     generated_sources: [
976         "BluetoothGeneratedPackets_python3_cc",
977     ],
978     header_libs: [
979         "pybind11_headers",
980     ],
981     cflags: [
982         "-fexceptions",
983     ],
984     rtti: true,
985 }
986
987 rust_protobuf {
988     name: "libbt_facade_proto",
989     crate_name: "bt_facade_proto",
990     protos: ["facade/common.proto"],
991     grpc_protos: [
992         "hci/facade/controller_facade.proto",
993         "hci/facade/hci_facade.proto",
994         "hal/hal_facade.proto",
995         "facade/rootservice.proto",
996     ],
997     source_stem: "facade",
998     host_supported: true,
999 }