diff options
-rw-r--r-- | BUILD.gn | 3 | ||||
-rw-r--r-- | Cargo.toml | 48 | ||||
-rw-r--r-- | system/gd/rust/facade/Cargo.toml | 15 | ||||
-rw-r--r-- | system/gd/rust/facade/helpers/Cargo.toml | 38 | ||||
-rw-r--r-- | system/gd/rust/hal/Cargo.toml | 2 | ||||
-rw-r--r-- | system/gd/rust/hci/Cargo.toml | 2 | ||||
-rw-r--r-- | system/gd/rust/linux/adapter/Cargo.toml | 31 | ||||
-rw-r--r-- | system/gd/rust/linux/adapter/build.rs | 25 | ||||
-rw-r--r-- | system/gd/rust/linux/adapter/src/main.rs | 5 | ||||
-rw-r--r-- | system/gd/rust/linux/mgmt/Cargo.toml | 24 | ||||
-rw-r--r-- | system/gd/rust/linux/mgmt/src/main.rs | 3 | ||||
-rw-r--r-- | system/gd/rust/shim/Cargo.toml | 56 | ||||
-rw-r--r-- | system/main/BUILD.gn | 24 | ||||
-rw-r--r-- | system/service/BUILD.gn | 6 |
14 files changed, 230 insertions, 52 deletions
@@ -32,7 +32,8 @@ group("all") { group("bluetooth") { deps = [ "//bt/main:bluetooth", - "//bt/service:bluetoothtbd", + "//bt/main:bluetooth-static", + #"//bt/service:bluetoothtbd", ] } diff --git a/Cargo.toml b/Cargo.toml index 2b60ccb125..ac01a99133 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,46 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -[package] -name = "bt_shim_ffi" -version = "0.0.1" -edition = "2018" +[workspace] -[dependencies] -# BT dependencies -bt_common = { path = "gd/rust/common" } -bt_facade_helpers = { path = "gd/rust/facade" } -bt_hal = { path = "gd/rust/hal" } -bt_hci = { path = "gd/rust/hci" } -bt_main = { path = "gd/rust/main" } -bt_packets = { path = "gd/rust/packets" } - -# All external dependencies. Keep all versions at build/rust/Cargo.toml -bindgen = "0.51" -bytes = "1.0" -cxx = { version = "0.5.9", features = ["c++17"] } -env_logger = "0.8" -futures = "0.3" -grpcio = { version = "0.7", features = ["protobuf", "protobuf-codec", "openssl"] } -grpcio-sys = { version = "*", features = ["openssl"] } -lazy_static = "1.4" -log = "0.4" -nix = "0.19" -num-derive = "0.3" -num-traits = "0.2" -paste = "1.0" -proc-macro2 = "1.0.24" -protobuf = "2.0" -protoc-grpcio = "2.0" -protoc-rust = "2.0" -quote = "1.0.8" -thiserror = "1.0" -syn = { version = "1.0.58", features = ['default', 'full'] } -tokio = { version = "1.0", features = ['bytes', 'fs', 'io-util', 'libc', 'macros', 'memchr', 'mio', 'net', 'num_cpus', 'rt', 'rt-multi-thread', 'sync', 'time', 'tokio-macros'] } -tokio-stream = "0.1" -walkdir = "2.2" - - -[lib] -path = "gd/rust/shim/src/lib.rs" -crate-type = ["staticlib"] +members = [ + "gd/rust/shim", + "gd/rust/linux/mgmt", + "gd/rust/linux/adapter", +] diff --git a/system/gd/rust/facade/Cargo.toml b/system/gd/rust/facade/Cargo.toml index ee8f2adcf1..6758875503 100644 --- a/system/gd/rust/facade/Cargo.toml +++ b/system/gd/rust/facade/Cargo.toml @@ -14,7 +14,7 @@ # limitations under the License. [package] -name = "bt_facade_helpers" +name = "bluetooth_with_facades" version = "0.0.1" edition = "2018" @@ -32,6 +32,17 @@ log = "*" protobuf = "*" tokio = "*" +# Binary-only deps +clap = "*" +lazy_static = "*" +nix = "*" +bt_common = { path = "../common" } + + +[[bin]] +name = "bluetooth_with_facades" +path = "src/main.rs" + [lib] -path = "helpers/lib.rs" +path = "src/lib.rs" crate-type = ["rlib"] diff --git a/system/gd/rust/facade/helpers/Cargo.toml b/system/gd/rust/facade/helpers/Cargo.toml new file mode 100644 index 0000000000..ceaa0f4bdc --- /dev/null +++ b/system/gd/rust/facade/helpers/Cargo.toml @@ -0,0 +1,38 @@ +# +# Copyright 2021 Google, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[package] +name = "bt_facade_helpers" +version = "0.0.1" +edition = "2018" + +[dependencies] +# GD bluetooth deps +bt_facade_proto = { path = "../../facade_proto" } +bt_packets = { path = "../../packets" } + +# External deps +bytes = "*" +cxx = "*" +futures = "*" +grpcio = "*" +log = "*" +protobuf = "*" +tokio = "*" + +[lib] +path = "lib.rs" +crate-type = ["rlib"] + diff --git a/system/gd/rust/hal/Cargo.toml b/system/gd/rust/hal/Cargo.toml index 9963e7ae0d..fe909e83d6 100644 --- a/system/gd/rust/hal/Cargo.toml +++ b/system/gd/rust/hal/Cargo.toml @@ -21,7 +21,7 @@ edition = "2018" [dependencies] # BT dependencies bt_common = { path = "../common" } -bt_facade_helpers = { path = "../facade" } +bt_facade_helpers = { path = "../facade/helpers" } bt_facade_proto = { path = "../facade_proto" } bt_packets = { path = "../packets" } gddi = { path = "../gddi" } diff --git a/system/gd/rust/hci/Cargo.toml b/system/gd/rust/hci/Cargo.toml index 14ccc92d53..48e08a91b0 100644 --- a/system/gd/rust/hci/Cargo.toml +++ b/system/gd/rust/hci/Cargo.toml @@ -23,7 +23,7 @@ edition = "2018" bt_common = { path = "../common" } bt_hci_custom_types = { path = "custom_types" } bt_hal = { path = "../hal" } -bt_facade_helpers = { path = "../facade" } +bt_facade_helpers = { path = "../facade/helpers" } bt_facade_proto = { path = "../facade_proto" } bt_packets = { path = "../packets" } gddi = { path = "../gddi" } diff --git a/system/gd/rust/linux/adapter/Cargo.toml b/system/gd/rust/linux/adapter/Cargo.toml new file mode 100644 index 0000000000..477b8b3bab --- /dev/null +++ b/system/gd/rust/linux/adapter/Cargo.toml @@ -0,0 +1,31 @@ +# +# Copyright 2021 Google, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[package] +name = "bluetooth" +version = "0.0.1" +edition = "2018" + +[dependencies] +# BT dependencies +bt_shim = { path = "../../shim" } + +[build-dependencies] +pkg-config = "0.3" + +[[bin]] +name = "bluetoothd" +path = "src/main.rs" + diff --git a/system/gd/rust/linux/adapter/build.rs b/system/gd/rust/linux/adapter/build.rs new file mode 100644 index 0000000000..1c58ead434 --- /dev/null +++ b/system/gd/rust/linux/adapter/build.rs @@ -0,0 +1,25 @@ +use pkg_config::Config; + +fn main() { + // The main linking point with c++ code is the libbluetooth-static.a + // These includes all the symbols built via C++ but doesn't include other + // links (i.e. pkg-config) + println!("cargo:rustc-link-lib=static=bluetooth-static"); + + // A few dynamic links + println!("cargo:rustc-link-lib=dylib=flatbuffers"); + println!("cargo:rustc-link-lib=dylib=protobuf"); + println!("cargo:rustc-link-lib=dylib=resolv"); + + // Clang requires -lc++ instead of -lstdc++ + println!("cargo:rustc-link-lib=c++"); + + // A few more dependencies from pkg-config. These aren't included as part of + // the libbluetooth-static.a + Config::new().probe("libchrome").unwrap(); + Config::new().probe("libmodp_b64").unwrap(); + Config::new().probe("tinyxml2").unwrap(); + + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=libbluetooth-static.a"); +} diff --git a/system/gd/rust/linux/adapter/src/main.rs b/system/gd/rust/linux/adapter/src/main.rs new file mode 100644 index 0000000000..96f6a62254 --- /dev/null +++ b/system/gd/rust/linux/adapter/src/main.rs @@ -0,0 +1,5 @@ +extern crate bt_shim; + +fn main() { + println!("Bluetooth Adapter Daemon"); +} diff --git a/system/gd/rust/linux/mgmt/Cargo.toml b/system/gd/rust/linux/mgmt/Cargo.toml new file mode 100644 index 0000000000..9ba7a800fa --- /dev/null +++ b/system/gd/rust/linux/mgmt/Cargo.toml @@ -0,0 +1,24 @@ +# +# Copyright 2021 Google, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[package] +name = "btmgmt" +version = "0.0.1" +edition = "2018" + +[[bin]] +name = "btmgmtd" +path = "src/main.rs" + diff --git a/system/gd/rust/linux/mgmt/src/main.rs b/system/gd/rust/linux/mgmt/src/main.rs new file mode 100644 index 0000000000..aa198f8880 --- /dev/null +++ b/system/gd/rust/linux/mgmt/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Bluetooth Management Daemon"); +} diff --git a/system/gd/rust/shim/Cargo.toml b/system/gd/rust/shim/Cargo.toml new file mode 100644 index 0000000000..b0e082b1b5 --- /dev/null +++ b/system/gd/rust/shim/Cargo.toml @@ -0,0 +1,56 @@ +# +# Copyright 2021 Google, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[package] +name = "bt_shim" +version = "0.0.1" +edition = "2018" + +[dependencies] +# BT dependencies +bt_common = { path = "../common" } +bt_facade_helpers = { path = "../facade/helpers" } +bt_hal = { path = "../hal" } +bt_hci = { path = "../hci" } +bt_main = { path = "../main" } +bt_packets = { path = "../packets" } + +# All external dependencies. Keep all versions at build/rust/Cargo.toml +bindgen = "0.51" +bytes = "1.0" +cxx = { version = "1.0.42", features = ["c++17"] } +env_logger = "0.8" +futures = "0.3" +grpcio = { version = "0.7", features = ["protobuf", "protobuf-codec", "openssl"] } +grpcio-sys = { version = "*", features = ["openssl"] } +lazy_static = "1.4" +log = "0.4" +nix = "0.19" +num-derive = "0.3" +num-traits = "0.2" +paste = "1.0" +proc-macro2 = "1.0.24" +protobuf = "2.0" +protoc-grpcio = "2.0" +protoc-rust = "2.0" +quote = "1.0.8" +thiserror = "1.0" +syn = { version = "1.0.58", features = ['default', 'full'] } +tokio = { version = "1.0", features = ['bytes', 'fs', 'io-util', 'libc', 'macros', 'memchr', 'mio', 'net', 'num_cpus', 'rt', 'rt-multi-thread', 'sync', 'time', 'tokio-macros'] } +tokio-stream = "0.1" +walkdir = "2.2" + +[lib] +path = "src/lib.rs" diff --git a/system/main/BUILD.gn b/system/main/BUILD.gn index b4112111e0..9604f597be 100644 --- a/system/main/BUILD.gn +++ b/system/main/BUILD.gn @@ -18,6 +18,24 @@ config("libbluetooth_config") { include_dirs = [ "../include" ] } +# Complete static library for linking with Rust +static_library("bluetooth-static") { + complete_static_lib = true + + sources = [ + "//bt/service/hal/bluetooth_interface.cc", + "//bt/service/logging_helpers.cc", + ] + + configs += [ + "//bt:target_defaults" + ] + + deps = [ + ":bluetooth", + ] +} + # Configure libbluetooth as either dynamic or static library if (defined(use.bt_dynlib) && use.bt_dynlib) { lib_type = "shared_library" @@ -26,11 +44,9 @@ if (defined(use.bt_dynlib) && use.bt_dynlib) { } target(lib_type, "bluetooth") { - # HAL layer - sources = [ "//bt/btif/src/bluetooth.cc" ] - # platform specific - sources += [ + # Platform specific + sources = [ "bte_conf.cc", "bte_init_cpp_logging.cc", "bte_logmsg.cc", diff --git a/system/service/BUILD.gn b/system/service/BUILD.gn index 64d0844225..83f92d3487 100644 --- a/system/service/BUILD.gn +++ b/system/service/BUILD.gn @@ -76,7 +76,7 @@ source_set("service_linux_src") { configs += [ ":service_config" ] } -source_set("service") { +static_library("service") { sources = [ "common/bluetooth/a2dp_codec_config.cc", "common/bluetooth/adapter_state.cc", @@ -125,6 +125,10 @@ executable("bluetoothtbd") { "ssl", "crypto", ] + + lib_dirs = [ + "${root_out_dir}/rust" + ] } if (use.test) { |