# 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")

import("//ios/features.gni")

declare_args() {
  # TODO(brettw) bug 684096: Remove these. These are to prevent unused
  # override warnings on iOS from the setting of the default_args in the
  # toplevel //.gn file. Since iOS doesn't compile V8, GN complains that
  # the overrides are never used.
  v8_extra_library_files = []
  v8_experimental_extra_library_files = []
  v8_enable_gdbjit = false
  v8_imminent_deprecation_warnings = false
}

# Prevent warnings for unused build args above.
assert(v8_extra_library_files != 0)
assert(v8_experimental_extra_library_files != 0)
assert(!v8_enable_gdbjit)
assert(!v8_imminent_deprecation_warnings)

# 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/share_extension",
      "//ios/chrome/today_extension",
      "//ios/chrome/widget_extension",
      "//ios/clean/chrome/app:chrome_clean_skeleton",
      "//ios/showcase",
      "//ios/web/shell:ios_web_shell",
      "//ios/web_view/shell:ios_web_view_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/clean/chrome/test:all_tests",
      "//ios/net:all_tests",
      "//ios/showcase:all_tests",
      "//ios/testing:all_tests",
      "//ios/web:all_tests",
      "//ios/web/shell/test:all_tests",
    ]
  }
}
