# Copyright (c) 2021-2025 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/ohos.gni")
import("../../accessibility.gni")
import("../../appgallery.gni")
import("../../audio_framework_test_sources.gni")
import("../../bluetooth_part.gni")
import("../../config.gni")

group("audio_policy_packages") {
  deps = [
    ":audio_converter_config",
    ":audio_device_config",
    ":audio_interrupt_policy_config",
    ":audio_policy_global_config",
    ":audio_policy_service",
    ":audio_strategy_router",
    ":audio_usage_strategy",
    ":audio_volume_config",
    "server/domain/volume:audio_safe_volume_notification_impl",
  ]

  if (audio_framework_feature_dtmf_tone) {
    deps += [ ":audio_tone_dtmf_config" ]
  }
}

config("audio_policy_public_config") {
  include_dirs = [
    "util/include",
    "client/service/include",
    "server/infra/ipc_proxy/include",
    "common/definitions/include",
    "server/domain/pipe/include",
    "common/include",
    "client/interface",
    "client/proxy/include",
    "client/stub/include",
    "server/include",
    "server/infra/async_action_handler/include",
    "server/infra/state_monitor",
    "server/infra/window/include",
    "server/stub/include",
    "server/proxy/include",
    "server/domain/interrupt/include",
    "server/domain/volume/include",
    "server/domain/stream",
    "server/domain/tone",
    "server/include/service",
    "server/include/service/common",
    "server/common/include",
    "server/infra/config/parser/include",
    "server/domain/effect/include",
    "server/include/service/interface",
    "server/include/service/listener",
    "server/infra/appclient/include",
    "server/infra/datashare/include",
    "server/domain/device/src/a2dp",
    "server/domain/device/src/hearing_aid",
    "server/domain/device/src/pnp",
    "server/domain/device/src/sco",
    "server/domain/device/src/sle",
    "server/domain/router",
    "server/domain/router_context",
    "server/include/service/service",
    "server/domain/zone/include",
    "server/domain/device/include",
    "server/domain/device/src/va",
    "server/src/service/concurrency",
    "server/domain/session/include",
    "server/service/service_main/include",
    "../audio_service/client/include",
    "../audio_service/common/include",
    "../audio_service/common/include/dfx",
    "../audio_service/server/include",
    "../audio_engine/manager/include",
    "../../frameworks/native/audioinnercall/include",
    "../../frameworks/native/audiorenderer/include",
    "../../frameworks/native/audioadapter/include",
    "../../frameworks/native/audiodefinitions/include",
    "../../frameworks/native/audiopolicy/include",
    "../../frameworks/native/audioutils/include",
    "../../frameworks/native/bluetoothclient",
    "../../frameworks/native/hdiadapter_new/include",
    "../../frameworks/native/hdiadapter_new/include/common",
    "../../interfaces/inner_api/native/audiocommon/include",
    "../../interfaces/inner_api/native/audiomanager/include",
    "../../interfaces/inner_api/native/audiocapturer/include",
  ]

  cflags = [
    "-Wall",
    "-Werror",
  ]

  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }

  if (accessibility_enable == true) {
    cflags += [ "-DACCESSIBILITY_ENABLE" ]
  }

  if (bluetooth_part_enable == true) {
    cflags += [ "-DBLUETOOTH_ENABLE" ]
  }

  ldflags = [ "-Wl" ]
}

ohos_shared_library("audio_setting_provider") {
  branch_protector_ret = "pac_ret"
  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
    integer_overflow = true
    ubsan = true
    boundary_sanitize = true
  }
  install_enable = true

  include_dirs = [
    "../../services/audio_policy/server/infra/datashare/include",
    "../../services/audio_policy/server/domain/device/src/pnp",
    "../../interfaces/inner_api/native/audiocommon/include",
    "../../interfaces/inner_api/native/audiocapturer/include",
  ]

  sources = [ "server/infra/datashare/src/audio_setting_provider.cpp" ]

  deps = [ "../../frameworks/native/audioutils:audio_utils" ]

  external_deps = [
    "ability_runtime:dataobs_manager",
    "c_utils:utils",
    "data_share:datashare_common",
    "data_share:datashare_consumer",
    "hilog:libhilog",
    "ipc:ipc_single",
    "os_account:os_account_innerkits",
    "samgr:samgr_proxy",
  ]
  cflags = [ "-Os" ]
  cflags_cc = cflags

  defines = []
  if (audio_framework_feature_support_os_account) {
    defines += [ "SUPPORT_USER_ACCOUNT" ]
  }

  part_name = "audio_framework"
  subsystem_name = "multimedia"
}

