# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Features used by targets inside and outside of |url|.
# For details see declare_args() in build/config/BUILDCONFIG.gn.
declare_args() {
  # Enables the use of ICU alternatives in lieu of ICU for the target toolchain.
  # The flag is used for Cronet to reduce the size of the Cronet binary.
  use_platform_icu_alternatives = false
}

# Never use platform icu for host toolchain.
# E.g. Don't apply this for host binaries when target_os = "android".
use_platform_icu_alternatives =
    use_platform_icu_alternatives && current_toolchain == default_toolchain
