# Copyright (c) 2013 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.

# This is the root build file for GN. GN will start processing by loading this
# file, and recursively load all dependencies until all dependencies are either
# resolved or known not to exist (which will cause the build to fail). So if
# you add a new build file, there must be some path of dependencies from this
# file to your new one or GN won't know about it.

import("//build/config/features.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/ui.gni")
import("//build_overrides/v8.gni")
import("//media/media_options.gni")
import("//third_party/openh264/openh264_args.gni")

if (is_android) {
  import("//build/config/android/config.gni")
}

declare_args() {
  # A list of extra dependencies to add to the root target. This allows a
  # checkout to add additional targets without explicitly changing any checked-
  # in files.
  root_extra_deps = []
}

# This file defines the following five main targets:
#
# "both_gn_and_gyp" should list every root target (target that nothing else
# depends on) built by GN that is also built in the GYP build.
#
# "gn_all" should (transitively) cause everything to be built; if you run
# 'ninja gn_all' and then 'ninja all', the second build should do no work.
#
# "gn_only" should list every root target that is *not* intended to be built in
# a GYP build. Because GN has different rules for deciding what an 'all' build
# is, this may end up including targets that are actually defined in a GYP
# build but not dependencies of GYP's "all" (and so not actually built).
#
# "gn_visibility": targets that are normally not visible to top-level targets,
# but are built anyway by "all". Since we don't want any such targets, we have
# this placeholder to make sure hidden targets that aren't otherwise depended
# on yet are accounted for.
#
# "All" is an alias for "gn_all". It exists for bot compatibility w/ GYP for
# the iOS bots and the official builders, but should not be generally used
# during the GYP->GN migration.  We cannot guarantee that GN's "All" builds the
# same set of targets as GYP's "All" does, because GYP's "All" supports
# wildcards.
#
# Lastly, none of these targets are guaranteed to be the same as what ninja
# will build with "all". For more on how "all" works and the differences in how
# GYP and GN determine "all", see crbug.com/503241.
#
# TODO(GYP): crbug.com/481694. Make sure that the above is true and there are
# scripts run on the bots that enforce this. Once the GYP migration is over, we
# can collapse all of these targets as desired.

group("gn_all") {
  testonly = true

  deps = [
    ":both_gn_and_gyp",
    ":gn_only",
    ":gn_visibility",
  ]
}

# TODO(GYP): This target exists for compatibility with GYP, specifically
# for the iOS bots and the official builders.
group("All") {
  testonly = true

  deps = [
    ":gn_all",
  ]
}