audio_ohos_library("audio_policy_service") {
  branch_protector_ret = "pac_ret"
  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
    integer_overflow = true
    ubsan = true
    boundary_sanitize = true
  }
  install_enable = true
  sources = [
    "server/domain/device/src/sco_audio_scene_manager.cpp",
    "server/domain/interrupt/src/standalone_mode_manager.cpp",
    "../audio_service/client/src/audio_filter.cpp",
    "../audio_service/client/src/audio_manager_listener_stub_impl.cpp",
    "../audio_service/client/src/core_service_provider_stub.cpp",
    "../audio_service/client/src/microphone_descriptor.cpp",
    "../audio_service/client/src/policy_provider_stub.cpp",
    "server/domain/volume/src/audio_volume_group_info.cpp",
    "server/domain/pipe/src/audio_definition_adapter_info.cpp",
    "server/domain/pipe/src/audio_definition_policy_utils.cpp",
    "server/infra/appclient/src/app_state_listener.cpp",
    "server/infra/appclient/src/audio_background_manager.cpp",
    "server/infra/appclient/src/client_type_manager.cpp",
    "server/infra/appclient/src/client_type_manager_handler.cpp",
    "server/infra/config/parser/src/audio_concurrency_parser.cpp",
    "server/infra/config/parser/src/audio_converter_parser.cpp",
    "server/infra/config/parser/src/audio_device_parser.cpp",
    "server/infra/config/parser/src/audio_effect_config_parser.cpp",
    "server/infra/config/parser/src/audio_focus_parser.cpp",
    "server/infra/config/parser/src/audio_policy_config_parser.cpp",
    "server/infra/config/parser/src/audio_policy_global_parser.cpp",
    "server/infra/config/parser/src/audio_strategy_router_parser.cpp",
    "server/infra/config/parser/src/audio_source_strategy_parser.cpp",
    "server/infra/config/parser/src/audio_usage_strategy_parser.cpp",
    "server/infra/config/parser/src/audio_volume_parser.cpp",
    "server/infra/datashare/src/audio_policy_utils.cpp",
    "server/infra/datashare/src/audio_policy_datashare_listener.cpp",
    "server/infra/ipc_proxy/src/audio_ability_manager.cpp",
    "server/infra/ipc_proxy/src/audio_policy_client_holder.cpp",
    "server/infra/ipc_proxy/src/audio_server_proxy.cpp",
    "server/infra/state_monitor/audio_policy_state_monitor.cpp",
    "server/common/src/audio_group_handle.cpp",
    "server/common/src/multi_condition_waiter.cpp",
    "server/common/src/audio_secure_hash.cpp",
    "server/service/service_main/src/audio_policy_server.cpp",
    "server/src/audio_record_controller.cpp",
    "server/service/service_main/src/audio_loopback_manager.cpp",
    "server/service/service_main/src/loopback_in_server.cpp",
    "server/infra/async_action_handler/src/audio_policy_server_handler.cpp",
    "server/domain/stream/audio_stream_collector.cpp",
    "server/domain/stream/audio_stream_id_allocator.cpp",
    "server/infra/appclient/src/background_task_listener.cpp",
    "server/domain/device/src/audio_device_factory.cpp",
    "server/domain/device/src/audio_device_manager.cpp",
    "server/domain/pipe/src/audio_global_config_manager.cpp",
    "server/service/service_main/src/audio_policy_service.cpp",
    "server/domain/device/src/audio_state_manager.cpp",
    "server/domain/device/src/audio_usr_select_manager.cpp",
    "server/domain/pipe/src/audio_concurrency_manager.cpp",
    "server/service/service_main/src/device_init_callback.cpp",
    "server/src/audio_client_tracker_callback_listener.cpp",
    "server/src/audio_spatialization_state_change_callback.cpp",
    "server/src/audio_policy_manager_listener.cpp",
    "server/domain/effect/src/audio_effect_service.cpp",
    "server/domain/interrupt/src/audio_interrupt_dfx_collector.cpp",
    "server/domain/interrupt/src/audio_interrupt_service.cpp",
    "server/domain/interrupt/src/audio_interrupt_service_ext.cpp",
    "server/domain/interrupt/src/audio_interrupt_strategy.cpp",
    "server/domain/interrupt/src/audio_interrupt_custom.cpp",
    "server/domain/interrupt/src/audio_interrupt_dfx.cpp",
    "server/domain/interrupt/src/audio_interrupt_utils.cpp",
    "server/domain/interrupt/src/audio_interrupt_zone.cpp",
    "server/domain/device/src/device_status_listener.cpp",
    "server/domain/interrupt/src/power_state_listener.cpp",
    "server/domain/volume/src/audio_adapter_manager.cpp",
    "server/domain/volume/src/audio_adapter_manager_handler.cpp",
    "server/domain/volume/src/volume_data_maintainer.cpp",
    "server/domain/volume/src/audio_volume_utils.cpp",
    "server/domain/router/audio_router_center.cpp",
    "server/domain/router/cockpit_phone_router.cpp",
    "server/domain/router/default_router.cpp",
    "server/domain/router/package_filter_router.cpp",
    "server/domain/router/pair_device_router.cpp",
    "server/domain/router/privacy_priority_router.cpp",
    "server/domain/router/public_priority_router.cpp",
    "server/domain/router/stream_filter_router.cpp",
    "server/domain/router/user_select_router.cpp",
    "server/domain/router/wireless_conflict_handler.cpp",
    "server/domain/router_context/audio_device_simple_descriptor.cpp",
    "server/domain/router_context/audio_router_follow_strategy.cpp",
    "server/domain/router_context/audio_router_independent_strategy.cpp",
    "server/domain/router_context/audio_router_infra.cpp",
    "server/domain/router_context/audio_router_select_strategy.cpp",
    "server/domain/device/src/a2dp/audio_a2dp_device.cpp",
    "server/domain/pipe/src/audio_a2dp_offload_flag.cpp",
    "server/domain/pipe/src/audio_a2dp_offload_manager.cpp",
    "server/domain/device/src/audio_active_device.cpp",
    "server/domain/device/src/audio_connected_device.cpp",
    "server/domain/device/src/audio_device_capability.cpp",
    "server/domain/device/src/audio_device_common.cpp",
    "server/domain/device/src/audio_device_lock.cpp",
    "server/domain/device/src/audio_device_status.cpp",
    "server/domain/pipe/src/audio_iohandle_map.cpp",
    "server/domain/device/src/audio_microphone_descriptor.cpp",
    "server/domain/pipe/src/audio_offload_stream.cpp",
    "server/service/service_main/src/audio_policy_dump.cpp",
    "server/domain/device/src/audio_recovery_device.cpp",
    "server/domain/device/src/audio_router_map.cpp",
    "server/domain/device/src/audio_scene_manager.cpp",
    "server/domain/tone/audio_tone_manager.cpp",
    "server/domain/volume/src/audio_volume_manager.cpp",
    "server/domain/volume/src/app_volume_manager.cpp",
    "server/domain/volume/src/audio_loud_volume_manager.cpp",
    "server/domain/volume/src/audio_safe_volume_event_subscriber.cpp",
    "server/domain/volume/src/safe_volume_manager.cpp",
    "server/domain/volume/src/ringer_mode_manager.cpp",
    "server/domain/device/src/a2dp/audio_a2dp_device_behavior.cpp",
    "server/domain/device/src/pnp/audio_arm_device_behavior.cpp",
    "server/domain/device/src/hearing_aid/audio_hearing_aid_device_behavior.cpp",
    "server/domain/device/src/sco/audio_sco_device_behavior.cpp",
    "server/domain/device/src/sle/audio_sle_device_behavior.cpp",
    "server/domain/device/src/sle/sle_audio_device_manager.cpp",
    "server/domain/device/src/va/va_device_manager.cpp",
    "client/stub/src/va_device_broker_stub_impl.cpp",
    "server/domain/session/src/audio_session.cpp",
    "server/domain/session/src/audio_session_service.cpp",
    "server/domain/session/src/audio_session_state_monitor.cpp",
    "server/domain/effect/src/audio_collaborative_service.cpp",
    "server/domain/effect/src/audio_spatialization_service.cpp",
    "server/domain/zone/src/audio_zone.cpp",
    "server/domain/zone/src/audio_zone_client_manager.cpp",
    "server/domain/zone/src/audio_zone_interrupt_reporter.cpp",
    "server/domain/zone/src/audio_zone_service.cpp",
    "server/domain/pipe/src/audio_core_config_manager.cpp",
    "server/service/service_main/src/audio_core_service.cpp",
    "server/service/service_main/src/audio_core_service_entry.cpp",
    "server/service/service_main/src/audio_core_service_private.cpp",
    "server/service/service_main/src/audio_core_service_utils.cpp",
    "server/service/service_main/src/audio_select_interface_service.cpp",
    "server/domain/pipe/src/audio_pipe_manager.cpp",
    "server/domain/pipe/src/audio_pipe_selector.cpp",
    "server/service/service_main/src/audio_injector_policy.cpp",
  ]

  defines = []
  if (!audio_framework_feature_mutesink_enable) {
    defines += [ "MUTE_SINK_DISABLE" ]
  }

  if (audio_framework_feature_multi_bus) {
    defines += [ "MULTI_BUS_ENABLE" ]
    sources += [ "server/domain/pipe/src/audio_bus_selector.cpp" ]
  }

  if (audio_framework_feature_multi_zone_volume) {
    defines += [ "FEATURE_AUDIO_ZONE_VOLUME" ]
  }

  if (audio_framework_feature_multi_user_zone) {
    defines += [ "MULTI_USER_ZONE" ]
    sources += [ "server/domain/zone/src/audio_zone_router.cpp" ]
  }

  if (audio_framework_feature_wired_audio) {
    defines += [ "AUDIO_WIRED_DETECT" ]
    sources += [
      "server/domain/device/src/pnp/audio_input_thread.cpp",
      "server/domain/device/src/pnp/audio_pnp_server.cpp",
      "server/domain/device/src/pnp/audio_socket_thread.cpp",
    ]
  }

  if (build_variant == "user") {
    defines += [ "AUDIO_BUILD_VARIANT_USER" ]
  } else if (build_variant == "root") {
    defines += [ "AUDIO_BUILD_VARIANT_ROOT" ]
  }

  if (use_libfuzzer || use_clang_coverage) {
    defines += [ "TEST_COVERAGE" ]
  }

  if (audio_framework_feature_support_os_account) {
    defines += [ "SUPPORT_USER_ACCOUNT" ]
  }

  if (audio_framework_feature_dtmf_tone) {
    sources += [ "server/infra/config/parser/src/audio_tone_parser.cpp" ]
    defines += [ "FEATURE_DTMF_TONE" ]
  }

  if (is_emulator) {
    defines += [ "IS_EMULATOR" ]
  }

  if (audio_framework_feature_inner_capturer) {
    defines += [ "HAS_FEATURE_INNERCAPTURER" ]
  }

  if (audio_framework_feature_multi_alarm_level) {
    defines += [ "MULTI_ALARM_LEVEL" ]
  }

  if (audio_framework_feature_source_period_size > 1 && audio_framework_feature_source_period_size < 20) {
    defines += [
      "SOURCE_PERIOD_SIZE=$audio_framework_feature_source_period_size",
    ]
  } else {
    defines += [
      "SOURCE_PERIOD_SIZE=1",
    ]
  }

  if (audio_framework_feature_input_independent_routing_rule) {
    defines += [ "INPUT_FEATURE_INDEPENDENT_MODE" ]
  }

  public_configs = [
    ":audio_policy_public_config",
    "../audio_service/idl:audio_policy_sa_idl_config",
  ]

  deps = [
    "../../services/audio_service/idl:audio_framework_interface",
    "../../services/audio_service/idl:audio_policy_idl_callback",
    "../../frameworks/native/audioadapter:pro_audio_service_adapter",
    "../../frameworks/native/audiodefinitions:audio_definitions",
    "../../frameworks/native/audioinnercall:audio_inner_call",
    "../../frameworks/native/audioutils:audio_utils",
    "../../frameworks/native/audioutils:audio_xml_utils",
    "../audio_policy:audio_config.para",
    "../audio_policy:audio_config.para.dac",
    "../audio_policy:audio_foundation",
    "../audio_policy:audio_setting_provider",
    "../audio_service:audio_common",
    "../audio_service:audio_process_service_static",
    "../audio_engine:hpae_engine_manager",
    "../../frameworks/native/hdiadapter_new:hdiadapter_new",
  ]

  external_deps = [
    "ability_base:session_info",
    "ability_base:want",
    "ability_base:zuri",
    "ability_runtime:ability_connect_callback_stub",
    "ability_runtime:ability_context_native",
    "ability_runtime:app_context",
    "ability_runtime:app_manager",
    "ability_runtime:dataobs_manager",
    "ability_runtime:extension_manager",
    "ability_runtime:wantagent_innerkits",
    "access_token:libaccesstoken_sdk",
    "access_token:libprivacy_sdk",
    "access_token:libtokenid_sdk",
    "access_token:libtokensetproc_shared",
    "background_task_mgr:bgtaskmgr_innerkits",
    "bounds_checking_function:libsec_shared",
    "bundle_framework:appexecfwk_base",
    "bundle_framework:appexecfwk_core",
    "c_utils:utils",
    "cJSON:cjson",
    "data_share:datashare_common",
    "data_share:datashare_consumer",
    "drivers_interface_audio:libaudio_proxy_6.1",
    "eventhandler:libeventhandler",
    "hdf_core:libhdf_host",
    "hdf_core:libhdf_ipc_adapter",
    "hdf_core:libhdf_utils",
    "hdf_core:libhdi",
    "hdf_core:libpub_utils",
    "hilog:libhilog",
    "hisysevent:libhisysevent",
    "init:libbegetutil",
    "ipc:ipc_single",
    "ipc:ipc_core",
    "kv_store:distributeddata_inner",
    "libxml2:libxml2",
    "media_foundation:media_monitor_client",
    "media_foundation:media_monitor_common",
    "os_account:os_account_innerkits",
    "power_manager:power_setting",
    "power_manager:powermgr_client",
    "safwk:system_ability_fwk",
    "samgr:samgr_proxy",
    "init:libbeget_proxy",
  ]

  public_external_deps = [ "ffrt:libffrt" ]

  if (audio_framework_feature_usb_audio) {
    defines += [ "USB_ENABLE" ]
    external_deps += [ "usb_manager:usbsrv_client" ]
    sources += [ "server/domain/device/src/pnp/audio_usb_manager.cpp" ]
  }

  if (audio_framework_feature_hdmi_detect_audio) {
    defines += [ "HDMI_DETECT_ENABLE" ]
  }

  if (target_platform != "watch" && target_platform != "glasses") {
    defines += [ "HAS_WINDOW_MANAGER" ]
    external_deps += [
      "window_manager:session_manager_lite",
      "window_manager:libwm_lite",
    ]
    sources += [ "server/infra/window/window_utils.cpp" ]
  }

  if (audio_framework_feature_detect_soundbox) {
    defines += [ "DETECT_SOUNDBOX" ]
  }

  if (audio_framework_feature_wireless_default_exclude) {
    defines += [ "WIRELESS_DEFAULT_EXCLUDE" ]
  }

  if (audio_framework_feature_exclude_indirect_usb_input_device) {
    defines += [ "EXCLUDE_INDIRECT_USB_INPUT_DEVICE" ]
  }

  if (audio_framework_config_policy_enable) {
    defines += [ "USE_CONFIG_POLICY" ]
    external_deps += [ "config_policy:configpolicy_util" ]
  }

  if (appgallery_part_enable == true) {
    defines += [ "FEATURE_APPGALLERY" ]
  }

  if (bluetooth_part_enable == true) {
    deps += [ "../../frameworks/native/bluetoothclient:audio_bluetooth_client" ]
    external_deps += [ "bluetooth:btframework" ]
  }

  if (audio_framework_feature_input) {
    defines += [ "FEATURE_MULTIMODALINPUT_INPUT" ]
    external_deps += [ "input:libmmi-client" ]
  }

  if (audio_framework_feature_device_manager) {
    defines += [ "FEATURE_DEVICE_MANAGER" ]
    external_deps += [ "device_manager:devicemanagersdk" ]
  }

  if (target_platform == "watch" ||
    target_platform == "glasses") {
    defines += [ "ACTIVATED_RECLAIM_MEMORY" ]
  }

  cflags = [ "-Os" ]
  cflags_cc = cflags
  subsystem_name = "multimedia"
  part_name = "audio_framework"
  version_script = "libaudio_policy_service.versionscript"
}

