aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java63
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java2
10 files changed, 63 insertions, 39 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index 05211e2d96..3ae158d230 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -217,7 +217,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
getLinkStaticness(ruleContext, linkopts, cppConfiguration, ccToolchain);
FdoSupportProvider fdoSupport = common.getFdoSupport();
FeatureConfiguration featureConfiguration =
- CcCommon.configureFeatures(
+ CcCommon.configureFeaturesOrReportRuleError(
ruleContext,
/* requestedFeatures= */ ImmutableSet.<String>builder()
.addAll(ruleContext.getFeatures())
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 81febbc1ea..476f872b55 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
@@ -54,6 +54,7 @@ import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
+import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.Pair;
@@ -687,15 +688,45 @@ public final class CcCommon {
}
/**
+ * Creates a feature configuration for a given rule. Assumes strictly cc sources.
+ *
+ * @param ruleContext the context of the rule we want the feature configuration for.
+ * @param toolchain C++ toolchain provider.
+ * @return the feature configuration for the given {@code ruleContext}.
+ */
+ public static FeatureConfiguration configureFeaturesOrReportRuleError(
+ RuleContext ruleContext, CcToolchainProvider toolchain) {
+ return configureFeaturesOrReportRuleError(
+ ruleContext,
+ /* requestedFeatures= */ ruleContext.getFeatures(),
+ /* unsupportedFeatures= */ ruleContext.getDisabledFeatures(),
+ toolchain);
+ }
+
+ /**
* Creates the feature configuration for a given rule.
*
* @return the feature configuration for the given {@code ruleContext}.
*/
- public static FeatureConfiguration configureFeatures(
+ public static FeatureConfiguration configureFeaturesOrReportRuleError(
RuleContext ruleContext,
ImmutableSet<String> requestedFeatures,
ImmutableSet<String> unsupportedFeatures,
CcToolchainProvider toolchain) {
+ try {
+ return configureFeaturesOrThrowEvalException(
+ requestedFeatures, unsupportedFeatures, toolchain);
+ } catch (EvalException e) {
+ ruleContext.ruleError(e.getMessage());
+ return FeatureConfiguration.EMPTY;
+ }
+ }
+
+ public static FeatureConfiguration configureFeaturesOrThrowEvalException(
+ ImmutableSet<String> requestedFeatures,
+ ImmutableSet<String> unsupportedFeatures,
+ CcToolchainProvider toolchain)
+ throws EvalException {
CppConfiguration cppConfiguration = toolchain.getCppConfiguration();
ImmutableSet.Builder<String> allRequestedFeaturesBuilder = ImmutableSet.builder();
ImmutableSet.Builder<String> unsupportedFeaturesBuilder = ImmutableSet.builder();
@@ -795,11 +826,10 @@ public final class CcCommon {
toolchain.getFeatures().getFeatureConfiguration(allRequestedFeaturesBuilder.build());
for (String feature : unsupportedFeatures) {
if (featureConfiguration.isEnabled(feature)) {
- ruleContext.ruleError(
+ throw new EvalException(
+ /* location= */ null,
"The C++ toolchain '"
- + ruleContext
- .getPrerequisite(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, Mode.TARGET)
- .getLabel()
+ + toolchain.getCcToolchainLabel()
+ "' unconditionally implies feature '"
+ feature
+ "', which is unsupported by this rule. "
@@ -808,32 +838,15 @@ public final class CcCommon {
}
if ((cppConfiguration.forcePic() || toolchain.toolchainNeedsPic())
&& !featureConfiguration.isEnabled(CppRuleClasses.PIC)) {
- ruleContext.ruleError(PIC_CONFIGURATION_ERROR);
+ throw new EvalException(/* location= */ null, PIC_CONFIGURATION_ERROR);
}
return featureConfiguration;
} catch (CollidingProvidesException e) {
- ruleContext.ruleError(e.getMessage());
- return FeatureConfiguration.EMPTY;
+ throw new EvalException(/* location= */ null, e.getMessage());
}
}
/**
- * Creates a feature configuration for a given rule. Assumes strictly cc sources.
- *
- * @param ruleContext the context of the rule we want the feature configuration for.
- * @param toolchain C++ toolchain provider.
- * @return the feature configuration for the given {@code ruleContext}.
- */
- public static FeatureConfiguration configureFeatures(
- RuleContext ruleContext, CcToolchainProvider toolchain) {
- return configureFeatures(
- ruleContext,
- /* requestedFeatures= */ ruleContext.getFeatures(),
- /* unsupportedFeatures= */ ruleContext.getDisabledFeatures(),
- toolchain);
- }
-
- /**
* Computes the appropriate value of the {@code $(CC_FLAGS)} Make variable based on the given
* toolchain.
*/
@@ -841,7 +854,7 @@ public final class CcCommon {
CcToolchainProvider toolchainProvider =
(CcToolchainProvider) toolchain.get(ToolchainInfo.PROVIDER);
FeatureConfiguration featureConfiguration =
- CcCommon.configureFeatures(ruleContext, toolchainProvider);
+ CcCommon.configureFeaturesOrReportRuleError(ruleContext, toolchainProvider);
if (!featureConfiguration.actionIsConfigured(
CppCompileAction.CC_FLAGS_MAKE_VARIABLE_ACTION_NAME)) {
return null;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
index 3df13788ce..b0537a2a66 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
@@ -68,7 +68,7 @@ public abstract class CcImport implements RuleConfiguredTargetFactory {
CcToolchainProvider ccToolchain =
CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext);
FeatureConfiguration featureConfiguration =
- CcCommon.configureFeatures(ruleContext, ccToolchain);
+ CcCommon.configureFeaturesOrReportRuleError(ruleContext, ccToolchain);
FdoSupportProvider fdoSupport =
CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index 88e3cb32d1..62d0bff944 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -129,7 +129,7 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory {
FdoSupportProvider fdoSupport = common.getFdoSupport();
FeatureConfiguration featureConfiguration =
- CcCommon.configureFeatures(ruleContext, ccToolchain);
+ CcCommon.configureFeaturesOrReportRuleError(ruleContext, ccToolchain);
PrecompiledFiles precompiledFiles = new PrecompiledFiles(ruleContext);
semantics.validateAttributes(ruleContext);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index c4a0332881..f1e622a354 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -433,6 +433,10 @@ public final class CcToolchainProvider extends ToolchainInfo {
return toolchainInfo.getFeatures();
}
+ public Label getCcToolchainLabel() {
+ return toolchainInfo.getCcToolchainLabel();
+ }
+
/**
* Returns whether shared libraries must be compiled with position independent code on this
* platform.
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 0e62d0aed2..df56dbbb67 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
@@ -45,7 +45,6 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
-import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain;
@@ -214,7 +213,7 @@ public final class CppConfiguration extends BuildConfiguration.Fragment {
PathFragment crosstoolTopPathFragment =
params.crosstoolTop.getPackageIdentifier().getPathUnderExecRoot();
CppToolchainInfo cppToolchainInfo =
- CppToolchainInfo.create(toolchain, crosstoolTopPathFragment, params.crosstoolTop);
+ CppToolchainInfo.create(toolchain, crosstoolTopPathFragment, params.ccToolchainLabel);
ListMultimap<CompilationMode, String> cFlags = ArrayListMultimap.create();
ListMultimap<CompilationMode, String> cxxFlags = ArrayListMultimap.create();
@@ -755,8 +754,8 @@ public final class CppConfiguration extends BuildConfiguration.Fragment {
*
* @param featuresNotUsedAnymore
* @param sharedLib true if the output is a shared lib, false if it's an executable
- * <p>Deprecated: Use {@link CppHelper#getMostlyStaticLinkOptions(CppConfiguration,
- * CcToolchainProvider, Boolean)}
+ * <p>Deprecated: Use {@link CppHelper#getMostlyStaticLinkOptions( CppConfiguration,
+ * CcToolchainProvider, boolean, boolean)}
*/
// TODO(b/64384912): Migrate skylark users to cc_common and remove.
@SkylarkCallable(
@@ -911,7 +910,7 @@ public final class CppConfiguration extends BuildConfiguration.Fragment {
/**
* Returns true if LLVM FDO Optimization should be applied for this configuration.
*
- * <p>Deprecated: Use {@link CcToolchain#isLLVMOptimizedFdo(boolean, Path)}
+ * <p>Deprecated: Use {@link CcToolchain#isLLVMOptimizedFdo(boolean, PathFragment)}
*/
// TODO(b/64384912): Remove in favor of overload with isLLVMCompiler.
@Deprecated
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 5b78e144dd..723fd9ebd8 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
@@ -517,7 +517,7 @@ public class CppHelper {
return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
}
FeatureConfiguration featureConfiguration =
- CcCommon.configureFeatures(ruleContext, defaultToolchain);
+ CcCommon.configureFeaturesOrReportRuleError(ruleContext, defaultToolchain);
return defaultToolchain.getDynamicRuntimeLinkInputs(featureConfiguration);
}
@@ -533,7 +533,7 @@ public class CppHelper {
return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
}
FeatureConfiguration featureConfiguration =
- CcCommon.configureFeatures(ruleContext, defaultToolchain);
+ CcCommon.configureFeaturesOrReportRuleError(ruleContext, defaultToolchain);
return defaultToolchain.getStaticRuntimeLinkInputs(featureConfiguration);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java
index b8643ad4c5..8a977f5c7f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java
@@ -84,6 +84,7 @@ public final class CppToolchainInfo {
private final ImmutableList<String> ldOptionsForEmbedding;
private final ImmutableList<String> objCopyOptionsForEmbedding;
+ private final Label ccToolchainLabel;
private final Label staticRuntimeLibsLabel;
private final Label dynamicRuntimeLibsLabel;
private final String solibDirectory;
@@ -189,6 +190,7 @@ public final class CppToolchainInfo {
ImmutableList.copyOf(toolchain.getTestOnlyLinkerFlagList()),
ImmutableList.copyOf(toolchain.getLdEmbedFlagList()),
ImmutableList.copyOf(toolchain.getObjcopyEmbedFlagList()),
+ toolchainLabel,
toolchainLabel.getRelative(
toolchain.hasStaticRuntimesFilegroup()
? toolchain.getStaticRuntimesFilegroup()
@@ -208,8 +210,7 @@ public final class CppToolchainInfo {
lipoCFlagsBuilder.build(),
lipoCxxFlagsBuilder.build(),
new FlagList(
- ImmutableList.copyOf(toolchain.getUnfilteredCxxFlagList()),
- ImmutableList.of()),
+ ImmutableList.copyOf(toolchain.getUnfilteredCxxFlagList()), ImmutableList.of()),
toolchain.getSupportsFission(),
toolchain.getSupportsStartEndLib(),
toolchain.getSupportsEmbeddedRuntimes(),
@@ -247,6 +248,7 @@ public final class CppToolchainInfo {
ImmutableList<String> testOnlyLinkFlags,
ImmutableList<String> ldOptionsForEmbedding,
ImmutableList<String> objCopyOptionsForEmbedding,
+ Label ccToolchainLabel,
Label staticRuntimeLibsLabel,
Label dynamicRuntimeLibsLabel,
String solibDirectory,
@@ -291,6 +293,7 @@ public final class CppToolchainInfo {
this.testOnlyLinkFlags = testOnlyLinkFlags;
this.ldOptionsForEmbedding = ldOptionsForEmbedding;
this.objCopyOptionsForEmbedding = objCopyOptionsForEmbedding;
+ this.ccToolchainLabel = ccToolchainLabel;
this.staticRuntimeLibsLabel = staticRuntimeLibsLabel;
this.dynamicRuntimeLibsLabel = dynamicRuntimeLibsLabel;
this.solibDirectory = solibDirectory;
@@ -517,6 +520,11 @@ public final class CppToolchainInfo {
return getToolPathFragment(toolPaths, tool);
}
+ /** Returns a label that references the current cc_toolchain target. */
+ public Label getCcToolchainLabel() {
+ return ccToolchainLabel;
+ }
+
/**
* Returns a label that references the library files needed to statically link the C++ runtime
* (i.e. libgcc.a, libgcc_eh.a, libstdc++.a) for the target architecture.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
index fdf8d00938..2abecee223 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
@@ -230,7 +230,7 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
unsupportedFeatures.add(CppRuleClasses.HEADER_MODULES);
}
FeatureConfiguration featureConfiguration =
- CcCommon.configureFeatures(
+ CcCommon.configureFeaturesOrReportRuleError(
ruleContext,
requestedFeatures.build(),
unsupportedFeatures.build(),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
index 0706b24e3a..4d2e2d067b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
@@ -219,7 +219,7 @@ public abstract class NativeDepsHelper {
FdoSupportProvider fdoSupport =
CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
FeatureConfiguration featureConfiguration =
- CcCommon.configureFeatures(
+ CcCommon.configureFeaturesOrReportRuleError(
ruleContext,
/* requestedFeatures= */ ImmutableSet.<String>builder()
.addAll(ruleContext.getFeatures())