mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:02:23 +01:00
This leaves behind project-specific features such as the system header management of our dependencies and the fancy cache management string. No expected changes here, but yet another slightly different order of flags.
207 lines
6.7 KiB
Python
207 lines
6.7 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
|
|
|
|
"""Definitions of general C++ `cc_toolchain_config` features."""
|
|
|
|
load("@rules_cc//cc:action_names.bzl", "ACTION_NAMES")
|
|
load(
|
|
"@rules_cc//cc:cc_toolchain_config_lib.bzl",
|
|
"feature",
|
|
"flag_group",
|
|
"flag_set",
|
|
"with_feature_set",
|
|
)
|
|
load(
|
|
":cc_toolchain_actions.bzl",
|
|
"all_compile_actions",
|
|
"all_cpp_compile_actions",
|
|
"all_link_actions",
|
|
"codegen_compile_actions",
|
|
"preprocessor_compile_actions",
|
|
)
|
|
|
|
clang_feature = feature(
|
|
name = "clang",
|
|
enabled = True,
|
|
flag_sets = [
|
|
flag_set(
|
|
actions = all_compile_actions + all_link_actions,
|
|
flag_groups = [
|
|
flag_group(flags = [
|
|
"-no-canonical-prefixes",
|
|
"-fcolor-diagnostics",
|
|
]),
|
|
flag_group(
|
|
expand_if_available = "sysroot",
|
|
flags = ["--sysroot=%{sysroot}"],
|
|
),
|
|
],
|
|
),
|
|
flag_set(
|
|
actions = all_compile_actions,
|
|
flag_groups = [
|
|
flag_group(flags = [
|
|
# Compile actions shouldn't link anything.
|
|
"-c",
|
|
]),
|
|
|
|
# Flags controlling the production of specific outputs from
|
|
# compile actions.
|
|
flag_group(
|
|
expand_if_available = "output_assembly_file",
|
|
flags = ["-S"],
|
|
),
|
|
flag_group(
|
|
expand_if_available = "output_preprocess_file",
|
|
flags = ["-E"],
|
|
),
|
|
flag_group(
|
|
expand_if_available = "dependency_file",
|
|
flags = ["-MD", "-MF", "%{dependency_file}"],
|
|
),
|
|
flag_group(
|
|
expand_if_available = "output_file",
|
|
flags = ["-frandom-seed=%{output_file}"],
|
|
),
|
|
],
|
|
),
|
|
flag_set(
|
|
# Flags specific to compiling C++ sources.
|
|
actions = all_cpp_compile_actions,
|
|
flag_groups = [flag_group(flags = [
|
|
"-std=c++20",
|
|
])],
|
|
),
|
|
flag_set(
|
|
actions = codegen_compile_actions,
|
|
flag_groups = [flag_group(flags = [
|
|
"-ffunction-sections",
|
|
"-fdata-sections",
|
|
])],
|
|
),
|
|
flag_set(
|
|
actions = codegen_compile_actions,
|
|
flag_groups = [flag_group(
|
|
expand_if_available = "pic",
|
|
flags = ["-fPIC"],
|
|
)],
|
|
),
|
|
flag_set(
|
|
actions = preprocessor_compile_actions,
|
|
flag_groups = [
|
|
flag_group(flags = [
|
|
# Disable a warning and override builtin macros to
|
|
# ensure a hermetic build.
|
|
"-Wno-builtin-macro-redefined",
|
|
"-D__DATE__=\"redacted\"",
|
|
"-D__TIMESTAMP__=\"redacted\"",
|
|
"-D__TIME__=\"redacted\"",
|
|
]),
|
|
flag_group(
|
|
flags = ["-D%{preprocessor_defines}"],
|
|
iterate_over = "preprocessor_defines",
|
|
),
|
|
flag_group(
|
|
expand_if_available = "includes",
|
|
flags = ["-include", "%{includes}"],
|
|
iterate_over = "includes",
|
|
),
|
|
flag_group(
|
|
flags = ["-iquote", "%{quote_include_paths}"],
|
|
iterate_over = "quote_include_paths",
|
|
),
|
|
flag_group(
|
|
flags = ["-I%{include_paths}"],
|
|
iterate_over = "include_paths",
|
|
),
|
|
flag_group(
|
|
flags = ["-isystem", "%{system_include_paths}"],
|
|
iterate_over = "system_include_paths",
|
|
),
|
|
],
|
|
),
|
|
flag_set(
|
|
actions = [
|
|
ACTION_NAMES.cpp_link_dynamic_library,
|
|
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
|
|
],
|
|
flag_groups = [flag_group(flags = ["-shared"])],
|
|
),
|
|
flag_set(
|
|
actions = all_link_actions,
|
|
flag_groups = [
|
|
flag_group(
|
|
expand_if_available = "strip_debug_symbols",
|
|
flags = ["-Wl,-S"],
|
|
),
|
|
flag_group(
|
|
expand_if_available = "library_search_directories",
|
|
flags = ["-L%{library_search_directories}"],
|
|
iterate_over = "library_search_directories",
|
|
),
|
|
flag_group(
|
|
expand_if_available =
|
|
"runtime_library_search_directories",
|
|
iterate_over = "runtime_library_search_directories",
|
|
flags = [
|
|
"-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}",
|
|
],
|
|
),
|
|
],
|
|
),
|
|
],
|
|
)
|
|
|
|
clang_warnings_feature = feature(
|
|
name = "clang_warnings",
|
|
enabled = True,
|
|
flag_sets = [flag_set(
|
|
actions = all_compile_actions,
|
|
flag_groups = [flag_group(flags = [
|
|
"-Werror",
|
|
"-Wall",
|
|
"-Wextra",
|
|
"-Wthread-safety",
|
|
"-Wself-assign",
|
|
"-Wimplicit-fallthrough",
|
|
"-Wctad-maybe-unsupported",
|
|
"-Wextra-semi",
|
|
"-Wmissing-prototypes",
|
|
"-Wzero-as-null-pointer-constant",
|
|
"-Wdelete-non-virtual-dtor",
|
|
|
|
# TODO: Regression that warns on anonymous unions; remove depending
|
|
# on fix.
|
|
"-Wno-missing-designated-field-initializers",
|
|
])],
|
|
)],
|
|
)
|
|
|
|
libcxx_feature = feature(
|
|
name = "libcxx",
|
|
enabled = True,
|
|
flag_sets = [
|
|
flag_set(
|
|
actions = all_cpp_compile_actions + all_link_actions,
|
|
flag_groups = [flag_group(flags = [
|
|
"-stdlib=libc++",
|
|
])],
|
|
with_features = [
|
|
# libc++ is only used on non-Windows platforms.
|
|
with_feature_set(not_features = ["windows_target"]),
|
|
],
|
|
),
|
|
flag_set(
|
|
actions = all_link_actions,
|
|
flag_groups = [flag_group(flags = [
|
|
"-unwindlib=libunwind",
|
|
])],
|
|
with_features = [
|
|
# libc++ is only used on non-Windows platforms.
|
|
with_feature_set(not_features = ["windows_target"]),
|
|
],
|
|
),
|
|
],
|
|
)
|