aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar Yun Peng <pcloudy@google.com>2017-08-04 10:45:46 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-08-04 17:16:25 +0200
commit028669478cc0054ab51f3dde6738a1269c405ddd (patch)
tree83dea4d4ce544aff179b409efbad211377ee4645 /src/main/java/com
parent7e4fbbe4ab3915a57b2187408c3909e5cd6c6013 (diff)
Add no_stripping feature to MSVC CROSSTOOL
If no_stripping feature is enabled, then strip action config is not necessary, building stripped binary will just copy the orignial binary. Fix https://github.com/bazelbuild/bazel/issues/3482 Also fixed CI breakage: https://github.com/bazelbuild/bazel/issues/3505 Change-Id: Ie78fe174c42248c9b3e930008eef96dcd1864741 PiperOrigin-RevId: 164237588
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";