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
6 changes: 4 additions & 2 deletions cc/common/cc_helper.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -928,11 +928,13 @@ def _expand_make_variables_for_copts(ctx, tokenization, unexpanded_tokens, addit
tokens.append(_expand(ctx, token, additional_make_variable_substitutions, targets = targets))
return tokens

def _get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "copts"):
def _get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "copts", requested_features = None):
if not hasattr(ctx.attr, attr):
fail("could not find rule attribute named: '{}'".format(attr))
if requested_features == None:
requested_features = ctx.features
attribute_copts = getattr(ctx.attr, attr)
tokenization = not (cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "no_copts_tokenization") or "no_copts_tokenization" in ctx.features)
tokenization = not (cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "no_copts_tokenization") or "no_copts_tokenization" in requested_features)
expanded_attribute_copts = _expand_make_variables_for_copts(ctx, tokenization, attribute_copts, additional_make_variable_substitutions)
return expanded_attribute_copts

Expand Down
8 changes: 4 additions & 4 deletions cc/private/rules_impl/cc_binary_impl.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -525,9 +525,9 @@ def cc_binary_impl(ctx, additional_linkopts, force_linkstatic = False):
actions = ctx.actions,
feature_configuration = feature_configuration,
cc_toolchain = cc_toolchain,
user_compile_flags = runtimes_copts + cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "copts"),
conly_flags = cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "conlyopts"),
cxx_flags = cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "cxxopts"),
user_compile_flags = runtimes_copts + cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "copts", requested_features = features),
conly_flags = cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "conlyopts", requested_features = features),
cxx_flags = cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "cxxopts", requested_features = features),
defines = cc_helper.defines(ctx, additional_make_variable_substitutions),
local_defines = cc_helper.local_defines(ctx, additional_make_variable_substitutions) + cc_helper.get_local_defines_for_runfiles_lookup(ctx, ctx.attr.deps),
includes = cc_helper.include_dirs(ctx, additional_make_variable_substitutions),
Expand All @@ -550,7 +550,7 @@ def cc_binary_impl(ctx, additional_linkopts, force_linkstatic = False):
link_variables = {}

# Allows the dynamic library generated for code of test targets to be linked separately.
link_compile_output_separately = ctx.attr._is_test and linking_mode == linker_mode.LINKING_DYNAMIC and cpp_config.dynamic_mode() == "DEFAULT" and ("dynamic_link_test_srcs" in ctx.features)
link_compile_output_separately = ctx.attr._is_test and linking_mode == linker_mode.LINKING_DYNAMIC and cpp_config.dynamic_mode() == "DEFAULT" and ("dynamic_link_test_srcs" in features)

is_windows_enabled = cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "targets_windows")

Expand Down
9 changes: 5 additions & 4 deletions cc/private/rules_impl/cc_library_impl.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,11 @@ def _cc_library_impl(ctx):
cc_toolchain = find_cc_toolchain(ctx)
cc_helper.report_invalid_options(cc_toolchain, ctx.fragments.cpp)

features = ctx.features
feature_configuration = cc_common.configure_features(
ctx = ctx,
cc_toolchain = cc_toolchain,
requested_features = ctx.features,
requested_features = features,
unsupported_features = ctx.disabled_features,
)

