diff options
author | Lukacs Berki <lberki@google.com> | 2017-02-17 14:06:11 +0000 |
---|---|---|
committer | Dmitry Lomov <dslomov@google.com> | 2017-02-17 14:56:48 +0000 |
commit | 76cb02e5a95f7a854eabe3221c366ea804696b17 (patch) | |
tree | 26fe8a4ce883d15af65f8fa3019242ed7424fcbf /src/main/java/com/google | |
parent | 5d2ae52c032203575f145ca409f2b86f1e8c700b (diff) |
Make the interface dynamic library builder a regular label instead of a magic artifact.
--
PiperOrigin-RevId: 147830857
MOS_MIGRATED_REVID=147830857
Diffstat (limited to 'src/main/java/com/google')
11 files changed, 36 insertions, 54 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java index 9f9a655069..3c02666474 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java @@ -91,11 +91,6 @@ public interface AnalysisEnvironment extends ActionRegistry { Artifact getFilesetArtifact(PathFragment rootRelativePath, Root root); /** - * Returns the artifact for the specified tool. - */ - Artifact getEmbeddedToolArtifact(String embeddedPath); - - /** * Returns the middleman factory associated with the build. */ // TODO(bazel-team): remove this method and replace it with delegate methods. diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index 10a9216ae5..1f12d2cc0b 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -35,7 +35,6 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ArtifactFactory; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.Root; -import com.google.devtools.build.lib.analysis.config.BinTools; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection; import com.google.devtools.build.lib.analysis.config.BuildOptions; @@ -1083,14 +1082,14 @@ public class BuildView { @VisibleForTesting public RuleContext getRuleContextForTesting( ConfiguredTarget target, StoredEventHandler eventHandler, - BuildConfigurationCollection configurations, BinTools binTools) + BuildConfigurationCollection configurations) throws EvalException, InvalidConfigurationException, InterruptedException { BuildConfiguration targetConfig = target.getConfiguration(); CachingAnalysisEnvironment env = new CachingAnalysisEnvironment(getArtifactFactory(), new ConfiguredTargetKey(target.getLabel(), targetConfig), /*isSystemEnv=*/false, targetConfig.extendedSanityChecks(), eventHandler, - /*skyframeEnv=*/null, targetConfig.isActionsEnabled(), binTools); + /*skyframeEnv=*/null, targetConfig.isActionsEnabled()); return getRuleContextForTesting(eventHandler, target, env, configurations); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java index 5aed23d0f9..7a768c94ca 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java @@ -26,7 +26,6 @@ import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoCollection; import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory; import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoKey; -import com.google.devtools.build.lib.analysis.config.BinTools; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.StoredEventHandler; @@ -82,7 +81,6 @@ public class CachingAnalysisEnvironment implements AnalysisEnvironment { private EventHandler errorEventListener; private SkyFunction.Environment skyframeEnv; private Map<Artifact, String> artifacts; - private final BinTools binTools; /** * The list of actions registered by the configured target this analysis environment is @@ -92,8 +90,8 @@ public class CachingAnalysisEnvironment implements AnalysisEnvironment { public CachingAnalysisEnvironment(ArtifactFactory artifactFactory, ArtifactOwner owner, boolean isSystemEnv, boolean extendedSanityChecks, - EventHandler errorEventListener, SkyFunction.Environment env, boolean allowRegisteringActions, - BinTools binTools) { + EventHandler errorEventListener, SkyFunction.Environment env, + boolean allowRegisteringActions) { this.artifactFactory = artifactFactory; this.owner = Preconditions.checkNotNull(owner); this.isSystemEnv = isSystemEnv; @@ -101,7 +99,6 @@ public class CachingAnalysisEnvironment implements AnalysisEnvironment { this.errorEventListener = errorEventListener; this.skyframeEnv = env; this.allowRegisteringActions = allowRegisteringActions; - this.binTools = Preconditions.checkNotNull(binTools); middlemanFactory = new MiddlemanFactory(artifactFactory, this); artifacts = new HashMap<>(); } @@ -250,12 +247,6 @@ public class CachingAnalysisEnvironment implements AnalysisEnvironment { } @Override - public Artifact getEmbeddedToolArtifact(String embeddedPath) { - Preconditions.checkState(enabled); - return binTools.getEmbeddedArtifact(embeddedPath, artifactFactory); - } - - @Override public void registerAction(ActionAnalysisMetadata... actions) { Preconditions.checkState(enabled); if (allowRegisteringActions) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java index 16408d17ab..5ff16981f1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java @@ -199,8 +199,6 @@ public class CcToolchain implements RuleConfiguredTargetFactory { "FDO_DIR", cppConfiguration.getFdoInstrument().getPathString())); } - Artifact linkDynamicLibraryTool = getLinkDynamicLibraryTool(ruleContext); - CcToolchainProvider provider = new CcToolchainProvider( cppConfiguration, @@ -210,6 +208,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory { strip, objcopy, fullInputsForLink(ruleContext, link), + ruleContext.getPrerequisiteArtifact("$interface_library_builder", Mode.HOST), dwp, libcLink, staticRuntimeLinkInputs, @@ -223,7 +222,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory { getBuildVariables(ruleContext), getBuiltinIncludes(ruleContext), coverageEnvironment.build(), - linkDynamicLibraryTool, + ruleContext.getPrerequisiteArtifact("$link_dynamic_library_tool", Mode.HOST), getEnvironment(ruleContext)); RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext) @@ -269,10 +268,6 @@ public class CcToolchain implements RuleConfiguredTargetFactory { return builder.build(); } - private Artifact getLinkDynamicLibraryTool(RuleContext ruleContext) { - return ruleContext.getPrerequisiteArtifact("$link_dynamic_library_tool", Mode.TARGET); - } - private ImmutableList<Artifact> getBuiltinIncludes(RuleContext ruleContext) { ImmutableList.Builder<Artifact> result = ImmutableList.builder(); for (Artifact artifact : inputsForLibc(ruleContext)) { @@ -308,11 +303,8 @@ public class CcToolchain implements RuleConfiguredTargetFactory { return NestedSetBuilder.<Artifact>stableOrder() .addTransitive(link) .addTransitive(AnalysisUtils.getMiddlemanFor(ruleContext, ":libc_top")) - .add(getLinkDynamicLibraryTool(ruleContext)) - .add( - ruleContext - .getAnalysisEnvironment() - .getEmbeddedToolArtifact(CppRuleClasses.BUILD_INTERFACE_SO)) + .add(ruleContext.getPrerequisiteArtifact("$interface_library_builder", Mode.HOST)) + .add(ruleContext.getPrerequisiteArtifact("$link_dynamic_library_tool", Mode.HOST)) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java index 4145ebdede..8f2f7679fa 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java @@ -43,6 +43,7 @@ public final class CcToolchainProvider implements TransitiveInfoProvider { NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), + null, NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), @@ -66,6 +67,7 @@ public final class CcToolchainProvider implements TransitiveInfoProvider { private final NestedSet<Artifact> strip; private final NestedSet<Artifact> objCopy; private final NestedSet<Artifact> link; + private final Artifact interfaceSoBuilder; private final NestedSet<Artifact> dwp; private final NestedSet<Artifact> libcLink; private final NestedSet<Artifact> staticRuntimeLinkInputs; @@ -90,6 +92,7 @@ public final class CcToolchainProvider implements TransitiveInfoProvider { NestedSet<Artifact> strip, NestedSet<Artifact> objCopy, NestedSet<Artifact> link, + Artifact interfaceSoBuilder, NestedSet<Artifact> dwp, NestedSet<Artifact> libcLink, NestedSet<Artifact> staticRuntimeLinkInputs, @@ -112,6 +115,7 @@ public final class CcToolchainProvider implements TransitiveInfoProvider { this.strip = Preconditions.checkNotNull(strip); this.objCopy = Preconditions.checkNotNull(objCopy); this.link = Preconditions.checkNotNull(link); + this.interfaceSoBuilder = interfaceSoBuilder; this.dwp = Preconditions.checkNotNull(dwp); this.libcLink = Preconditions.checkNotNull(libcLink); this.staticRuntimeLinkInputs = Preconditions.checkNotNull(staticRuntimeLinkInputs); @@ -291,4 +295,11 @@ public final class CcToolchainProvider implements TransitiveInfoProvider { public Artifact getLinkDynamicLibraryTool() { return linkDynamicLibraryTool; } + + /** + * Returns the tool that builds interface libraries from dynamic libraries. + */ + public Artifact getInterfaceSoBuilder() { + return interfaceSoBuilder; + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java index 786add8315..877865d9f4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java @@ -76,7 +76,14 @@ public final class CcToolchainRule implements RuleDefinition { .add(attr("supports_param_files", BOOLEAN).value(true)) .add(attr("supports_header_parsing", BOOLEAN).value(false)) .add( + attr("$interface_library_builder", LABEL) + .cfg(HOST) + .singleArtifact() + .value(env.getToolsLabel("//tools/cpp:interface_library_builder"))) + .add( attr("$link_dynamic_library_tool", LABEL) + .cfg(HOST) + .singleArtifact() .value(env.getToolsLabel("//tools/cpp:link_dynamic_library"))) // TODO(bazel-team): Should be using the TARGET configuration. .add(attr(":libc_top", LABEL).cfg(HOST).value(LIBC_TOP)) 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 9441fbe6fd..1db3f3af5e 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 @@ -1281,8 +1281,9 @@ public class CppConfiguration extends BuildConfiguration.Fragment { } /** - * Returns whether build_interface_so can build interface shared objects for this toolchain. - * Should be true if this toolchain generates ELF objects. + * Returns whether this toolchain supports interface shared objects. + * + * <p>Should be true if this toolchain generates ELF objects. */ public boolean supportsInterfaceSharedObjects() { return supportsInterfaceSharedObjects; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java index d1fed5de30..3e0b716b58 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java @@ -188,7 +188,7 @@ public class CppLinkActionBuilder { * @param ruleContext the rule that owns the action * @param output the output artifact * @param toolchain the C++ toolchain provider - * @param the C++ FDO optimization support + * @param fdoSupport the C++ FDO optimization support */ public CppLinkActionBuilder(RuleContext ruleContext, Artifact output, CcToolchainProvider toolchain, FdoSupport fdoSupport) { @@ -208,7 +208,7 @@ public class CppLinkActionBuilder { * @param output the output artifact * @param configuration build configuration * @param toolchain C++ toolchain provider - * @param the C++ FDO optimization support + * @param fdoSupport the C++ FDO optimization support */ public CppLinkActionBuilder( RuleContext ruleContext, @@ -228,7 +228,7 @@ public class CppLinkActionBuilder { * @param configuration the configuration used to determine the tool chain and the default link * options * @param toolchain the C++ toolchain provider - * @param the C++ FDO optimization support + * @param fdoSupport the C++ FDO optimization support */ private CppLinkActionBuilder( @Nullable RuleContext ruleContext, @@ -258,7 +258,7 @@ public class CppLinkActionBuilder { * @param linkContext an immutable CppLinkAction.Context from the original builder * @param configuration build configuration * @param toolchain the C++ toolchain provider - * @param the C++ FDO optimization support + * @param fdoSupport the C++ FDO optimization support */ public CppLinkActionBuilder( RuleContext ruleContext, @@ -362,10 +362,6 @@ public class CppLinkActionBuilder { return this.linkstampOptions; } - protected Artifact getInterfaceSoBuilder() { - return analysisEnvironment.getEmbeddedToolArtifact(CppRuleClasses.BUILD_INTERFACE_SO); - } - /** * Returns command line options for this link action. */ @@ -627,7 +623,7 @@ public class CppLinkActionBuilder { paramFile, thinltoParamFile, PathFragment.EMPTY_FRAGMENT, - getInterfaceSoBuilder(), + toolchain.getInterfaceSoBuilder(), interfaceOutput); variablesExtension.addVariables(buildVariablesBuilder); for (VariablesExtension extraVariablesExtension : variablesExtensions) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java index bb22ec2036..9ad6ba3fa1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java @@ -125,11 +125,6 @@ public class CppRuleClasses { /** - * Path of the build_interface_so script in the Blaze binary. - */ - public static final String BUILD_INTERFACE_SO = "build_interface_so"; - - /** * A string constant for the parse_headers feature. */ public static final String PARSE_HEADERS = "parse_headers"; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java index c84cf2726a..0e2c828d82 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java @@ -40,7 +40,6 @@ import com.google.devtools.build.lib.analysis.LabelAndConfiguration; import com.google.devtools.build.lib.analysis.ViewCreationFailedException; import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory; import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoKey; -import com.google.devtools.build.lib.analysis.config.BinTools; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; @@ -91,7 +90,6 @@ public final class SkyframeBuildView { private final ConfiguredTargetFactory factory; private final ArtifactFactory artifactFactory; private final SkyframeExecutor skyframeExecutor; - private final BinTools binTools; private boolean enableAnalysis = false; // This hack allows us to see when a configured target has been invalidated, and thus when the set @@ -126,13 +124,11 @@ public final class SkyframeBuildView { private boolean skyframeAnalysisWasDiscarded; public SkyframeBuildView(BlazeDirectories directories, - SkyframeExecutor skyframeExecutor, BinTools binTools, - ConfiguredRuleClassProvider ruleClassProvider) { + SkyframeExecutor skyframeExecutor, ConfiguredRuleClassProvider ruleClassProvider) { this.factory = new ConfiguredTargetFactory(ruleClassProvider); this.artifactFactory = new ArtifactFactory( directories.getExecRoot().getParentDirectory(), directories.getRelativeOutputPath()); this.skyframeExecutor = skyframeExecutor; - this.binTools = binTools; this.ruleClassProvider = ruleClassProvider; } @@ -468,7 +464,7 @@ public final class SkyframeBuildView { boolean allowRegisteringActions = config == null || config.isActionsEnabled(); return new CachingAnalysisEnvironment( artifactFactory, owner, isSystemEnv, extendedSanityChecks, eventHandler, env, - allowRegisteringActions, binTools); + allowRegisteringActions); } /** diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index e587f8f135..1a04d15b8c 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -331,7 +331,6 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { this.skyframeBuildView = new SkyframeBuildView( directories, this, - binTools, (ConfiguredRuleClassProvider) ruleClassProvider); this.artifactFactory.set(skyframeBuildView.getArtifactFactory()); this.externalFilesHelper = new ExternalFilesHelper( |