ohos_prebuilt_etc("audio_interrupt_policy_config") {
  source = "server/infra/config/file/audio_interrupt_policy_config.xml"

  subsystem_name = "multimedia"
  relative_install_dir = "audio"
  part_name = "audio_framework"
}

ohos_prebuilt_etc("audio_strategy_router") {
  source = "server/infra/config/file/audio_strategy_router.xml"

  subsystem_name = "multimedia"
  relative_install_dir = "audio"
  part_name = "audio_framework"
}

ohos_prebuilt_etc("audio_usage_strategy") {
  source = "server/infra/config/file/audio_usage_strategy.xml"

  subsystem_name = "multimedia"
  relative_install_dir = "audio"
  part_name = "audio_framework"
}

ohos_prebuilt_etc("audio_device_config") {
  source = "server/infra/config/file/audio_device_privacy.xml"

  subsystem_name = "multimedia"
  relative_install_dir = "audio"
  part_name = "audio_framework"
}

ohos_prebuilt_etc("audio_volume_config") {
  source = "server/infra/config/file/audio_volume_config.xml"

  subsystem_name = "multimedia"
  relative_install_dir = "audio"
  part_name = "audio_framework"
}

ohos_prebuilt_etc("audio_policy_global_config") {
  source = "server/infra/config/file/audio_policy_global_config.xml"

  subsystem_name = "multimedia"
  relative_install_dir = "audio"
  part_name = "audio_framework"
}

