diff options
author | 2016-03-31 08:24:37 +0000 | |
---|---|---|
committer | 2016-03-31 11:44:47 +0000 | |
commit | 585c87b0fce06a452976ce0d0a3091b28ed01dbd (patch) | |
tree | 90fe1b93c26b34ee7c14d0ca0c4e1f920e50607a /src/main/java/com/google/devtools/build | |
parent | bbb4291baf188c941965ecd894463b6ff043fe92 (diff) |
Make C++ autoconfigured toolchain the default for Linux and OS X.
This is done by adding a default workspace suffix.
--
MOS_MIGRATED_REVID=118656979
Diffstat (limited to 'src/main/java/com/google/devtools/build')
6 files changed, 69 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java index 6c29411930..aee043ad5e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java @@ -83,7 +83,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { * Builder for {@link ConfiguredRuleClassProvider}. */ public static class Builder implements RuleDefinitionEnvironment { - private final StringBuilder defaultWorkspaceFile = new StringBuilder(); + private final StringBuilder defaultWorkspaceFilePrefix = new StringBuilder(); + private final StringBuilder defaultWorkspaceFileSuffix = new StringBuilder(); private Label preludeLabel; private String runfilesPrefix; private String toolsRepository; @@ -109,8 +110,12 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { ImmutableList.<Class<?>>builder().addAll(SkylarkModules.MODULES); private final List<Class<? extends FragmentOptions>> buildOptions = Lists.newArrayList(); - public void addWorkspaceFile(String contents) { - defaultWorkspaceFile.append(contents); + public void addWorkspaceFilePrefix(String contents) { + defaultWorkspaceFilePrefix.append(contents); + } + + public void addWorkspaceFileSuffix(String contents) { + defaultWorkspaceFileSuffix.append(contents); } public Builder setPrelude(String preludeLabelString) { @@ -264,7 +269,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { ImmutableMap.copyOf(ruleClassMap), ImmutableMap.copyOf(ruleDefinitionMap), ImmutableMap.copyOf(aspectFactoryMap), - defaultWorkspaceFile.toString(), + defaultWorkspaceFilePrefix.toString(), + defaultWorkspaceFileSuffix.toString(), ImmutableList.copyOf(buildInfoFactories), ImmutableList.copyOf(configurationOptions), ImmutableList.copyOf(configurationFragments), @@ -304,10 +310,15 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { }); /** - * A list of relative paths to the WORKSPACE files needed to provide external dependencies for - * the rule classes. + * Default content that should be added at the beginning of the WORKSPACE file. + */ + private final String defaultWorkspaceFilePrefix; + + /** + * Default content that should be added at the end of the WORKSPACE file. */ - String defaultWorkspaceFile; + private final String defaultWorkspaceFileSuffix; + /** * Label for the prelude file. @@ -375,7 +386,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { ImmutableMap<String, RuleClass> ruleClassMap, ImmutableMap<String, Class<? extends RuleDefinition>> ruleDefinitionMap, ImmutableMap<String, Class<? extends NativeAspectFactory>> aspectFactoryMap, - String defaultWorkspaceFile, + String defaultWorkspaceFilePrefix, + String defaultWorkspaceFileSuffix, ImmutableList<BuildInfoFactory> buildInfoFactories, ImmutableList<Class<? extends FragmentOptions>> configurationOptions, ImmutableList<ConfigurationFragmentFactory> configurationFragments, @@ -391,7 +403,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { this.ruleClassMap = ruleClassMap; this.ruleDefinitionMap = ruleDefinitionMap; this.aspectFactoryMap = aspectFactoryMap; - this.defaultWorkspaceFile = defaultWorkspaceFile; + this.defaultWorkspaceFilePrefix = defaultWorkspaceFilePrefix; + this.defaultWorkspaceFileSuffix = defaultWorkspaceFileSuffix; this.buildInfoFactories = buildInfoFactories; this.configurationOptions = configurationOptions; this.configurationFragments = configurationFragments; @@ -540,9 +553,13 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { eventHandler, astFileContentHashCode, importMap); } + @Override + public String getDefaultWorkspacePrefix() { + return defaultWorkspaceFilePrefix; + } @Override - public String getDefaultWorkspaceFile() { - return defaultWorkspaceFile; + public String getDefaultWorkspaceSuffix() { + return defaultWorkspaceFileSuffix; } } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index a2592eac68..1fa4f8fce4 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -297,13 +297,13 @@ public class BazelRuleClassProvider { builder.addRuleDefinition(new BazelPyTestRule()); try { - builder.addWorkspaceFile( + builder.addWorkspaceFilePrefix( ResourceFileLoader.loadResource(BazelRuleClassProvider.class, "tools.WORKSPACE")); - builder.addWorkspaceFile( + builder.addWorkspaceFilePrefix( ResourceFileLoader.loadResource(BazelJavaRuleClasses.class, "jdk.WORKSPACE")); - builder.addWorkspaceFile( + builder.addWorkspaceFilePrefix( ResourceFileLoader.loadResource(BazelAndroidSemantics.class, "android.WORKSPACE")); - builder.addWorkspaceFile( + builder.addWorkspaceFilePrefix( ResourceFileLoader.loadResource(BazelJ2ObjcLibraryRule.class, "j2objc.WORKSPACE")); } catch (IOException e) { throw new IllegalStateException(e); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java index 4327e676b6..2af2575ff9 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java @@ -26,6 +26,7 @@ import com.google.devtools.build.lib.actions.Executor.ActionContext; import com.google.devtools.build.lib.actions.SimpleActionContextProvider; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.actions.FileWriteActionContext; +import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppRuleClasses; import com.google.devtools.build.lib.query2.output.OutputFormatter; import com.google.devtools.build.lib.rules.android.WriteAdbArgsActionContext; import com.google.devtools.build.lib.rules.cpp.CppCompileActionContext; @@ -37,10 +38,12 @@ import com.google.devtools.build.lib.runtime.Command; import com.google.devtools.build.lib.runtime.CommandEnvironment; import com.google.devtools.build.lib.runtime.GotOptionsEvent; import com.google.devtools.build.lib.skyframe.PrecomputedValue; +import com.google.devtools.build.lib.util.ResourceFileLoader; import com.google.devtools.common.options.Converters.AssignmentConverter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionsBase; +import java.io.IOException; import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -170,6 +173,14 @@ public class BazelRulesModule extends BlazeModule { @Override public void initializeRuleClasses(ConfiguredRuleClassProvider.Builder builder) { BazelRuleClassProvider.setup(builder); + try { + // Load auto-configuration files, it is made outside of the rule class provider so that it + // will not be loaded for our Java tests. + builder.addWorkspaceFileSuffix( + ResourceFileLoader.loadResource(BazelCppRuleClasses.class, "cc_configure.WORKSPACE")); + } catch (IOException e) { + throw new IllegalStateException(e); + } } @Override diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/cc_configure.WORKSPACE b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/cc_configure.WORKSPACE new file mode 100644 index 0000000000..70ef8f750e --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/cc_configure.WORKSPACE @@ -0,0 +1,2 @@ +load("@bazel_tools//tools/cpp:cc_configure.bzl", "cc_configure") +cc_configure() diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java index 2f0988f575..7a3566a5eb 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java @@ -69,13 +69,21 @@ public interface RuleClassProvider { Map<String, Class<? extends NativeAspectFactory>> getAspectFactoryMap(); /** - * Returns the default content of the WORKSPACE file. + * Returns the default content that should be added at the beginning of the WORKSPACE file. * * <p>Used to provide external dependencies for built-in rules. Rules defined here can be * overwritten in the WORKSPACE file in the actual workspace. */ - String getDefaultWorkspaceFile(); - + String getDefaultWorkspacePrefix(); + + + /** + * Returns the default content that should be added at the end of the WORKSPACE file. + * + * <p>Used to load skylark repository in the bazel_tools repository. + */ + String getDefaultWorkspaceSuffix(); + /** * Returns the path to the tools repository */ diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java index 46f5d0d9d1..d101139028 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java @@ -52,10 +52,10 @@ public class WorkspaceASTFunction implements SkyFunction { } Path repoWorkspace = workspaceRoot.getRoot().getRelative(workspaceRoot.getRelativePath()); - PathFragment pathFragment = new PathFragment("/DEFAULT.WORKSPACE"); try { BuildFileAST ast = BuildFileAST.parseBuildFile( - ParserInputSource.create(ruleClassProvider.getDefaultWorkspaceFile(), pathFragment), + ParserInputSource.create(ruleClassProvider.getDefaultWorkspacePrefix(), + new PathFragment("/DEFAULT.WORKSPACE")), env.getListener(), false); if (ast.containsErrors()) { throw new WorkspaceASTFunctionException( @@ -69,6 +69,17 @@ public class WorkspaceASTFunction implements SkyFunction { new IOException("Failed to parse WORKSPACE file"), Transience.PERSISTENT); } } + ast = BuildFileAST.parseBuildFile( + ParserInputSource.create(ruleClassProvider.getDefaultWorkspaceSuffix(), + new PathFragment("/DEFAULT.WORKSPACE.SUFFIX")), + ast.getStatements(), + env.getListener(), + false); + if (ast.containsErrors()) { + throw new WorkspaceASTFunctionException( + new IOException("Failed to parse default WORKSPACE file suffix"), + Transience.PERSISTENT); + } return new WorkspaceASTValue(splitAST(ast)); } catch (IOException ex) { throw new WorkspaceASTFunctionException(ex, Transience.TRANSIENT); |