# 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_build/cc_library.gni")
import("$dir_pw_build/gn_internal/build_target.gni")

# Note: In general, prefer to import target_types.gni rather than this file.
# cc_executable.gni and cc_library.gni are both provided by target_types.gni.
#
# cc_library.gni is split out from cc_executable.gni because pw_executable
# templates may need to create pw_source_set targets internally, and can't
# import target_types.gni because it creates a circular import path.

# This template wraps a configurable target type specified by the current
# toolchain to be used for all pw_executable targets. This allows projects to
# stamp out unique build logic for each pw_executable target, such as generating
# .bin files from .elf files, creating token databases, injecting custom data
# as late-bound build steps, and more.
#
# Like pw_source_set, pw_static_library, and pw_shared_library, default configs
# default visibility, and link deps are applied to the target before forwarding
# to the underlying type as specified by pw_build_EXECUTABLE_TARGET_TYPE.
#
# For more information on the features provided by this template, see the full
# docs at https://pigweed.dev/pw_build/?highlight=pw_executable#target-types.
#
# In addition to the arguments supported by a native executable target, this
# template introduces the following arguments:
#
#  remove_configs: (optional) A list of configs / config patterns to remove from
#    the set of default configs specified by the current toolchain
#    configuration.
#  remove_public_deps: (optional) A list of targets to remove from the set of
#    default public_deps specified by the current toolchain configuration.

template("pw_executable") {
  pw_internal_build_target(target_name) {
    forward_variables_from(invoker, "*")
    if (!defined(output_dir)) {
      output_dir = "${target_out_dir}/bin"
    }
    add_global_link_deps = true
    underlying_target_type = pw_build_EXECUTABLE_TARGET_TYPE
    target_type_file = pw_build_EXECUTABLE_TARGET_TYPE_FILE
  }
}
