# 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.

# 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 = ""

# 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 = ""

# Languages for which to generate protobuf code. These are used by the
# pw_proto_library template to determine which build targets to create.
#
# Supported languages:
#   "cc", "go"
pw_protobuf_langs = [
  "cc",
  "go",
]

################################# 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_sys_io module.
dir_pw_sys_io_backend = ""

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

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