# Copyright 2017 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/host.gni")
import("//build/test.gni")
import("//third_party/protobuf/proto_library.gni")

declare_args() {
  extra_package_labels = []
}

config("cobalt_config") {
  include_dirs = [
    "$cobalt_root",
    "$root_gen_dir/third_party/cobalt",
  ]

  defines = [ "TQ_COBALT_USE_TINK" ]

  if (is_fuchsia_tree) {
    include_dirs += [
      "//sdk/lib/syslog/cpp",
      "//zircon/system/ulib/syslog/include",
    ]
  }

  # TODO(https://fxbug.dev/321745113): remove -Wno-deprecated-declarations once the deprecated string_hashes field is removed.
  cflags = [ "-Wno-deprecated-declarations" ]
}

config("no_deprecated_pragma_config") {
  cflags = [ "-Wno-deprecated-pragma" ]
}

group("tests") {
  testonly = true
  deps = [
    "keys:tests",
    "src:tests",
  ]
}

test("cobalt_core_unittests") {
  testonly = true

  output_name = "cobalt_core_tests"

  deps = [
    ":tests",
    "//third_party/boringssl:crypto",
  ]

  if (is_fuchsia_tree) {
    deps += [ "//src/lib/fxl/test:gtest_main" ]
  } else {
    deps += [ "//third_party/googletest:gtest_main" ]
  }

  configs -= [ "//build/config:no_exceptions" ]
}

if (is_fuchsia_tree) {
  import("//build/components.gni")

  fuchsia_unittest_package("cobalt_core_tests") {
    deps = [ ":cobalt_core_unittests" ]
    manifest = "meta/cobalt_core_tests.cml"

    test_specs = {
      log_settings = {
        max_severity = "FATAL"
      }
    }
  }
}

testonly = true
group("default") {
  deps = [
    ":cobalt_core_unittests",
    "$cobalt_root/src/bin/config_change_validator/src:bin",
  ]

  if (!is_fuchsia_tree) {
    deps += [ ":force_build_for_lint_gn_rules_present" ]
  }

  deps += extra_package_labels
}

# These targets are not needed to run Cobalt, but are present in the standalone
# repo's build to ensure that all source files are built by some target.
group("force_build_for_lint_gn_rules_present") {
  deps = [ "$cobalt_root/src/public/testing:fake_cobalt_service" ]
}
