# 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
  v8_check_microtasks_scopes_consistency = 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)
assert(!v8_check_microtasks_scopes_consistency)

# 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/test:crnet_test",
    ]
  } else {
    deps = [
      # List all the targets that need to be built on iOS by default.
      "//ios/chrome/app:chrome",
      "//ios/chrome/content_widget_extension",
      "//ios/chrome/search_widget_extension",
      "//ios/chrome/share_extension",
      "//ios/chrome/today_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 built on iOS by default.
      "//ios/chrome/test:all_tests",
      "//ios/chrome/test/earl_grey:all_tests",
      "//ios/clean/chrome/test:all_tests",
      "//ios/components:all_tests",
      "//ios/net:all_tests",
      "//ios/showcase:all_tests",
      "//ios/testing:all_tests",
      "//ios/web:all_tests",
      "//ios/web/shell/test:all_tests",
      "//ios/web_view/shell/test:all_tests",
      "//ios/web_view/test:all_tests",
    ]
  }
}
