diff options
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.java | 47 |
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); } } |