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