# 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/config/fuchsia/rules.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/public/lib/fbl",
    "//zircon/public/lib/fidl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/service:service-llcpp",
    "//zircon/system/ulib/svc",
  ]

  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("component") {
  component_name = "ot-stack"
  manifest = "meta/ot-stack.cmx"
  deps = [ ":bin" ]
}

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