# Copyright (c) 2020 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build_overrides/chip.gni")
import("//build_overrides/jlink.gni")
import("//build_overrides/openthread.gni")
import("${chip_root}/src/platform/device.gni")

config("libopenthread-platform_config") {
  include_dirs = [ "${openthread_root}/examples/platforms" ]
}

copy("copy_openthread_system") {
  sources = [ "${openthread_root}/examples/platforms/openthread-system.h" ]

  outputs =
      [ "${root_gen_dir}/include/openthread/platform/{{source_file_part}}" ]
}

source_set("openthread_system") {
  sources =
      [ "${root_gen_dir}/include/openthread/platform/openthread-system.h" ]
  deps = [ ":copy_openthread_system" ]
}

source_set("libopenthread-platform") {
  sources = [ "${openthread_root}/examples/platforms/openthread-system.h" ]

  public_deps = [ ":openthread_system" ]

  public_configs = [ ":libopenthread-platform_config" ]
}

static_library("libopenthread-platform-utils") {
  sources = [
    "${openthread_root}/examples/platforms/utils/code_utils.h",
    "${openthread_root}/examples/platforms/utils/debug_uart.c",
    "${openthread_root}/examples/platforms/utils/encoding.h",
    "${openthread_root}/examples/platforms/utils/mac_frame.cpp",
    "${openthread_root}/examples/platforms/utils/mac_frame.h",
    "${openthread_root}/examples/platforms/utils/settings.h",
    "${openthread_root}/examples/platforms/utils/settings_ram.c",
    "${openthread_root}/examples/platforms/utils/soft_source_match_table.c",
    "${openthread_root}/examples/platforms/utils/soft_source_match_table.h",
  ]

  public_deps = [ "${openthread_root}/src/core:libopenthread_core_headers" ]

  if (chip_enable_segger_rtt) {
    sources += [
      "${openthread_root}/examples/platforms/utils/logging_rtt.c",
      "${openthread_root}/examples/platforms/utils/logging_rtt.h",
    ]

    public_deps += [ "${segger_rtt_root}:segger_rtt" ]
  }

  public_configs = [ ":libopenthread-platform_config" ]
}
