# Copyright 2018 The Chromium OS 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("//common-mk/pkg_config.gni")

group("all") {
  deps = [
    ":container_config_parser",
    ":run_oci",
  ]
  if (use.test) {
    deps += [
      ":container_config_parser_test",
      ":run_oci_test",
    ]
  }
  if (use.fuzzer) {
    deps += [ ":run_oci_utils_fuzzer" ]
  }
}

pkg_config("target_defaults") {
  libs = [ "mount" ]

  pkg_deps = [
    "libbrillo",
    "libcap",
    "libchrome",
    "libminijail",
  ]
}

shared_library("container_config_parser") {
  sources = [ "container_config_parser.cc" ]
  configs += [ ":target_defaults" ]
  configs -= [ "//common-mk:no_exceptions" ]
}

pkg_config("run_oci_config") {
  pkg_deps = [ "libcontainer" ]
}

executable("run_oci") {
  sources = [
    "container_config_parser.cc",
    "run_oci.cc",
    "run_oci_utils.cc",
  ]
  configs += [
    ":run_oci_config",
    ":target_defaults",
  ]
  configs -= [ "//common-mk:no_exceptions" ]
}

if (use.test) {
  pkg_config("test_config") {
    pkg_deps = [ "libchrome-test" ]
  }

  executable("container_config_parser_test") {
    sources = [
      "container_config_parser.cc",
      "container_config_parser_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    configs -= [ "//common-mk:no_exceptions" ]
    deps = [ "//common-mk/testrunner" ]
  }

  executable("run_oci_test") {
    sources = [
      "run_oci_test.cc",
      "run_oci_utils.cc",
      "run_oci_utils_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    configs -= [ "//common-mk:no_exceptions" ]
    deps = [ "//common-mk/testrunner" ]
  }
}

if (use.fuzzer) {
  executable("run_oci_utils_fuzzer") {
    sources = [
      "run_oci_utils.cc",
      "run_oci_utils_fuzzer.cc",
    ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
  }
}
