mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-03 18:25:49 +01:00
Rules executed by bazel don't necessarily have the right environment to find the symbolizer, which was the intent of `cc_env` setting `LLVM_SYMBOLIZER_PATH`. So far, this has kind of been a case-by-case fix, but every so often I'm trying to debug a crash in a test that doesn't provide it. Rather continuing down this route, instead add drop-in wrappers for cc rules so that it's hard to forget. Note `bazel/cc_rules` is intended to mirror `bazel/carbon_rules` and `bazel/cc_toolchains`, rather than `@rules_cc`. AFAICT there isn't a great way to add this as a default for the `bazel run` environment. It's not typically going to be set on its own, forwarding `$PATH` would be too broad, and the [action `env_sets`](https://bazel.build/docs/cc-toolchain-config-reference#using-action-config) I think are not quite what we need (I think those don't include output execution, only compilation).
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
# Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
# Exceptions. See /LICENSE for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
"""Rules for building file tests.
|
|
|
|
file_test uses the tests_as_input_file rule to transform test dependencies into
|
|
a file which can be accessed as a list. This avoids long argument parsing.
|
|
"""
|
|
|
|
load("//bazel/cc_rules:defs.bzl", "cc_test")
|
|
load("//bazel/manifest:defs.bzl", "manifest", "manifest_as_cpp")
|
|
|
|
def file_test(
|
|
name,
|
|
tests,
|
|
srcs = [],
|
|
deps = [],
|
|
data = [],
|
|
args = [],
|
|
prebuilt_binary = None,
|
|
**kwargs):
|
|
"""Generates tests using the file_test base.
|
|
|
|
There will be one main test using `name` that can be sharded, and includes
|
|
all files. Additionally, per-file tests will be generated as
|
|
`name.file_path`; these per-file tests will be manual.
|
|
|
|
Args:
|
|
name: The base name of the tests.
|
|
tests: The list of test files to use as data, typically a glob.
|
|
srcs: Passed to cc_test.
|
|
deps: Passed to cc_test.
|
|
data: Passed to cc_test.
|
|
args: Passed to cc_test.
|
|
prebuilt_binary: If set, specifies a prebuilt test binary to use instead
|
|
of building a new one.
|
|
**kwargs: Passed to cc_test.
|
|
"""
|
|
|
|
# Ensure tests are always a filegroup for tests_as_input_file_rule.
|
|
if prebuilt_binary:
|
|
# TODO: The prebuilt_binary support is only used by explorer. We should
|
|
# remove this once explorer is removed, and think about better factoring
|
|
# approaches if we need it later for toolchain.
|
|
tests_file = "{0}.tests".format(name)
|
|
manifest(
|
|
name = tests_file,
|
|
srcs = tests,
|
|
testonly = 1,
|
|
)
|
|
args = ["--explorer_test_targets_file=$(rootpath :{0})".format(tests_file)] + args
|
|
|
|
native.sh_test(
|
|
name = name,
|
|
srcs = srcs + [prebuilt_binary],
|
|
deps = deps,
|
|
data = [":" + tests_file] + tests + data,
|
|
args = args,
|
|
**kwargs
|
|
)
|
|
else:
|
|
manifest_cpp = "{0}_autogen_manifest.cpp".format(name)
|
|
manifest_as_cpp(
|
|
name = manifest_cpp,
|
|
var_name = "CarbonFileTestManifest",
|
|
srcs = tests,
|
|
testonly = 1,
|
|
)
|
|
cc_test(
|
|
name = name,
|
|
srcs = srcs + [":" + manifest_cpp],
|
|
deps = deps + ["//testing/file_test:manifest_impl"],
|
|
data = tests + data,
|
|
args = args,
|
|
**kwargs
|
|
)
|