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

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

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

# Whether GN unit test runner targets should be created.
#
# If set to true, the pw_test() template creates an action that invokes the test
# runner script on each test executable. If false, the pw_test() template only
# creates a test executable target.
#
# This should be enabled for targets which support parallelized running
# of unit tests, such as desktops with multiple cores.
pw_unit_test_create_run_targets = false

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

# Declare dir_pw_dumb_io_backend
dir_pw_dumb_io_backend = ""
