diff options
author | 2017-08-04 10:45:46 +0200 | |
---|---|---|
committer | 2017-08-04 17:16:25 +0200 | |
commit | 028669478cc0054ab51f3dde6738a1269c405ddd (patch) | |
tree | 83dea4d4ce544aff179b409efbad211377ee4645 /src/main/java/com | |
parent | 7e4fbbe4ab3915a57b2187408c3909e5cd6c6013 (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.java | 11 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java | 15 |
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"; |