xref: /aosp_15_r20/tools/netsim/src/CMakeLists.txt (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
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