if (audio_framework_feature_dtmf_tone) {
  ohos_prebuilt_etc("audio_tone_dtmf_config") {
    source = "server/infra/config/file/audio_tone_dtmf_config.xml"

    subsystem_name = "multimedia"
    relative_install_dir = "audio"
    part_name = "audio_framework"
  }
}

ohos_prebuilt_etc("audio_converter_config") {
  source = "server/infra/config/file/audio_converter_config.xml"

  subsystem_name = "multimedia"
  relative_install_dir = "audio"
  part_name = "audio_framework"
}

ohos_prebuilt_etc("audio_config.para") {
  source = "etc/audio_config.para"
  subsystem_name = "multimedia"
  part_name = "audio_framework"
  module_install_dir = "etc/param"
}

ohos_prebuilt_etc("audio_config.para.dac") {
  source = "etc/audio_config.para.dac"
  subsystem_name = "multimedia"
  part_name = "audio_framework"
  module_install_dir = "etc/param"
}

config("audio_policy_client_config") {
  include_dirs = [
    "client/proxy/include",
    "client/stub/include",
    "client/service/include",
    "common/include",
    "client/interface",
    "server/include",
    "server/proxy/include",
    "server/stub/include",
    "server/service/service_main/include",
    "server/domain/effect/include",
    "../audio_service/client/include",
    "../audio_service/common/include",
    "../../frameworks/native/audiodefinitions/include",
    "../../frameworks/native/audiopolicy/include",
    "../../interfaces/inner_api/native/audiocommon/include",
    "../../interfaces/inner_api/native/audiomanager/include",
    "../../interfaces/inner_api/native/audiocapturer/include",
  ]

  cflags = [
    "-Wall",
    "-Werror",
  ]

  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }
}

