# Copyright 2021 The Pigweed 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
#
#     https:#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/pigweed.gni")
import("$dir_pw_build/target_types.gni")

# A convenient template for generating example applications with different
# tls/transport backends.
template("tls_client_example") {
  assert(defined(invoker.tls_backend) && invoker.tls_backend != "",
         "must provide a tls backend")
  assert(defined(invoker.transport_backend) && invoker.transport_backend != "",
         "must provide a transport backend")
  pw_executable(target_name) {
    sources = [
      "sysdeps.cc",
      "tls_client_example.cc",
    ]
    deps = [
      "$dir_pw_log",
      "$dir_pw_spin_delay",
      "$dir_pw_sys_io",
      invoker.tls_backend,
      invoker.transport_backend,
    ]
  }
}
