xref: /aosp_15_r20/tools/netsim/rust/CMakeLists.txt (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1message(STATUS "Adding rust ${CMAKE_CURRENT_LIST_DIR}/Cargo.toml")
2
3# Delete any old Cargo.lock files
4file(REMOVE ${CMAKE_CURRENT_LIST_DIR}/Cargo.lock)
5
6# This will automatically register all the tests as well.
7corrosion_import_crate(MANIFEST_PATH Cargo.toml FLAGS --offline --verbose)
8
9# Set corrosion env vars
10corrosion_set_env_vars(netsim-common CARGO_HOME=${Rust_CARGO_HOME})
11corrosion_set_env_vars(http-proxy CARGO_HOME=${Rust_CARGO_HOME})
12corrosion_set_env_vars(libslirp-rs CARGO_HOME=${Rust_CARGO_HOME})
13corrosion_set_env_vars(capture CARGO_HOME=${Rust_CARGO_HOME})
14
15function(set_prebuilt_packets_env_vars target)
16  corrosion_set_env_vars(
17    ${target}
18    LINK_LAYER_PACKETS_PREBUILT=${RootCanalGeneratedPackets_rs}
19    NETLINK_PACKETS_PREBUILT=${NetlinkPackets_rs}
20    MAC80211_HWSIM_PACKETS_PREBUILT=${Mac80211HwsimPackets_rs}
21    IEEE80211_PACKETS_PREBUILT=${Ieee80211Packets_rs}
22    LLC_PACKETS_PREBUILT=${LlcPackets_rs}
23    CARGO_HOME=${Rust_CARGO_HOME})
24endfunction()
25
26set_prebuilt_packets_env_vars(hostapd-rs)
27set_prebuilt_packets_env_vars(netsim-packets)
28
29corrosion_set_env_vars(
30  netsim-daemon
31  CARGO_HOME=${Rust_CARGO_HOME}
32  GRPCIO_SYS_GRPC_INCLUDE_PATH="${CMAKE_CURRENT_SOURCE_DIR}/../../../external/grpc/include"
33)
34
35corrosion_set_env_vars(
36  netsim-cli
37  CARGO_HOME=${Rust_CARGO_HOME}
38  GRPCIO_SYS_GRPC_INCLUDE_PATH="${CMAKE_CURRENT_SOURCE_DIR}/../../../external/grpc/include"
39)
40corrosion_set_env_vars(
41  netsim-proto
42  CARGO_HOME=${Rust_CARGO_HOME}
43  GRPCIO_SYS_GRPC_INCLUDE_PATH="${CMAKE_CURRENT_SOURCE_DIR}/../../../external/grpc/include"
44)
45
46add_custom_target(
47  netsim_rust_packets
48  DEPENDS pdl_gen-RootCanalGeneratedPackets_rs pdl_gen-NetlinkPackets_rs
49          pdl_gen-LlcPackets_rs pdl_gen-Ieee80211Packets_rs
50          pdl_gen-Mac80211HwsimPackets_rs)
51
52# Make sure we have the rust packets generated before we build them.
53add_dependencies(cargo-build_netsim-packets netsim_rust_packets)
54add_dependencies(cargo-build_hostapd-rs cargo-build_netsim-packets)
55add_dependencies(cargo-build_netsim-daemon cargo-build_netsim-packets)
56
57# cxx crates
58if(WIN32)
59  # 1. Set CMAKE_CXX_FLAGS, as it is not set in Rust crates imported by
60  #    corrosion.
61  # 2. Set RUST_CXX_NO_EXCEPTIONS preprocesor definition for cxx crate to disable
62  #    compilation error message of "cannot use 'throw' with exceptions".
63  # 3. MSVC uses environment variable "CL" to prepend arguments to the
64  #    command-line arguments. However, we verified MSVC also supports CXXFLAGS,
65  #    which is used by cc crate.
66  # 4. This isn't needed in mac and Linux because corrosion doesn't pass
67  #    -fno-exception flag.
68  set(CXXFLAGS "${CMAKE_CXX_FLAGS} /DRUST_CXX_NO_EXCEPTIONS")
69  corrosion_set_env_vars(netsim-cli CXXFLAGS=${CXXFLAGS})
70  corrosion_set_env_vars(netsim-daemon CXXFLAGS=${CXXFLAGS})
71endif()
72
73if(LINUX)
74  # b/260271048
75  set(RUSTFLAGS "-Clink-args=-Wl,-rpath,${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
76  corrosion_add_target_rustflags(netsim-cli ${RUSTFLAGS})
77  corrosion_add_target_rustflags(netsim-daemon ${RUSTFLAGS})
78endif()
79
80add_subdirectory(proto)
81
82# To re-generate Rust protobuf files, follow these steps:
83#
84# 1. Read the file comments in scripts/proto_update.sh
85# 2. Execute `scripts/proto_update.sh`
86
87android_license(TARGET "netsim-daemon" LIBNAME None SPDX None LICENSE None
88                LOCAL None)
89android_license(TARGET "netsim-proto" LIBNAME None SPDX None LICENSE None
90                LOCAL None)
91
92add_library(netsim-cli-rust-lib INTERFACE)
93
94target_link_libraries(netsim-cli-rust-lib INTERFACE netsim-proto netsim-cli)
95
96android_license(TARGET netsim-cli-rust-lib LIBNAME None SPDX None LICENSE None
97                LOCAL None)
98