91 lines
3.2 KiB
Plaintext
91 lines
3.2 KiB
Plaintext
# Copyright 2022 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/python_action.gni")
|
|
import("$dir_pw_build/target_types.gni")
|
|
|
|
declare_args() {
|
|
# Enables or disables negative compilation tests for the current toolchain.
|
|
# Disabled by default since negative compilation tests increase gn gen time
|
|
# significantly.
|
|
pw_compilation_testing_NEGATIVE_COMPILATION_ENABLED = false
|
|
}
|
|
|
|
# Declares a compilation failure test. If
|
|
# pw_compilation_testing_NEGATIVE_COMPILATION_ENABLED is true, negative
|
|
# complilation tests will be executed in the build. These tests pass if
|
|
# compilation fails when #if block test cases are enabled in the code.
|
|
#
|
|
# Compilation failure tests may also be declared as part of a unit test in
|
|
# pw_test by settin negative_compilation_tests = true.
|
|
template("pw_cc_negative_compilation_test") {
|
|
assert(defined(invoker.sources) && invoker.sources != [],
|
|
"pw_cc_negative_compilation_test requires 'sources' to be provided")
|
|
|
|
if (pw_compilation_testing_NEGATIVE_COMPILATION_ENABLED) {
|
|
_out_dir = "$target_gen_dir/$target_name"
|
|
|
|
_args = [
|
|
"--output",
|
|
rebase_path(_out_dir, root_build_dir),
|
|
"--base",
|
|
get_label_info(":$target_name._base", "label_no_toolchain"),
|
|
"--name",
|
|
target_name,
|
|
]
|
|
|
|
# List the source files as both a GN path and a file system path.
|
|
foreach(file, invoker.sources) {
|
|
_args += [ get_path_info(file, "abspath") + ";" +
|
|
rebase_path(file, root_build_dir) ]
|
|
}
|
|
|
|
# Invoke the generator script, which generates a BUILD.gn file with a GN
|
|
# action for each NC test. The test names are returned as a list.
|
|
_tests = exec_script(
|
|
"$dir_pw_compilation_testing/py/pw_compilation_testing/generator.py",
|
|
_args,
|
|
"list lines",
|
|
invoker.sources)
|
|
|
|
# Create a group of the generated NC test targets.
|
|
group(target_name) {
|
|
deps = []
|
|
foreach(test, _tests) {
|
|
deps += [ "$_out_dir:$target_name.$test.negative_compilation_test" ]
|
|
}
|
|
}
|
|
} else {
|
|
# If compilation testing is disabled, only compile the base file, which the
|
|
# negative compilation test targets depend on. Use an action for this target
|
|
# so that depending on it will not link in any source files.
|
|
pw_python_action(target_name) {
|
|
script = "$dir_pw_build/py/pw_build/nop.py"
|
|
stamp = true
|
|
deps = [ ":$target_name._base" ]
|
|
}
|
|
}
|
|
|
|
# The base target is the sources with no tests enabled.
|
|
pw_source_set(target_name + "._base") {
|
|
forward_variables_from(invoker, "*")
|
|
if (!defined(deps)) {
|
|
deps = []
|
|
}
|
|
deps += [ "$dir_pw_compilation_testing:internal_pigweed_use_only" ]
|
|
}
|
|
}
|