1# Copyright (C) 2021-2022 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14import("//build/ohos.gni") 15import("//foundation/communication/bluetooth_service/bluetooth.gni") 16 17SUBSYSTEM_DIR = "//foundation/communication" 18PART_DIR = "$SUBSYSTEM_DIR/bluetooth_service/services/bluetooth" 19BT_SERVICE_DIR = "$PART_DIR/service" 20 21declare_args() { 22 bluetooth_service_avrcp_avsession = false 23} 24 25ServiceBleScanFilter = [ "src/ble/ble_scan_filter/src/ble_scan_filter_lsf.cpp" ] 26 27ServiceBleSrc = [ 28 "src/ble/ble_adapter.cpp", 29 "src/ble/ble_advertiser_impl.cpp", 30 "src/ble/ble_central_manager_impl.cpp", 31 "src/ble/ble_config.cpp", 32 "src/ble/ble_properties.cpp", 33 "src/ble/ble_security.cpp", 34 "src/ble/ble_utils.cpp", 35] 36 37ServiceClassicSrc = [ 38 "src/classic/classic_adapter_properties.cpp", 39 "src/classic/classic_adapter.cpp", 40 "src/classic/classic_battery_observer.cpp", 41 "src/classic/classic_bluetooth_data.cpp", 42 "src/classic/classic_config.cpp", 43 "src/classic/classic_data_structure.cpp", 44 "src/classic/classic_remote_device.cpp", 45 "src/classic/classic_utils.cpp", 46] 47 48ServiceCommonSrc = [ 49 "src/common/adapter_config.cpp", 50 "src/common/adapter_device_config.cpp", 51 "src/common/adapter_device_info.cpp", 52 "src/common/adapter_manager.cpp", 53 "src/common/adapter_state_machine.cpp", 54 "src/common/class_creator.cpp", 55 "src/common/compat.cpp", 56 "src/common/power_device.cpp", 57 "src/common/power_manager.cpp", 58 "src/common/power_spec.cpp", 59 "src/common/power_state_machine.cpp", 60 "src/common/profile_config.cpp", 61 "src/common/profile_info.cpp", 62 "src/common/profile_service_manager.cpp", 63 "src/common/sys_state_machine.cpp", 64] 65 66ServiceGattSrc = [ 67 "src/gatt/gatt_cache.cpp", 68 "src/gatt/gatt_client_profile.cpp", 69 "src/gatt/gatt_client_service.cpp", 70 "src/gatt/gatt_connection_manager.cpp", 71 "src/gatt/gatt_database.cpp", 72 "src/gatt/gatt_server_profile.cpp", 73 "src/gatt/gatt_server_service.cpp", 74 "src/gatt/gatt_service_base.cpp", 75 "src/gatt/gatt_based_services_manager.cpp", 76 "src/gatt/dis/device_information_service.cpp", 77 "src/gatt/gas/generic_access_service.cpp", 78 "src/gatt/gatts/gatt_service_over_bredr.cpp", 79 "src/gatt/gatts/generic_attribute_service.cpp", 80] 81 82ServiceGavdpSrc = [ 83 "src/gavdp/a2dp_avdtp.cpp", 84 "src/gavdp/a2dp_codec_thread.cpp", 85 "src/gavdp/a2dp_profile_peer.cpp", 86 "src/gavdp/a2dp_profile.cpp", 87 "src/gavdp/a2dp_sdp.cpp", 88 "src/gavdp/a2dp_service_connection.cpp", 89 "src/gavdp/a2dp_service_device.cpp", 90 "src/gavdp/a2dp_service_state_machine.cpp", 91 "src/gavdp/a2dp_service.cpp", 92 "src/gavdp/a2dp_sink.cpp", 93 "src/gavdp/a2dp_source.cpp", 94 "src/gavdp/a2dp_state_machine.cpp", 95 "src/gavdp/a2dp_codec/a2dp_aac_param_ctrl.cpp", 96 "src/gavdp/a2dp_codec/a2dp_codec_config.cpp", 97 "src/gavdp/a2dp_codec/a2dp_codec_factory.cpp", 98 "src/gavdp/a2dp_codec/a2dp_sbc_param_ctrl.cpp", 99 "src/gavdp/a2dp_codec/sbccodecctrl/src/a2dp_decoder_sbc.cpp", 100 "src/gavdp/a2dp_codec/sbccodecctrl/src/a2dp_encoder_sbc.cpp", 101 "src/gavdp/a2dp_codec/sbccodecctrl/src/a2dp_sbc_dynamic_lib_ctrl.cpp", 102 "src/gavdp/a2dp_shared_buffer.cpp", 103] 104 105ServiceObexSrc = [ 106 "src/obex/obex_body.cpp", 107 "src/obex/obex_client.cpp", 108 "src/obex/obex_headers.cpp", 109 "src/obex/obex_mp_client.cpp", 110 "src/obex/obex_mp_server.cpp", 111 "src/obex/obex_server.cpp", 112 "src/obex/obex_session.cpp", 113 "src/obex/obex_socket_transport.cpp", 114 "src/obex/obex_transport.cpp", 115 "src/obex/obex_utils.cpp", 116] 117 118ServiceSockSrc = [ 119 "src/sock/socket.cpp", 120 "src/sock/socket_gap_client.cpp", 121 "src/sock/socket_gap_server.cpp", 122 "src/sock/socket_sdp_client.cpp", 123 "src/sock/socket_sdp_server.cpp", 124 "src/sock/socket_service.cpp", 125 "src/sock/socket_listener.cpp", 126 "src/sock/socket_util.cpp", 127] 128 129ServiceTransportSrc = [ 130 "src/transport/transport_factory.cpp", 131 "src/transport/transport_l2cap.cpp", 132 "src/transport/transport_rfcomm.cpp", 133] 134 135ServiceDISrc = [ 136 "src/di/di_config.cpp", 137 "src/di/di_service.cpp", 138] 139 140ServiceUtilSrc = [ 141 "src/util/bluetooth_common_event_helper.cpp", 142 "src/util/dispatcher.cpp", 143 "src/util/semaphore_utils.cpp", 144 "src/util/state_machine.cpp", 145 "src/util/timer.cpp", 146 "src/util/xml_parse.cpp", 147 "src/util/log_util.cpp", 148] 149 150ServicePermissionSrc = [ 151 "src/permission/auth_center.cpp", 152 "src/permission/permission_helper.cpp", 153 "src/permission/permission_utils.cpp", 154] 155 156config("btservice_public_config") { 157 include_dirs = [ 158 "include", 159 "$SUBSYSTEM_DIR/bluetooth/interfaces/inner_api/include", 160 "$SUBSYSTEM_DIR/bluetooth/frameworks/inner/include", 161 "//third_party/bounds_checking_function/include", 162 ] 163} 164 165config("btservice_config") { 166 include_dirs = [ 167 "$BT_SERVICE_DIR/src", 168 "$BT_SERVICE_DIR/src/base", 169 "$BT_SERVICE_DIR/src/common", 170 "$BT_SERVICE_DIR/src/permission", 171 "$BT_SERVICE_DIR/src/util", 172 "$BT_SERVICE_DIR/src/ble/ble_scan_filter", 173 "$BT_SERVICE_DIR/src/gavdp/a2dp_codec/aaccodecctrl_l2/include", 174 "$BT_SERVICE_DIR/src/gavdp/a2dp_codec/sbccodecctrl/include", 175 "//base/telephony/state_registry/frameworks/native/observer/include", 176 "//foundation/multimedia/audio_framework/interfaces/inner_api/native/audiocommon/include", 177 "//foundation/multimedia/audio_framework/interfaces/inner_api/native/audiomanager/include", 178 ] 179 180 cflags_cc = [ 181 "-fPIC", 182 "-fexceptions", 183 "-Wno-pessimizing-move", 184 "-Wno-unused-parameter", 185 "-Wunused-variable", 186 "-Wreorder", 187 "-Wmissing-braces", 188 "-Wimplicit-fallthrough", 189 "-Wunused-private-field", 190 "-Wlogical-op-parentheses", 191 "-Wmissing-field-initializers", 192 "-Wparentheses-equality", 193 "-Wparentheses", 194 "-Wdelete-non-abstract-non-virtual-dtor", 195 "-Wignored-qualifiers", 196 "-Wdelete-abstract-non-virtual-dtor", 197 "-Wuninitialized", 198 "-Woverloaded-virtual", 199 "-Wdangling-else", 200 "-Woverloaded-virtual", 201 "-Wno-non-c-typedef-for-linkage", 202 "-Wno-unused-but-set-variable", 203 "-Wno-array-parameter", 204 ] 205} 206 207ohos_shared_library("btservice") { 208 # sanitize = { 209 # cfi = true 210 # blocklist = "./bluetooth_service_blocklist.txt" 211 # } 212 stack_protector_ret = true 213 configs = [ ":btservice_config" ] 214 public_configs = [ ":btservice_public_config" ] 215 216 if (bluetooth_service_avrcp_avsession) { 217 defines = [ "AVRCP_AVSESSION" ] 218 } 219 220 sources = ServiceCommonSrc + ServiceUtilSrc 221 sources += ServiceBleScanFilter 222 sources += ServiceBleSrc 223 sources += ServiceClassicSrc 224 sources += ServiceGattSrc 225 sources += ServiceGavdpSrc 226 sources += ServiceObexSrc 227 sources += ServiceSockSrc 228 sources += ServiceTransportSrc 229 sources += ServiceDISrc 230 sources += ServicePermissionSrc 231 232 if (bluetooth_service_a2dp_sink_feature) { 233 sources += [ "src/a2dp_snk/a2dp_snk_service.cpp" ] 234 } 235 236 if (bluetooth_service_a2dp_source_feature) { 237 sources += [ "src/a2dp_src/a2dp_src_service.cpp" ] 238 } 239 240 if (bluetooth_service_avrcp_ct_feature) { 241 sources += [ 242 "src/avrcp_ct/avrcp_ct_browse.cpp", 243 "src/avrcp_ct/avrcp_ct_connection.cpp", 244 "src/avrcp_ct/avrcp_ct_gap.cpp", 245 "src/avrcp_ct/avrcp_ct_notification.cpp", 246 "src/avrcp_ct/avrcp_ct_packet.cpp", 247 "src/avrcp_ct/avrcp_ct_pass_through.cpp", 248 "src/avrcp_ct/avrcp_ct_profile.cpp", 249 "src/avrcp_ct/avrcp_ct_sdp.cpp", 250 "src/avrcp_ct/avrcp_ct_service.cpp", 251 "src/avrcp_ct/avrcp_ct_state_machine.cpp", 252 "src/avrcp_ct/avrcp_ct_sub_unit_info.cpp", 253 "src/avrcp_ct/avrcp_ct_unit_info.cpp", 254 "src/avrcp_ct/avrcp_ct_vendor.cpp", 255 ] 256 } 257 258 if (bluetooth_service_avrcp_tg_feature) { 259 sources += [ 260 "src/avrcp_tg/avrcp_tg_browse.cpp", 261 "src/avrcp_tg/avrcp_tg_connection.cpp", 262 "src/avrcp_tg/avrcp_tg_gap.cpp", 263 "src/avrcp_tg/avrcp_tg_notification.cpp", 264 "src/avrcp_tg/avrcp_tg_packet.cpp", 265 "src/avrcp_tg/avrcp_tg_pass_through.cpp", 266 "src/avrcp_tg/avrcp_tg_profile.cpp", 267 "src/avrcp_tg/avrcp_tg_sdp.cpp", 268 "src/avrcp_tg/avrcp_tg_service.cpp", 269 "src/avrcp_tg/avrcp_tg_state_machine.cpp", 270 "src/avrcp_tg/avrcp_tg_sub_unit_info.cpp", 271 "src/avrcp_tg/avrcp_tg_unit_info.cpp", 272 "src/avrcp_tg/avrcp_tg_vendor.cpp", 273 ] 274 } 275 276 if (bluetooth_service_hfp_ag_feature) { 277 sources += [ 278 "src/hfp_ag/hfp_ag_audio_connection.cpp", 279 "src/hfp_ag/hfp_ag_command_parser.cpp", 280 "src/hfp_ag/hfp_ag_command_processor.cpp", 281 "src/hfp_ag/hfp_ag_data_connection.cpp", 282 "src/hfp_ag/hfp_ag_data_connection_server.cpp", 283 "src/hfp_ag/hfp_ag_gap_client.cpp", 284 "src/hfp_ag/hfp_ag_gap_server.cpp", 285 "src/hfp_ag/hfp_ag_profile.cpp", 286 "src/hfp_ag/hfp_ag_profile_event_sender.cpp", 287 "src/hfp_ag/hfp_ag_rfcomm_connection.cpp", 288 "src/hfp_ag/hfp_ag_rfcomm_connection_server.cpp", 289 "src/hfp_ag/hfp_ag_sdp_client.cpp", 290 "src/hfp_ag/hfp_ag_sdp_server.cpp", 291 "src/hfp_ag/hfp_ag_service.cpp", 292 "src/hfp_ag/hfp_ag_statemachine.cpp", 293 "src/hfp_ag/hfp_ag_system_event_processer.cpp", 294 "src/hfp_ag/hfp_ag_system_interface.cpp", 295 ] 296 } 297 298 if (bluetooth_service_hfp_hf_feature) { 299 sources += [ 300 "src/hfp_hf/hfp_hf_audio_connection.cpp", 301 "src/hfp_hf/hfp_hf_call_manager.cpp", 302 "src/hfp_hf/hfp_hf_command_parser.cpp", 303 "src/hfp_hf/hfp_hf_command_processor.cpp", 304 "src/hfp_hf/hfp_hf_data_connection.cpp", 305 "src/hfp_hf/hfp_hf_data_connection_server.cpp", 306 "src/hfp_hf/hfp_hf_gap_client.cpp", 307 "src/hfp_hf/hfp_hf_gap_server.cpp", 308 "src/hfp_hf/hfp_hf_profile.cpp", 309 "src/hfp_hf/hfp_hf_profile_event_sender.cpp", 310 "src/hfp_hf/hfp_hf_rfcomm_connection.cpp", 311 "src/hfp_hf/hfp_hf_rfcomm_connection_server.cpp", 312 "src/hfp_hf/hfp_hf_sdp_client.cpp", 313 "src/hfp_hf/hfp_hf_sdp_server.cpp", 314 "src/hfp_hf/hfp_hf_service.cpp", 315 "src/hfp_hf/hfp_hf_statemachine.cpp", 316 ] 317 } 318 319 if (bluetooth_service_map_client_feature) { 320 sources += [ 321 "src/map_mce/map_mce_data_analyse.cpp", 322 "src/map_mce/map_mce_device_ctrl.cpp", 323 "src/map_mce/map_mce_instance_client.cpp", 324 "src/map_mce/map_mce_instance_request.cpp", 325 "src/map_mce/map_mce_instance_stm.cpp", 326 "src/map_mce/map_mce_mns_server.cpp", 327 "src/map_mce/map_mce_observer_manager.cpp", 328 "src/map_mce/map_mce_service.cpp", 329 "src/map_mce/map_mce_xml.cpp", 330 ] 331 } 332 333 if (bluetooth_service_map_server_feature) { 334 sources += [ 335 "src/map_mse/map_mse_bmsg.cpp", 336 "src/map_mse/map_mse_event.cpp", 337 "src/map_mse/map_mse_folder.cpp", 338 "src/map_mse/map_mse_instance.cpp", 339 "src/map_mse/map_mse_mnscli.cpp", 340 "src/map_mse/map_mse_params.cpp", 341 "src/map_mse/map_mse_resource.cpp", 342 "src/map_mse/map_mse_server.cpp", 343 "src/map_mse/map_mse_service.cpp", 344 "src/map_mse/map_mse_vcard.cpp", 345 ] 346 } 347 348 if (bluetooth_service_pbap_client_feature) { 349 sources += [ 350 "src/pbap_pce/pbap_pce_app_params.cpp", 351 "src/pbap_pce/pbap_pce_base_state.cpp", 352 "src/pbap_pce/pbap_pce_connected_state.cpp", 353 "src/pbap_pce/pbap_pce_connecting_state.cpp", 354 "src/pbap_pce/pbap_pce_disconnected_state.cpp", 355 "src/pbap_pce/pbap_pce_disconnecting_state.cpp", 356 "src/pbap_pce/pbap_pce_gap.cpp", 357 "src/pbap_pce/pbap_pce_obex_client.cpp", 358 "src/pbap_pce/pbap_pce_sdp.cpp", 359 "src/pbap_pce/pbap_pce_service.cpp", 360 "src/pbap_pce/pbap_pce_state_machine.cpp", 361 ] 362 } 363 364 if (bluetooth_service_pbap_server_feature) { 365 sources += [ 366 "src/pbap_pse/pbap_pse_app_params.cpp", 367 "src/pbap_pse/pbap_pse_gap.cpp", 368 "src/pbap_pse/pbap_pse_obex_server.cpp", 369 "src/pbap_pse/pbap_pse_sdp.cpp", 370 "src/pbap_pse/pbap_pse_service.cpp", 371 "src/pbap_pse/pbap_pse_state_machine.cpp", 372 "src/pbap_pse/pbap_pse_vcard_manager.cpp", 373 ] 374 } 375 376 if (bluetooth_service_hid_host_feature) { 377 sources += [ 378 "src/hid_host/hid_host_hogp.cpp", 379 "src/hid_host/hid_host_l2cap_connection.cpp", 380 "src/hid_host/hid_host_sdp_client.cpp", 381 "src/hid_host/hid_host_service.cpp", 382 "src/hid_host/hid_host_statemachine.cpp", 383 "src/hid_host/hid_host_uhid.cpp", 384 ] 385 } 386 387 if (bluetooth_service_pan_feature) { 388 sources += [ 389 "src/pan/pan_bnep.cpp", 390 "src/pan/pan_network.cpp", 391 "src/pan/pan_sdp.cpp", 392 "src/pan/pan_service.cpp", 393 "src/pan/pan_statemachine.cpp", 394 ] 395 } 396 397 if (bluetooth_service_opp_feature) { 398 sources += [ 399 "src/opp/opp_gap_client.cpp", 400 "src/opp/opp_gap_server.cpp", 401 "src/opp/opp_obex_client.cpp", 402 "src/opp/opp_obex_server.cpp", 403 "src/opp/opp_sdp_client.cpp", 404 "src/opp/opp_sdp_server.cpp", 405 "src/opp/opp_service.cpp", 406 "src/opp/opp_statemachine.cpp", 407 "src/opp/opp_transfer.cpp", 408 ] 409 } 410 411 deps = [ 412 "$PART_DIR/external:btdummy", 413 "$PART_DIR/stack:btstack", 414 "//third_party/bounds_checking_function:libsec_shared", 415 "//third_party/libxml2:xml2", 416 "//third_party/openssl:libcrypto_shared", 417 ] 418 419 external_deps = [ 420 "ability_base:want", 421 "access_token:libaccesstoken_sdk", 422 "access_token:libtokenid_sdk", 423 "audio_framework:audio_client", 424 "bluetooth:btcommon", 425 "c_utils:utils", 426 "call_manager:tel_call_manager_api", 427 "common_event_service:cesfwk_innerkits", 428 "core_service:tel_core_service_api", 429 "hdf_core:libhdi", 430 "hilog:libhilog", 431 "hisysevent:libhisysevent", 432 "ipc:ipc_core", 433 "samgr:samgr_proxy", 434 "state_registry:tel_state_registry_api", 435 ] 436 437 if (bluetooth_service_avrcp_avsession) { 438 external_deps += [ 439 "ability_runtime:wantagent_innerkits", 440 "av_session:avsession_client", 441 "input:libmmi-client", 442 "multimedia_image_framework:image_native", 443 ] 444 } 445 446 subsystem_name = "communication" 447 part_name = "bluetooth_service" 448} 449 450SBC_CODEC_DIR = "$BT_SERVICE_DIR/src/gavdp/a2dp_codec/sbclib" 451ohos_shared_library("btsbc") { 452 # sanitize = { 453 # cfi = true 454 # } 455 stack_protector_ret = true 456 sources = [ 457 "$SBC_CODEC_DIR/src/sbc_decoder.cpp", 458 "$SBC_CODEC_DIR/src/sbc_encoder.cpp", 459 "$SBC_CODEC_DIR/src/sbc_frame.cpp", 460 ] 461 462 deps = [ 463 "$PART_DIR/external:btdummy", 464 "//third_party/bounds_checking_function:libsec_shared", 465 ] 466 467 external_deps = [ "hilog:libhilog" ] 468 469 cflags = [ "-Wno-array-bounds" ] 470 subsystem_name = "communication" 471 part_name = "bluetooth_service" 472} 473