• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_netlink_rust_gen",
127    defaults: ["pdl_rust_generator_defaults"],
128    srcs: ["pdl/netlink.pdl"],
129    out: ["netlink_packets.rs"],
130}
131
132genrule {
133    name: "netsim_mac80211_hwsim_rust_gen",
134    defaults: ["pdl_rust_generator_defaults"],
135    srcs: ["pdl/mac80211_hwsim.pdl"],
136    out: ["mac80211_hwsim_packets.rs"],
137}
138
139genrule {
140    name: "netsim_ieee80211_rust_gen",
141    defaults: ["pdl_rust_generator_defaults"],
142    srcs: ["pdl/ieee80211.pdl"],
143    out: ["ieee80211_packets.rs"],
144}
145
146genrule {
147    name: "netsim_llc_rust_gen",
148    defaults: ["pdl_rust_generator_defaults"],
149    srcs: ["pdl/llc.pdl"],
150    out: ["llc_packets.rs"],
151}
152
153genrule {
154    name: "netsim_arp_rust_gen",
155    defaults: ["pdl_rust_generator_defaults"],
156    srcs: ["pdl/arp.pdl"],
157    out: ["arp_packets.rs"],
158}
159
160cc_library_host_static {
161    name: "lib-netsim",
162    defaults: ["netsim_defaults"],
163    srcs: [
164        "src/backend/grpc_client.cc",
165        "src/hci/bluetooth_facade.cc",
166        "src/hci/hci_packet_transport.cc",
167        "src/hci/rust_device.cc",
168        "src/util/crash_report.cc",
169        "src/util/ini_file.cc",
170        "src/util/log.cc",
171        "src/util/os_utils.cc",
172        "src/util/string_utils.cc",
173    ],
174    generated_headers: [
175        "cxx-bridge-header",
176        "netsim_daemon_h",
177        "PacketStreamerStub_h",
178    ],
179    generated_sources: [
180        "netsim_daemon_cc",
181        "PacketStreamerStub_cc",
182    ],
183    shared_libs: [
184        "libbase",
185        "libgrpc++",
186        "libcrypto",
187        "libunwindstack",
188    ],
189    static_libs: [
190        "breakpad_client",
191        "libjsoncpp",
192        "libprotobuf-cpp-full",
193        "libscriptedbeaconpayload-protos-lite",
194        "lib-netsimd-proto",
195    ],
196    whole_static_libs: [
197        "libbt-rootcanal",
198    ],
199}
200
201netsim_ui_modules = [
202    "netsim_ui_index.html",
203    "netsim_ui_js_cube-sprite.js",
204    "netsim_ui_js_customize-map-button.js",
205    "netsim_ui_js_device-dragzone.js",
206    "netsim_ui_js_device-dropzone.js",
207    "netsim_ui_js_device-info.js",
208    "netsim_ui_js_device-list.js",
209    "netsim_ui_js_device-map.js",
210    "netsim_ui_js_device-observer.js",
211    "netsim_ui_js_license-info.js",
212    "netsim_ui_js_navigation-bar.js",
213    "netsim_ui_js_netsim-app.js",
214    "netsim_ui_js_packet-info.js",
215    "netsim_ui_js_pyramid-sprite.js",
216    "netsim_ui_tslib",
217    "netsim_ui_assets_grid-background.svg",
218    "netsim_ui_assets_hexagonal-background.png",
219    "netsim_ui_assets_netsim-logo-b.svg",
220    "netsim_ui_assets_netsim-logo.svg",
221    "netsim_ui_assets_polar-background.svg",
222]
223
224cc_binary_host {
225    name: "netsimd",
226    defaults: ["netsim_defaults"],
227    srcs: [
228        "rust/netsimd.cc",
229    ],
230    generated_headers: [
231        "cxx-bridge-header",
232        "netsim_daemon_h",
233    ],
234    shared_libs: [
235        "libbase",
236        "libgrpc++",
237        "libcap",
238        "libcrypto",
239        "libssl",
240        "libunwindstack",
241        "libz", // TODO: Remove for native rust binary
242    ],
243    static_libs: [
244        "breakpad_client",
245        "libprotobuf-cpp-full",
246        "libscriptedbeaconpayload-protos-lite", // TODO: Remove this after using pdl library.
247        "lib-netsimd-proto",
248        "lib-netsim",
249        "lib-netsim-frontend-proto",
250        "libgrpc_wrap",
251        "librootcanal_rs",
252    ],
253    whole_static_libs: [
254        "libnetsim_daemon",
255        "libbt-rootcanal",
256    ],
257    required: netsim_ui_modules,
258    strip: {
259        keep_symbols_and_debug_frame: true,
260    },
261}
262
263cc_test_host {
264    name: "netsim-test",
265    defaults: ["netsim_defaults"],
266    srcs: [
267        "src/util/ini_file_test.cc",
268        "src/util/os_utils_test.cc",
269        "src/util/string_utils_test.cc",
270    ],
271    generated_headers: [
272        "cxx-bridge-header",
273        "netsim_daemon_h",
274    ],
275    shared_libs: [
276        "libgrpc++",
277        "libcrypto",
278        "libbase",
279        "libunwindstack",
280        "libssl",
281        "libz", // TODO: Remove for native rust binary
282    ],
283    static_libs: [
284        "breakpad_client",
285        "libgrpc_wrap",
286        "libjsoncpp",
287        "libprotobuf-cpp-full",
288        "libscriptedbeaconpayload-protos-lite", // TODO: Remove this after using pdl library.
289        "lib-netsim-frontend-proto",
290        "lib-netsim",
291        "lib-netsimd-proto",
292        "librootcanal_rs",
293    ],
294    whole_static_libs: [
295        "libnetsim_daemon",
296        "libbt-rootcanal",
297    ],
298}
299
300rust_library_host {
301    name: "libnetsim_proto",
302    features: ["cuttlefish"],
303    crate_name: "netsim_proto",
304    srcs: ["rust/proto/src/lib.rs"],
305    rustlibs: [
306        "libprotobuf",
307        "libgrpcio",
308    ],
309}
310
311rust_defaults {
312    name: "libnetsim_common_defaults",
313    srcs: ["rust/common/src/lib.rs"],
314    rustlibs: [
315        "libanyhow",
316        "libchrono",
317        "librand",
318        "liblibc",
319        "liblog_rust",
320        "libenv_logger",
321        "libzip",
322    ],
323}
324
325rust_library_host {
326    name: "libnetsim_common",
327    crate_name: "netsim_common",
328    defaults: ["libnetsim_common_defaults"],
329}
330
331rust_defaults {
332    name: "libnetsim_packets_defaults",
333    srcs: [
334        "rust/packets/src/lib.rs",
335        ":netsim_netlink_rust_gen",
336        ":netsim_mac80211_hwsim_rust_gen",
337        ":netsim_ieee80211_rust_gen",
338        ":netsim_llc_rust_gen",
339        ":netsim_arp_rust_gen",
340        ":rootcanal_link_layer_packets_rust_gen",
341    ],
342    rustlibs: [
343        "libanyhow",
344        "libbytes",
345        "libpdl_runtime",
346    ],
347}
348
349rust_library_host {
350    name: "libnetsim_packets",
351    crate_name: "netsim_packets",
352    defaults: ["libnetsim_packets_defaults"],
353}
354
355rust_test_host {
356    name: "libnetsim_common_inline_tests",
357    defaults: ["libnetsim_common_defaults"],
358    test_suites: ["general_tests"],
359}
360
361rust_defaults {
362    name: "netsim_cli_defaults",
363    rustlibs: [
364        "libanyhow",
365        "libclap",
366        "libfutures",
367        "libfutures_util",
368        "libgrpcio",
369        "libhex",
370        "libnetsim_common",
371        "libnetsim_proto",
372        "libprotobuf",
373        "libtracing",
374    ],
375}
376
377rust_test_host {
378    name: "libnetsim_cli_tests",
379    srcs: ["rust/cli/src/lib.rs"],
380    defaults: ["netsim_cli_defaults"],
381    test_suites: ["general_tests"],
382}
383
384rust_library_host {
385    name: "libnetsim_cli",
386    crate_name: "netsim_cli",
387    srcs: ["rust/cli/src/lib.rs"],
388    defaults: [
389        "netsim_cli_defaults",
390    ],
391}
392
393rust_binary_host {
394    name: "netsim",
395    srcs: ["rust/cli/bin/netsim.rs"],
396    rustlibs: [
397        "libnetsim_cli",
398    ],
399}
400