| // simulation library for testing virtual devices |
| package { |
| // See: http://go/android-license-faq |
| // A large-scale-change added 'default_applicable_licenses' to import |
| // all of the 'license_kinds' from "system_bt_license" |
| // to get the below license kinds: |
| // SPDX-license-identifier-Apache-2.0 |
| default_applicable_licenses: ["system_bt_license"], |
| default_visibility: [ |
| "//device:__subpackages__", |
| "//packages/modules/Bluetooth:__subpackages__", |
| "//tools/netsim:__subpackages__", |
| ], |
| } |
| |
| cc_defaults { |
| name: "rootcanal_defaults", |
| tidy: true, |
| tidy_checks: [ |
| "-*", |
| "readability-*", |
| |
| "-readability-function-size", |
| "-readability-identifier-length", |
| "-readability-implicit-bool-conversion", |
| "-readability-magic-numbers", |
| "-readability-use-anyofallof", |
| ], |
| tidy_checks_as_errors: [ |
| "readability-*", |
| ], |
| tidy_flags: [ |
| "--header-filter=^.*tools\\/rootcanal\\/(model|include|net|desktop)\\/(.(?!\\.pb\\.h))*$", |
| ], |
| sanitize: { |
| address: true, |
| all_undefined: true, |
| misc_undefined: ["bounds"], |
| }, |
| c_std: "c99", |
| cpp_std: "c++20", |
| cflags: [ |
| "-DGOOGLE_PROTOBUF_NO_RTTI", |
| "-Wall", |
| "-Werror", |
| "-Wextra", |
| "-fvisibility=hidden", |
| ], |
| include_dirs: [ |
| "packages/modules/Bluetooth/tools/rootcanal/include", |
| ], |
| header_libs: [ |
| "libbase_headers", |
| "pdl_cxx_packet_runtime", |
| ], |
| generated_headers: [ |
| "rootcanal_bredr_bb_packets_cxx_gen", |
| "rootcanal_hci_packets_cxx_gen", |
| "rootcanal_link_layer_packets_cxx_gen", |
| ], |
| } |
| |
| filegroup { |
| name: "lib_sources", |
| srcs: [ |
| "lib/crypto/crypto.cc", |
| "lib/hci/address.cc", |
| "lib/hci/pcap_filter.cc", |
| "lib/log.cc", |
| ], |
| } |
| |
| // This library should be added as `whole_static_libs` |
| // as it uses static registration and all object |
| // files needs to be linked |
| cc_library_static { |
| name: "libbt-rootcanal", |
| defaults: ["rootcanal_defaults"], |
| host_supported: true, |
| proprietary: true, |
| srcs: [ |
| ":lib_sources", |
| "model/controller/acl_connection.cc", |
| "model/controller/acl_connection_handler.cc", |
| "model/controller/controller_properties.cc", |
| "model/controller/dual_mode_controller.cc", |
| "model/controller/le_advertiser.cc", |
| "model/controller/link_layer_controller.cc", |
| "model/controller/sco_connection.cc", |
| "model/controller/vendor_commands/le_apcf.cc", |
| "model/devices/baseband_sniffer.cc", |
| "model/devices/beacon.cc", |
| "model/devices/beacon_swarm.cc", |
| "model/devices/device.cc", |
| "model/devices/hci_device.cc", |
| "model/devices/link_layer_socket_device.cc", |
| "model/devices/scripted_beacon.cc", |
| "model/devices/sniffer.cc", |
| "model/hci/h4_data_channel_packetizer.cc", |
| "model/hci/h4_parser.cc", |
| "model/hci/hci_sniffer.cc", |
| "model/hci/hci_socket_transport.cc", |
| "model/setup/async_manager.cc", |
| "model/setup/device_boutique.cc", |
| "model/setup/phy_device.cc", |
| "model/setup/phy_layer.cc", |
| "model/setup/test_channel_transport.cc", |
| "model/setup/test_command_handler.cc", |
| "model/setup/test_model.cc", |
| "net/posix/posix_async_socket.cc", |
| "net/posix/posix_async_socket_connector.cc", |
| "net/posix/posix_async_socket_server.cc", |
| ], |
| export_header_lib_headers: [ |
| "pdl_cxx_packet_runtime", |
| ], |
| export_include_dirs: [ |
| ".", |
| "include", |
| ], |
| export_generated_headers: [ |
| "rootcanal_hci_packets_cxx_gen", |
| "rootcanal_link_layer_packets_cxx_gen", |
| ], |
| export_static_lib_headers: [ |
| "librootcanal_config", |
| ], |
| whole_static_libs: [ |
| "librootcanal_config", |
| "librootcanal_rs", |
| ], |
| shared_libs: [ |
| "libbase", |
| "libcrypto", |
| ], |
| static_libs: [ |
| "libscriptedbeaconpayload-protos-lite", |
| ], |
| } |
| |
| // This library implements a foreigh function interface over DualModeController |
| // compatible with Python or Rust. |
| cc_library_host_shared { |
| name: "lib_rootcanal_ffi", |
| defaults: [ |
| "rootcanal_defaults", |
| ], |
| sanitize: { |
| address: false, |
| }, |
| srcs: [ |
| ":lib_sources", |
| "model/controller/acl_connection.cc", |
| "model/controller/acl_connection_handler.cc", |
| "model/controller/controller_properties.cc", |
| "model/controller/dual_mode_controller.cc", |
| "model/controller/ffi.cc", |
| "model/controller/le_advertiser.cc", |
| "model/controller/link_layer_controller.cc", |
| "model/controller/sco_connection.cc", |
| "model/controller/vendor_commands/le_apcf.cc", |
| "model/devices/device.cc", |
| "model/setup/async_manager.cc", |
| ], |
| export_include_dirs: [ |
| ".", |
| "include", |
| ], |
| stl: "libc++_static", |
| static_libs: [ |
| "libcrypto", |
| "libprotobuf-cpp-full", |
| "librootcanal_config", |
| ], |
| whole_static_libs: [ |
| "libbase", |
| "liblog", |
| "librootcanal_rs", |
| ], |
| cflags: [ |
| "-fexceptions", |
| ], |
| } |
| |
| // Generate the python parser+serializer backend for |
| // packets/link_layer_packets.pdl. |
| genrule { |
| name: "link_layer_packets_python3_gen", |
| defaults: ["pdl_python_generator_defaults"], |
| cmd: "$(location :pdlc) $(in) |" + |
| " $(location :pdl_python_generator)" + |
| " --output $(out) --custom-type-location py.bluetooth", |
| srcs: [ |
| "packets/link_layer_packets.pdl", |
| ], |
| out: [ |
| "link_layer_packets.py", |
| ], |
| } |
| |
| // Generate the python parser+serializer backend for |
| // rust/llcp_packets.pdl. |
| genrule { |
| name: "llcp_packets_python3_gen", |
| defaults: ["pdl_python_generator_defaults"], |
| cmd: "$(location :pdlc) $(in) |" + |
| " $(location :pdl_python_generator)" + |
| " --output $(out) --custom-type-location py.bluetooth", |
| srcs: [ |
| "rust/llcp_packets.pdl", |
| ], |
| out: [ |
| "llcp_packets.py", |
| ], |
| } |
| |
| // Generate the python parser+serializer backend for |
| // hci_packets.pdl. |
| genrule { |
| name: "hci_packets_python3_gen", |
| defaults: ["pdl_python_generator_defaults"], |
| cmd: "$(location :pdlc) $(in) |" + |
| " $(location :pdl_python_generator)" + |
| " --output $(out) --custom-type-location py.bluetooth", |
| srcs: [ |
| "packets/hci_packets.pdl", |
| ], |
| out: [ |
| "hci_packets.py", |
| ], |
| } |
| |
| cc_library_static { |
| name: "libscriptedbeaconpayload-protos-lite", |
| host_supported: true, |
| proprietary: true, |
| proto: { |
| export_proto_headers: true, |
| type: "lite", |
| }, |
| srcs: ["model/devices/scripted_beacon_ble_payload.proto"], |
| } |
| |
| cc_test_host { |
| name: "rootcanal_hci_test", |
| defaults: [ |
| "rootcanal_defaults", |
| ], |
| srcs: [ |
| "test/controller/le/le_add_device_to_filter_accept_list_test.cc", |
| "test/controller/le/le_add_device_to_periodic_advertiser_list_test.cc", |
| "test/controller/le/le_add_device_to_resolving_list_test.cc", |
| "test/controller/le/le_clear_filter_accept_list_test.cc", |
| "test/controller/le/le_clear_periodic_advertiser_list_test.cc", |
| "test/controller/le/le_clear_resolving_list_test.cc", |
| "test/controller/le/le_create_connection_cancel_test.cc", |
| "test/controller/le/le_create_connection_test.cc", |
| "test/controller/le/le_extended_create_connection_test.cc", |
| "test/controller/le/le_periodic_advertising_create_sync_cancel_test.cc", |
| "test/controller/le/le_periodic_advertising_create_sync_test.cc", |
| "test/controller/le/le_remove_device_from_filter_accept_list_test.cc", |
| "test/controller/le/le_remove_device_from_periodic_advertiser_list_test.cc", |
| "test/controller/le/le_remove_device_from_resolving_list_test.cc", |
| "test/controller/le/le_scanning_filter_duplicates_test.cc", |
| "test/controller/le/le_set_address_resolution_enable_test.cc", |
| "test/controller/le/le_set_advertising_enable_test.cc", |
| "test/controller/le/le_set_advertising_parameters_test.cc", |
| "test/controller/le/le_set_extended_advertising_data_test.cc", |
| "test/controller/le/le_set_extended_advertising_enable_test.cc", |
| "test/controller/le/le_set_extended_advertising_parameters_test.cc", |
| "test/controller/le/le_set_extended_scan_enable_test.cc", |
| "test/controller/le/le_set_extended_scan_parameters_test.cc", |
| "test/controller/le/le_set_extended_scan_response_data_test.cc", |
| "test/controller/le/le_set_periodic_advertising_data_test.cc", |
| "test/controller/le/le_set_periodic_advertising_enable_test.cc", |
| "test/controller/le/le_set_periodic_advertising_parameters_test.cc", |
| "test/controller/le/le_set_random_address_test.cc", |
| "test/controller/le/le_set_scan_enable_test.cc", |
| "test/controller/le/le_set_scan_parameters_test.cc", |
| "test/controller/le/rpa_generation_test.cc", |
| ], |
| header_libs: [ |
| "libbluetooth_headers", |
| ], |
| local_include_dirs: [ |
| ".", |
| ], |
| shared_libs: [ |
| "libbase", |
| "libcrypto", |
| "libprotobuf-cpp-full", |
| ], |
| static_libs: [ |
| "libbt-rootcanal", |
| ], |
| } |
| |
| // Implement the Bluetooth official LL test suite for root-canal. |
| python_test_host { |
| name: "rootcanal_ll_test", |
| main: "test/main.py", |
| srcs: [ |
| ":hci_packets_python3_gen", |
| ":link_layer_packets_python3_gen", |
| ":llcp_packets_python3_gen", |
| "py/bluetooth.py", |
| "py/controller.py", |
| "test/LL/*.py", |
| "test/LL/CIS/CEN/*.py", |
| "test/LL/CIS/PER/*.py", |
| "test/LL/CON_/CEN/*.py", |
| "test/LL/CON_/INI/*.py", |
| "test/LL/CON_/PER/*.py", |
| "test/LL/DDI/ADV/*.py", |
| "test/LL/DDI/SCN/*.py", |
| "test/LL/SEC/ADV/*.py", |
| "test/LMP/*.py", |
| "test/LMP/LIH/*.py", |
| "test/main.py", |
| ], |
| data: [ |
| ":lib_rootcanal_ffi", |
| ], |
| libs: [ |
| "typing_extensions", |
| ], |
| test_options: { |
| unit_test: true, |
| }, |
| version: { |
| py3: { |
| embedded_launcher: true, |
| }, |
| }, |
| } |
| |
| // test-vendor unit tests for host |
| cc_test_host { |
| name: "rootcanal_test_host", |
| defaults: [ |
| "bluetooth_cflags", |
| ], |
| // TODO(b/231993739): Reenable isolated:true by deleting the explicit disable below |
| isolated: false, |
| srcs: [ |
| "test/async_manager_unittest.cc", |
| "test/h4_parser_unittest.cc", |
| "test/pcap_filter_unittest.cc", |
| "test/posix_socket_unittest.cc", |
| ], |
| header_libs: [ |
| "libbluetooth_headers", |
| ], |
| local_include_dirs: [ |
| "include", |
| ], |
| shared_libs: [ |
| "libbase", |
| ], |
| static_libs: [ |
| "libbt-rootcanal", |
| ], |
| cflags: [ |
| "-fvisibility=hidden", |
| ], |
| target: { |
| darwin: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| // Linux RootCanal Executable |
| cc_binary_host { |
| name: "root-canal", |
| defaults: ["rootcanal_defaults"], |
| srcs: [ |
| "desktop/root_canal_main.cc", |
| "desktop/test_environment.cc", |
| ], |
| header_libs: [ |
| "libbluetooth_headers", |
| ], |
| shared_libs: [ |
| "libbase", |
| "libunwindstack", |
| ], |
| whole_static_libs: [ |
| "libbt-rootcanal", |
| ], |
| static_libs: [ |
| "breakpad_client", |
| "libc++fs", |
| "libcrypto", |
| "libgflags", |
| "libprotobuf-cpp-full", |
| "libscriptedbeaconpayload-protos-lite", |
| ], |
| target: { |
| // TODO(b/181290178) remove it when sanitize option is supported by linux_bionic as well |
| linux_bionic: { |
| sanitize: { |
| address: false, |
| cfi: false, |
| all_undefined: false, |
| }, |
| }, |
| darwin: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| genrule { |
| name: "rootcanal_hci_packets_cxx_gen", |
| tools: [ |
| ":pdl_cxx_generator", |
| ":pdlc", |
| ], |
| cmd: "set -o pipefail;" + |
| " $(location :pdlc) $(in) |" + |
| " $(location :pdl_cxx_generator)" + |
| " --namespace bluetooth::hci" + |
| " --include-header hci/address.h" + |
| " --output $(out)", |
| srcs: [ |
| "packets/hci_packets.pdl", |
| ], |
| out: [ |
| "packets/hci_packets.h", |
| ], |
| } |
| |
| genrule { |
| name: "rootcanal_link_layer_packets_cxx_gen", |
| tools: [ |
| ":pdl_cxx_generator", |
| ":pdlc", |
| ], |
| cmd: "set -o pipefail;" + |
| " $(location :pdlc) $(in) |" + |
| " $(location :pdl_cxx_generator)" + |
| " --namespace model::packets" + |
| " --include-header hci/address.h" + |
| " --using-namespace bluetooth::hci" + |
| " --output $(out)", |
| srcs: [ |
| "packets/link_layer_packets.pdl", |
| ], |
| out: [ |
| "packets/link_layer_packets.h", |
| ], |
| } |
| |
| genrule { |
| name: "rootcanal_link_layer_packets_rust_gen", |
| defaults: ["pdl_rust_generator_defaults"], |
| srcs: ["packets/link_layer_packets.pdl"], |
| out: ["link_layer_packets.rs"], |
| } |
| |
| genrule { |
| name: "rootcanal_bredr_bb_packets_cxx_gen", |
| tools: [ |
| ":pdl_cxx_generator", |
| ":pdlc", |
| ], |
| cmd: "set -o pipefail;" + |
| " $(location :pdlc) $(in) |" + |
| " $(location :pdl_cxx_generator)" + |
| " --namespace bredr_bb" + |
| " --include-header hci/address.h" + |
| " --using-namespace bluetooth::hci" + |
| " --output $(out)", |
| srcs: [ |
| "packets/bredr_bb.pdl", |
| ], |
| out: [ |
| "bredr_bb.h", |
| ], |
| } |
| |
| genrule { |
| name: "rootcanal_hci_packets_rust_gen", |
| defaults: ["pdl_rust_generator_defaults"], |
| srcs: ["packets/hci_packets.pdl"], |
| out: ["hci_packets.rs"], |
| } |