| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # 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
- """Provides helpers for cc rules. Intended for general consumption."""
- load("@bazel_cc_toolchain//:clang_detected_variables.bzl", "llvm_symbolizer")
- def cc_env():
- """Returns standard environment settings for a cc_binary.
- In use, this looks like:
- ```
- load("//bazel/cc_toolchains:defs.bzl", "cc_env")
- cc_binary(
- ...
- env = cc_env(),
- )
- ```
- We're currently setting this on a target-by-target basis, mainly because
- it's difficult to modify default behaviors.
- """
- # Settings which apply cross-platform.
- # buildifier: disable=unsorted-dict-items
- common_env = {
- "LLVM_SYMBOLIZER_PATH": llvm_symbolizer,
- # Sanitizers don't use LLVM as fallback, but sometimes ASAN may be used
- # for UBSAN errors; we still set UBSAN in case it's directly used.
- "ASAN_SYMBOLIZER_PATH": llvm_symbolizer,
- "UBSAN_SYMBOLIZER_PATH": llvm_symbolizer,
- # Default to printing traces for UBSAN.
- "UBSAN_OPTIONS": "print_stacktrace=1",
- }
- # On macOS, there's a nano zone allocation warning when asan is enabled.
- # This suppresses the warning in `bazel run`.
- macos_env = {"MallocNanoZone": "0"}
- return common_env | select({
- "//bazel/cc_toolchains:macos_asan": macos_env,
- "//conditions:default": {},
- })
|