Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions cc/common/cc_helper_internal.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,69 @@ _artifact_categories = [
_ArtifactCategoryInfo("CLIF_OUTPUT_PROTO", "", ".opb"),
]

_ARTIFACT_CATEGORIES_BY_NAME = {
category.name: category
for category in _artifact_categories
}

artifact_category_names = struct(**{ac.name: ac.name for ac in _artifact_categories})

def artifact_name_pattern_overrides_from_toolchain_config(toolchain_config_info):
"""Returns the artifact name pattern overrides in toolchain_config_info.

Args:
toolchain_config_info: A CcToolchainConfigInfo.

Returns:
A dict mapping artifact category names to (prefix, extension) tuples.
"""
overrides = {}
for pattern in toolchain_config_info._artifact_name_patterns_DO_NOT_USE:
category = _ARTIFACT_CATEGORIES_BY_NAME[pattern.category_name.upper()]
prefix = pattern.prefix or ""
extension = pattern.extension or ""
if prefix != category.default_prefix or extension != category.default_extension:
overrides[category.name] = (prefix, extension)
return overrides

def get_artifact_name_for_category(*, cc_toolchain, category, output_name):
"""Returns output_name with the artifact name pattern for category applied.

Args:
cc_toolchain: A CcToolchainInfo.
category: An artifact category name.
output_name: The output path before applying the artifact name pattern.

Returns:
The output path with the artifact name pattern applied to its basename.
"""
pattern = cc_toolchain._artifact_name_pattern_overrides.get(category)
if pattern == None:
category_info = _ARTIFACT_CATEGORIES_BY_NAME[category]
prefix = category_info.default_prefix
extension = category_info.default_extension
else:
prefix, extension = pattern

normalized_output_name = paths.normalize(output_name) if output_name else output_name
artifact_name = prefix + paths.basename(normalized_output_name) + extension
return paths.join(paths.dirname(normalized_output_name), artifact_name)

def get_artifact_name_extension_for_category(*, cc_toolchain, category):
"""Returns the cc_toolchain extension for category.

Args:
cc_toolchain: A CcToolchainInfo.
category: An artifact category name.

Returns:
The configured or default extension for category.
"""
pattern = cc_toolchain._artifact_name_pattern_overrides.get(category)
if pattern != None:
return pattern[1]
return _ARTIFACT_CATEGORIES_BY_NAME[category].default_extension

