# Copyright 2020 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/components.gni")
import("//build/drivers.gni")

# In file included from ../../src/connectivity/openthread/ot-stack/src/app.cc:17:
# In file included from ../../src/connectivity/openthread/third_party/openthread/platform/radio.h:17:
# In file included from ../../third_party/openthread/src/lib/spinel/radio_spinel.hpp:885:
# ../../third_party/openthread/src/lib/spinel/radio_spinel_impl.hpp:80:16: error: 'static' function 'SpinelStatusToOtError' declared in header file should be declared 'static inline' [-Werror,-Wunneeded-internal-declaration]
# static otError SpinelStatusToOtError(spinel_status_t aError)
#                ^
# ../../third_party/openthread/src/lib/spinel/radio_spinel_impl.hpp:154:13: error: 'static' function 'LogIfFail' declared in header file should be declared 'static inline' [-Werror,-Wunneeded-internal-declaration]
# static void LogIfFail(const char *aText, otError aError)
#             ^
# 2 errors generated.
config("unused") {
  cflags = [ "-Wno-unneeded-internal-declaration" ]
}

source_set("app") {
  sources = [
    "src/app.cc",
    "src/app.h",
    "src/main.cc",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.lowpan.bootstrap:fuchsia.lowpan.bootstrap_llcpp",
    "//sdk/fidl/fuchsia.lowpan.spinel:fuchsia.lowpan.spinel_llcpp",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/svc",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/connectivity/openthread/lib/ot-stack:ot-stack-callback",
    "//src/connectivity/openthread/tests/ot-devmgr/fidl:devmgr_llcpp",
    "//src/connectivity/openthread/third_party/openthread/platform",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/fidl",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/service:service-llcpp",
    "//zircon/system/ulib/svc",
  ]

  deps = [ "//third_party/openthread:lib-ot-core" ]

  include_dirs =
      [ "//src/connectivity/openthread/third_party/openthread/platform" ]

  configs += [ ":unused" ]
}

executable("bin") {
  output_name = "ot-stack"

  deps = [ ":app" ]
}

group("ot-stack") {
  deps = [ ":pkg" ]
}

fuchsia_component("ot-stack-v2") {
  component_name = "ot-stack"
  manifest = "meta/ot-stack.cml"
  deps = [ ":bin" ]
}

fuchsia_component("ot-stack-v1") {
  component_name = "ot-stack"
  manifest = "meta/ot-stack.cmx"
  deps = [ ":bin" ]
}

fuchsia_package("pkg") {
  package_name = "ot-stack"
  deps = [
    ":ot-stack-v1",
    ":ot-stack-v2",
  ]
}
