blob: f4073c3cfc752ec1c6305f7ba73120e1cf6e91d5 [file] [log] [blame]
# Copyright 2024 The Bazel Authors. All rights reserved.
#
# 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
#
# http://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.
"""Tests for the cc_tool_map rule."""
load("//cc/toolchains:cc_toolchain_info.bzl", "ActionTypeInfo", "ToolConfigInfo")
load("//cc/toolchains:tool_map.bzl", "cc_tool_map")
load("//tests/rule_based_toolchain:subjects.bzl", "subjects")
load("//tests/rule_based_toolchain:testing_rules.bzl", "analysis_test", "expect_failure_test", "helper_target")
_ALL_ACTIONS = "//cc/toolchains/actions:all_actions"
_C_COMPILE = "//cc/toolchains/actions:c_compile"
_CPP_COMPILE = "//cc/toolchains/actions:cpp_compile"
_ALL_CPP_COMPILE = "//cc/toolchains/actions:cpp_compile_actions"
_STRIP = "//cc/toolchains/actions:strip"
_LINK_DYNAMIC_LIBRARY = "//cc/toolchains/actions:cpp_link_executable"
_BIN = "//tests/rule_based_toolchain/testdata:bin"
_BIN_WRAPPER = "//tests/rule_based_toolchain/testdata:bin_wrapper"
def valid_config_test(name):
subject_name = "_%s_subject" % name
cc_tool_map(
name = subject_name,
tools = {
_LINK_DYNAMIC_LIBRARY: _BIN,
_C_COMPILE: _BIN_WRAPPER,
_ALL_CPP_COMPILE: _BIN,
},
)
analysis_test(
name = name,
impl = _valid_config_test_impl,
targets = {
"c_compile": _C_COMPILE,
"cpp_compile": _CPP_COMPILE,
"link_dynamic_library": _LINK_DYNAMIC_LIBRARY,
"strip": _STRIP,
"subject": subject_name,
},
)
def _valid_config_test_impl(env, targets):
configs = env.expect.that_target(targets.subject).provider(ToolConfigInfo).configs()
configs.contains(targets.strip[ActionTypeInfo]).equals(False)
configs.get(targets.c_compile[ActionTypeInfo]).exe().path().split("/").offset(-1, subjects.str).equals("bin_wrapper")
configs.get(targets.cpp_compile[ActionTypeInfo]).exe().path().split("/").offset(-1, subjects.str).equals("bin")
configs.get(targets.link_dynamic_library[ActionTypeInfo]).exe().path().split("/").offset(-1, subjects.str).equals("bin")
def duplicate_action_test(name):
subject_name = "_%s_subject" % name
helper_target(
cc_tool_map,
name = subject_name,
tools = {
_C_COMPILE: _BIN_WRAPPER,
_ALL_ACTIONS: _BIN,
},
)
expect_failure_test(
name = name,
target = subject_name,
failure_message = "appears multiple times in your tool_map",
)