# 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: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_boot module.
dir_pw_boot_backend = ""

# Backend for the pw_cpu_exception module.
dir_pw_cpu_exception_backend = ""

# Backend for the pw_dumb_io module.
dir_pw_dumb_io_backend = ""

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

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