# Copyright 2015 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("//chromecast/chromecast.gni")

# These targets shall only be referenced on Android builds.
assert(is_android)

# This source_set should only contain headers for internal code. These must be
# built separately from public stub implementations of this code to keep the
# dependency tree clean.
source_set("platform_jni_loader") {
  sources = [
    "platform_jni_loader.h",
  ]
}

shared_library("libcast_shell_android") {
  sources = [
    "//chromecast/app/android/cast_jni_loader.cc",
    "cast_jni_registrar.cc",
    "cast_jni_registrar.h",
    "cast_metrics_helper_android.cc",
    "cast_metrics_helper_android.h",
  ]

  deps = [
    ":platform_jni_loader",
    "//base",
    "//chromecast:cast_shell_lib",
    "//chromecast/app",
    "//chromecast/app:cast_crash_client",
    "//chromecast/base",
    "//chromecast/base:cast_sys_info",
    "//chromecast/base:jni_headers",
    "//chromecast/base/metrics",
    "//chromecast/browser",
    "//chromecast/browser:jni_headers",
    "//content/public/app:both",
    "//content/public/browser",
    "//skia",
  ]

  if (chromecast_branding == "public") {
    sources += [ "platform_jni_loader_stub.cc" ]
  }
}
