xref: /aosp_15_r20/tools/netsim/Android.bp (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
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