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

    # 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_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",
  ]
}
