diff options
author | 2017-05-02 01:26:33 +0200 | |
---|---|---|
committer | 2017-05-02 11:27:05 +0200 | |
commit | bfacec0b3f26b2e851df5a847a51858dbedb45a7 (patch) | |
tree | 6b7ed1cd55250ee76aaa06076693b578fad8add6 /src/main/java/com/google/devtools | |
parent | 336a1302066b96773dc4b19850f85b59bc879928 (diff) |
Automated g4 rollback of commit d5217515002d468a3095243975e21e89eccc46b7.
*** Reason for rollback ***
Relies on a CL that is being rolled back due to breaking some LIPO builds.
RELNOTES: None
PiperOrigin-RevId: 154776370
Diffstat (limited to 'src/main/java/com/google/devtools')
5 files changed, 34 insertions, 669 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java index 72a22fb70c..f9fc4c3f6b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java @@ -87,14 +87,16 @@ public final class CompileCommandLine { List<String> commandLine = new ArrayList<>(); // first: The command name. - Preconditions.checkArgument( - featureConfiguration.actionIsConfigured(actionName), - String.format("Expected action_config for '%s' to be configured", actionName)); - commandLine.add( - featureConfiguration - .getToolForAction(actionName) - .getToolPath(cppConfiguration.getCrosstoolTopPathFragment()) - .getPathString()); + if (!featureConfiguration.actionIsConfigured(actionName)) { + commandLine.add( + cppConfiguration.getToolPathFragment(CppConfiguration.Tool.GCC).getPathString()); + } else { + commandLine.add( + featureConfiguration + .getToolForAction(actionName) + .getToolPath(cppConfiguration.getCrosstoolTopPathFragment()) + .getPathString()); + } // second: The compiler options. commandLine.addAll(getCompilerOptions(overwrittenVariables)); 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/CppActionConfigs.java deleted file mode 100644 index 6447a774b8..0000000000 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java +++ /dev/null @@ -1,573 +0,0 @@ -// Copyright 2014 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.devtools.build.lib.rules.cpp; - -import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableList; -import java.util.Set; - -/** - * A helper class for creating action_configs for the c++ actions. - * - * <p>TODO(b/30109612): Replace this with action_configs in the crosstool instead of putting it in - * legacy features. - */ -public class CppActionConfigs { - - /** A platform for linker invocations. */ - public enum CppPlatform { - LINUX, - MAC - } - - public static String getCppActionConfigs( - CppPlatform platform, - Set<String> features, - String gccToolPath, - String linkerToolPath, - boolean supportsEmbeddedRuntimes) { - String cppDynamicLibraryLinkerTool = ""; - if (!features.contains("dynamic_library_linker_tool")) { - cppDynamicLibraryLinkerTool = - "" - + "feature {" - + " name: 'dynamic_library_linker_tool'" - + " flag_set {" - + " action: 'c++-link-dynamic-library'" - + " flag_group {" - + " flag: '" - + linkerToolPath - + "'" - + " }" - + " }" - + "}"; - } - - return Joiner.on("\n") - .join( - ImmutableList.of( - "action_config {", - " config_name: 'assemble'", - " action_name: 'assemble'", - " tool {", - " tool_path: '" + gccToolPath + "'", - " }", - "}", - "action_config {", - " config_name: 'preprocess-assemble'", - " action_name: 'preprocess-assemble'", - " tool {", - " tool_path: '" + gccToolPath + "'", - " }", - "}", - "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++-header-parsing'", - " action_name: 'c++-header-parsing'", - " tool {", - " tool_path: '" + gccToolPath + "'", - " }", - "}", - "action_config {", - " config_name: 'c++-header-preprocessing'", - " action_name: 'c++-header-preprocessing'", - " tool {", - " tool_path: '" + gccToolPath + "'", - " }", - "}", - "action_config {", - " config_name: 'c++-module-compile'", - " action_name: 'c++-module-compile'", - " tool {", - " tool_path: '" + gccToolPath + "'", - " }", - "}", - "action_config {", - " config_name: 'c++-module-codegen'", - " action_name: 'c++-module-codegen'", - " tool {", - " tool_path: '" + gccToolPath + "'", - " }", - "}", - "action_config {", - " config_name: 'c++-link-executable'", - " action_name: 'c++-link-executable'", - " tool {", - " tool_path: 'DUMMY_TOOL'", - " }", - " implies: 'symbol_counts'", - " implies: 'strip_debug_symbols'", - " implies: 'linkstamps'", - " implies: 'output_execpath_flags_executable'", - " implies: 'runtime_library_search_directories'", - " implies: 'library_search_directories'", - " implies: 'libraries_to_link'", - " implies: 'force_pic_flags'", - " implies: 'legacy_link_flags'", - " implies: 'linker_param_file'", - " implies: 'fission_support'", - "}", - "action_config {", - " config_name: 'c++-link-dynamic-library'", - " action_name: 'c++-link-dynamic-library'", - " tool {", - " tool_path: 'DUMMY_TOOL'", - " }", - " implies: 'build_interface_libraries'", - " implies: 'dynamic_library_linker_tool'", - " implies: 'symbol_counts'", - " implies: 'strip_debug_symbols'", - " implies: 'shared_flag'", - " implies: 'linkstamps'", - " implies: 'output_execpath_flags'", - " implies: 'runtime_library_search_directories'", - " implies: 'library_search_directories'", - " implies: 'libraries_to_link'", - " implies: 'legacy_link_flags'", - " implies: 'linker_param_file'", - " implies: 'fission_support'", - "}", - "action_config {", - " config_name: 'c++-link-static-library'", - " action_name: 'c++-link-static-library'", - " tool {", - " tool_path: 'DUMMY_TOOL'", - " }", - " implies: 'strip_debug_symbols'", - " implies: 'runtime_library_search_directories'", - " implies: 'library_search_directories'", - " implies: 'libraries_to_link'", - " implies: 'linker_param_file'", - "}", - "action_config {", - " config_name: 'c++-link-alwayslink-static-library'", - " action_name: 'c++-link-alwayslink-static-library'", - " tool {", - " tool_path: 'DUMMY_TOOL'", - " }", - " implies: 'strip_debug_symbols'", - " implies: 'runtime_library_search_directories'", - " implies: 'library_search_directories'", - " implies: 'libraries_to_link'", - " implies: 'linker_param_file'", - "}", - "action_config {", - " config_name: 'c++-link-pic-static-library'", - " action_name: 'c++-link-pic-static-library'", - " tool {", - " tool_path: 'DUMMY_TOOL'", - " }", - " implies: 'strip_debug_symbols'", - " implies: 'runtime_library_search_directories'", - " implies: 'library_search_directories'", - " implies: 'libraries_to_link'", - " implies: 'linker_param_file'", - "}", - "action_config {", - " config_name: 'c++-link-alwayslink-pic-static-library'", - " action_name: 'c++-link-alwayslink-pic-static-library'", - " tool {", - " tool_path: 'DUMMY_TOOL'", - " }", - " implies: 'strip_debug_symbols'", - " implies: 'runtime_library_search_directories'", - " implies: 'library_search_directories'", - " implies: 'libraries_to_link'", - " implies: 'linker_param_file'", - "}", - "feature {", - " name: 'build_interface_libraries'", - " flag_set {", - " expand_if_all_available: 'generate_interface_library'", - " action: 'c++-link-dynamic-library'", - " flag_group {", - " flag: '%{generate_interface_library}'", - " flag: '%{interface_library_builder_path}'", - " flag: '%{interface_library_input_path}'", - " flag: '%{interface_library_output_path}'", - " }", - " }", - "}", - // Order of feature declaration matters, cppDynamicLibraryLinkerTool has to follow - // right after build_interface_libraries. - cppDynamicLibraryLinkerTool, - "feature {", - " name: 'symbol_counts'", - " flag_set {", - " expand_if_all_available: 'symbol_counts_output'", - " action: 'c++-link-executable'", - " action: 'c++-link-dynamic-library'", - " flag_group {", - " flag: '-Wl,--print-symbol-counts=%{symbol_counts_output}'", - " }", - " }", - "}", - "feature {", - " name: 'shared_flag'", - " flag_set {", - " action: 'c++-link-dynamic-library'", - " flag_group {", - " flag: '-shared'", - " }", - " }", - "}", - "feature {", - " name: 'linkstamps'", - " flag_set {", - " action: 'c++-link-executable'", - " action: 'c++-link-dynamic-library'", - " expand_if_all_available: 'linkstamp_paths'", - " flag_group {", - " flag: '%{linkstamp_paths}'", - " }", - " }", - "}", - "feature {", - " name: 'output_execpath_flags'", - " flag_set {", - " expand_if_all_available: 'output_execpath'", - " action: 'c++-link-dynamic-library'", - " flag_group {", - " flag: '-o'", - " flag: '%{output_execpath}'", - " }", - " }", - "}", - "feature {", - " name: 'output_execpath_flags_executable'", - " flag_set {", - " expand_if_all_available: 'output_execpath'", - " action: 'c++-link-executable'", - " flag_group {", - " flag: '-o'", - " }", - " }", - " flag_set {", - " expand_if_all_available: 'skip_mostly_static'", - " expand_if_all_available: 'output_execpath'", - " action: 'c++-link-executable'", - " flag_group {", - " flag: '/dev/null'", - " flag: '-MMD'", - " flag: '-MF'", - " }", - " }", - " flag_set {", - " expand_if_all_available: 'output_execpath'", - " action: 'c++-link-executable'", - " flag_group {", - " flag: '%{output_execpath}'", - " }", - " }", - "}", - "feature {", - " name: 'runtime_library_search_directories',", - " flag_set {", - " expand_if_all_available: 'runtime_library_search_directories'", - " action: 'c++-link-executable'", - " action: 'c++-link-dynamic-library'", - " action: 'c++-link-static-library'", - " action: 'c++-link-alwayslink-static-library'", - " action: 'c++-link-pic-static-library'", - " action: 'c++-link-alwayslink-pic-static-library'", - " flag_group {", - " iterate_over: 'runtime_library_search_directories'", - " flag_group {", - // TODO(b/27153401): This should probably be @loader_path on osx. - ifTrue( - supportsEmbeddedRuntimes, - " expand_if_all_available: 'is_cc_test_link_action'", - " flag: ", - " '-Wl,-rpath,$EXEC_ORIGIN/%{runtime_library_search_directories}'", - " }", - " flag_group {", - " expand_if_all_available: 'is_not_cc_test_link_action'"), - " flag: '-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}'", - " }", - " }", - " }", - "}", - "feature {", - " name: 'library_search_directories'", - " flag_set {", - " expand_if_all_available: 'library_search_directories'", - " action: 'c++-link-executable'", - " action: 'c++-link-dynamic-library'", - " action: 'c++-link-static-library'", - " action: 'c++-link-alwayslink-static-library'", - " action: 'c++-link-pic-static-library'", - " action: 'c++-link-alwayslink-pic-static-library'", - " flag_group {", - " iterate_over: 'library_search_directories'", - " flag: '-L%{library_search_directories}'", - " }", - " }", - "}", - "feature {", - " name: 'libraries_to_link'", - " flag_set {", - " expand_if_all_available: 'libraries_to_link'", - " action: 'c++-link-executable'", - " action: 'c++-link-dynamic-library'", - " action: 'c++-link-static-library'", - " action: 'c++-link-alwayslink-static-library'", - " action: 'c++-link-pic-static-library'", - " action: 'c++-link-alwayslink-pic-static-library'", - " flag_group {", - " iterate_over: 'libraries_to_link'", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'object_file_group'", - " }", - " flag: '-Wl,--start-lib'", - " }", - ifLinux( - platform, - " flag_group {", - " expand_if_true: 'libraries_to_link.is_whole_archive'", - " flag: '-Wl,-whole-archive'", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'object_file_group'", - " }", - " iterate_over: 'libraries_to_link.object_files'", - " flag: '%{libraries_to_link.object_files}'", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'object_file'", - " }", - " flag: '%{libraries_to_link.name}'", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'interface_library'", - " }", - " flag: '%{libraries_to_link.name}'", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'static_library'", - " }", - " flag: '%{libraries_to_link.name}'", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'dynamic_library'", - " }", - " flag: '-l%{libraries_to_link.name}'", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'versioned_dynamic_library'", - " }", - " flag: '-l:%{libraries_to_link.name}'", - " }", - " flag_group {", - " expand_if_true: 'libraries_to_link.is_whole_archive'", - " flag: '-Wl,-no-whole-archive'", - " }"), - ifMac( - platform, - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'object_file_group'", - " }", - " iterate_over: 'libraries_to_link.object_files'", - " flag_group {", - " expand_if_false: 'libraries_to_link.is_whole_archive'", - " flag: '%{libraries_to_link.object_files}'", - " }", - " flag_group {", - " expand_if_true: 'libraries_to_link.is_whole_archive'", - " flag: '-Wl,-force_load,%{libraries_to_link.object_files}'", - " }", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'object_file'", - " }", - " flag_group {", - " expand_if_false: 'libraries_to_link.is_whole_archive'", - " flag: '%{libraries_to_link.name}'", - " }", - " flag_group {", - " expand_if_true: 'libraries_to_link.is_whole_archive'", - " flag: '-Wl,-force_load,%{libraries_to_link.name}'", - " }", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'interface_library'", - " }", - " flag_group {", - " expand_if_false: 'libraries_to_link.is_whole_archive'", - " flag: '%{libraries_to_link.name}'", - " }", - " flag_group {", - " expand_if_true: 'libraries_to_link.is_whole_archive'", - " flag: '-Wl,-force_load,%{libraries_to_link.name}'", - " }", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'static_library'", - " }", - " flag_group {", - " expand_if_false: 'libraries_to_link.is_whole_archive'", - " flag: '%{libraries_to_link.name}'", - " }", - " flag_group {", - " expand_if_true: 'libraries_to_link.is_whole_archive'", - " flag: '-Wl,-force_load,%{libraries_to_link.name}'", - " }", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'dynamic_library'", - " }", - " flag: '-l%{libraries_to_link.name}'", - " }", - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'versioned_dynamic_library'", - " }", - " flag: '-l:%{libraries_to_link.name}'", - " }"), - " flag_group {", - " expand_if_equal: {", - " variable: 'libraries_to_link.type'", - " value: 'object_file_group'", - " }", - " flag: '-Wl,--end-lib'", - " }", - " }", - " flag_group {", - " expand_if_true: 'thinlto_param_file'", - " flag: '-Wl,@%{thinlto_param_file}'", - " }", - " }", - "}", - "feature {", - " name: 'force_pic_flags'", - " flag_set {", - " expand_if_all_available: 'force_pic'", - " action: 'c++-link-executable'", - " flag_group {", - " flag: '-pie'", - " }", - " }", - "}", - "feature {", - " name: 'legacy_link_flags'", - " flag_set {", - " expand_if_all_available: 'legacy_link_flags'", - " action: 'c++-link-executable'", - " action: 'c++-link-dynamic-library'", - " flag_group {", - " iterate_over: 'legacy_link_flags'", - " flag: '%{legacy_link_flags}'", - " }", - " }", - "}", - "feature {", - " name: 'fission_support'", - " flag_set {", - " action: 'c++-link-executable'", - " action: 'c++-link-dynamic-library'", - " action: 'c++-link-interface-dynamic-library'", - " flag_group {", - " expand_if_all_available: 'is_using_fission'", - " flag: '-Wl,--gdb-index'", - " }", - " }", - "}", - "feature {", - " name: 'strip_debug_symbols'", - " flag_set {", - " action: 'c++-link-executable'", - " action: 'c++-link-dynamic-library'", - " action: 'c++-link-interface-dynamic-library'", - " flag_group {", - " expand_if_all_available: 'strip_debug_symbols'", - " flag: '-Wl,-S'", - " }", - " }", - "}", - "feature {", - " name: 'linker_param_file'", - " flag_set {", - " expand_if_all_available: 'linker_param_file'", - " action: 'c++-link-executable'", - " action: 'c++-link-dynamic-library'", - " flag_group {", - " flag: '-Wl,@%{linker_param_file}'", - " }", - " }", - " flag_set {", - " expand_if_all_available: 'linker_param_file'", - " action: 'c++-link-static-library'", - " action: 'c++-link-alwayslink-static-library'", - " action: 'c++-link-pic-static-library'", - " action: 'c++-link-alwayslink-pic-static-library'", - " flag_group {", - " flag: '@%{linker_param_file}'", - " }", - " }", - "}")); - } - - private static String ifLinux(CppPlatform platform, String... lines) { - return ifTrue(platform == CppPlatform.LINUX, lines); - } - - private static String ifMac(CppPlatform platform, String... lines) { - return ifTrue(platform == CppPlatform.MAC, lines); - } - - private static String ifTrue(boolean condition, String... lines) { - if (condition) { - return Joiner.on("\n").join(lines); - } else { - return ""; - } - } -} 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 881dd0a8ce..04be2553e1 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 @@ -39,8 +39,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; @@ -747,16 +748,22 @@ 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 @@ -790,12 +797,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())) @@ -804,21 +809,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/LinkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java index c1ba7eca00..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()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/MockFeatureConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/MockFeatureConfiguration.java deleted file mode 100644 index bc7b06aed9..0000000000 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/MockFeatureConfiguration.java +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2015 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.devtools.build.lib.rules.cpp; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; -import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables; -import java.util.List; - -/** - * A mock crosstool feature configuration. This allows for easier writing of unit tests isolated - * from the inner workings of crosstool feature sets. - * - * <p>For example, instead of setting up a fully defined feature in crosstool configuration which - * conditionally sets environment variables for specific actions, one can use this class to mock an - * "always on" feature (which always adds a certain environment variable). - */ -public class MockFeatureConfiguration extends FeatureConfiguration { - - private final ImmutableMap<String, String> environmentVariables; - private final ImmutableSet<String> requirements; - - public MockFeatureConfiguration( - ImmutableMap<String, String> environmentVariables, ImmutableSet<String> requirements) { - this.environmentVariables = environmentVariables; - this.requirements = requirements; - } - - @Override - ImmutableMap<String, String> getEnvironmentVariables(String action, Variables variables) { - return environmentVariables; - } - - @Override - CcToolchainFeatures.Tool getToolForAction(String actionName) { - return new CcToolchainFeatures.Tool("tool_path", requirements); - } - - @Override - List<String> getCommandLine(String action, Variables variables) { - return ImmutableList.of(); - } - - @Override - boolean actionIsConfigured(String actionName) { - return true; - } -} |