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