Expand All @@ -58,9 +59,9 @@ def _cc_library_impl(ctx):
name = ctx.label.name,
cc_toolchain = cc_toolchain,
feature_configuration = feature_configuration,
user_compile_flags = runtimes_copts + cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "copts"),
conly_flags = cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "conlyopts"),
cxx_flags = cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "cxxopts"),
user_compile_flags = runtimes_copts + cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "copts", requested_features = features),
conly_flags = cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "conlyopts", requested_features = features),
cxx_flags = cc_helper.get_copts(ctx, feature_configuration, additional_make_variable_substitutions, attr = "cxxopts", requested_features = features),
defines = cc_helper.defines(ctx, additional_make_variable_substitutions),
local_defines = cc_helper.local_defines(ctx, additional_make_variable_substitutions) + cc_helper.get_local_defines_for_runfiles_lookup(ctx, ctx.attr.deps + ctx.attr.implementation_deps),
includes = cc_helper.include_dirs(ctx, additional_make_variable_substitutions),
Expand Down
16 changes: 11 additions & 5 deletions cc/private/rules_impl/objc_compilation_support.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,13 @@ def _build_common_variables(
extra_enabled_features = [],
attr_linkopts = [],
alwayslink = False,
direct_cc_compilation_contexts = []):
direct_cc_compilation_contexts = [],
requested_features = None,
unsupported_features = None):
if requested_features == None:
requested_features = ctx.features
if unsupported_features == None:
unsupported_features = ctx.disabled_features
compilation_attributes = _create_compilation_attributes(ctx = ctx)
intermediate_artifacts = create_intermediate_artifacts(ctx = ctx)
if empty_compilation_artifacts:
Expand Down Expand Up @@ -112,22 +118,22 @@ def _build_common_variables(
extra_enabled_features = extra_enabled_features,
objc_compilation_context = objc_compilation_context,
objc_linking_context = objc_linking_context,
requested_features = requested_features,
toolchain = toolchain,
unsupported_features = unsupported_features,
alwayslink = alwayslink,
use_pch = use_pch,
objc_config = ctx.fragments.objc,
objc_provider = objc_provider,
)

def _build_feature_configuration(common_variables, support_parse_headers):
ctx = common_variables.ctx

enabled_features = []
enabled_features.extend(ctx.features)
enabled_features.extend(common_variables.requested_features)
enabled_features.extend(common_variables.extra_enabled_features)

disabled_features = []
disabled_features.extend(ctx.disabled_features)
disabled_features.extend(common_variables.unsupported_features)
disabled_features.extend(common_variables.extra_disabled_features)

if not support_parse_headers:
Expand Down
15 changes: 12 additions & 3 deletions cc/private/rules_impl/objc_library.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,14 @@ def _objc_library_impl(ctx):
_validate_attributes(srcs = ctx.attr.srcs, non_arc_srcs = ctx.attr.non_arc_srcs, label = ctx.label)

cc_toolchain = find_cc_toolchain(ctx)
semantics.check_toolchain_supports_objc_compile(ctx, cc_toolchain)
requested_features = ctx.features
unsupported_features = ctx.disabled_features
semantics.check_toolchain_supports_objc_compile(
ctx = ctx,
cc_toolchain = cc_toolchain,
requested_features = requested_features,
unsupported_features = unsupported_features,
)

common_variables = compilation_support.build_common_variables(
ctx = ctx,
Expand All @@ -65,6 +72,8 @@ def _objc_library_impl(ctx):
implementation_deps = ctx.attr.implementation_deps,
attr_linkopts = ctx.attr.linkopts,
alwayslink = cc.target_should_alwayslink(ctx),
requested_features = requested_features,
unsupported_features = unsupported_features,
)
files = []
if common_variables.compilation_artifacts.archive != None:
Expand All @@ -90,8 +99,8 @@ def _objc_library_impl(ctx):
feature_configuration = cc_common.configure_features(
ctx = ctx,
cc_toolchain = cc_toolchain,
requested_features = ctx.features,
unsupported_features = ctx.disabled_features,
requested_features = requested_features,
unsupported_features = unsupported_features,
)
instrumented_files_info = coverage_common.instrumented_files_info(
ctx = ctx,
Expand Down
10 changes: 7 additions & 3 deletions cc/private/rules_impl/objc_semantics.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,17 @@

load("//cc/common:cc_common.bzl", "cc_common")

def _check_toolchain_supports_objc_compile(ctx, cc_toolchain):
def _check_toolchain_supports_objc_compile(ctx, cc_toolchain, requested_features = None, unsupported_features = None):
if requested_features == None:
requested_features = ctx.features
if unsupported_features == None:
unsupported_features = ctx.disabled_features
feature_configuration = cc_common.configure_features(
ctx = ctx,
cc_toolchain = cc_toolchain,
language = "objc",
requested_features = ctx.features,
unsupported_features = ctx.disabled_features,
requested_features = requested_features,
unsupported_features = unsupported_features,
)

if not cc_common.action_is_enabled(
Expand Down