audio_ohos_library("audio_policy_client") {
  branch_protector_ret = "pac_ret"
  install_enable = true

  defines = []
  if (audio_framework_feature_dtmf_tone) {
    defines += [ "FEATURE_DTMF_TONE" ]
  }

  if (audio_framework_feature_inner_capturer) {
    defines += [ "HAS_FEATURE_INNERCAPTURER" ]
  }

  sources = [
    "../audio_policy/server/domain/device/src/audio_device_descriptor.cpp",
    "../audio_service/client/src/audio_filter.cpp",
    "../audio_service/client/src/microphone_descriptor.cpp",
    "client/service/src/audio_policy_manager.cpp",
    "client/service/src/audio_policy_manager_device.cpp",
    "client/service/src/audio_policy_manager_zone.cpp",
    "client/service/src/audio_record_control_manager.cpp",
    "client/service/src/audio_routing_manager_listener.cpp",
    "client/service/src/audio_anahs_manager_listener.cpp",
    "client/service/src/audio_zone_manager.cpp",
    "server/domain/volume/src/audio_volume_group_info.cpp",
    "client/stub/src/audio_policy_client_stub_impl.cpp",
    "client/stub/src/audio_policy_manager_listener_stub_impl.cpp",
    "client/stub/src/audio_zone_client.cpp",
    "client/stub/src/sle_audio_operation_callback_stub_impl.cpp",
    "server/src/audio_client_tracker_callback_service.cpp",
    "server/src/audio_spatialization_state_change_listener.cpp",
  ]

  deps = [
    "../../frameworks/native/audiodefinitions:audio_definitions",
    "../../frameworks/native/audioutils:audio_utils",
    "../../services/audio_service/idl:audio_policy_client_idl_interface",
    "../../services/audio_service:audio_common",
  ]

  public_configs = [ ":audio_policy_client_config" ]

  include_dirs = [
    "../../frameworks/native/audioutils/include",
    "../../services/audio_service/common/include/",
    "../../services/audio_service/common/include/dfx",
  ]

  external_deps = [
    "bounds_checking_function:libsec_shared",
    "c_utils:utils",
    "eventhandler:libeventhandler",
    "hilog:libhilog",
    "init:libbegetutil",
    "ipc:ipc_single",
    "ipc:ipc_core",
    "media_foundation:media_monitor_client",
    "media_foundation:media_monitor_common",
    "samgr:samgr_proxy",
  ]
  subsystem_name = "multimedia"
  innerapi_tags = [ "platformsdk" ]
  cflags = [ "-Os" ]
  cflags_cc = cflags
  part_name = "audio_framework"

  ldflags = [ "-Wl,-Bsymbolic" ]
  version_script = "libaudio_policy_client.versionscript"
}

