third_party.pigweed.src/pw_build/error.gni
Alexei Frolov 9c35aac84a pw_build: Add pw_error GN template
Throughout the GN build, a common pattern that occurs is:

  if (condition) {
    my_real_target(target_name) {
      # ...
    }
  } else {
    # Print an error indicating that the user must configure condition.
    pw_python_action(target_name) {
      script = "condition_not_met.py"
    }
  }

This typically requires writing a custom error-printing script for each
error message. While some error messages have custom logic, many only
need to print a simple string.

This change adds a pw_error GN template which prints out a specified
error message and the target in which it occurred.

Change-Id: Ia93787d9353bac190bf6e1e567e09f9a07d9703f
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/22720
Reviewed-by: Keir Mierle <keir@google.com>
Reviewed-by: Armando Montanez <amontanez@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Alexei Frolov <frolv@google.com>
2020-10-28 21:07:01 +00:00

37 lines
1.1 KiB
Plaintext

# Copyright 2020 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("python_action.gni")
# Prints an error message and exits the build unsuccessfully.
#
# Args:
# message: The message to print.
#
template("pw_error") {
assert(defined(invoker.message) && invoker.message != "",
"pw_error requires an error message")
pw_python_action(target_name) {
script = "$dir_pw_build/py/pw_build/error.py"
args = [
"--target",
get_label_info(target_name, "label_no_toolchain"),
"--message",
invoker.message,
]
stamp = true
}
}