# Copyright 2019 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.

if (target_os == "") {
  target_os = "ios"
}
if (target_cpu == "") {
  target_cpu = host_cpu
}
if (current_cpu == "") {
  current_cpu = target_cpu
}
if (current_os == "") {
  current_os = target_os
}

# All binary targets will get this list of configs by default.
_shared_binary_target_configs = [ "//build:compiler" ]

# Apply that default list to the binary target types.
set_defaults("executable") {
  configs = _shared_binary_target_configs
  configs += [ "//build:shared_binary" ]
}
set_defaults("static_library") {
  configs = _shared_binary_target_configs
}
set_defaults("shared_library") {
  configs = _shared_binary_target_configs
  configs += [ "//build:shared_binary" ]
}
set_defaults("source_set") {
  configs = _shared_binary_target_configs
}

set_default_toolchain("//build/toolchain/$target_os:clang_$target_cpu")

if (target_os == "ios") {
  host_toolchain = "//build/toolchain/$host_os:clang_$host_cpu"
} else {
  host_toolchain = default_toolchain
}
