blob: 8a89cf3a90f3cb9cd9e8082ab041d4368fd88627 [file] [log] [blame]
# 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_third_party/boringssl/boringssl.gni")
import("$dir_pw_tls_client/configs.gni")
import("$dir_pw_unit_test/test.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",
]
}
# A fake entropy source that does nothing. It should only be used for
# demo and test purpose only. Production code shall not use it.
pw_source_set("fake_entropy") {
public_deps = [ ":tls_entropy.facade" ]
sources = [ "fake_entropy.cc" ]
deps = [ "$dir_pw_log" ]
}
# 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",
]
}
# TODO(pwbug/396): Add a python target to generate source file from the
# specified CRLSet file in `pw_tls_client_CRLSET_FILE`
pw_source_set("crlset") {
public_configs = [ ":public_includes" ]
public = [ "public/pw_tls_client/crlset.h" ]
# TODO(pwbug/396): Add sources generated from a CRLSet file to build.
}
pw_source_set("test_server") {
sources = [ "test_server.cc" ]
public_configs = [ ":public_includes" ]
public = [ "public/pw_tls_client/test/test_server.h" ]
public_deps = [
"$dir_pw_bytes",
"$dir_pw_log",
"$dir_pw_stream",
"$dir_pw_third_party/boringssl",
]
}
pw_test("test_server_test") {
enable_if = dir_pw_third_party_boringssl != ""
public_deps = [
":test_data",
":test_server",
]
sources = [ "test_server_test.cc" ]
}
pw_python_action("generate_test_data") {
header_output = "$target_gen_dir/$target_name/test_certs_and_keys.h"
script = "py/pw_tls_client/generate_test_data.py"
python_deps = [ "py" ]
outputs = [ header_output ]
args = [ rebase_path(header_output) ]
}
config("test_data_includes") {
test_header_out = get_target_outputs(":generate_test_data")
include_dirs = [ get_path_info(test_header_out[0], "dir") ]
}
group("test_data") {
public_deps = [ ":generate_test_data" ]
public_configs = [ ":test_data_includes" ]
}
pw_test_group("tests") {
tests = [ ":test_server_test" ]
}
pw_doc_group("docs") {
sources = [ "docs.rst" ]
}