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