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

import("//build/config/chrome_build.gni")

content_app_sources = [
  "android/app_jni_registrar.cc",
  "android/app_jni_registrar.h",
  "android/child_process_service.cc",
  "android/child_process_service.h",
  "android/content_jni_onload.cc",
  "android/content_main.cc",
  "android/content_main.h",
  "android/download_main.cc",
  "android/library_loader_hooks.cc",
  "android/library_loader_hooks.h",
  "content_main.cc",
  "content_main_runner.cc",
  "mac/mac_init.mm",
  "mac/mac_init.h",
  "mojo/mojo_init.cc",
  "mojo/mojo_init.h",
]

content_app_deps = [
  "//base",
  "//base:i18n",
  "//content:export",
  "//content:sandbox_helper_win",
  "//content/public/common:common_sources",
  "//content/public/common:mojo_bindings",
  "//crypto",
  "//ui/base",
  "//ui/gfx",
  "//ui/gfx/geometry",
]

if (is_win) {
  content_app_deps += [ "//sandbox" ]
} else if (is_android) {
  content_app_sources -= [ "content_main.cc" ]
  content_app_deps += [
    "//content/public/android:jni",
    "//device/usb",
    "//device/vibration",
    "//skia",
    "//third_party/android_tools:cpu_features",
    "//ui/android",
  ]
}

if (is_ios) {
  content_app_sources -= [
    "content_main.cc",
    "mojo/mojo_init.cc",
    "mojo/mojo_init.h",
  ]
} else {
  content_app_deps += [
    "//mojo/shell/public/interfaces",
    "//mojo/edk/system",
  ]
}

content_app_extra_configs = [
  "//build/config/compiler:wexit_time_destructors",
  "//content:content_implementation",
  "//content/public/common:mojo_shell_client",
  "//v8:external_startup_data",
]

if (!is_multi_dll_chrome) {
  content_app_deps += [ "//content/gpu:gpu_sources" ]
}

# This includes the app sources for both the browser and child processes.
source_set("both") {
  # Only the public target should depend on this. All other targets (even
  # internal content ones) should depend on the public one.
  visibility = [ "//content/public/app:*" ]

  sources = content_app_sources
  configs += content_app_extra_configs
  deps = content_app_deps
}

if (is_multi_dll_chrome) {
  # It doesn't make sense to do the browser/child dll split in component mode.
  assert(!is_component_build)

  source_set("browser") {
    visibility = [ "//content/public/app:browser" ]

    sources = content_app_sources
    configs += content_app_extra_configs
    deps = content_app_deps

    defines = [ "CHROME_MULTIPLE_DLL_BROWSER" ]
  }

  source_set("child") {
    visibility = [ "//content/public/app:child" ]

    sources = content_app_sources
    configs += content_app_extra_configs
    deps = content_app_deps

    defines = [ "CHROME_MULTIPLE_DLL_CHILD" ]
  }
}
