# 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")

# TODO(vtl): Move multiprocess stuff into a separate target.
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",
    "multiprocess_embedder.cc",
    "multiprocess_embedder.h",
    "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",
  ]

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

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

  mojo_edk_public_deps = [ "mojo/edk/platform" ]

  deps = [
    "//base",
  ]

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

  mojo_edk_deps = [ "mojo/edk/util" ]
}

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_support.h",
    "simple_platform_support.cc",
    "simple_platform_support.h",
  ]

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

  mojo_edk_public_deps = [ "mojo/edk/platform" ]

  deps = [
    "//base",
  ]

  mojo_edk_deps = [ "mojo/edk/util" ]
}

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",
  ]

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

# TODO(vtl): Move multiprocess stuff into a separate target.
mojo_edk_unittests("mojo_edk_embedder_unittests") {
  sources = [
    "embedder_unittest.cc",
    "multiprocess_embedder_unittest.cc",
  ]

  deps = [
    "//base",
    "//testing/gtest",
  ]

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