# 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("../mojo_edk.gni")

mojo_edk_source_set("embedder") {
  # This isn't really a standalone target; it must be linked into the
  # mojo_system_impl component.
  mojo_edk_visibility = [ "mojo/edk/system" ]

  sources = [
    "channel_info_forward.h",
    "configuration.h",
    "embedder.cc",
    "embedder.h",
    "embedder_internal.h",
    "entrypoints.cc",
    "system_impl_private_entrypoints.cc",

    # Test-only code:
    # TODO(vtl): It's a little unfortunate that these end up in the same
    # component as non-test-only code. In the static build, this code should
    # hopefully be dead-stripped.
    "test_embedder.cc",
    "test_embedder.h",
  ]

  defines = [
    "MOJO_SYSTEM_IMPL_IMPLEMENTATION",
    "MOJO_SYSTEM_IMPLEMENTATION",
  ]

  mojo_edk_configs = [ "mojo/edk/system:system_config" ]

  public_deps = [
    ":delegates",
    ":platform",
  ]

  mojo_sdk_deps = [ "mojo/public/platform/native:system_impl_private_api" ]

  mojo_sdk_public_deps = [ "mojo/public/cpp/system" ]

  deps = [
    "//base",
  ]
}

mojo_edk_source_set("platform") {
  # This isn't really a standalone target; it must be linked into the
  # mojo_system_impl component.
  visibility = [ ":embedder" ]

  mojo_edk_visibility = [ "mojo/edk/system" ]

  sources = [
    "platform_channel_pair.cc",
    "platform_channel_pair.h",
    "platform_channel_pair_posix.cc",
    "platform_channel_pair_win.cc",
    "platform_channel_utils_posix.cc",
    "platform_channel_utils_posix.h",
    "platform_handle.cc",
    "platform_handle.h",
    "platform_handle_utils.h",
    "platform_handle_utils_posix.cc",
    "platform_handle_utils_win.cc",
    "platform_handle_vector.h",
    "platform_shared_buffer.h",
    "platform_support.h",
    "scoped_platform_handle.h",
    "simple_platform_shared_buffer.cc",
    "simple_platform_shared_buffer.h",
    "simple_platform_shared_buffer_android.cc",
    "simple_platform_shared_buffer_posix.cc",
    "simple_platform_shared_buffer_win.cc",
    "simple_platform_support.cc",
    "simple_platform_support.h",
  ]

  defines = [ "MOJO_SYSTEM_IMPL_IMPLEMENTATION" ]

  mojo_edk_configs = [ "mojo/edk/system:system_config" ]

  mojo_sdk_public_deps = [ "mojo/public/cpp/system" ]

  deps = [
    "//base",
  ]

  if (is_android) {
    deps += [ "//third_party/ashmem" ]
  }
}

mojo_edk_source_set("delegates") {
  # This isn't really a standalone target; it must be linked into the
  # mojo_system_impl component.
  visibility = [ ":embedder" ]

  mojo_edk_visibility = [ "mojo/edk/system" ]

  sources = [
    "master_process_delegate.h",
    "process_delegate.h",
    "process_type.h",
    "slave_info.h",
    "slave_process_delegate.h",
  ]

  defines = [ "MOJO_SYSTEM_IMPL_IMPLEMENTATION" ]

  mojo_edk_configs = [ "mojo/edk/system:system_config" ]

  mojo_sdk_public_deps = [ "mojo/public/cpp/system" ]
}

mojo_edk_source_set("embedder_unittests") {
  testonly = true
  mojo_edk_visibility = [ "mojo/edk/system:mojo_system_unittests" ]

  sources = [
    "embedder_unittest.cc",
    "platform_channel_pair_posix_unittest.cc",
    "simple_platform_shared_buffer_unittest.cc",
  ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
  ]

  mojo_edk_deps = [
    "mojo/edk/test:test_support",
    "mojo/edk/system",
    "mojo/edk/system:test_utils",
  ]
}
