1// Copyright 2022 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package { 16 default_visibility: [ 17 "//tools/netsim:__subpackages__", 18 "//device/google/cuttlefish/build:__subpackages__", 19 ], 20 default_applicable_licenses: ["tools_netsim_license"], 21} 22 23// Added automatically by a large-scale-change 24// See: http://go/android-license-faq 25license { 26 name: "tools_netsim_license", 27 visibility: [":__subpackages__"], 28 license_kinds: [ 29 "SPDX-license-identifier-Apache-2.0", 30 ], 31 license_text: [ 32 "LICENSE", 33 ], 34} 35 36cc_defaults { 37 name: "netsim_defaults", 38 cflags: [ 39 "-Wno-unused-parameter", 40 "-g", // Produce debugging information. 41 ], 42 ldflags: ["-rdynamic"], // Allow obtaining backtraces for debugging. 43 local_include_dirs: [ 44 "src", 45 ], 46 shared_libs: [ 47 "libgrpc++", 48 "libprotobuf-cpp-full", 49 ], 50 generated_headers: [ 51 "FrontendStub_h", 52 ], 53 generated_sources: [ 54 "FrontendStub_cc", 55 ], 56} 57 58rust_defaults { 59 name: "libnetsim_daemon_defaults", 60 features: ["cuttlefish"], 61 rlibs: [ 62 "libbytes", 63 "libclap", 64 "libcxx", 65 "libanyhow", 66 "libdata_encoding", 67 "libfutures", 68 "libfutures_channel", 69 "libfutures_executor", 70 "libfutures_util", 71 "libglam", 72 "libgrpcio", 73 "liblibc", 74 "libnetsim_proto", 75 "libhttp", 76 "libnetsim_common", 77 "libnetsim_packets", 78 "libpdl_runtime", 79 "libpica", 80 "libprotobuf", 81 "libprotobuf_json_mapping", 82 "librand", 83 "libregex", 84 "libthiserror", 85 "libtokio", 86 "libtokio_stream", 87 "libtungstenite", 88 "liblog_rust", 89 "libopenssl", 90 ], 91 static_libs: ["libgrpc_wrap"], 92 srcs: [ 93 "rust/daemon/src/lib.rs", 94 ], 95} 96 97rust_ffi_host_static { 98 name: "libnetsim_daemon", 99 crate_name: "netsim_daemon", 100 defaults: ["libnetsim_daemon_defaults"], 101} 102 103rust_test_host { 104 name: "libnetsim_daemon_tests", 105 defaults: ["libnetsim_daemon_defaults"], 106 test_suites: ["general_tests"], 107} 108 109genrule { 110 name: "netsim_daemon_cc", 111 tools: ["cxxbridge"], 112 cmd: "$(location cxxbridge) $(in) --cfg feature=\\\"cuttlefish\\\" >> $(out)", 113 srcs: ["rust/daemon/src/ffi.rs"], 114 out: ["netsim-daemon/src/ffi.rs.cc"], 115} 116 117genrule { 118 name: "netsim_daemon_h", 119 tools: ["cxxbridge"], 120 cmd: "$(location cxxbridge) $(in) --cfg feature=\\\"cuttlefish\\\" --header >> $(out)", 121 srcs: ["rust/daemon/src/ffi.rs"], 122 out: ["netsim-daemon/src/ffi.rs.h"], 123} 124 125genrule { 126 name: "netsim_cli_cc", 127 tools: ["cxxbridge"], 128 cmd: "$(location cxxbridge) $(in) >> $(out)", 129 srcs: ["rust/cli/src/ffi.rs"], 130 out: ["netsim-cli/src/ffi.rs.cc"], 131} 132 133genrule { 134 name: "netsim_cli_h", 135 tools: ["cxxbridge"], 136 cmd: "$(location cxxbridge) $(in) --header >> $(out)", 137 srcs: ["rust/cli/src/ffi.rs"], 138 out: ["netsim-cli/src/ffi.rs.h"], 139} 140 141genrule { 142 name: "netsim_netlink_rust_gen", 143 defaults: ["pdl_rust_generator_defaults"], 144 srcs: ["pdl/netlink.pdl"], 145 out: ["netlink_packets.rs"], 146} 147 148genrule { 149 name: "netsim_mac80211_hwsim_rust_gen", 150 defaults: ["pdl_rust_generator_defaults"], 151 srcs: ["pdl/mac80211_hwsim.pdl"], 152 out: ["mac80211_hwsim_packets.rs"], 153} 154 155genrule { 156 name: "netsim_ieee80211_rust_gen", 157 defaults: ["pdl_rust_generator_defaults"], 158 srcs: ["pdl/ieee80211.pdl"], 159 out: ["ieee80211_packets.rs"], 160} 161 162genrule { 163 name: "netsim_llc_rust_gen", 164 defaults: ["pdl_rust_generator_defaults"], 165 srcs: ["pdl/llc.pdl"], 166 out: ["llc_packets.rs"], 167} 168 169genrule { 170 name: "netsim_arp_rust_gen", 171 defaults: ["pdl_rust_generator_defaults"], 172 srcs: ["pdl/arp.pdl"], 173 out: ["arp_packets.rs"], 174} 175 176cc_library_host_static { 177 name: "lib-netsim", 178 defaults: ["netsim_defaults"], 179 srcs: [ 180 "src/backend/grpc_client.cc", 181 "src/hci/bluetooth_facade.cc", 182 "src/hci/hci_packet_transport.cc", 183 "src/hci/rust_device.cc", 184 "src/util/crash_report.cc", 185 "src/util/ini_file.cc", 186 "src/util/log.cc", 187 "src/util/os_utils.cc", 188 "src/util/string_utils.cc", 189 ], 190 generated_headers: [ 191 "cxx-bridge-header", 192 "netsim_daemon_h", 193 "PacketStreamerStub_h", 194 ], 195 generated_sources: [ 196 "netsim_daemon_cc", 197 "PacketStreamerStub_cc", 198 ], 199 shared_libs: [ 200 "libbase", 201 "libgrpc++", 202 "libcrypto", 203 "libunwindstack", 204 ], 205 static_libs: [ 206 "breakpad_client", 207 "libjsoncpp", 208 "libprotobuf-cpp-full", 209 "libscriptedbeaconpayload-protos-lite", 210 "lib-netsimd-proto", 211 ], 212 whole_static_libs: [ 213 "libbt-rootcanal", 214 ], 215} 216 217netsim_ui_modules = [ 218 "netsim_ui_index.html", 219 "netsim_ui_js_cube-sprite.js", 220 "netsim_ui_js_customize-map-button.js", 221 "netsim_ui_js_device-dragzone.js", 222 "netsim_ui_js_device-dropzone.js", 223 "netsim_ui_js_device-info.js", 224 "netsim_ui_js_device-list.js", 225 "netsim_ui_js_device-map.js", 226 "netsim_ui_js_device-observer.js", 227 "netsim_ui_js_license-info.js", 228 "netsim_ui_js_navigation-bar.js", 229 "netsim_ui_js_netsim-app.js", 230 "netsim_ui_js_packet-info.js", 231 "netsim_ui_js_pyramid-sprite.js", 232 "netsim_ui_tslib", 233 "netsim_ui_assets_grid-background.svg", 234 "netsim_ui_assets_hexagonal-background.png", 235 "netsim_ui_assets_netsim-logo-b.svg", 236 "netsim_ui_assets_netsim-logo.svg", 237 "netsim_ui_assets_polar-background.svg", 238] 239 240cc_binary_host { 241 name: "netsimd", 242 defaults: ["netsim_defaults"], 243 srcs: [ 244 "rust/netsimd.cc", 245 ], 246 generated_headers: [ 247 "cxx-bridge-header", 248 "netsim_daemon_h", 249 ], 250 shared_libs: [ 251 "libbase", 252 "libgrpc++", 253 "libcap", 254 "libcrypto", 255 "libssl", 256 "libunwindstack", 257 "libz", // TODO: Remove for native rust binary 258 ], 259 static_libs: [ 260 "breakpad_client", 261 "libprotobuf-cpp-full", 262 "libscriptedbeaconpayload-protos-lite", // TODO: Remove this after using pdl library. 263 "lib-netsimd-proto", 264 "lib-netsim", 265 "lib-netsim-frontend-proto", 266 "libgrpc_wrap", 267 "librootcanal_rs", 268 ], 269 whole_static_libs: [ 270 "libnetsim_daemon", 271 "libbt-rootcanal", 272 ], 273 required: netsim_ui_modules, 274 strip: { 275 keep_symbols_and_debug_frame: true, 276 }, 277} 278 279cc_test_host { 280 name: "netsim-test", 281 defaults: ["netsim_defaults"], 282 srcs: [ 283 "src/util/ini_file_test.cc", 284 "src/util/os_utils_test.cc", 285 "src/util/string_utils_test.cc", 286 ], 287 generated_headers: [ 288 "cxx-bridge-header", 289 "netsim_daemon_h", 290 ], 291 shared_libs: [ 292 "libgrpc++", 293 "libcrypto", 294 "libbase", 295 "libunwindstack", 296 "libssl", 297 "libz", // TODO: Remove for native rust binary 298 ], 299 static_libs: [ 300 "breakpad_client", 301 "libgrpc_wrap", 302 "libjsoncpp", 303 "libprotobuf-cpp-full", 304 "libscriptedbeaconpayload-protos-lite", // TODO: Remove this after using pdl library. 305 "lib-netsim-frontend-proto", 306 "lib-netsim", 307 "lib-netsimd-proto", 308 "librootcanal_rs", 309 ], 310 whole_static_libs: [ 311 "libnetsim_daemon", 312 "libbt-rootcanal", 313 ], 314} 315 316rust_library_host { 317 name: "libnetsim_proto", 318 features: ["cuttlefish"], 319 crate_name: "netsim_proto", 320 srcs: ["rust/proto/src/lib.rs"], 321 rustlibs: [ 322 "libprotobuf", 323 "libgrpcio", 324 ], 325} 326 327rust_defaults { 328 name: "libnetsim_common_defaults", 329 srcs: ["rust/common/src/lib.rs"], 330 rustlibs: [ 331 "libanyhow", 332 "libchrono", 333 "librand", 334 "liblibc", 335 "liblog_rust", 336 "libenv_logger", 337 "libzip", 338 ], 339} 340 341rust_library_host { 342 name: "libnetsim_common", 343 crate_name: "netsim_common", 344 defaults: ["libnetsim_common_defaults"], 345} 346 347rust_defaults { 348 name: "libnetsim_packets_defaults", 349 srcs: [ 350 "rust/packets/src/lib.rs", 351 ":netsim_netlink_rust_gen", 352 ":netsim_mac80211_hwsim_rust_gen", 353 ":netsim_ieee80211_rust_gen", 354 ":netsim_llc_rust_gen", 355 ":netsim_arp_rust_gen", 356 ":rootcanal_link_layer_packets_rust_gen", 357 ], 358 rustlibs: [ 359 "libanyhow", 360 "libbytes", 361 "libpdl_runtime", 362 ], 363} 364 365rust_library_host { 366 name: "libnetsim_packets", 367 crate_name: "netsim_packets", 368 defaults: ["libnetsim_packets_defaults"], 369} 370 371rust_test_host { 372 name: "libnetsim_common_inline_tests", 373 defaults: ["libnetsim_common_defaults"], 374 test_suites: ["general_tests"], 375} 376 377cc_library_host_static { 378 name: "lib-netsim-frontend-client", 379 defaults: ["netsim_defaults"], 380 srcs: [ 381 "src/frontend/frontend_client.cc", 382 "src/util/ini_file.cc", 383 "src/util/log.cc", 384 "src/util/os_utils.cc", 385 "src/util/string_utils.cc", 386 ], 387 generated_headers: [ 388 "cxx-bridge-header", 389 "netsim_cli_h", 390 ], 391 shared_libs: ["libgrpc++"], 392 generated_sources: ["netsim_cli_cc"], 393 static_libs: [ 394 "libprotobuf-cpp-full", 395 "lib-netsim-frontend-proto", 396 ], 397} 398 399rust_defaults { 400 name: "netsim_cli_defaults", 401 rustlibs: [ 402 "libclap", 403 "libcxx", 404 "libhex", 405 "libnetsim_common", 406 "libnetsim_proto", 407 "libprotobuf", 408 "libtracing", 409 ], 410} 411 412rust_defaults { 413 name: "netsim_cli_cc_defaults", 414 shared_libs: ["libgrpc++"], 415 static_libs: [ 416 "lib-netsim-frontend-client", 417 "lib-netsim-frontend-proto", 418 "libprotobuf-cpp-full", 419 ], 420} 421 422rust_test_host { 423 name: "libnetsim_cli_tests", 424 srcs: ["rust/cli/src/lib.rs"], 425 defaults: ["netsim_cli_defaults"], 426 test_suites: ["general_tests"], 427} 428 429rust_library_host { 430 name: "libnetsim_cli", 431 crate_name: "netsim_cli", 432 srcs: ["rust/cli/src/lib.rs"], 433 defaults: [ 434 "netsim_cli_defaults", 435 "netsim_cli_cc_defaults", 436 ], 437} 438 439rust_binary_host { 440 name: "netsim", 441 srcs: ["rust/cli/bin/netsim.rs"], 442 rustlibs: [ 443 "libnetsim_cli", 444 ], 445} 446 447rust_binary_host { 448 name: "netsim_test_client", 449 srcs: ["rust/frontend/src/netsim_test_client.rs"], 450 rustlibs: [ 451 "libgrpcio", 452 "libnetsim_proto", 453 "libprotobuf", 454 "libnetsim_common", 455 ], 456} 457 458rust_binary_host { 459 name: "netsim_test_server", 460 srcs: ["rust/frontend/src/netsim_test_server.rs"], 461 rustlibs: [ 462 "libgrpcio", 463 "libnetsim_proto", 464 "libprotobuf", 465 "libnetsim_common", 466 "libfutures", 467 ], 468} 469