# Copyright (c) 2020-2022 Project CHIP Authors
#
# 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_overrides/chip.gni")

import("${chip_root}/config/ios/args.gni")

chip_device_project_config_include = "<CHIPProjectAppConfig.h>"
chip_project_config_include = "<CHIPProjectAppConfig.h>"
chip_system_project_config_include = "<SystemProjectConfig.h>"

chip_project_config_include_dirs += [
  "${chip_root}/examples/tv-casting-app/tv-casting-common/include",
  "${chip_root}/examples/tv-casting-app/tv-casting-common",
]
chip_project_config_include_dirs += [ "${chip_root}/config/ios" ]

chip_build_libshell = true

# Example Credentials like ExampleDAC.h/cpp are not required for the tv-casting-app
chip_build_example_creds = false

chip_enable_additional_data_advertising = true

chip_enable_rotating_device_id = true

chip_config_network_layer_ble = false

chip_max_discovered_ip_addresses = 20
