# 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/nlio.gni")
import("//build_overrides/pigweed.gni")
import("${chip_root}/src/ble/ble.gni")
import("${chip_root}/src/lib/core/core.gni")

static_library("transport") {
  output_name = "libTransportLayer"

  sources = [
    "CryptoContext.cpp",
    "CryptoContext.h",
    "GroupPeerMessageCounter.cpp",
    "GroupPeerMessageCounter.h",
    "GroupSession.h",
    "MessageCounter.h",
    "MessageCounterManagerInterface.h",
    "PeerMessageCounter.h",
    "SecureMessageCodec.cpp",
    "SecureMessageCodec.h",
    "SecureSession.cpp",
    "SecureSession.h",
    "SecureSessionTable.cpp",
    "SecureSessionTable.h",
    "Session.cpp",
    "Session.h",
    "SessionDelegate.h",
    "SessionHolder.cpp",
    "SessionHolder.h",
    "SessionManager.cpp",
    "SessionManager.h",
    "SessionMessageCounter.h",
    "SessionMessageDelegate.h",
    "TracingStructs.h",
    "TransportMgr.h",
    "TransportMgrBase.cpp",
    "TransportMgrBase.h",
    "UnauthenticatedSessionTable.h",
  ]

  cflags = [ "-Wconversion" ]

  public_deps = [
    "${chip_root}/src/access",
    "${chip_root}/src/credentials",
    "${chip_root}/src/crypto",
    "${chip_root}/src/inet",
    "${chip_root}/src/lib/core",
    "${chip_root}/src/lib/core:chip_buildconfig",
    "${chip_root}/src/lib/dnssd",
    "${chip_root}/src/lib/support",
    "${chip_root}/src/platform",
    "${chip_root}/src/setup_payload",
    "${chip_root}/src/tracing",
    "${chip_root}/src/tracing:macros",
    "${chip_root}/src/transport/raw",
    "${nlio_root}:nlio",
  ]

  if (chip_enable_transport_trace) {
    sources += [ "TraceMessage.cpp" ]
  }
  if (chip_enable_transport_pw_trace) {
    public_deps += [ "$dir_pw_trace" ]
  }
}
