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

executable("bin") {
  testonly = true
  output_name = "netemul_sandbox"
  sources = [
    "main.cc",
    "managed_environment.cc",
    "managed_environment.h",
    "managed_launcher.cc",
    "managed_launcher.h",
    "sandbox.cc",
    "sandbox.h",
    "sandbox_env.h",
  ]

  deps = [
    "//garnet/lib/cmx:cmx",
    "//garnet/lib/process",
    "//garnet/public/fidl/fuchsia.sys",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/component/cpp/testing",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/netemul/fidl:network",
    "//garnet/public/lib/netemul/network:network_service",
    "//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/zx",
  ]
}

package("netemul_sandbox") {
  testonly = true

  deps = [
    ":bin",
  ]

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

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