1*cf78ab8cSAndroid Build Coastguard Worker# Copyright 2022 The Android Open Source Project 2*cf78ab8cSAndroid Build Coastguard Worker# 3*cf78ab8cSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*cf78ab8cSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*cf78ab8cSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*cf78ab8cSAndroid Build Coastguard Worker# 7*cf78ab8cSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*cf78ab8cSAndroid Build Coastguard Worker# 9*cf78ab8cSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*cf78ab8cSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*cf78ab8cSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*cf78ab8cSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*cf78ab8cSAndroid Build Coastguard Worker# limitations under the License. 14*cf78ab8cSAndroid Build Coastguard Workeradd_subdirectory(util) 15*cf78ab8cSAndroid Build Coastguard Workerif(NOT NETSIM_EXT) 16*cf78ab8cSAndroid Build Coastguard Worker add_subdirectory(backend) 17*cf78ab8cSAndroid Build Coastguard Workerendif() 18*cf78ab8cSAndroid Build Coastguard Worker 19*cf78ab8cSAndroid Build Coastguard Workerif(TARGET Rust::Rustc) 20*cf78ab8cSAndroid Build Coastguard Worker set(cxx_bridge_binary_folder 21*cf78ab8cSAndroid Build Coastguard Worker ${CMAKE_BINARY_DIR}/cargo/build/${Rust_CARGO_TARGET_CACHED}/cxxbridge) 22*cf78ab8cSAndroid Build Coastguard Worker set(common_header ${cxx_bridge_binary_folder}/rust/cxx.h) 23*cf78ab8cSAndroid Build Coastguard Worker set(cxx_bridge_source_file "src/ffi.rs") 24*cf78ab8cSAndroid Build Coastguard Worker set(crate_name "netsim-cli") 25*cf78ab8cSAndroid Build Coastguard Worker set(binding_header 26*cf78ab8cSAndroid Build Coastguard Worker ${cxx_bridge_binary_folder}/${crate_name}/${cxx_bridge_source_file}.h) 27*cf78ab8cSAndroid Build Coastguard Worker set(binding_source 28*cf78ab8cSAndroid Build Coastguard Worker ${cxx_bridge_binary_folder}/${crate_name}/${cxx_bridge_source_file}.cc) 29*cf78ab8cSAndroid Build Coastguard Worker 30*cf78ab8cSAndroid Build Coastguard Worker # Make sure we have the cxx files generated before we build them. 31*cf78ab8cSAndroid Build Coastguard Worker add_custom_command(OUTPUT ${common_header} ${binding_header} ${binding_source} 32*cf78ab8cSAndroid Build Coastguard Worker COMMAND DEPENDS ${crate_name}-static) 33*cf78ab8cSAndroid Build Coastguard Worker 34*cf78ab8cSAndroid Build Coastguard Worker android_add_library( 35*cf78ab8cSAndroid Build Coastguard Worker TARGET frontend-client 36*cf78ab8cSAndroid Build Coastguard Worker LICENSE Apache-2.0 37*cf78ab8cSAndroid Build Coastguard Worker SRC ${binding_header} ${binding_source} ${common_header} 38*cf78ab8cSAndroid Build Coastguard Worker frontend/frontend_client.cc frontend/frontend_client.h 39*cf78ab8cSAndroid Build Coastguard Worker DEPS grpc++ netsim-cli-proto-lib protobuf::libprotobuf util-lib) 40*cf78ab8cSAndroid Build Coastguard Worker target_include_directories(frontend-client PRIVATE . 41*cf78ab8cSAndroid Build Coastguard Worker PUBLIC ${cxx_bridge_binary_folder}) 42*cf78ab8cSAndroid Build Coastguard Worker 43*cf78ab8cSAndroid Build Coastguard Worker set(cxx_bridge_binary_folder 44*cf78ab8cSAndroid Build Coastguard Worker ${CMAKE_BINARY_DIR}/cargo/build/${Rust_CARGO_TARGET_CACHED}/cxxbridge) 45*cf78ab8cSAndroid Build Coastguard Worker set(common_header ${cxx_bridge_binary_folder}/rust/cxx.h) 46*cf78ab8cSAndroid Build Coastguard Worker set(cxx_bridge_source_file "src/ffi.rs") 47*cf78ab8cSAndroid Build Coastguard Worker set(crate_name "netsim-daemon") 48*cf78ab8cSAndroid Build Coastguard Worker set(binding_header 49*cf78ab8cSAndroid Build Coastguard Worker ${cxx_bridge_binary_folder}/${crate_name}/${cxx_bridge_source_file}.h) 50*cf78ab8cSAndroid Build Coastguard Worker set(binding_source 51*cf78ab8cSAndroid Build Coastguard Worker ${cxx_bridge_binary_folder}/${crate_name}/${cxx_bridge_source_file}.cc) 52*cf78ab8cSAndroid Build Coastguard Worker 53*cf78ab8cSAndroid Build Coastguard Worker # Make sure we have the cxx files generated before we build them. 54*cf78ab8cSAndroid Build Coastguard Worker add_custom_command(OUTPUT ${common_header} ${binding_header} ${binding_source} 55*cf78ab8cSAndroid Build Coastguard Worker COMMAND DEPENDS cargo-build_${crate_name}) 56*cf78ab8cSAndroid Build Coastguard Worker 57*cf78ab8cSAndroid Build Coastguard Worker android_add_library( 58*cf78ab8cSAndroid Build Coastguard Worker TARGET netsimd-lib 59*cf78ab8cSAndroid Build Coastguard Worker LICENSE Apache-2.0 60*cf78ab8cSAndroid Build Coastguard Worker SRC ${binding_header} 61*cf78ab8cSAndroid Build Coastguard Worker ${binding_source} 62*cf78ab8cSAndroid Build Coastguard Worker ${common_header} 63*cf78ab8cSAndroid Build Coastguard Worker frontend/server_response_writable.h 64*cf78ab8cSAndroid Build Coastguard Worker hci/async_manager.cc 65*cf78ab8cSAndroid Build Coastguard Worker hci/bluetooth_facade.cc 66*cf78ab8cSAndroid Build Coastguard Worker hci/bluetooth_facade.h 67*cf78ab8cSAndroid Build Coastguard Worker hci/hci_packet_transport.cc 68*cf78ab8cSAndroid Build Coastguard Worker hci/hci_packet_transport.h 69*cf78ab8cSAndroid Build Coastguard Worker hci/rust_device.cc 70*cf78ab8cSAndroid Build Coastguard Worker hci/rust_device.h 71*cf78ab8cSAndroid Build Coastguard Worker DEPS grpc++ libbt-rootcanal netsimd-proto-lib packet-streamer-proto-lib 72*cf78ab8cSAndroid Build Coastguard Worker protobuf::libprotobuf util-lib) 73*cf78ab8cSAndroid Build Coastguard Worker 74*cf78ab8cSAndroid Build Coastguard Worker target_link_libraries( 75*cf78ab8cSAndroid Build Coastguard Worker netsimd-lib PUBLIC android-emu-base android-emu-net 76*cf78ab8cSAndroid Build Coastguard Worker PRIVATE libslirp glib2 ssl hostapd android-emu-base-headers) 77*cf78ab8cSAndroid Build Coastguard Worker 78*cf78ab8cSAndroid Build Coastguard Worker # Update to protobuf 26.x introduces some warnings. 79*cf78ab8cSAndroid Build Coastguard Worker target_compile_options(netsimd-lib PRIVATE -Wno-unused-result) 80*cf78ab8cSAndroid Build Coastguard Worker 81*cf78ab8cSAndroid Build Coastguard Worker target_include_directories(netsimd-lib PRIVATE . ${PROTOBUF_INCLUDE_DIR} 82*cf78ab8cSAndroid Build Coastguard Worker PUBLIC ${cxx_bridge_binary_folder}) 83*cf78ab8cSAndroid Build Coastguard Worker target_compile_definitions(netsimd-lib PUBLIC NETSIM_ANDROID_EMULATOR) 84*cf78ab8cSAndroid Build Coastguard Worker # Make sure we have the cxx files generated before we build them. 85*cf78ab8cSAndroid Build Coastguard Worker add_dependencies(netsimd-lib cargo-build_netsim-daemon) 86*cf78ab8cSAndroid Build Coastguard Workerendif() 87