group("audio_policy_test_packages") {
  testonly = true

  deps = [
    ":audio_dump_test",
    ":audio_policy_test",
    "test:audio_policy_unittest_packages",
    "client/stub:audio_zone_client_unit_test",
    "client/stub:audio_policy_manager_listener_stub_impl_unit_test",
    "client/service/test:audio_policy_manager_device_unit_test",
    "server/infra/config/parser/test:audio_policy_config_parser_unittest_packages",
    "server/domain/device:audio_device_common_unit_next_test",
    "server/domain/device/test:audio_device_status_extended_test",
    "server/domain/effect/test:audio_spatialization_service_extended_test",
    "server/domain/device/test:audio_active_device_new_unit_test",
    "server/domain/router/test:audio_router_unittest_packages",
    "server/domain/router_context/test:audio_router_context_test",
    "server/domain/session/test:audio_policy_session_unit_test",
    "server/domain/volume/test:audio_volume_unittest_packages",
    "server/service/service_main/test:audio_loopback_manager_unit_test",
    "server/service/service_main/test:audio_policy_dump_unit_test",
    "server/service/service_main/test:audio_policy_server_extended_test",
    "server/service/service_main/test:audio_policy_service_ext_unit_test",
    "server/service/service_main/test:device_init_callback_unit_test",
    "server/infra/state_monitor/test:audio_policy_state_monitor_unittest_packages",
    "server/infra/ipc_proxy/test:audio_policy_ipc_proxy_unittest_packages",
    "server/common/test:audio_policy_server_common_unittest_packages",
    "server/src/test:audio_server_src_unittest_packages",
  ]
}

