# 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/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",
    "SessionConnectionDelegate.h",
    "SessionDelegate.h",
    "SessionHolder.cpp",
    "SessionHolder.h",
    "SessionManager.cpp",
    "SessionManager.h",
    "SessionMessageCounter.h",
    "SessionMessageDelegate.h",
    "SessionUpdateDelegate.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/dnssd",
    "${chip_root}/src/lib/support",
    "${chip_root}/src/platform",
    "${chip_root}/src/protocols/secure_channel:type_definitions",
    "${chip_root}/src/setup_payload",
    "${chip_root}/src/tracing",
    "${chip_root}/src/tracing:macros",
    "${chip_root}/src/transport/raw",
  ]

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