# The "both_gn_and_gyp" target should reflect every target that is built
# in both the GN and GYP builds, and ideally it should match the
# "both_gn_and_gyp" target in build/gn_migration.gypi line-for-line.
#
# TODO(GYP): Add build steps that check and enforce this on the bots.
group("both_gn_and_gyp") {
  testonly = true
  deps = [
    "//base:base_unittests",
    "//chrome/installer",
    "//components:components_unittests",
    "//net:net_unittests",
    "//skia:skia_unittests",
    "//sql:sql_unittests",
    "//sync:sync_unit_tests",
    "//ui/base:ui_base_unittests",
    "//ui/gfx:gfx_unittests",
    "//url:url_unittests",
  ]

  if (!is_android && !is_chromecast) {
    deps += [
      "//crypto:crypto_unittests",
      "//google_apis/gcm:gcm_unit_tests",
    ]
  }

  if (!is_ios && !is_android && !is_chromecast) {
    deps += [
      "//chrome",
      "//chrome/test:browser_tests",
      "//chrome/test:interactive_ui_tests",
      "//chrome/test:sync_integration_tests",
      "//chrome/test/chromedriver:chromedriver_unittests",
      "//extensions:extensions_browsertests",
      "//extensions:extensions_unittests",
      "//gpu/gles2_conform_support:gles2_conform_test",
      "//jingle:jingle_unittests",
      "//net:hpack_example_generator",
      "//net:hpack_fuzz_mutator",
      "//net:hpack_fuzz_wrapper",
      "//ppapi:ppapi_unittests",
      "//ppapi/examples/2d",
      "//ppapi/examples/audio",
      "//ppapi/examples/audio_input",
      "//ppapi/examples/compositor",
      "//ppapi/examples/crxfs",
      "//ppapi/examples/enumerate_devices",
      "//ppapi/examples/file_chooser",
      "//ppapi/examples/flash_topmost",
      "//ppapi/examples/font",
      "//ppapi/examples/gamepad",
      "//ppapi/examples/gles2",
      "//ppapi/examples/gles2_spinning_cube",
      "//ppapi/examples/ime",
      "//ppapi/examples/input",
      "//ppapi/examples/media_stream_audio",
      "//ppapi/examples/media_stream_video",
      "//ppapi/examples/mouse_cursor",
      "//ppapi/examples/mouse_lock",
      "//ppapi/examples/printing",
      "//ppapi/examples/scaling",
      "//ppapi/examples/scripting",
      "//ppapi/examples/stub",
      "//ppapi/examples/threading",
      "//ppapi/examples/url_loader",
      "//ppapi/examples/video_capture",
      "//ppapi/examples/video_decode",
      "//ppapi/examples/video_effects",
      "//ppapi/examples/video_encode",
      "//printing:printing_unittests",
      "//third_party/cacheinvalidation:cacheinvalidation_unittests",
      "//third_party/codesighs",
      "//third_party/pdfium/samples:pdfium_test",
      "//tools/battor_agent",
      "//tools/battor_agent:battor_agent_unittests",
      "//tools/gn",
      "//tools/gn:gn_unittests",
      "//tools/perf/clear_system_cache",
      "//ui/accessibility:accessibility_unittests",
      "//ui/app_list:app_list_unittests",
    ]
  }

  if (!is_ios) {
    # TODO(GYP): Figure out which of these should actually build on iOS,
    # and whether there should be other targets that are iOS-only and missing.
    deps += [
      "//cc:cc_unittests",
      "//chrome/test:unit_tests",
      "//components:components_browsertests",
      "//content/shell:content_shell",
      "//content/test:content_browsertests",
      "//content/test:content_perftests",
      "//content/test:content_unittests",
      "//device:device_unittests",
      "//gpu:gpu_unittests",
      "//gpu/ipc/service:gpu_ipc_service_unittests",
      "//ipc:ipc_tests",
      "//ipc/mojo:ipc_mojo_unittests",
      "//media:media_unittests",
      "//media/cast:cast_unittests",
      "//media/midi:midi_unittests",
      "//mojo",
      "//mojo/common:mojo_common_unittests",
      "//mojo/edk/system:mojo_system_unittests",
      "//mojo/edk/test:mojo_public_bindings_unittests",
      "//mojo/edk/test:mojo_public_system_unittests",
      "//mojo/shell/public/cpp",
      "//net:net_perftests",
      "//third_party/WebKit/Source/platform:blink_heap_unittests",
      "//third_party/WebKit/Source/platform:blink_platform_unittests",
      "//third_party/WebKit/Source/web:webkit_unit_tests",
      "//third_party/WebKit/Source/wtf:wtf_unittests",
      "//third_party/catapult/telemetry:bitmaptools($host_toolchain)",
      "//third_party/smhasher:pmurhash",
      "//tools/imagediff($host_toolchain)",
      "//ui/display:display_unittests",
      "//ui/events:events_unittests",
      "//ui/gl:gl_unittests",
      "//ui/touch_selection:ui_touch_selection_unittests",
      "//url/ipc:url_ipc_unittests",
    ]
  } else {
    deps += [
      "//ios/chrome:ios_chrome_unittests",
      "//ios/chrome/app",
      "//ios/chrome/browser",
      "//ios/chrome/common",
      "//ios/net:ios_net_unittests",
      "//ios/public/provider/chrome/browser",
      "//ios/public/provider/web",
      "//ios/testing:ocmock_support_unittest",
      "//ios/third_party/fishhook",
      "//ios/third_party/ochamcrest",
      "//ios/web:ios_web_inttests",
      "//ios/web:ios_web_unittests",
      "//ios/web/shell:ios_web_shell",
    ]
  }

  deps += root_extra_deps

  if (enable_extensions) {
    deps += [ "//extensions/shell:app_shell_unittests" ]
  }

  if (enable_media_router) {
    deps += [ "//chrome/browser/media/router" ]
  }

  if (enable_remoting) {
    deps += [ "//remoting:remoting_all" ]
  }

  if (toolkit_views) {
    deps += [ "//ui/views:views_unittests" ]
  }

  if (use_aura) {
    deps += [
      "//ash:ash_shell_with_content",
      "//ash:ash_unittests",
      "//ui/app_list/shower:app_list_shower_unittests",
      "//ui/aura:aura_unittests",
      "//ui/aura:demo",
      "//ui/wm:wm_unittests",
    ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }

  if (use_x11) {
    deps += [ "//tools/xdisplaycheck" ]
  }

  if (enable_configuration_policy) {
    deps += [ "//components/policy:policy_templates" ]
  }

  if (v8_use_external_startup_data) {
    deps += [ "//gin:gin_v8_snapshot_fingerprint" ]
  }

  if (is_win) {
    deps += [
      "//chrome/installer/gcapi",
      "//chrome/tools/build/win/syzygy:chrome_dll_syzygy",
    ]
  }

  if (is_android) {
    deps += [
      "//base:base_junit_tests",
      "//base/android/linker:chromium_android_linker",
      "//build/android/gyp/test:hello_world",
      "//build/android/rezip",
      "//components/invalidation/impl:components_invalidation_impl_junit_tests",
      "//components/policy/android:components_policy_junit_tests",
      "//content/public/android:content_junit_tests",
      "//content/shell/android:content_shell_apk",
      "//content/test:video_decode_accelerator_unittest",
      "//net/android:net_junit_tests",
      "//testing/android/junit:junit_unit_tests",
      "//third_party/android_tools:uiautomator_java",
      "//third_party/errorprone:chromium_errorprone",
      "//third_party/smhasher:murmurhash3",
      "//tools/android:android_tools",
      "//tools/android:memconsumer",
      "//tools/android:push_apps_to_background",
      "//tools/android/heap_profiler:heap_profiler_unittests",
      "//tools/android/kerberos/SpnegoAuthenticator:spnego_authenticator_apk",
      "//tools/cygprofile:cygprofile_unittests",
      "//tools/imagediff($host_toolchain)",
      "//ui/android:ui_junit_tests",
    ]
    deps -= [
      "//net:net_perftests",
      "//url:url_unittests",
    ]

    if (!is_component_build) {
      deps += [
        "//components/cronet/android:cronet_package",
        "//components/cronet/android:cronet_sample_apk",
        "//components/cronet/android:cronet_sample_test_apk",
        "//components/cronet/android:cronet_test_apk",
        "//components/cronet/android:cronet_test_instrumentation_apk",
        "//components/cronet/android:cronet_unittests",
      ]
    }

    if (!is_chromecast) {
      deps += [
        "//android_webview",
        "//android_webview/test",
        "//android_webview/tools/system_webview_shell",
        "//chrome/android:chrome_junit_tests",
        "//chrome/android:chrome_public_apk",
        "//chrome/android:chrome_public_test_apk",
        "//chrome/test/chromedriver/test/webview_shell:chromedriver_webview_shell_apk",
        "//content/shell/android:content_shell_test_apk",
        "//third_party/custom_tabs_client:custom_tabs_client_example_apk",
      ]
    }

    if (target_cpu != "x64") {
      deps += [ "//third_party/android_platform:android_relocation_packer_unittests($host_toolchain)" ]
    }

    if (has_chrome_android_internal) {
      deps += [ "//clank" ]  # TODO(GYP) ??
    }
  }

  if (is_linux || is_android) {  # TODO(GYP): || is_bsd?
    deps += [
      "//breakpad:breakpad_unittests",
      "//breakpad:core-2-minidump",
      "//breakpad:generate_test_dump",
      "//breakpad:minidump-2-core",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//chromeos:chromeos_unittests",
      "//ui/arc:ui_arc_unittests",
      "//ui/chromeos:ui_chromeos_unittests",
    ]
  }

  if (is_chromeos || is_mac || is_win) {
    deps += [
      "//rlz:rlz_id",
      "//rlz:rlz_lib",
      "//rlz:rlz_unittests",
    ]
  }

  if (is_linux) {
    # The following are definitely linux-only.
    deps += [
      "//chrome:manpage",
      "//chrome:xdg_mime",
      "//dbus:dbus_test_server",
      "//dbus:dbus_unittests",
      "//net:disk_cache_memory_test",
      "//net:flip_in_mem_edsm_server",
      "//net:flip_in_mem_edsm_server_unittests",
      "//net:quic_client",
      "//net:quic_server",
      "//sandbox/linux:chrome_sandbox",
      "//sandbox/linux:sandbox_linux_unittests",
    ]

    if (is_chromeos || use_ash) {
      deps += [ "//components/session_manager/core" ]
    }

    if (is_chrome_branded && is_official_build) {
      # TODO(dpranke): add the linux_dump_symbols flag?
      deps += [ "//chrome:linux_symbols" ]
    }
  }

  if (is_ios || is_win || (is_linux && !is_chromeos)) {
    deps += [
      "//base:base_i18n_perftests",
      "//base:base_perftests",
      "//google_apis:google_apis_unittests",
    ]
  }

  if (is_android || is_win || (is_linux && !is_chromeos)) {
    deps += [
      "//base:build_utf8_validator_tables",
      "//base:check_example",
      "//cc:cc_perftests",
      "//cc/blink:cc_blink_unittests",
      "//components:components_perftests",
      "//content/test:content_gl_benchmark",
      "//content/test:content_gl_tests",
      "//device:device_unittests",
      "//gin:gin_shell",
      "//gin:gin_unittests",
      "//google_apis/gcm:mcs_probe",
      "//gpu:gl_tests",
      "//gpu:gpu_perftests",
      "//ipc:ipc_perftests",
      "//media:media_perftests",
      "//net:dump_cache",
      "//sync:run_sync_testserver",
      "//third_party/codesighs:maptsvdifftool",
      "//third_party/libphonenumber:libphonenumber_unittests",
      "//ui/compositor:compositor_unittests",
    ]

    # TODO(GYP): Figure out which of these should (and can) build
    # for chromeos/mac/ios.
    if (!is_android) {
      deps += [
        "//chrome/test:load_library_perf_tests",
        "//chrome/test:sync_performance_tests",
        "//chrome/test/chromedriver:chromedriver",
        "//chrome/test/chromedriver:chromedriver_tests",
        "//courgette:courgette",
        "//courgette:courgette_fuzz",
        "//courgette:courgette_minimal_tool",
        "//courgette:courgette_unittests",
        "//media/cast:generate_barcode_video",
        "//media/cast:generate_timecode_audio",
        "//net:crash_cache",
        "//net:crl_set_dump",
        "//net:dns_fuzz_stub",
        "//net:gdig",
        "//net:get_server_time",
        "//net:net_watcher",  # TODO(GYP): This should be conditional on use_v8_in_net
        "//net:run_testserver",
        "//net:stress_cache",
        "//net:tld_cleanup",
        "//ppapi:pepper_hash_for_uma",
        "//ppapi:ppapi_perftests",
        "//third_party/angle/src/tests:angle_unittests",
        "//third_party/leveldatabase:env_chromium_unittests",
        "//third_party/libaddressinput:libaddressinput_unittests",
      ]
    }
    if (!is_android && !is_linux) {
      # TODO(dpranke): Re-enable this once
      # https://chromium-review.googlesource.com/#/c/312298/1 is rolled
      # into chromium.
      deps += [ "//third_party/angle/src/tests:angle_end2end_tests" ]
    }

    if (enable_extensions) {
      deps += [ "//extensions/shell:app_shell" ]
    }

    if (enable_nacl) {
      deps += [ "//components/nacl/loader:nacl_loader_unittests" ]

      if (is_linux) {
        # TODO(dpranke): Figure out what platforms should actually have this.
        deps += [
          "//components/nacl/loader:helper_nonsfi",
          "//components/nacl/loader:nacl_helper",
          "//components/nacl/loader:nacl_helper_nonsfi_unittests",
        ]
      }
    }

    if (media_use_ffmpeg && !is_android) {
      deps += [ "//media:ffmpeg_regression_tests" ]
    }
  }

  if (is_android || (is_linux && !is_chromeos)) {
    deps += [
      # TODO(GYP): Figure out which of these should (and can) build
      # under which other conditions.
      "//breakpad:dump_syms($host_toolchain)",
      "//breakpad:microdump_stackwalk($host_toolchain)",
      "//breakpad:minidump_dump($host_toolchain)",
      "//breakpad:minidump_stackwalk($host_toolchain)",
      "//components/network_hints/browser",
      "//content/public/app:browser",
      "//content/public/app:child",

      # TODO(GYP): Remove this when the gles2 tests work
      "//gpu/command_buffer/client:gles2_implementation_no_check",
      "//gpu/khronos_glcts_support:khronos_glcts_test",  # TODO(GYP) crbug.com/471903 to make this complete.
      "//mojo/edk/test:mojo_public_system_perftests",
      "//mojo/shell/public/cpp",
      "//testing/gmock:gmock_main",
      "//third_party/codesighs:nm2tsv",
    ]

    if (!is_android) {
      deps += [
        "//build/sanitizers:copy_llvm_symbolizer",
        "//chrome/test:chrome_app_unittests",
        "//media/cast:cast_benchmarks",
        "//media/cast:tap_proxy",
        "//skia:filter_fuzz_stub",
        "//skia:image_operations_bench",
        "//sync/tools:sync_client",
        "//sync/tools:sync_listen_notifications",
        "//third_party/sqlite:sqlite_shell",
        "//ui/keyboard:keyboard_unittests",
        "//ui/message_center:message_center_unittests",
        "//ui/snapshot:snapshot_unittests",
        "//ui/views/examples:views_examples_with_content_exe",
      ]

      if (!is_debug && !is_component_build) {
        deps += [ "//chrome/tools/service_discovery_sniffer" ]
      }
    }

    if (toolkit_views) {
      deps += [ "//ui/app_list:app_list_demo" ]
    }

    if (use_x11) {
      if (target_cpu != "arm") {
        deps += [ "//gpu/tools/compositor_model_bench" ]
      }
    }
  }

  if (is_mac) {
    deps += [
      "//breakpad:crash_inspector",
      "//breakpad:dump_syms",
      "//third_party/apple_sample_code",
      "//third_party/molokocacao",
    ]
    deps -= [
      # Mojo in GN contains some things which are never compiled in GYP on Mac,
      # so compilation fails on Mac. They need porting.
      "//mojo",
    ]
  }

  if (is_win) {
    deps += [
      "//base:pe_image_test",
      "//chrome/installer/setup:setup_unittests",
      "//chrome_elf:chrome_elf_unittests",
      "//chrome_elf:dll_hash_main",
      "//components/wifi:wifi_test",
      "//net:quic_client",
      "//net:quic_server",
      "//sandbox/win:pocdll",
      "//sandbox/win:sandbox_poc",
      "//sandbox/win:sbox_integration_tests",
      "//sandbox/win:sbox_unittests",
      "//sandbox/win:sbox_validation_tests",
      "//testing/gtest:gtest_main",
      "//third_party/codesighs:msmap2tsv",
      "//third_party/pdfium/samples:pdfium_diff",
    ]
    deps -= [
      "//crypto:crypto_unittests",  # TODO(GYP)
      "//net:net_unittests",  # TODO(GYP)
    ]
  } else if (!is_android && !is_ios) {
    deps += [ "//breakpad:symupload($host_toolchain)" ]
  }
  if (is_chromecast) {
    deps += [ "//chromecast:cast_shell" ]
  }

  if (is_mac) {  # TODO(GYP) || is_ios
    deps += [ "//media/cast:cast_h264_vt_encoder_unittests" ]
  }

  if (use_openh264) {
    deps += [
      "//third_party/openh264:common",
      "//third_party/openh264:encoder",
      "//third_party/openh264:processing",
    ]
  }
}

# This group contains all the targets needed to run mojo's apptest_runner.
group("mojo_apptests") {
  testonly = true

  deps = []

  if (is_win || is_linux) {
    deps += [
      "//components/resource_provider:resource_provider_unittests",
      "//mash:mash_unittests",
      "//media/mojo/services:tests",
      "//ui/views/mus:tests",
    ]
  }
}

group("gn_only") {
  testonly = true

  deps = []

  if (!is_ios) {
    deps += [ "//mojo/common:mojo_common_perftests" ]
  }

  if (!is_android && !is_ios && !is_chromeos) {
    deps += [ "//components/proximity_auth:proximity_auth_unittests" ]
  }

  if (is_win || is_linux) {
    deps += [
      ":mojo_apptests",
      "//components/mus/demo",
      "//components/mus/ws:tests",
      "//mash:all",
      "//mojo",
    ]
  }

  if (is_win && use_drfuzz) {
    # build libfuzzer fuzzers on Windows to run with Dr. Fuzz
    deps += [
      "//testing/libfuzzer/fuzzers",
      "//testing/libfuzzer/tests:libfuzzer_tests",
    ]
  }

  if (is_linux && !is_chromeos && !is_chromecast) {
    # TODO(GYP): Figure out if any of these should be in gn_all
    # and figure out how cross-platform they are
    deps += [
      ":gn_mojo_targets",
      "//chrome/browser/resources:extension_resource_demo",
      "//chrome/installer/util:strings",
      "//chrome/tools/convert_dict",
      "//components/constrained_window:unit_tests",
      "//components/filesystem:unittests",
      "//components/leveldb:leveldb_service_unittests",
      "//components/metrics:serialization",
      "//components/password_manager/content/renderer:browser_tests",
      "//components/rappor:unit_tests",
      "//components/sessions:unit_tests",
      "//media/blink:media_blink_unittests",
      "//media/cast:udp_proxy",
      "//native_client/src/trusted/debug_stub:gdb_rsp_unittest",
      "//storage/browser:dump_file_system",
      "//testing/libfuzzer/fuzzers",
      "//testing/libfuzzer/tests:libfuzzer_tests",
      "//third_party/angle:libANGLE",
      "//third_party/angle:libEGL",
      "//third_party/angle:libGLESv2",
      "//third_party/cld_2:cld_2_dynamic_data_tool",
      "//third_party/leveldatabase:leveldb_arena_test",
      "//third_party/leveldatabase:leveldb_bloom_test",
      "//third_party/leveldatabase:leveldb_cache_test",
      "//third_party/leveldatabase:leveldb_corruption_test",
      "//third_party/leveldatabase:leveldb_crc32c_test",
      "//third_party/leveldatabase:leveldb_db_bench",
      "//third_party/leveldatabase:leveldb_db_test",
      "//third_party/leveldatabase:leveldb_dbformat_test",
      "//third_party/leveldatabase:leveldb_env_test",
      "//third_party/leveldatabase:leveldb_filename_test",
      "//third_party/leveldatabase:leveldb_filter_block_test",
      "//third_party/leveldatabase:leveldb_log_test",
      "//third_party/leveldatabase:leveldb_skiplist_test",
      "//third_party/leveldatabase:leveldb_table_test",
      "//third_party/leveldatabase:leveldb_version_edit_test",
      "//third_party/leveldatabase:leveldb_write_batch_test",
      "//third_party/libjpeg_turbo:simd",
      "//third_party/libsrtp:rdbx_driver",
      "//third_party/libsrtp:replay_driver",
      "//third_party/libsrtp:roc_driver",
      "//third_party/libsrtp:rtpw",
      "//third_party/libsrtp:srtp_driver",
      "//third_party/libsrtp:srtp_driver",
      "//third_party/libsrtp:srtp_test_aes_calc",
      "//third_party/libsrtp:srtp_test_cipher_driver",
      "//third_party/libsrtp:srtp_test_datatypes_driver",
      "//third_party/libsrtp:srtp_test_env",
      "//third_party/libsrtp:srtp_test_kernel_driver",
      "//third_party/libsrtp:srtp_test_rand_gen",
      "//third_party/libsrtp:srtp_test_sha1_driver",
      "//third_party/libsrtp:srtp_test_stat_driver",
      "//third_party/opus:opus_compare",
      "//third_party/opus:opus_demo",
      "//third_party/opus:test_opus_api",
      "//third_party/opus:test_opus_decode",
      "//third_party/opus:test_opus_encode",
      "//third_party/opus:test_opus_padding",
      "//third_party/pdfium/third_party:fx_freetype",
      "//third_party/webrtc/system_wrappers:field_trial_default",
      "//third_party/webrtc/system_wrappers:metrics_default",
      "//ui/display/types",
      "//ui/shell_dialogs:shell_dialogs_unittests",
      "//ui/views/examples:views_examples_exe",
    ]

    if (target_cpu == "x86" || target_cpu == "x64") {
      if (!is_android) {
        deps += [ "//chrome/test:load_library_perf_tests" ]
      }
      deps += [
        "//native_client/src/trusted/platform_qualify:vcpuid",
        "//third_party/libjpeg_turbo:simd_asm",
      ]
    }
    if (is_linux && current_toolchain == host_toolchain) {
      deps += [ "//v8:d8" ]
    }
  }

  if (use_ozone) {
    deps += [ "//ui/ozone/demo" ]
  }

  if (enable_nacl) {
    deps += [ "//native_client_sdk/src:nacl_core_sdk" ]
  }

  if (is_android) {
    deps += [
      "//build/android/gyp/test:hello_world",
      "//build/android/incremental_install:bootstrap_java",
    ]
  }

  if (is_linux && use_ozone) {
    deps += [
      "//headless",
      "//headless:headless_tests",
    ]
  }

  if (!is_chromecast && (is_android || is_linux || is_chromeos)) {
    deps += [
      "//blimp",
      "//blimp:blimp_tests",
    ]
  }
}

group("gn_mojo_targets") {
  testonly = true
  if (is_linux && !is_chromeos) {
    # TODO(GYP): Figure out if any of these should be in gn_all
    # and figure out how cross-platform they are
    deps = [
      "//ipc/mojo:ipc_mojo_perftests",
      "//media/mojo:tests",
      "//media/mojo/services:cdm_service",
      "//mojo:tests",
    ]
  }
}

group("gn_visibility") {
  deps = [
    "//build/config/sanitizers:options_sources",

    # "//third_party/pdfium:pdfium_embeddertests",  # TODO(GYP): visibility?
    # "//third_party/pdfium:pdfium_unittests",  # TODO(GYP): visibility?

    "//ui/resources:repack_ui_test_mac_locale_pack",
  ]

  if (!is_ios) {
    deps += [
      "//v8:postmortem-metadata",
      "//v8:v8_snapshot",
    ]
  }
}

if (!is_ios) {
  # This group includes all of the targets needed to build and test Blink,
  # including running the layout tests (see below).
  group("blink_tests") {
    testonly = true

    deps = [
      "//third_party/WebKit/public:all_blink",
    ]

    # NOTE: The following deps are needed to run the layout tests
    # (run-webkit-tests) but there is no GN target for the layout tests,
    # so we need to specify the dependencies here instead.
    if (is_android) {
      deps += [
        "//breakpad:breakpad_unittests",
        "//breakpad:dump_syms($host_toolchain)",
        "//breakpad:microdump_stackwalk($host_toolchain)",
        "//breakpad:minidump_dump($host_toolchain)",
        "//breakpad:minidump_stackwalk($host_toolchain)",
        "//breakpad:symupload($host_toolchain)",
        "//content/shell/android:content_shell_apk",
        "//tools/imagediff($host_toolchain)",
      ]
    } else {
      deps += [
        "//content/shell:content_shell",
        "//tools/imagediff",
      ]
    }

    if (is_win) {
      deps += [
        "//components/test_runner:layout_test_helper",
        "//content/shell:content_shell_crash_service",
      ]
    }

    if (!is_win && !is_android) {
      deps += [ "//breakpad:minidump_stackwalk($host_toolchain)" ]
    }

    if (is_mac) {
      deps += [
        "//breakpad:dump_syms($host_toolchain)",
        "//components/test_runner:layout_test_helper",
      ]
    }

    if (is_linux) {
      deps += [ "//breakpad:dump_syms($host_toolchain)" ]
    }
  }
}

# Add a dummy target for compatibility w/ GYP
group("chromium_swarm_tests") {
}

group("chromium_builder_perf") {
  testonly = true

  # TODO(GYP): Make this target work on the mac.
  if (!is_ios && !is_android && !is_chromecast && !is_mac) {
    deps = [
      "//cc:cc_perftests",
      "//chrome",
      "//chrome/test:load_library_perf_tests",
      "//chrome/test:sync_performance_tests",
      "//gpu:gpu_perftests",
      "//media:media_perftests",
      "//media/midi:midi_unittests",
      "//third_party/catapult/telemetry:bitmaptools",
    ]

    if (!is_chromeos) {
      deps += [ "//chrome/test:performance_browser_tests" ]
    }
    if (is_linux && !is_chromeos) {
      if (is_official_build) {
        # In GN builds, this is controlled by the 'linux_dump_symbols'
        # flag, which defaults to 1 for official builds. For now,
        # we skip the separate flag and just key off of is_official_build.
        deps += [ "//chrome:linux_symbols" ]
      }

      if (!is_chromeos) {
        deps += [ "//tools/perf/clear_system_cache" ]
      }
    }

    if (is_win) {
      deps += [
        # "//gpu:angle_perftests", TODO(GYP): crbug.com/537008
      ]
    } else {
      deps += [ "//breakpad:minidump_stackwalk($host_toolchain)" ]
    }
  }
}

# Because of the source assignment filter, many targets end up over-filtering
# their sources if the output directory contains a platform name. Assert that
# this doesn't happen. http://crbug.com/548283
template("assert_valid_out_dir") {
  # List copied from //build/config/BUILDCONFIG.gn.
  set_sources_assignment_filter([
                                  "*\bandroid/*",
                                  "*\bchromeos/*",
                                  "*\bcocoa/*",
                                  "*\bios/*",
                                  "*\blinux/*",
                                  "*\bmac/*",
                                  "*\bposix/*",
                                  "*\bwin/*",
                                ])
  assert(target_name != "")  # Mark as used.
  sources = invoker.actual_sources
  assert(
      sources == invoker.actual_sources,
      "Do not use a platform name in your output directory (found \"$root_build_dir\"). http://crbug.com/548283")
}

assert_valid_out_dir("_unused") {
  actual_sources = [ "$root_build_dir/foo" ]
}
