# Copyright 2019 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")

# This file defines default values for all of the build variables used by
# Pigweed.
#
# Each individual variable can be overriden by a target to configure the system
# to build for it. This is done in a .gni file specific to the target by first
# importing this file, then changing the variables as desired.

# Whether to build host-side tooling.
pw_build_host_tools = false

# Options which configure the executable targets created in Pigweed builds.
pw_executable_config = {
  # The name of the GN target type used to build Pigweed executables.
  #
  # If this is a custom template, the .gni file containing the template must
  # be imported at the top of the target configuration file to make it globally
  # available.
  target_type = "executable"

  # Path to an instantiation of the "linker_script" GN template defining the
  # linker script configuration for the target.
  linker_script_target = ""

  # Path to the Bloaty configuration file that defines the memory layout and
  # capacities for the target binaries.
  bloaty_config_file = ""
}

# Default toolchain for the build target.
#
# If this is changed, you must run `ninja -t clean` to remove any files from
# the previous toolchain's build before building again.
pw_target_toolchain = ""

# Defaults variables for the build target.
#
# Scope containing defaults to be added to GN targets for the target. With the
# exception of "remove_configs", all variables will be automatically be
# forwarded to GN targets with the following types:
#   source_set
#   executable
#   shared_library
#   static_library
#
# "remove_configs" is a special case. This variable can be set to a list of
# configs that will be removed from the defaults, including those provided by
# $dir_pw_build/defaults.gni.
#
pw_target_defaults = {
}

# List of toolchains to use in pw_toolchain_size_report templates.
#
# Each entry is a scope containing the following variables:
#
#   name: Human-readable toolchain name.
#   target: GN target that defines the toolchain.
#   linker_script: Optional path to a linker script file to build for the
#     toolchain's target.
#   bloaty_config: Optional Bloaty confirugation file defining the memory
#     layout of the binaries as specified in the linker script.
#
# If this list is empty, pw_toolchain_size_report targets become no-ops.
pw_size_report_toolchains = []

# Implementation of a main function for "pw_test" unit test binaries.
pw_unit_test_main = "$dir_pw_unit_test:simple_printing_main"

# Path to a test runner to automatically run unit tests after they are built.
#
# If set, the pw_test() template creates an action that invokes the test runner
# on each test executable. If unset, the pw_test() template only creates a test
# executable target.
#
# This should only be enabled for targets which support parallelized running of
# unit tests, such as desktops with multiple cores.
pw_automatic_test_runner = ""

################################# PROTOBUF #####################################

# Generators with which to compile protobuf code. These are used by the
# pw_proto_library template to determine which build targets to create.
#
# Supported generators:
#   "pwpb", "nanopb", "go"
pw_protobuf_generators = [
  "pwpb",
  "go",
]

# If compiling for nanopb, this variable is set to the path to the nanopb
# installation.
dir_third_party_nanopb = ""

################################# BACKENDS #####################################

# This section of the file defines empty variables for each of the Pigweed
# facades that expect a backend. This allows minimal breakages when adding new
# facades. Instead of GN always halting due to encountering an undefined
# variable, GN will only emit an error if something in the build depends on the
# empty (but defined) variable.
#
# All of these should default to empty strings. For target-specific defaults,
# modify these variables in a target configuration file.

# Backend for the pw_assert module.
dir_pw_assert_backend = ""

# Backend for the pw_boot module.
dir_pw_boot_backend = ""

# Backend for the pw_cpu_exception module.
dir_pw_cpu_exception_backend = ""

# Backend for the pw_log module.
dir_pw_log_backend = ""

# Backend for the pw_trace module.
dir_pw_trace_backend = ""

# Backend for the pw_sys_io module.
dir_pw_sys_io_backend = ""

# Backends for the pw_tokenizer:global_handler and
# pw_tokenizer:global_handler_with_payload facades.
dir_pw_tokenizer_global_handler_backend = ""
dir_pw_tokenizer_global_handler_with_payload_backend = ""

############################## MODULE CONFIGS ##################################

# Module configuration options for pw_boot_armv7m.
pw_boot_armv7m_config = {
  # C Preprocessor defines used for linker script configuration.
  defines = []
}