ohos_executable("audio_dump_test") {
  install_enable = false
  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
    integer_overflow = true
    ubsan = true
    boundary_sanitize = true
  }
  sources = [ "test/example/audio_dump_test.cpp" ]

  configs = [ ":audio_policy_client_config" ]

  deps = [
    "../audio_policy:audio_policy_client",
    "../audio_service:audio_client",
    "../audio_service:audio_engine_manager",
    "../audio_service:audio_policy_manager",
    "../audio_service:audio_stream_client",
  ]

  include_dirs = []

  external_deps = [
    "bounds_checking_function:libsec_shared",
    "c_utils:utils",
    "hilog:libhilog",
    "ipc:ipc_single",
  ]

  part_name = "audio_framework"
  subsystem_name = "multimedia"
}

ohos_executable("audio_policy_test") {
  install_enable = false

  sources = [ "test/example/audio_policy_test.cpp" ]

  configs = [ ":audio_policy_client_config" ]

  deps = [
    "../audio_policy:audio_foundation",
    "../audio_policy:audio_policy_client",
    "../audio_service:audio_client",
    "../audio_service:audio_engine_manager",
    "../audio_service:audio_policy_manager",
    "../audio_service:audio_stream_client",
  ]

  include_dirs = []

  external_deps = [
    "bounds_checking_function:libsec_shared",
    "c_utils:utils",
    "hilog:libhilog",
    "ipc:ipc_single",
  ]

  part_name = "audio_framework"
  subsystem_name = "multimedia"
}

ohos_executable("audio_route_selector_test") {
  install_enable = false
  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
    integer_overflow = true
    ubsan = true
    boundary_sanitize = true
  }

  sources = [ "test/example/audio_route_selector_test.cpp" ]

  configs = [ ":audio_policy_client_config" ]

  deps = [
    "../audio_policy:audio_policy_client",
    "../audio_service:audio_client",
    "../audio_service:audio_engine_manager",
    "../audio_service:audio_policy_manager",
    "../audio_service:audio_stream_client",
  ]

  external_deps = [
    "bounds_checking_function:libsec_shared",
    "c_utils:utils",
    "hilog:libhilog",
    "ipc:ipc_single",
  ]

  part_name = "audio_framework"
  subsystem_name = "multimedia"
}

