},
static_libs: [
"libbluetooth_gd",
+ "libbluetooth_rust_interop",
+ "libbt_shim_ffi",
+ "libcxxbridge05",
],
target: {
darwin: {
enabled: false,
},
},
- generated_headers: [
- "libbt_common_bridge_header",
- ],
}
// Enables code coverage for a set of source files. Must be combined with
name: "gd_clang_tidy",
tidy: true,
tidy_checks: [
- "cppcoreguidelines-pro-type-member-init",
"clang-analyzer-core.CallAndMessage",
"clang-analyzer-optin.cplusplus.UninitializedObject",
"-google*",
"BluetoothGeneratedDumpsysDataSchema_h",
"BluetoothGeneratedDumpsysBundledSchema_h",
"BluetoothGeneratedPackets_h",
- "libbt_common_bridge_header",
],
shared_libs: [
"libchrome",
static_libs: [
"libbluetooth-protos",
"libbluetooth_rust_interop",
- "libbt_common_ffi",
+ "libbt_shim_ffi",
"libcxxbridge05",
],
-}
-
-cc_library_static {
- name: "libbluetooth_rust_interop",
- generated_headers: ["libbt_common_bridge_header"],
- generated_sources: ["libbt_common_bridge_code"],
- cflags: [
- "-Wno-unused-const-variable",
- ],
- host_supported: true,
- apex_available: [
- "//apex_available:platform",
- "com.android.bluetooth.updatable",
- ],
- static_libs: [
- "libbt_common_ffi",
- ],
+ export_static_lib_headers: [ "libbluetooth_rust_interop" ],
}
cc_library {
"libbluetooth-protos",
"libbluetooth_gd",
"libflatbuffers-cpp",
+ "libbluetooth_rust_interop",
+ "libbt_shim_ffi",
+ "libcxxbridge05",
],
shared_libs: [
"libbacktrace",
"libc++fs",
"libflatbuffers-cpp",
"libgmock",
+ "libbluetooth_rust_interop",
+ "libbt_shim_ffi",
+ "libcxxbridge05",
],
shared_libs: [
"libchrome",
address: true,
cfi: true,
},
+ static_libs: [
+ "libbluetooth_rust_interop",
+ "libbt_shim_ffi",
+ "libcxxbridge05",
+ ],
}
cc_defaults {
"libchrome",
"libgmock",
"libgtest",
+ "libbluetooth_rust_interop",
+ "libbt_shim_ffi",
+ "libcxxbridge05",
],
host_supported: true,
generated_headers: [
-rust_defaults {
- name: "libbt_common_defaults",
- stem: "libbt_common",
+rust_library {
+ name: "libbt_common",
crate_name: "bt_common",
srcs: ["src/lib.rs"],
edition: "2018",
host_supported: true,
}
-rust_library {
- name: "libbt_common",
- defaults: ["libbt_common_defaults"],
-}
-
-rust_ffi_static {
- name: "libbt_common_ffi",
- defaults: ["libbt_common_defaults"],
-}
-
rust_test_host {
name: "libbt_common_inline_tests",
srcs: ["src/lib.rs"],
"libenv_logger",
"libcxx",
],
+ proc_macros: [
+ "libpaste",
+ ],
}
-
-genrule {
- name: "libbt_common_bridge_header",
- tools: ["cxxbridge"],
- cmd: "$(location cxxbridge) $(in) --header > $(out)",
- srcs: ["src/init_flags.rs"],
- out: ["src/init_flags.rs.h"],
-}
-
-genrule {
- name: "libbt_common_bridge_code",
- tools: ["cxxbridge"],
- cmd: "$(location cxxbridge) $(in) >> $(out)",
- srcs: ["src/init_flags.rs"],
- out: ["init_flags.cc"],
-}
-
-
use paste::paste;
use std::sync::Mutex;
-#[cxx::bridge(namespace = bluetooth::common::init_flags)]
-mod ffi {
- extern "Rust" {
- fn load(flags: Vec<String>);
- fn set_all_for_testing();
-
- fn gd_core_is_enabled() -> bool;
- fn gd_security_is_enabled() -> bool;
- fn gd_advertising_is_enabled() -> bool;
- fn gd_acl_is_enabled() -> bool;
- fn gd_l2cap_is_enabled() -> bool;
- fn gd_hci_is_enabled() -> bool;
- fn gd_controller_is_enabled() -> bool;
- fn gatt_robust_caching_is_enabled() -> bool;
- fn btaa_hci_is_enabled() -> bool;
- }
-}
-
macro_rules! init_flags {
(flags: { $($flag:ident),* }, dependencies: { $($parent:ident => $child:ident),* }) => {
#[derive(Default)]
$($flag: bool,)*
}
+ /// Sets all flags to true, for testing
pub fn set_all_for_testing() {
*FLAGS.lock().unwrap() = InitFlags { $($flag: true,)* };
}
paste! {
$(
+ #[allow(missing_docs)]
pub fn [<$flag _is_enabled>]() -> bool {
FLAGS.lock().unwrap().$flag
}
gd_hci,
gd_controller,
gatt_robust_caching,
- btaa_hci
+ btaa_hci,
+ gd_rust
},
dependencies: {
gd_core => gd_security,
static ref FLAGS: Mutex<InitFlags> = Mutex::new(InitFlags::default());
}
-fn load(flags: Vec<String>) {
+/// Loads the flag values from the passed-in vector of string values
+pub fn load(flags: Vec<String>) {
crate::init_logging();
let flags = InitFlags::parse(flags);
flags.log();
*FLAGS.lock().unwrap() = flags;
}
-
-
#[macro_use]
mod asserts;
-mod init_flags;
+/// Provides runtime configured-at-startup flags
+pub mod init_flags;
/// Inits logging for Android
#[cfg(target_os = "android")]
env_logger::Builder::new()
.filter(None, log::LevelFilter::Debug)
.parse_default_env()
- .init();
+ .try_init()
+ .ok();
}
--- /dev/null
+rust_ffi_static {
+ name: "libbt_shim_ffi",
+ crate_name: "bt_shim",
+ srcs: ["src/lib.rs"],
+ rustlibs: [
+ "libbt_hal",
+ "libbt_hci",
+ "libbt_common",
+ "libcxx",
+ ],
+ host_supported: true,
+}
+
+cc_library_static {
+ name: "libbluetooth_rust_interop",
+ generated_headers: ["libbt_init_flags_bridge_header", "libbt_shim_bridge_header"],
+ generated_sources: ["libbt_init_flags_bridge_code", "libbt_shim_bridge_code"],
+ export_generated_headers: ["libbt_init_flags_bridge_header", "libbt_shim_bridge_header"],
+ cflags: [
+ "-Wno-unused-const-variable",
+ ],
+ host_supported: true,
+ apex_available: [
+ "//apex_available:platform",
+ "com.android.bluetooth.updatable",
+ ],
+ static_libs: [
+ "libbt_shim_ffi",
+ ],
+}
+
+genrule {
+ name: "libbt_shim_bridge_header",
+ tools: ["cxxbridge"],
+ cmd: "$(location cxxbridge) $(in) --header > $(out)",
+ srcs: ["src/stack.rs"],
+ out: ["src/stack.rs.h"],
+}
+
+genrule {
+ name: "libbt_shim_bridge_code",
+ tools: ["cxxbridge"],
+ cmd: "$(location cxxbridge) $(in) >> $(out)",
+ srcs: ["src/stack.rs"],
+ out: ["stack.cc"],
+}
+
+genrule {
+ name: "libbt_init_flags_bridge_header",
+ tools: ["cxxbridge"],
+ cmd: "$(location cxxbridge) $(in) --header > $(out)",
+ srcs: ["src/init_flags.rs"],
+ out: ["src/init_flags.rs.h"],
+}
+
+genrule {
+ name: "libbt_init_flags_bridge_code",
+ tools: ["cxxbridge"],
+ cmd: "$(location cxxbridge) $(in) >> $(out)",
+ srcs: ["src/init_flags.rs"],
+ out: ["init_flags.cc"],
+}
+
+
--- /dev/null
+#[cxx::bridge(namespace = bluetooth::common::init_flags)]
+mod ffi {
+ extern "Rust" {
+ fn load(flags: Vec<String>);
+ fn set_all_for_testing();
+
+ fn gd_core_is_enabled() -> bool;
+ fn gd_security_is_enabled() -> bool;
+ fn gd_advertising_is_enabled() -> bool;
+ fn gd_acl_is_enabled() -> bool;
+ fn gd_l2cap_is_enabled() -> bool;
+ fn gd_hci_is_enabled() -> bool;
+ fn gd_controller_is_enabled() -> bool;
+ fn gatt_robust_caching_is_enabled() -> bool;
+ fn btaa_hci_is_enabled() -> bool;
+ fn gd_rust_is_enabled() -> bool;
+ }
+}
+
+use bt_common::init_flags::*;
--- /dev/null
+//! The main entry point for the legacy C++ code
+
+mod stack;
+mod init_flags;
--- /dev/null
+//! Stack management
+
+#[cxx::bridge(namespace = bluetooth::rust::stack)]
+mod ffi {
+ extern "Rust" {
+ fn start();
+ fn stop();
+ }
+}
+
+pub fn start() {
+}
+
+pub fn stop() {
+}
"libudrv-uipc",
"libbluetooth_gd", // Gabeldorsche
"libbluetooth_rust_interop",
- "libbt_common_ffi",
+ "libbt_shim_ffi",
"libcxxbridge05",
],
whole_static_libs: [
#include "main/shim/le_advertising_manager.h"
#include "main/shim/shim.h"
#include "main/shim/stack.h"
+#include "src/stack.rs.h"
namespace bluetooth {
namespace shim {
}
void Stack::StartEverything() {
+ if (common::init_flags::gd_rust_is_enabled()) {
+ rust::stack::start();
+ return;
+ }
+
std::lock_guard<std::recursive_mutex> lock(mutex_);
ASSERT_LOG(!is_running_, "%s Gd stack already running", __func__);
LOG_INFO("%s Starting Gd stack", __func__);
}
void Stack::Stop() {
+ if (common::init_flags::gd_rust_is_enabled()) {
+ rust::stack::stop();
+ return;
+ }
+
std::lock_guard<std::recursive_mutex> lock(mutex_);
if (!common::init_flags::gd_core_is_enabled()) {
bluetooth::shim::hci_on_shutting_down();
"libudrv-uipc",
"libbt-protos-lite",
"libbluetooth_gd",
+ "libcxxbridge05",
],
shared_libs: [
"libbinder",
"libprotobuf-cpp-lite",
"libudrv-uipc",
"libz",
+ "libbluetooth_rust_interop",
+ "libbt_shim_ffi",
+ "libcxxbridge05",
],
shared_libs: [
"android.hardware.bluetooth.a2dp@1.0",
generated_headers: [
"RootCanalGeneratedPackets_h",
"BluetoothGeneratedPackets_h",
+ "libbt_init_flags_bridge_header",
],
static_libs: [
"android.hardware.bluetooth-async",
generated_headers: [
"RootCanalGeneratedPackets_h",
"BluetoothGeneratedPackets_h",
+ "libbt_init_flags_bridge_header",
],
static_libs: [
"android.hardware.bluetooth-async",
generated_headers: [
"RootCanalGeneratedPackets_h",
"BluetoothGeneratedPackets_h",
+ "libbt_init_flags_bridge_header",
],
include_dirs: [
"system/bt",