# Copyright 2018 The Fuchsia 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("//build/package.gni")

source_set("src") {
  testonly = true
  sources = [
    "managed_environment.cc",
    "managed_environment.h",
    "managed_launcher.cc",
    "managed_launcher.h",
    "managed_logger.cc",
    "managed_logger.h",
    "sandbox.cc",
    "sandbox.h",
    "sandbox_env.h",
    "sandbox_service.cc",
    "sandbox_service.h",
    "virtual_data.cc",
    "virtual_data.h",
    "virtual_devices.cc",
    "virtual_devices.h",
  ]

  deps = [
    "//garnet/bin/netemul_runner/model",
    "//garnet/lib/cmx:cmx",
    "//garnet/lib/process",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/json",
    "//garnet/public/lib/netemul/fidl:environment",
    "//garnet/public/lib/netemul/fidl:network",
    "//garnet/public/lib/netemul/fidl:sandbox",
    "//garnet/public/lib/netemul/fidl:sync",
    "//garnet/public/lib/netemul/network:netdump",
    "//garnet/public/lib/netemul/network:network_service",
    "//garnet/public/lib/netemul/sync:sync_service",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:enclosing_environment",
    "//third_party/rapidjson",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/memfs-cpp",
    "//zircon/public/lib/zx",
  ]
}

executable("bin") {
  testonly = true
  output_name = "netemul_sandbox"
  sources = [
    "main.cc",
  ]

  deps = [
    ":src",
    "//garnet/public/lib/fxl",
    "//sdk/lib/sys/cpp",
    "//third_party/rapidjson",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/memfs-cpp",
  ]
}

executable("sandbox_unittest") {
  testonly = true
  sources = [
    "sandbox_unittest.cc",
  ]

  deps = [
    ":src",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl/test:gtest_main",
    "//garnet/public/lib/gtest",
    "//garnet/public/lib/json",
    "//garnet/public/lib/pkg_url",
    "//sdk/fidl/fuchsia.sys",
    "//third_party/rapidjson",
    "//third_party/rapidjson",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/memfs-cpp",
  ]
}

package("netemul_sandbox") {
  testonly = true

  deps = [
    ":bin",
    "//garnet/bin/netemul_runner/helpers/mock_device_settings",
    "//garnet/bin/netemul_runner/helpers/netstack_cfg",
  ]

  binaries = [
    {
      name = "netemul_sandbox"
    },
    {
      name = "netstack_cfg"
    },
    {
      name = "mock_device_settings"
    },
  ]

  meta = [
    {
      path = rebase_path("meta/netemul_sandbox.cmx")
      dest = "netemul_sandbox.cmx"
    },
    {
      path = rebase_path("helpers/meta/helper_netstack_cfg.cmx")
      dest = "helper_netstack_cfg.cmx"
    },
    {
      path = rebase_path("helpers/meta/mock_device_settings.cmx")
      dest = "mock_device_settings.cmx"
    },
  ]
}
