# 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/facade.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_tls_client/configs.gni")

config("public_includes") {
  include_dirs = [ "public" ]
}

pw_facade("pw_tls_client") {
  backend = pw_tls_client_BACKEND
  public_configs = [ ":public_includes" ]
  public = [
    "public/pw_tls_client/options.h",
    "public/pw_tls_client/session.h",
    "public/pw_tls_client/status.h",
  ]
  public_deps = [
    "$dir_pw_assert",
    "$dir_pw_bytes",
    "$dir_pw_result",
    "$dir_pw_status",
    "$dir_pw_stream",
    "$dir_pw_string",
  ]
}

pw_facade("tls_entropy") {
  backend = pw_tls_client_ENTROPY_BACKEND
  public_configs = [ ":public_includes" ]
  public = [ "public/pw_tls_client/entropy.h" ]
  public_deps = [
    "$dir_pw_bytes",
    "$dir_pw_status",
  ]
}

# The ":time" target wraps the time() and gettimeofday(), which are
# commonly used by TLS libraries for expiration check.
config("time_wrap") {
  # Link options that wrap C time calls.
  ldflags = [
    "-Wl,--wrap=time",
    "-Wl,--wrap=gettimeofday",
  ]
}

pw_facade("time") {
  backend = pw_tls_client_TIME_BACKEND
  public_configs = [ ":time_wrap" ]
  public = []

  # The target should only be used by TLS libraries to obtain date time
  visibility = [
    ":*",
    "$dir_pw_third_party/boringssl",
    "$dir_pw_third_party/mbedtls",
  ]
}

# The build time is obtained with a python script and put in a generated header
# file. The header file is included in build_time.cc
pw_python_action("generate_buid_time_header") {
  header_output = "$target_gen_dir/$target_name/build_time.h"
  script = "generate_build_time_header.py"
  outputs = [
    header_output,

    # A output file that is never generated so that this action is always
    # re-run. This is to make sure that the build time in the header is always
    # up-to-date.
    "$target_gen_dir/non_exists",
  ]
  args = [ rebase_path(header_output) ]
}

# The target provides a backend to :time that returns build time.
pw_source_set("build_time") {
  time_injection_outputs = get_target_outputs(":generate_buid_time_header")
  include_dirs = [ get_path_info(time_injection_outputs[0], "dir") ]
  sources = [ "build_time.cc" ]
  deps = [
    ":generate_buid_time_header",
    ":time.facade",
  ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}
