aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java47
1 files changed, 22 insertions, 25 deletions
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 54e8d6457c..4d3decbd48 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
@@ -38,8 +38,9 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
-import com.google.devtools.build.lib.rules.cpp.CppActionConfigs.CppPlatform;
import com.google.devtools.build.lib.rules.cpp.CppConfigurationLoader.CppConfigurationParameters;
+import com.google.devtools.build.lib.rules.cpp.CppLinkActionConfigs.CppLinkPlatform;
+import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -741,15 +742,21 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
return result.build();
}
- private static boolean actionsAreConfigured(CToolchain toolchain) {
- return Iterables.any(
- toolchain.getActionConfigList(),
- new Predicate<ActionConfig>() {
- @Override
- public boolean apply(@Nullable ActionConfig actionConfig) {
- return actionConfig.getActionName().contains("c++");
- }
- });
+ private boolean linkActionsAreConfigured(CToolchain toolchain) {
+
+ for (LinkTargetType type : Link.MANDATORY_LINK_TARGET_TYPES) {
+ boolean typeIsConfigured = false;
+ for (ActionConfig actionConfig : toolchain.getActionConfigList()) {
+ if (actionConfig.getActionName().equals(type.getActionName())) {
+ typeIsConfigured = true;
+ break;
+ }
+ }
+ if (!typeIsConfigured) {
+ return false;
+ }
+ }
+ return true;
}
// TODO(bazel-team): Remove this once bazel supports all crosstool flags through
@@ -783,12 +790,10 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
Set<String> features = featuresBuilder.build();
if (!features.contains(CppRuleClasses.NO_LEGACY_FEATURES)) {
try {
- if (!actionsAreConfigured(toolchain)) {
- String gccToolPath = "DUMMY_GCC_TOOL";
+ if (!linkActionsAreConfigured(toolchain)) {
String linkerToolPath = "DUMMY_LINKER_TOOL";
for (ToolPath tool : toolchain.getToolPathList()) {
if (tool.getName().equals(Tool.GCC.getNamePart())) {
- gccToolPath = tool.getPath();
linkerToolPath =
crosstoolTopPathFragment
.getRelative(PathFragment.create(tool.getPath()))
@@ -797,21 +802,13 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
}
if (getTargetLibc().equals("macosx")) {
TextFormat.merge(
- CppActionConfigs.getCppActionConfigs(
- CppPlatform.MAC,
- features,
- gccToolPath,
- linkerToolPath,
- supportsEmbeddedRuntimes),
+ CppLinkActionConfigs.getCppLinkActionConfigs(
+ CppLinkPlatform.MAC, features, linkerToolPath, supportsEmbeddedRuntimes),
toolchainBuilder);
} else {
TextFormat.merge(
- CppActionConfigs.getCppActionConfigs(
- CppPlatform.LINUX,
- features,
- gccToolPath,
- linkerToolPath,
- supportsEmbeddedRuntimes),
+ CppLinkActionConfigs.getCppLinkActionConfigs(
+ CppLinkPlatform.LINUX, features, linkerToolPath, supportsEmbeddedRuntimes),
toolchainBuilder);
}
}