# 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" ] }