aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2017-02-17 14:06:11 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2017-02-17 14:56:48 +0000
commit76cb02e5a95f7a854eabe3221c366ea804696b17 (patch)
tree26fe8a4ce883d15af65f8fa3019242ed7424fcbf /src/main/java/com/google
parent5d2ae52c032203575f145ca409f2b86f1e8c700b (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AnalysisEnvironment.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BuildView.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java1
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(