diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java | 47 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java (renamed from src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java) | 37 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java | 2 |
3 files changed, 34 insertions, 52 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); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java index ae53fc1d46..7a1c6da7b4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java @@ -18,24 +18,23 @@ import com.google.common.collect.ImmutableList; import java.util.Set; /** - * A helper class for creating action_configs for the c++ actions. + * A helper class for creating action_configs for the c++ link action. * * <p>TODO(b/30109612): Replace this with action_configs in the crosstool instead of putting it in * legacy features. */ -public class CppActionConfigs { +public class CppLinkActionConfigs { /** A platform for linker invocations. */ - public enum CppPlatform { + public static enum CppLinkPlatform { LINUX, MAC } - public static String getCppActionConfigs( - CppPlatform platform, + public static String getCppLinkActionConfigs( + CppLinkPlatform platform, Set<String> features, - String gccToolPath, - String linkerToolPath, + String cppLinkDynamicLibraryToolPath, boolean supportsEmbeddedRuntimes) { String cppDynamicLibraryLinkerTool = ""; if (!features.contains("dynamic_library_linker_tool")) { @@ -47,7 +46,7 @@ public class CppActionConfigs { + " action: 'c++-link-dynamic-library'" + " flag_group {" + " flag: '" - + linkerToolPath + + cppLinkDynamicLibraryToolPath + "'" + " }" + " }" @@ -58,20 +57,6 @@ public class CppActionConfigs { .join( ImmutableList.of( "action_config {", - " config_name: 'c-compile'", - " action_name: 'c-compile'", - " tool {", - " tool_path: '" + gccToolPath + "'", - " }", - "}", - "action_config {", - " config_name: 'c++-compile'", - " action_name: 'c++-compile'", - " tool {", - " tool_path: '" + gccToolPath + "'", - " }", - "}", - "action_config {", " config_name: 'c++-link-executable'", " action_name: 'c++-link-executable'", " tool {", @@ -513,12 +498,12 @@ public class CppActionConfigs { "}")); } - private static String ifLinux(CppPlatform platform, String... lines) { - return ifTrue(platform == CppPlatform.LINUX, lines); + private static String ifLinux(CppLinkPlatform platform, String... lines) { + return ifTrue(platform == CppLinkPlatform.LINUX, lines); } - private static String ifMac(CppPlatform platform, String... lines) { - return ifTrue(platform == CppPlatform.MAC, lines); + private static String ifMac(CppLinkPlatform platform, String... lines) { + return ifTrue(platform == CppLinkPlatform.MAC, lines); } private static String ifTrue(boolean condition, String... lines) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java index e39173dda5..bbb3b4ddb8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java @@ -378,7 +378,7 @@ public final class LinkCommandLine extends CommandLine { List<String> argv = new ArrayList<>(); // TODO(b/30109612): Extract this switch into individual crosstools once action configs are no - // longer hardcoded in CppActionConfigs + // longer hardcoded in CppLinkActionConfigs switch (linkTargetType) { case EXECUTABLE: argv.add(cppConfiguration.getCppExecutable().getPathString()); |