| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- # 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 C++ and Clang header modules toolchain features."""
- load("@rules_cc//cc:action_names.bzl", "ACTION_NAMES")
- load(
- "@rules_cc//cc:cc_toolchain_config_lib.bzl",
- "feature",
- "feature_set",
- "flag_group",
- "flag_set",
- )
- use_module_maps = feature(
- name = "use_module_maps",
- requires = [feature_set(features = ["module_maps"])],
- flag_sets = [
- flag_set(
- actions = [
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.cpp_header_parsing,
- ACTION_NAMES.cpp_module_compile,
- ],
- flag_groups = [
- # These flag groups are separate so they do not expand to
- # the cross product of the variables.
- flag_group(flags = ["-fmodule-name=%{module_name}"]),
- flag_group(
- flags = ["-fmodule-map-file=%{module_map_file}"],
- ),
- ],
- ),
- ],
- )
- # Tell bazel we support module maps in general, so they will be generated
- # for all c/c++ rules.
- # Note: not all C++ rules support module maps; thus, do not imply this
- # feature from other features - instead, require it.
- module_maps = feature(
- name = "module_maps",
- enabled = True,
- implies = [
- # "module_map_home_cwd",
- # "module_map_without_extern_module",
- # "generate_submodules",
- ],
- )
- layering_check = feature(
- name = "layering_check",
- implies = ["use_module_maps"],
- flag_sets = [flag_set(
- actions = [
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.cpp_header_parsing,
- ACTION_NAMES.cpp_module_compile,
- ],
- flag_groups = [
- flag_group(flags = [
- "-fmodules-strict-decluse",
- "-Wprivate-header",
- ]),
- flag_group(
- iterate_over = "dependent_module_map_files",
- flags = ["-fmodule-map-file=%{dependent_module_map_files}"],
- ),
- ],
- )],
- )
- # Note that the order of features is significant in this list and determines the
- # relative order of flags from the features listed.
- modules_features = [
- layering_check,
- module_maps,
- use_module_maps,
- ]
|