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

assert(!is_component_build, "component build is unsupported on iOS")

declare_args() {
  # Control whether cronet is build (this is usually set by the script
  # components/cronet/tools/cr_cronet.py as cronet requires specific
  # gn args to build correctly).
  is_cronet_build = false
}

# This list all targets that needs to be build as part of "gn_all" on iOS.
# This list should generally only include executables, but since some code
# has not yet been upstreamed it will sometimes also include targets that
# are not used upstream to ensure they are not broken inadvertently.
group("all") {
  testonly = true
  if (is_cronet_build) {
    deps = [
      "//components/cronet/ios:cronet_package",
      "//ios/crnet:crnet_framework",
      "//ios/crnet/crnet_consumer",
      "//ios/crnet/test:crnet_test",
    ]
  } else {
    deps = [
      # List all the targets that need to be build on iOS by default.
      "//ios/chrome/app:chrome",
      "//ios/chrome/app:chrome_clean_skeleton",
      "//ios/showcase",
      "//ios/web/shell:ios_web_shell",

      # List all the test targets that need to be build on iOS by default.
      "//ios/chrome/test:all_tests",
      "//ios/chrome/test/earl_grey:all_tests",
      "//ios/net:all_tests",
      "//ios/showcase:all_tests",
      "//ios/testing:all_tests",
      "//ios/web:all_tests",
      "//ios/web/shell/test:all_tests",

      # Those dependencies are currently only used from downstream code
      # and will be removed once the dependent code has been upstreamed.
      "//ios/chrome/share_extension",
      "//ios/chrome/today_extension",
    ]
  }
}
