diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcStarlarkInternal.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcStarlarkInternal.java index e8911aca4b81f4..cf27b88604a572 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcStarlarkInternal.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcStarlarkInternal.java @@ -91,32 +91,6 @@ public CcStarlarkApiInfo createCcProvider(CcInfo ccInfo) { return new CcStarlarkApiInfo(ccInfo); } - @StarlarkMethod( - name = "strip", - documented = false, - parameters = { - @Param(name = "ctx", named = true, positional = false), - @Param(name = "toolchain", named = true, positional = false), - @Param(name = "input", named = true, positional = false), - @Param(name = "output", named = true, positional = false), - @Param(name = "feature_configuration", named = true, positional = false), - }) - public void createStripAction( - StarlarkRuleContext ctx, - CcToolchainProvider toolchain, - Artifact input, - Artifact output, - FeatureConfigurationForStarlark featureConfig) - throws EvalException, RuleErrorException { - CppHelper.createStripAction( - ctx.getRuleContext(), - toolchain, - ctx.getRuleContext().getFragment(CppConfiguration.class), - input, - output, - featureConfig.getFeatureConfiguration()); - } - @StarlarkMethod( name = "init_make_variables", documented = false, diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl index 5bf82474fdc13c..8087bb608cb320 100644 --- a/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl @@ -155,47 +155,6 @@ def _create_debug_packager_actions(ctx, cc_toolchain, dwp_output, dwo_files): outputs = packager["outputs"], ) -def _create_strip_action(ctx, cc_toolchain, cpp_config, input, output, feature_configuration): - if cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "no_stripping"): - ctx.actions.symlink( - output = output, - target_file = input, - progress_message = "Symlinking original binary as stripped binary", - ) - return - - if not cc_common.action_is_enabled(feature_configuration = feature_configuration, action_name = "strip"): - fail("Expected action_config for 'strip' to be configured.") - - variables = cc_common.create_compile_variables( - cc_toolchain = cc_toolchain, - feature_configuration = feature_configuration, - output_file = output.path, - input_file = input.path, - strip_opts = cpp_config.strip_opts(), - ) - command_line = cc_common.get_memory_inefficient_command_line( - feature_configuration = feature_configuration, - action_name = "strip", - variables = variables, - ) - execution_info = {} - for execution_requirement in cc_common.get_tool_requirement_for_action(feature_configuration = feature_configuration, action_name = "strip"): - execution_info[execution_requirement] = "" - ctx.actions.run( - inputs = depset( - direct = [input], - transitive = [cc_toolchain.all_files], - ), - outputs = [output], - use_default_shell_env = True, - executable = cc_common.get_tool_for_action(feature_configuration = feature_configuration, action_name = "strip"), - execution_requirements = execution_info, - progress_message = "Stripping {} for {}".format(output.short_path, ctx.label), - mnemonic = "CcStrip", - arguments = command_line, - ) - def _is_stamping_enabled(ctx): if ctx.configuration.is_tool_configuration(): return 0 @@ -858,7 +817,7 @@ def cc_binary_impl(ctx, additional_linkopts): # Create the stripped binary but don't add it to filesToBuild; it's only built when requested. stripped_file = ctx.outputs.stripped_binary - _create_strip_action(ctx, cc_toolchain, cpp_config, binary, stripped_file, feature_configuration) + cc_helper.create_strip_action(ctx, cc_toolchain, cpp_config, binary, stripped_file, feature_configuration) dwo_files = _collect_transitive_dwo_artifacts( cc_compilation_outputs, cc_helper.merge_cc_debug_contexts(cc_compilation_outputs, _get_providers(ctx, cpp_config)), diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl index 4182c572010395..cbd3afcaccebba 100644 --- a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl @@ -63,6 +63,47 @@ def _check_srcs_extensions(ctx, allowed_src_files, rule_name, allow_versioned_sh if not at_least_one_good: fail("'{}' does not produce any {} srcs files".format(str(src.label), rule_name), attr = "srcs") +def _create_strip_action(ctx, cc_toolchain, cpp_config, input, output, feature_configuration): + if cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "no_stripping"): + ctx.actions.symlink( + output = output, + target_file = input, + progress_message = "Symlinking original binary as stripped binary", + ) + return + + if not cc_common.action_is_enabled(feature_configuration = feature_configuration, action_name = "strip"): + fail("Expected action_config for 'strip' to be configured.") + + variables = cc_common.create_compile_variables( + cc_toolchain = cc_toolchain, + feature_configuration = feature_configuration, + output_file = output.path, + input_file = input.path, + strip_opts = cpp_config.strip_opts(), + ) + command_line = cc_common.get_memory_inefficient_command_line( + feature_configuration = feature_configuration, + action_name = "strip", + variables = variables, + ) + execution_info = {} + for execution_requirement in cc_common.get_tool_requirement_for_action(feature_configuration = feature_configuration, action_name = "strip"): + execution_info[execution_requirement] = "" + ctx.actions.run( + inputs = depset( + direct = [input], + transitive = [cc_toolchain.all_files], + ), + outputs = [output], + use_default_shell_env = True, + executable = cc_common.get_tool_for_action(feature_configuration = feature_configuration, action_name = "strip"), + execution_requirements = execution_info, + progress_message = "Stripping {} for {}".format(output.short_path, ctx.label), + mnemonic = "CcStrip", + arguments = command_line, + ) + def _merge_cc_debug_contexts(compilation_outputs, dep_cc_infos): debug_context = cc_common.create_debug_context(compilation_outputs) debug_contexts = [] @@ -561,4 +602,5 @@ cc_helper = struct( get_linked_artifact = _get_linked_artifact, collect_compilation_prerequisites = _collect_compilation_prerequisites, collect_native_cc_libraries = _collect_native_cc_libraries, + create_strip_action = _create_strip_action, )