diff options
Diffstat (limited to 'src/main/java/com/google')
5 files changed, 33 insertions, 41 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java index d48c9f91cb..132c277e82 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java @@ -644,6 +644,11 @@ public final class CcCommon { allRequestedFeaturesBuilder.addAll(requestedFeatures); allRequestedFeaturesBuilder.addAll(DEFAULT_ACTION_CONFIGS); + + if (CppHelper.useFission(ruleContext.getFragment(CppConfiguration.class), toolchain)) { + allRequestedFeaturesBuilder.add(CppRuleClasses.PER_OBJECT_DEBUG_INFO); + } + try { FeatureConfiguration configuration = toolchain.getFeatures().getFeatureConfiguration(allRequestedFeaturesBuilder.build()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java index 583b1a112f..fa9753b0dd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java @@ -493,6 +493,8 @@ public class CcToolchain implements RuleConfiguredTargetFactory { } } + reportInvalidOptions(ruleContext, toolchainInfo); + CcToolchainProvider ccProvider = new CcToolchainProvider( getToolchainForSkylark(toolchainInfo), @@ -578,6 +580,24 @@ public class CcToolchain implements RuleConfiguredTargetFactory { return builder.build(); } + private void reportInvalidOptions(RuleContext ruleContext, CppToolchainInfo toolchain) { + CppOptions options = ruleContext.getConfiguration().getOptions().get(CppOptions.class); + CppConfiguration config = ruleContext.getFragment(CppConfiguration.class); + if (options.fissionModes.contains(config.getCompilationMode()) + && !toolchain.supportsFission()) { + ruleContext.ruleWarning( + "Fission is not supported by this crosstool. Please use a " + + "supporting crosstool to enable fission"); + } + if (options.buildTestDwp + && !(toolchain.supportsFission() && config.fissionIsActiveForCurrentCompilationMode())) { + ruleContext.ruleWarning( + "Test dwp file requested, but Fission is not enabled. To generate a " + + "dwp for the test executable, use '--fission=yes' with a toolchain that supports " + + "Fission to build statically."); + } + } + private static String getSkylarkValueForTool(Tool tool, CppToolchainInfo cppToolchainInfo) { PathFragment toolPath = cppToolchainInfo.getToolPathFragment(tool); return toolPath != null ? toolPath.getPathString() : ""; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java index f50e314dbc..974551fd70 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java @@ -486,18 +486,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment { return compilationMode; } - /** - * Returns whether the toolchain supports "Fission" C++ builds, i.e. builds where compilation - * partitions object code and debug symbols into separate output files. - * - * <p>Deprecated: Use {@link CcToolchainProvider#supportsFission()} - */ - // TODO(b/64384912): Refactor out of reportInvalidOptions() and remove - @Deprecated - public boolean supportsFission() { - return cppToolchainInfo.supportsFission(); - } - @SkylarkCallable( name = "built_in_include_directories", structField = true, @@ -987,17 +975,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment { return cppOptions.fissionModes.contains(compilationMode); } - /** - * Returns true if Fission is specified for this build and supported by the crosstool. - * - * <p>Deprecated: Use {@link CppHelper#useFission(CppConfiguration, CcToolchainProvider)} - */ - // TODO(b/64384912): Remove usage in java_binary and configurationEnabledFeatures() - @Deprecated - public boolean useFission() { - return cppOptions.fissionModes.contains(compilationMode) && supportsFission(); - } - /** Returns true if --build_test_dwp is set on this build. */ public boolean buildTestDwpIsActivated() { return cppOptions.buildTestDwp; @@ -1237,20 +1214,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment { "'--lipo=binary' can only be used with '--compilation_mode=opt' (or '-c opt')")); } - if (cppOptions.fissionModes.contains(compilationMode) && !supportsFission()) { - reporter.handle( - Event.warn( - "Fission is not supported by this crosstool. Please use a supporting " - + "crosstool to enable fission")); - } - if (cppOptions.buildTestDwp && !useFission()) { - reporter.handle( - Event.warn( - "Test dwp file requested, but Fission is not enabled. To generate a dwp " - + "for the test executable, use '--fission=yes' with a toolchain " - + "that supports Fission and build statically.")); - } - // This is an assertion check vs. user error because users can't trigger this state. Verify.verify( !(buildOptions.get(BuildConfiguration.Options.class).isHost && cppOptions.isFdo()), @@ -1362,9 +1325,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment { requestedFeatures.add(CppRuleClasses.GCC_COVERAGE_MAP_FORMAT); } } - if (useFission()) { - requestedFeatures.add(CppRuleClasses.PER_OBJECT_DEBUG_INFO); - } return requestedFeatures.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index 9af940b33f..78c4dfed16 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java @@ -40,6 +40,7 @@ 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.packages.BuildType; +import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppHelper; import com.google.devtools.build.lib.rules.cpp.LinkerInput; @@ -133,9 +134,11 @@ public class JavaBinary implements RuleConfiguredTargetFactory { CppConfiguration cppConfiguration = ruleContext.getConfiguration().getFragment( CppConfiguration.class); + CcToolchainProvider ccToolchain = + CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext); // TODO(b/64384912): Remove in favor of CcToolchainProvider boolean stripAsDefault = - cppConfiguration.useFission() + CppHelper.useFission(cppConfiguration, ccToolchain) && cppConfiguration.getCompilationMode() == CompilationMode.OPT; Artifact launcher = semantics.getLauncher(ruleContext, common, deployArchiveBuilder, runfilesBuilder, jvmFlags, attributesBuilder, stripAsDefault); 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 4b528b92e1..7e4fa5ad73 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 @@ -98,6 +98,7 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.Var import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.cpp.CppCompilationContext; import com.google.devtools.build.lib.rules.cpp.CppCompileAction; +import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppFileTypes; import com.google.devtools.build.lib.rules.cpp.CppHelper; import com.google.devtools.build.lib.rules.cpp.CppLinkAction; @@ -558,6 +559,9 @@ public class CompilationSupport { if (objcProvider.is(Flag.USES_OBJC)) { activatedCrosstoolSelectables.add(CONTAINS_OBJC); } + if (CppHelper.useFission(ruleContext.getFragment(CppConfiguration.class), toolchain)) { + activatedCrosstoolSelectables.add(CppRuleClasses.PER_OBJECT_DEBUG_INFO); + } activatedCrosstoolSelectables.addAll(ruleContext.getFeatures()); try { |