aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java15
2 files changed, 21 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index b9719bbeb3..e4722e022a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -33,6 +33,7 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.StaticallyLinkedMarkerProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
+import com.google.devtools.build.lib.analysis.actions.SymlinkAction;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
@@ -614,6 +615,16 @@ public class CppHelper {
Artifact input,
Artifact output,
FeatureConfiguration featureConfiguration) {
+ if (featureConfiguration.isEnabled(CppRuleClasses.NO_STRIPPING)) {
+ context.registerAction(
+ new SymlinkAction(
+ context.getActionOwner(),
+ input,
+ output,
+ "Symlinking original binary as stripped binary"));
+ return;
+ }
+
if (!featureConfiguration.actionIsConfigured(CppCompileAction.STRIP_ACTION_NAME)) {
context.ruleError("Expected action_config for 'strip' to be configured.");
return;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
index 6da2c12e49..67c15a13cb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
@@ -48,6 +48,7 @@ import com.google.devtools.build.lib.rules.cpp.transitions.EnableLipoTransition;
import com.google.devtools.build.lib.rules.cpp.transitions.LipoContextCollectorTransition;
import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector.InstrumentationSpec;
import com.google.devtools.build.lib.util.FileTypeSet;
+import com.google.devtools.build.lib.util.OsUtils;
/**
* Rule class definitions for C++ rules.
@@ -168,12 +169,9 @@ public class CppRuleClasses {
public static final LibraryLanguage LANGUAGE = new LibraryLanguage("C++");
- /**
- * Implicit outputs for cc_binary rules.
- */
+ /** Implicit outputs for cc_binary rules. */
public static final SafeImplicitOutputsFunction CC_BINARY_STRIPPED =
- fromTemplates("%{name}.stripped");
-
+ fromTemplates("%{name}.stripped" + OsUtils.executableExtension());
// Used for requesting dwp "debug packages".
public static final SafeImplicitOutputsFunction CC_BINARY_DEBUG_PACKAGE =
@@ -323,6 +321,13 @@ public class CppRuleClasses {
*/
public static final String GENERATE_PDB_FILE = "generate_pdb_file";
+ /**
+ * A string constant for no_stripping feature, if it's specified, then no strip action config is
+ * needed, instead the stripped binary will simply be a symlink (or a copy on Windows) of the
+ * original binary.
+ */
+ public static final String NO_STRIPPING = "no_stripping";
+
/** A string constant for /showIncludes parsing feature, should only be used for MSVC toolchain */
public static final String PARSE_SHOWINCLUDES = "parse_showincludes";