From 9335bbe90c33591bd6c7f4c0f461af9571ab4840 Mon Sep 17 00:00:00 2001 From: cparsons Date: Mon, 5 Jun 2017 18:14:40 -0400 Subject: Specify isTestRule as an input to CompilationSupport instead of from the current rule name RELNOTES: None. PiperOrigin-RevId: 158068921 --- .../build/lib/rules/objc/CompilationSupport.java | 27 ++++++++++++++++------ .../rules/objc/CrosstoolCompilationSupport.java | 14 ++++++----- .../devtools/build/lib/rules/objc/IosTest.java | 2 +- .../lib/rules/objc/LegacyCompilationSupport.java | 14 +++++------ .../devtools/build/lib/rules/objc/ObjcLibrary.java | 2 +- 5 files changed, 36 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index bcad1d6a71..576d9022a9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java @@ -64,7 +64,6 @@ import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; -import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.AppleToolchain; import com.google.devtools.build.lib.rules.apple.Platform; @@ -306,6 +305,7 @@ public abstract class CompilationSupport { protected final boolean useDeps; protected final Map> outputGroupCollector; protected final CcToolchainProvider toolchain; + protected final boolean isTestRule; /** * Creates a new compilation support for the given rule and build configuration. @@ -327,7 +327,8 @@ public abstract class CompilationSupport { CompilationAttributes compilationAttributes, boolean useDeps, Map> outputGroupCollector, - CcToolchainProvider toolchain) { + CcToolchainProvider toolchain, + boolean isTestRule) { this.ruleContext = ruleContext; this.buildConfiguration = buildConfiguration; this.objcConfiguration = buildConfiguration.getFragment(ObjcConfiguration.class); @@ -335,6 +336,7 @@ public abstract class CompilationSupport { this.attributes = compilationAttributes; this.intermediateArtifacts = intermediateArtifacts; this.useDeps = useDeps; + this.isTestRule = isTestRule; this.outputGroupCollector = outputGroupCollector; // TODO(b/62143697): Remove this check once all rules are using the crosstool support. if (ruleContext @@ -360,6 +362,7 @@ public abstract class CompilationSupport { private Map> outputGroupCollector; private boolean isObjcLibrary = false; private CcToolchainProvider toolchain; + private boolean isTestRule = false; /** Sets the {@link RuleContext} for the calling target. */ public Builder setRuleContext(RuleContext ruleContext) { @@ -398,11 +401,19 @@ public abstract class CompilationSupport { * Indicates that this CompilationSupport is for use in an objc_library target. This will cause * CrosstoolCompilationSupport to be used if --experimental_objc_crosstool=library */ - public Builder isObjcLibrary() { + public Builder setIsObjcLibrary() { this.isObjcLibrary = true; return this; } + /** + * Indicates that this CompilationSupport is for use in a test rule. + */ + public Builder setIsTestRule() { + this.isTestRule = true; + return this; + } + /** * Causes the provided map to be updated with output groups produced by compile action * registration. @@ -463,7 +474,8 @@ public abstract class CompilationSupport { compilationAttributes, useDeps, outputGroupCollector, - toolchain); + toolchain, + isTestRule); } else { return new LegacyCompilationSupport( ruleContext, @@ -472,7 +484,8 @@ public abstract class CompilationSupport { compilationAttributes, useDeps, outputGroupCollector, - toolchain); + toolchain, + isTestRule); } } } @@ -661,7 +674,7 @@ public abstract class CompilationSupport { getGcovForObjectiveCIfNeeded(), // The COVERAGE_GCOV_PATH environment variable is added in TestSupport#getExtraProviders() NestedSetBuilder.>emptySet(Order.COMPILE_ORDER), - !TargetUtils.isTestRule(ruleContext.getTarget())); + !isTestRule); } /** @@ -1182,7 +1195,7 @@ public abstract class CompilationSupport { */ protected void registerBinaryStripAction(Artifact binaryToLink, StrippingType strippingType) { final Iterable stripArgs; - if (TargetUtils.isTestRule(ruleContext.getRule())) { + if (isTestRule) { // For test targets, only debug symbols are stripped off, since /usr/bin/strip is not able // to strip off all symbols in XCTest bundle. stripArgs = ImmutableList.of("-S"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java index cb22ab4bfd..5c06156207 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java @@ -38,7 +38,6 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; -import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions.AppleBitcodeMode; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper; @@ -135,7 +134,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport { CompilationAttributes.Builder.fromRuleContext(ruleContext).build(), /*useDeps=*/ true, outputGroupCollector, - null); + null, + /*isTestRule=*/ false); } /** @@ -155,7 +155,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport { CompilationAttributes compilationAttributes, boolean useDeps, Map> outputGroupCollector, - CcToolchainProvider toolchain) { + CcToolchainProvider toolchain, + boolean isTestRule) { super( ruleContext, buildConfiguration, @@ -163,7 +164,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport { compilationAttributes, useDeps, outputGroupCollector, - toolchain); + toolchain, + isTestRule); } @Override @@ -453,7 +455,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport { return result; } - private static FeatureConfiguration getFeatureConfiguration(RuleContext ruleContext, + private FeatureConfiguration getFeatureConfiguration(RuleContext ruleContext, BuildConfiguration configuration) { ImmutableSet.Builder activatedCrosstoolSelectables = ImmutableSet.builder() @@ -494,7 +496,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport { } else { activatedCrosstoolSelectables.add(GCC_COVERAGE_MAP_FORMAT); } - if (!TargetUtils.isTestRule(ruleContext.getRule())) { + if (!isTestRule) { activatedCrosstoolSelectables.add(IS_NOT_TEST_TARGET_FEATURE_NAME); } if (configuration.getFragment(ObjcConfiguration.class).generateDsym()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java index 5e3d3af5e9..f245162101 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java @@ -156,7 +156,7 @@ public final class IosTest implements RuleConfiguredTargetFactory { .build(); CompilationSupport compilationSupport = - new CompilationSupport.Builder().setRuleContext(ruleContext).build(); + new CompilationSupport.Builder().setRuleContext(ruleContext).setIsTestRule().build(); compilationSupport .registerLinkActions( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java index 169b7a6756..c0cb7ef940 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java @@ -57,7 +57,6 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions.AppleBitcodeMode; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.AppleToolchain; @@ -148,7 +147,8 @@ public class LegacyCompilationSupport extends CompilationSupport { CompilationAttributes compilationAttributes, boolean useDeps, Map> outputGroupCollector, - CcToolchainProvider toolchain) { + CcToolchainProvider toolchain, + boolean isTestRule) { super( ruleContext, buildConfiguration, @@ -156,7 +156,8 @@ public class LegacyCompilationSupport extends CompilationSupport { compilationAttributes, useDeps, outputGroupCollector, - toolchain); + toolchain, + isTestRule); } @Override @@ -689,12 +690,9 @@ public class LegacyCompilationSupport extends CompilationSupport { commandLine.add(CLANG); } - // Do not perform code stripping on tests because XCTest binary is linked not as an executable - // but as a bundle without any entry point. - boolean isTestTarget = TargetUtils.isTestRule(ruleContext.getRule()); - // TODO(b/36562173): Replace the "!isTestTarget" condition with the presence of "-bundle" in + // TODO(b/36562173): Replace the "!isTestRule" condition with the presence of "-bundle" in // the command line. - if (objcConfiguration.shouldStripBinary() && !isTestTarget) { + if (objcConfiguration.shouldStripBinary() && !isTestRule) { commandLine.add("-dead_strip").add("-no_dead_strip_inits_and_terms"); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java index 6ab4f59b16..e0b7341dbe 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java @@ -70,7 +70,7 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { new CompilationSupport.Builder() .setRuleContext(ruleContext) .setOutputGroupCollector(outputGroupCollector) - .isObjcLibrary() + .setIsObjcLibrary() .build(); compilationSupport -- cgit v1.2.3