config("audio_foundation_public_config") {
  include_dirs = [
    "util/include",
    "server/domain/device/include",
    "server/domain/effect/include",
    "../audio_service/util/include",
    "../../interfaces/inner_api/native/audiocommon/include",
    "../../interfaces/inner_api/native/audiomanager/include",
    "../../frameworks/native/audiopolicy/include",
    "//foundation/multimedia/audio_framework/services/audio_service/idl",
  ]
}

ohos_shared_library("audio_foundation") {
  branch_protector_ret = "pac_ret"
  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
    integer_overflow = true
    ubsan = true
    boundary_sanitize = true
  }
  install_enable = true
  sources = [
    "../audio_service/client/src/audio_filter.cpp",
    "../audio_service/client/src/audio_manager_util.cpp",
    "server/domain/device/src/audio_device_descriptor.cpp",
    "server/domain/device/src/audio_device_type.cpp",
    "server/domain/effect/src/audio_effect_map.cpp",
  ]

  public_configs = [
    ":audio_foundation_public_config",
    "../../services/audio_service/idl:audio_service_sa_idl_config",
    "../../services/audio_service/idl:audio_policy_sa_idl_config",
  ]

  deps = [
    "../../frameworks/native/audioutils:audio_utils",
    "../audio_policy:audio_policy_client",
    "../audio_service:audio_common",
  ]

  external_deps = [
    "hilog:libhilog",
    "ipc:ipc_core",
    "samgr:samgr_proxy",
  ]

  cflags = [ "-Os" ]
  cflags_cc = cflags

  defines = []
  if (audio_framework_feature_detect_soundbox) {
    defines += [ "DETECT_SOUNDBOX" ]
  }

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "multimedia"
  part_name = "audio_framework"
}

config("audio_manager_client_public_config") {
  include_dirs = [
    "util/include",
    "server/domain/device/include",
    "server/domain/effect/include",
    "client/service/include",
    "../../frameworks/native/audiodefinitions/include",
    "../../frameworks/native/audiodefinitions/include/common",
    "../../frameworks/native/hdiadapter_new/include/common",
    "../../interfaces/inner_api/native/audiocommon/include"
  ]
}

ohos_shared_library("audio_manager_client") {
  branch_protector_ret = "pac_ret"
  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
    integer_overflow = true
    ubsan = true
    boundary_sanitize = true
  }
  install_enable = true
  sources = [
    "../audio_service/client/src/audio_anahs_manager.cpp",
    "../audio_service/client/src/audio_focus_info_change_callback_impl.cpp",
    "client/service/src/audio_general_manager.cpp",
    "server/domain/device/src/audio_device_capability.cpp",
  ]

  public_configs = [ ":audio_manager_client_public_config" ]

  deps = [
    ":audio_foundation",
    ":audio_policy_client",
    "../../frameworks/native/audioutils:audio_utils",
    "../audio_service:audio_common",
  ]

  external_deps = [
    "bundle_framework:appexecfwk_base",
    "bundle_framework:appexecfwk_core",
    "cJSON:cjson",
    "eventhandler:libeventhandler",
    "hicollie:libhicollie",
    "hilog:libhilog",
    "ipc:ipc_single",
    "samgr:samgr_proxy",
  ]

  defines = []
  if (audio_framework_feature_inner_capturer) {
    defines += [ "HAS_FEATURE_INNERCAPTURER" ]
  }

  if (audio_framework_feature_multi_zone_volume) {
    defines += [ "FEATURE_AUDIO_ZONE_VOLUME" ]
  }

  cflags = [ "-Os" ]
  cflags_cc = cflags

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "multimedia"
  part_name = "audio_framework"
}

config("audio_policy_common_public_config") {
  include_dirs = [
    "../../interfaces/inner_api/native/audiomanager/include",
    "../../interfaces/inner_api/native/audiocommon/include",
    "../audio_service/client/include",
  ]
}

ohos_shared_library("audio_policy_common") {
  branch_protector_ret = "pac_ret"
  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
    integer_overflow = true
    ubsan = true
    boundary_sanitize = true
  }
  install_enable = true
  sources = [
    "../audio_service/client/src/resource_manager_adapter.cpp",
  ]

  public_configs = [ ":audio_policy_common_public_config" ]

  external_deps = [
    "ability_base:configuration",
    "c_utils:utils",
    "common_event_service:cesfwk_innerkits",
    "hilog:libhilog",
    "i18n:intl_util",
    "ipc:ipc_core",
    "resource_management:global_resmgr",
    "icu:shared_icuuc",
  ]

  cflags = [ "-Os" ]
  cflags_cc = cflags

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "multimedia"
  part_name = "audio_framework"
}