output_subdirectories = struct(
OBJS = "_objs",
PIC_OBJS = "_pic_objs",
Expand Down
3 changes: 2 additions & 1 deletion cc/private/cc_common.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

load(
"//cc/common:cc_helper_internal.bzl",
"get_artifact_name_for_category",
_CREATE_COMPILE_ACTION_API_ALLOWLISTED_PACKAGES = "CREATE_COMPILE_ACTION_API_ALLOWLISTED_PACKAGES",
_PRIVATE_STARLARKIFICATION_ALLOWLIST = "PRIVATE_STARLARKIFICATION_ALLOWLIST",
)
Expand Down Expand Up @@ -658,7 +659,7 @@ def _get_cc_native_library_info_provider():

def _get_artifact_name_for_category(*, cc_toolchain, category, output_name):
_cc_internal.check_private_api(allowlist = _PRIVATE_STARLARKIFICATION_ALLOWLIST)
return _cc_internal.get_artifact_name_for_category(
return get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = category,
output_name = output_name,
Expand Down
63 changes: 32 additions & 31 deletions cc/private/compile/compile.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ load(
"CPP_SOURCE_TYPE_HEADER",
"CPP_SOURCE_TYPE_SOURCE",
"extensions",
"get_artifact_name_for_category",
"should_create_per_object_debug_info",
_use_pic_for_binaries = "use_pic_for_binaries",
_use_pic_for_dynamic_libs = "use_pic_for_dynamic_libs",
Expand Down Expand Up @@ -536,7 +537,7 @@ def _create_scan_deps_action(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.INCLUDED_FILE_LIST,
output_name = ddi_output_name,
Expand Down Expand Up @@ -676,7 +677,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.CPP_MODULES_INFO,
output_name = label.name,
Expand All @@ -693,7 +694,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
source_label = cpp_source.label

if use_pic:
output_name_base = _cc_internal.get_artifact_name_for_category(
output_name_base = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.PIC_FILE,
output_name = output_name,
Expand All @@ -706,7 +707,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = output_category,
output_name = output_name_base,
Expand All @@ -717,7 +718,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(

# dependencies information are put in .ddi file
# the format is https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1689r5.html
ddi_output_name = _cc_internal.get_artifact_name_for_category(
ddi_output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.CPP_MODULES_DDI,
output_name = output_name_base,
Expand Down Expand Up @@ -769,7 +770,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
bitcode_output = feature_configuration.is_enabled("thin_lto") and (("." + source_artifact.extension) in LTO_SOURCE_EXTENSIONS)
module_file = source_to_module_file_map[source_artifact]
if use_pic:
output_name_base = _cc_internal.get_artifact_name_for_category(
output_name_base = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.PIC_FILE,
output_name = output_name,
Expand All @@ -785,7 +786,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.CPP_MODULES_MODMAP,
output_name = output_name_base,
Expand All @@ -795,7 +796,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.CPP_MODULES_MODMAP_INPUT,
output_name = output_name_base,
Expand Down Expand Up @@ -865,7 +866,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
bitcode_output = feature_configuration.is_enabled("thin_lto") and (("." + source_artifact.extension) in LTO_SOURCE_EXTENSIONS)

if use_pic:
output_name_base = _cc_internal.get_artifact_name_for_category(
output_name_base = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.PIC_FILE,
output_name = output_name,
Expand All @@ -883,7 +884,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.CPP_MODULES_MODMAP,
output_name = output_name_base,
Expand All @@ -893,14 +894,14 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.CPP_MODULES_MODMAP_INPUT,
output_name = output_name_base,
),
)

ddi_output_name = _cc_internal.get_artifact_name_for_category(
ddi_output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.CPP_MODULES_DDI,
output_name = output_name_base,
Expand Down Expand Up @@ -937,7 +938,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.CPP_MODULES_MODMAP,
output_name = output_name_base,
Expand All @@ -947,7 +948,7 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.CPP_MODULES_MODMAP_INPUT,
output_name = output_name_base,
Expand Down Expand Up @@ -1313,7 +1314,7 @@ def _create_cc_compile_actions(
_basename_without_extension(source_file) in compiled_basenames):
continue

output_name_base = _cc_internal.get_artifact_name_for_category(
output_name_base = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.GENERATED_HEADER,
output_name = output_name_map[source_file],
Expand All @@ -1322,7 +1323,7 @@ def _create_cc_compile_actions(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.PROCESSED_HEADER,
output_name = output_name_base,
Expand All @@ -1332,7 +1333,7 @@ def _create_cc_compile_actions(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.INCLUDED_FILE_LIST,
output_name = output_name_base,
Expand All @@ -1345,7 +1346,7 @@ def _create_cc_compile_actions(
action_construction_context,
label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.SERIALIZED_DIAGNOSTICS_FILE,
output_name = output_name_base,
Expand Down Expand Up @@ -1546,7 +1547,7 @@ def _create_compile_source_action(
progress_message_prefix = None):
output_pic_nopic_name = output_name
if use_pic:
output_pic_nopic_name = _cc_internal.get_artifact_name_for_category(
output_pic_nopic_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.PIC_FILE,
output_name = output_name,
Expand All @@ -1558,7 +1559,7 @@ def _create_compile_source_action(
ctx = action_construction_context,
label = label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = output_category,
output_name = output_pic_nopic_name,
Expand Down Expand Up @@ -1785,7 +1786,7 @@ def _create_temps_action(
ctx = action_construction_context,
label = label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = category,
output_name = output_name,
Expand All @@ -1795,7 +1796,7 @@ def _create_temps_action(
ctx = action_construction_context,
label = label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.GENERATED_ASSEMBLY,
output_name = output_name,
Expand Down Expand Up @@ -1953,7 +1954,7 @@ def _create_module_codegen_action(
ctx = action_construction_context,
label = label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.COVERAGE_DATA_FILE,
output_name = output_name,
Expand Down Expand Up @@ -1981,7 +1982,7 @@ def _create_module_codegen_action(
ctx = action_construction_context,
label = label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.OBJECT_FILE,
output_name = output_name,
Expand All @@ -1995,7 +1996,7 @@ def _create_module_codegen_action(
ctx = action_construction_context,
label = label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.INCLUDED_FILE_LIST,
output_name = output_name,
Expand All @@ -2008,7 +2009,7 @@ def _create_module_codegen_action(
ctx = action_construction_context,
label = label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.SERIALIZED_DIAGNOSTICS_FILE,
output_name = output_name,
Expand Down Expand Up @@ -2227,12 +2228,12 @@ def _maybe_declare_dotd_file(
if (_use_dotd_file(feature_configuration, source_artifact)):
dotd_base_name = output_name
if category != artifact_category.OBJECT_FILE and category != artifact_category.PROCESSED_HEADER:
dotd_base_name = _cc_internal.get_artifact_name_for_category(
dotd_base_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = category,
output_name = output_name,
)
dotd_name = _cc_internal.get_artifact_name_for_category(
dotd_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.INCLUDED_FILE_LIST,
output_name = dotd_base_name,
Expand All @@ -2257,12 +2258,12 @@ def _maybe_declare_diagnostics_file(
if feature_configuration.is_enabled("serialized_diagnostics_file"):
base_name = output_name
if category != artifact_category.OBJECT_FILE and category != artifact_category.PROCESSED_HEADER:
base_name = _cc_internal.get_artifact_name_for_category(
base_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = category,
output_name = output_name,
)
diagnostics_file_name = _cc_internal.get_artifact_name_for_category(
diagnostics_file_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.SERIALIZED_DIAGNOSTICS_FILE,
output_name = base_name,
Expand All @@ -2289,7 +2290,7 @@ def _maybe_declare_gcno_file(
ctx = ctx,
label = label,
configuration = configuration,
output_name = _cc_internal.get_artifact_name_for_category(
output_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.COVERAGE_DATA_FILE,
output_name = output_name,
Expand Down
5 changes: 3 additions & 2 deletions cc/private/link/cc_linking_helper.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ A module to create C/C++ link actions in a consistent way.
load("@bazel_skylib//lib:paths.bzl", "paths")
load(
"//cc/common:cc_helper_internal.bzl",
"get_artifact_name_for_category",
"root_relative_path",
"wrap_with_check_private_api",
_use_pic_for_binaries = "use_pic_for_binaries",
Expand Down Expand Up @@ -512,7 +513,7 @@ def _construct_dynamic_library_to_link(
def _get_linked_artifact(actions, name, link_target_type, cc_toolchain, linked_dll_name_suffix = ""):
maybe_pic_name = name
if link_target_type.is_pic:
maybe_pic_name = _cc_internal.get_artifact_name_for_category(
maybe_pic_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = artifact_category.PIC_FILE,
output_name = maybe_pic_name,
Expand All @@ -521,7 +522,7 @@ def _get_linked_artifact(actions, name, link_target_type, cc_toolchain, linked_d
linked_name = maybe_pic_name
if link_target_type == LINK_TARGET_TYPE.NODEPS_DYNAMIC_LIBRARY:
linked_name += linked_dll_name_suffix
linked_name = _cc_internal.get_artifact_name_for_category(
linked_name = get_artifact_name_for_category(
cc_toolchain = cc_toolchain,
category = link_target_type.linker_output,
output_name = linked_name,
Expand Down
Loading