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

common_deps = [
  "//base",
  "//base:i18n",
  "//build/config/sanitizers:deps",
  "//dart/runtime:libdart",
  "//mojo/common",
  "//mojo/edk/system",
  "//mojo/public/cpp/application",
  "//mojo/public/interfaces/application",
  "//mojo/services/asset_bundle/public/interfaces",
  "//mojo/services/navigation/public/interfaces",
  "//mojo/services/network/public/interfaces",
  "//services/asset_bundle:lib",
  "//skia",
  "//sky/engine",
  "//sky/engine/tonic",
  "//sky/engine/wtf",
  "//sky/services/engine:interfaces",
  "//sky/services/vsync:interfaces",
  "//sky/shell/dart",
  "//ui/gfx/geometry",
  "//ui/gl",
]

source_set("common") {
  sources = [
    "gpu/ganesh_context.cc",
    "gpu/ganesh_context.h",
    "gpu/ganesh_surface.cc",
    "gpu/ganesh_surface.h",
    "gpu/picture_serializer.cc",
    "gpu/picture_serializer.h",
    "gpu/rasterizer.cc",
    "gpu/rasterizer.h",
    "gpu_delegate.cc",
    "gpu_delegate.h",
    "platform_view.cc",
    "platform_view.h",
    "service_provider.cc",
    "service_provider.h",
    "shell.cc",
    "shell.h",
    "shell_view.cc",
    "shell_view.h",
    "switches.cc",
    "switches.h",
    "ui/animator.cc",
    "ui/animator.h",
    "ui/engine.cc",
    "ui/engine.h",
    "ui/input_event_converter.cc",
    "ui/input_event_converter.h",
    "ui/internals.cc",
    "ui/internals.h",
    "ui/platform_impl.cc",
    "ui/platform_impl.h",
    "ui_delegate.cc",
    "ui_delegate.h",
  ]

  deps = common_deps
}

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

  generate_jni("jni_headers") {
    sources = [
      "android/org/domokit/sky/shell/PlatformServiceProvider.java",
      "android/org/domokit/sky/shell/PlatformViewAndroid.java",
      "android/org/domokit/sky/shell/SkyMain.java",
      "android/org/domokit/sky/shell/TracingController.java",
    ]
    jni_package = "sky/shell"
  }

  shared_library("sky_shell") {
    sources = [
      "android/library_loader.cc",
      "android/platform_service_provider_android.cc",
      "android/platform_service_provider_android.h",
      "android/platform_view_android.cc",
      "android/platform_view_android.h",
      "android/sky_main.cc",
      "android/sky_main.h",
      "android/tracing_controller.cc",
      "android/tracing_controller.h",
    ]

    deps = common_deps + [
             "//mojo/android:libsystem_java",
             ":jni_headers",
             ":common",
           ]
    ldflags = [
      "-lGLESv2",
      "-lEGL",
    ]
  }

  android_library("java") {
    java_files = [
      "android/org/domokit/sky/shell/GestureProvider.java",
      "android/org/domokit/sky/shell/PlatformServiceProvider.java",
      "android/org/domokit/sky/shell/PlatformViewAndroid.java",
      "android/org/domokit/sky/shell/ResourceCleaner.java",
      "android/org/domokit/sky/shell/ResourceExtractor.java",
      "android/org/domokit/sky/shell/ServiceFactory.java",
      "android/org/domokit/sky/shell/ServiceRegistry.java",
      "android/org/domokit/sky/shell/SkyActivity.java",
      "android/org/domokit/sky/shell/SkyApplication.java",
      "android/org/domokit/sky/shell/SkyMain.java",
      "android/org/domokit/sky/shell/TracingController.java",
    ]

    deps = [
      "//base:base_java",
      "//mojo/android:system_java",
      "//mojo/public/interfaces/application:application_java",
      "//mojo/public/java:bindings",
      "//mojo/public/java:system",
      "//mojo/services/keyboard/public/interfaces:interfaces_java",
      "//mojo/services/network/public/interfaces:interfaces_java",
      "//mojo/services/sensors/public/interfaces:interfaces_java",
      "//services/keyboard",
      "//services/sensors:sensors_lib",
      "//sky/services/activity:activity_lib",
      "//sky/services/activity:interfaces_java",
      "//sky/services/engine:interfaces_java",
      "//sky/services/media:interfaces_java",
      "//sky/services/media:media_lib",
      "//sky/services/oknet",
      "//sky/services/vsync:interfaces_java",
      "//sky/services/vsync:vsync_lib",
    ]
  }

  copy_ex("assets") {
    clear_dir = true
    dest = "$root_build_dir/sky_shell/assets"
    sources = [
      "$root_build_dir/icudtl.dat",
    ]
    deps = [
      "//third_party/icu:icudata",
    ]
  }

  android_apk("shell") {
    apk_name = "SkyShell"
    android_manifest = "android/AndroidManifest.xml"

    native_libs = [ "libsky_shell.so" ]
    asset_location = "$root_build_dir/sky_shell/assets"

    extensions_to_not_compress = ".skyx"

    deps = [
      ":assets",
      ":assets",
      ":java",
      ":sky_shell",
      "//base:base_java",
    ]
  }
} else if (is_ios) {
  import("//build/config/ios/rules.gni")
  import("//build/config/ios/ios_sdk.gni")

  source_set("ios_scaffolding") {
    sources = [
      "ios/document_watcher.m",
      "ios/main_ios.mm",
      "ios/sky_app_delegate.h",
      "ios/sky_app_delegate.mm",
      "ios/sky_surface.h",
      "ios/sky_surface.mm",
      "ios/sky_view_controller.h",
      "ios/sky_view_controller.mm",
    ]

    set_sources_assignment_filter([])
    sources += [
      "mac/platform_mac.h",
      "mac/platform_mac.mm",
      "mac/platform_service_provider_mac.cc",
      "mac/platform_view_mac.h",
      "mac/platform_view_mac.mm",
    ]
    set_sources_assignment_filter(sources_assignment_filter)

    deps = common_deps + [
             ":common",
             "//sky/services/ns_net",
           ]
  }

  ios_app("shell") {
    app_name = "SkyShell"
    info_plist = "ios/Info.plist"
    entitlements_path = "ios/Entitlements.xcent"
    code_signing_identity = ios_code_signing_identity

    resource_copy_ios("sky_resources") {
      resources = [ "//third_party/icu/android/icudtl.dat" ]
      bundle_directory = "."
    }

    deps = [
      ":ios_scaffolding",
      ":sky_resources",
    ]
  }
} else if (is_linux) {
  executable("shell") {
    output_name = "sky_shell"

    sources = [
      "linux/main.cc",
      "linux/platform_service_provider_linux.cc",
      "linux/platform_view_linux.cc",
      "testing/test_runner.cc",
      "testing/test_runner.h",
    ]

    deps = common_deps + [
             ":common",
             "//sky/services/testing:interfaces",
           ]
  }
} else if (is_mac) {
  import("//build/config/mac/rules.gni")

  source_set("mac_scaffolding") {
    sources = [
      "mac/main_mac.mm",
      "mac/platform_mac.h",
      "mac/platform_mac.mm",
      "mac/platform_service_provider_mac.cc",
      "mac/platform_view_mac.h",
      "mac/platform_view_mac.mm",
      "mac/sky_app_delegate.h",
      "mac/sky_app_delegate.m",
      "mac/sky_application.h",
      "mac/sky_application.mm",
      "mac/sky_window.h",
      "mac/sky_window.mm",
      "testing/test_runner.cc",
      "testing/test_runner.h",
    ]

    deps = common_deps + [
             ":common",
             "//sky/services/ns_net",
             "//sky/services/testing:interfaces",
           ]
  }

  mac_app("shell") {
    app_name = "SkyShell"
    info_plist = "mac/Info.plist"

    # entitlements_path = ""
    # code_signing_identity = ""

    xibs = [ "mac/sky_mac.xib" ]

    resource_copy_mac("sky_resources") {
      resources = [ "//third_party/icu/android/icudtl.dat" ]
      bundle_directory = "."
    }

    deps = [
      ":mac_scaffolding",
      ":sky_resources",
    ]
  }
} else {
  assert(false, "Unsupported platform")
}
