| # 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_bloat/bloat.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") |
| |
| example_binary_target_name = target_name + "_binary" |
| size_report_target_name = target_name + "_tls_size_report" |
| |
| group(target_name) { |
| deps = [ |
| ":$example_binary_target_name", |
| ":$size_report_target_name", |
| ] |
| } |
| |
| executable_exclude_vars = [ |
| "tls_backend", |
| "transport_backend", |
| "no_bloaty", |
| "bloaty_config", |
| ] |
| |
| executable_common_vars = { |
| forward_variables_from(invoker, "*", executable_exclude_vars) |
| if (!defined(sources)) { |
| sources = [] |
| } |
| sources += [ |
| "sysdeps.cc", |
| "tls_client_example.cc", |
| ] |
| |
| if (!defined(deps)) { |
| deps = [] |
| } |
| deps += [ |
| "$dir_pw_log", |
| "$dir_pw_spin_delay", |
| "$dir_pw_sys_io", |
| invoker.transport_backend, |
| ] |
| } |
| |
| # Runnable target |
| pw_executable(example_binary_target_name) { |
| forward_variables_from(executable_common_vars, "*") |
| deps += [ invoker.tls_backend ] |
| } |
| |
| # Size report target. |
| if (!defined(invoker.no_bloaty) || !invoker.no_bloaty) { |
| # A similar target but with a noop tls backend for size comparison |
| base_target_name = example_binary_target_name + "_without_tls" |
| pw_executable(base_target_name) { |
| forward_variables_from(executable_common_vars, "*") |
| deps += [ "//applications/tls_example/backends/tls/dummy:dummy" ] |
| } |
| |
| # Bloaty size report. |
| pw_size_report(size_report_target_name) { |
| title = size_report_target_name |
| base = ":$base_target_name" |
| full_report = true |
| binaries = [ |
| { |
| target = ":$example_binary_target_name" |
| label = "$example_binary_target_name" |
| if (defined(invoker.bloaty_config)) { |
| bloaty_config = invoker.bloaty_config |
| } |
| }, |
| ] |
| } |
| } else { |
| group(size_report_target_name) { |
| } |
| } |
| } |