aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2017-09-29 07:31:12 -0400
committerGravatar John Cater <jcater@google.com>2017-09-29 12:14:49 -0400
commit65959f53f74a8d0b7cba4a2adc7ed2bdfa1ea0ff (patch)
tree7ae06cb983431d1c0ffd48bcd0c889219ec2060f /src/main/java/com
parentce1297354cb1175322a024f6d1e9f15f11716895 (diff)
Pass CppSemantics down to the CppLinkActionBuilder
Currently CppLinkActionBuilder is not using CppSemantics, but it will when we use full CppCompileAction for linkstamp compiles. This cl is a preparation for that. RELNOTES: None. PiperOrigin-RevId: 170467826
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinary.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java36
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java30
8 files changed, 100 insertions, 47 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinary.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinary.java
index 4f5d8c9ea0..5d9183b8d0 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinary.java
@@ -13,9 +13,11 @@
// limitations under the License.
package com.google.devtools.build.lib.bazel.rules.android;
+import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppSemantics;
import com.google.devtools.build.lib.bazel.rules.java.BazelJavaSemantics;
import com.google.devtools.build.lib.rules.android.AndroidBinary;
import com.google.devtools.build.lib.rules.android.AndroidSemantics;
+import com.google.devtools.build.lib.rules.cpp.CppSemantics;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
/**
@@ -31,4 +33,9 @@ public class BazelAndroidBinary extends AndroidBinary {
protected AndroidSemantics createAndroidSemantics() {
return BazelAndroidSemantics.INSTANCE;
}
+
+ @Override
+ protected CppSemantics createCppSemantics() {
+ return BazelCppSemantics.INSTANCE;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index dd9ed457ce..39041a2d6b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -59,6 +59,7 @@ import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidB
import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.MultidexMode;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
+import com.google.devtools.build.lib.rules.cpp.CppSemantics;
import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder;
import com.google.devtools.build.lib.rules.java.JavaCommon;
import com.google.devtools.build.lib.rules.java.JavaConfiguration;
@@ -91,9 +92,12 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
protected abstract JavaSemantics createJavaSemantics();
protected abstract AndroidSemantics createAndroidSemantics();
+ protected abstract CppSemantics createCppSemantics();
+
@Override
public ConfiguredTarget create(RuleContext ruleContext)
throws InterruptedException, RuleErrorException {
+ CppSemantics cppSemantics = createCppSemantics();
JavaSemantics javaSemantics = createJavaSemantics();
AndroidSemantics androidSemantics = createAndroidSemantics();
if (!AndroidSdkProvider.verifyPresence(ruleContext)) {
@@ -106,19 +110,21 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
javaSemantics.checkRule(ruleContext, javaCommon);
javaSemantics.checkForProtoLibraryAndJavaProtoLibraryOnSameProto(ruleContext, javaCommon);
- AndroidCommon androidCommon = new AndroidCommon(
- javaCommon, true /* asNeverLink */, true /* exportDeps */);
- ResourceDependencies resourceDeps = LocalResourceContainer.definesAndroidResources(
- ruleContext.attributes())
- ? ResourceDependencies.fromRuleDeps(ruleContext, false /* neverlink */)
- : ResourceDependencies.fromRuleResourceAndDeps(ruleContext, false /* neverlink */);
- RuleConfiguredTargetBuilder builder = init(
- ruleContext,
- filesBuilder,
- resourceDeps,
- androidCommon,
- javaSemantics,
- androidSemantics);
+ AndroidCommon androidCommon =
+ new AndroidCommon(javaCommon, /* asNeverLink= */ true, /* exportDeps= */ true);
+ ResourceDependencies resourceDeps =
+ LocalResourceContainer.definesAndroidResources(ruleContext.attributes())
+ ? ResourceDependencies.fromRuleDeps(ruleContext, /* neverlink= */ false)
+ : ResourceDependencies.fromRuleResourceAndDeps(ruleContext, /* neverlink= */ false);
+ RuleConfiguredTargetBuilder builder =
+ init(
+ ruleContext,
+ filesBuilder,
+ resourceDeps,
+ androidCommon,
+ cppSemantics,
+ javaSemantics,
+ androidSemantics);
return builder.build();
}
@@ -172,6 +178,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
NestedSetBuilder<Artifact> filesBuilder,
ResourceDependencies resourceDeps,
AndroidCommon androidCommon,
+ CppSemantics cppSemantics,
JavaSemantics javaSemantics,
AndroidSemantics androidSemantics)
throws InterruptedException, RuleErrorException {
@@ -206,7 +213,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
androidSemantics.getNativeDepsFileName(),
depsByArchitecture,
toolchainMap,
- configurationMap);
+ configurationMap,
+ cppSemantics);
// TODO(bazel-team): Resolve all the different cases of resource handling so this conditional
// can go away: recompile from android_resources, and recompile from android_binary attributes.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
index 32a7c721d5..44e395f526 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
@@ -33,6 +33,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
+import com.google.devtools.build.lib.rules.cpp.CppSemantics;
import com.google.devtools.build.lib.rules.cpp.LinkerInput;
import com.google.devtools.build.lib.rules.nativedeps.NativeDepsHelper;
import com.google.devtools.build.lib.util.Pair;
@@ -56,7 +57,8 @@ public final class NativeLibs {
String nativeDepsFileName,
Multimap<String, TransitiveInfoCollection> depsByArchitecture,
Map<String, CcToolchainProvider> toolchainMap,
- Map<String, BuildConfiguration> configurationMap)
+ Map<String, BuildConfiguration> configurationMap,
+ CppSemantics cppSemantics)
throws InterruptedException {
Map<String, NestedSet<Artifact>> result = new LinkedHashMap<>();
String nativeDepsLibraryBasename = null;
@@ -73,7 +75,8 @@ public final class NativeLibs {
ruleContext,
linkParams,
configurationMap.get(entry.getKey()),
- toolchainMap.get(entry.getKey()));
+ toolchainMap.get(entry.getKey()),
+ cppSemantics);
NestedSetBuilder<Artifact> librariesBuilder = NestedSetBuilder.stableOrder();
if (nativeDepsLibrary != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index 6b00ae0d69..416cf4612f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -261,7 +261,8 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
fake,
binary,
linkParams,
- linkCompileOutputSeparately);
+ linkCompileOutputSeparately,
+ semantics);
linkActionBuilder.setUseTestOnlyFlags(ruleContext.isTestTarget());
if (linkStaticness == LinkStaticness.DYNAMIC) {
linkActionBuilder.setRuntimeInputs(
@@ -525,10 +526,12 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
boolean fake,
Artifact binary,
CcLinkParams linkParams,
- boolean linkCompileOutputSeparately)
+ boolean linkCompileOutputSeparately,
+ CppSemantics cppSemantics)
throws InterruptedException {
CppLinkActionBuilder builder =
- new CppLinkActionBuilder(context, binary, toolchain, fdoSupport, featureConfiguration)
+ new CppLinkActionBuilder(
+ context, binary, toolchain, fdoSupport, featureConfiguration, cppSemantics)
.setCrosstoolInputs(toolchain.getLink())
.addNonCodeInputs(compilationPrerequisites);
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 b0ffed1255..6af0118e78 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
@@ -163,6 +163,7 @@ public class CppLinkActionBuilder {
@Nullable private final RuleContext ruleContext;
private final AnalysisEnvironment analysisEnvironment;
private final Artifact output;
+ private final CppSemantics unusedCppSemantics;
@Nullable private String mnemonic;
// can be null for CppLinkAction.createTestBuilder()
@@ -215,13 +216,15 @@ public class CppLinkActionBuilder {
* @param output the output artifact
* @param toolchain the C++ toolchain provider
* @param fdoSupport the C++ FDO optimization support
+ * @param cppSemantics to be used for linkstamp compiles
*/
public CppLinkActionBuilder(
RuleContext ruleContext,
Artifact output,
CcToolchainProvider toolchain,
FdoSupportProvider fdoSupport,
- FeatureConfiguration featureConfiguration) {
+ FeatureConfiguration featureConfiguration,
+ CppSemantics cppSemantics) {
this(
ruleContext,
output,
@@ -229,7 +232,8 @@ public class CppLinkActionBuilder {
ruleContext.getAnalysisEnvironment(),
toolchain,
fdoSupport,
- featureConfiguration);
+ featureConfiguration,
+ cppSemantics);
}
/**
@@ -240,6 +244,7 @@ public class CppLinkActionBuilder {
* @param configuration build configuration
* @param toolchain C++ toolchain provider
* @param fdoSupport the C++ FDO optimization support
+ * @param cppSemantics to be used for linkstamp compiles
*/
public CppLinkActionBuilder(
RuleContext ruleContext,
@@ -247,7 +252,8 @@ public class CppLinkActionBuilder {
BuildConfiguration configuration,
CcToolchainProvider toolchain,
FdoSupportProvider fdoSupport,
- FeatureConfiguration featureConfiguration) {
+ FeatureConfiguration featureConfiguration,
+ CppSemantics cppSemantics) {
this(
ruleContext,
output,
@@ -255,7 +261,8 @@ public class CppLinkActionBuilder {
ruleContext.getAnalysisEnvironment(),
toolchain,
fdoSupport,
- featureConfiguration);
+ featureConfiguration,
+ cppSemantics);
}
/**
@@ -267,6 +274,7 @@ public class CppLinkActionBuilder {
* options
* @param toolchain the C++ toolchain provider
* @param fdoSupport the C++ FDO optimization support
+ * @param cppSemantics to be used for linkstamp compiles
*/
private CppLinkActionBuilder(
@Nullable RuleContext ruleContext,
@@ -275,7 +283,8 @@ public class CppLinkActionBuilder {
AnalysisEnvironment analysisEnvironment,
CcToolchainProvider toolchain,
FdoSupportProvider fdoSupport,
- FeatureConfiguration featureConfiguration) {
+ FeatureConfiguration featureConfiguration,
+ CppSemantics cppSemantics) {
this.ruleContext = ruleContext;
this.analysisEnvironment = Preconditions.checkNotNull(analysisEnvironment);
this.output = Preconditions.checkNotNull(output);
@@ -287,6 +296,7 @@ public class CppLinkActionBuilder {
runtimeSolibDir = toolchain.getDynamicRuntimeSolibDir();
}
this.featureConfiguration = featureConfiguration;
+ this.unusedCppSemantics = Preconditions.checkNotNull(cppSemantics);
}
/**
@@ -299,6 +309,7 @@ public class CppLinkActionBuilder {
* @param configuration build configuration
* @param toolchain the C++ toolchain provider
* @param fdoSupport the C++ FDO optimization support
+ * @param cppSemantics to be used for linkstamp compiles
*/
public CppLinkActionBuilder(
RuleContext ruleContext,
@@ -307,7 +318,8 @@ public class CppLinkActionBuilder {
BuildConfiguration configuration,
CcToolchainProvider toolchain,
FdoSupportProvider fdoSupport,
- FeatureConfiguration featureConfiguration) {
+ FeatureConfiguration featureConfiguration,
+ CppSemantics cppSemantics) {
// These Builder-only fields get set in the constructor:
// ruleContext, analysisEnvironment, outputPath, configuration, runtimeSolibDir
this(
@@ -317,7 +329,8 @@ public class CppLinkActionBuilder {
ruleContext.getAnalysisEnvironment(),
toolchain,
fdoSupport,
- featureConfiguration);
+ featureConfiguration,
+ cppSemantics);
Preconditions.checkNotNull(linkContext);
// All linkContext fields should be transferred to this Builder.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
index 2038daba89..d191ed85d0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
@@ -1520,7 +1520,7 @@ public final class CppModel {
private CppLinkActionBuilder newLinkActionBuilder(Artifact outputArtifact) {
return new CppLinkActionBuilder(
- ruleContext, outputArtifact, ccToolchain, fdoSupport, featureConfiguration)
+ ruleContext, outputArtifact, ccToolchain, fdoSupport, featureConfiguration, semantics)
.setCrosstoolInputs(ccToolchain.getLink())
.addNonCodeInputs(context.getTransitiveCompilationPrerequisites());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
index e63576ea65..2c8cf58886 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
@@ -33,6 +33,7 @@ import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.cpp.CppLinkAction;
import com.google.devtools.build.lib.rules.cpp.CppLinkActionBuilder;
import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
+import com.google.devtools.build.lib.rules.cpp.CppSemantics;
import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
import com.google.devtools.build.lib.rules.cpp.Link;
import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness;
@@ -91,13 +92,14 @@ public abstract class NativeDepsHelper {
* <p>linkshared=1 means we prefer the ".pic.a" files to the ".a" files, and the LinkTargetType is
* set to DYNAMIC_LIBRARY which causes Link.java to include "-shared" in the linker options.
*
- * <p>It is possible that this function may have no work to do if there are no native libraries
- * in the transitive closure, or if the only native libraries in the transitive closure are
- * already shared libraries. In this case, this function returns {@code null}.
+ * <p>It is possible that this function may have no work to do if there are no native libraries in
+ * the transitive closure, or if the only native libraries in the transitive closure are already
+ * shared libraries. In this case, this function returns {@code null}.
*
* @param ruleContext the rule context to determine the native deps library
* @param linkParams the {@link CcLinkParams} for the rule, collected with linkstatic = 1 and
* linkshared = 1
+ * @param cppSemantics to use for linkstamp compiles
* @return the native deps library, or null if there was no code which needed to be linked in the
* transitive closure.
*/
@@ -105,7 +107,8 @@ public abstract class NativeDepsHelper {
final RuleContext ruleContext,
CcLinkParams linkParams,
final BuildConfiguration configuration,
- CcToolchainProvider toolchain)
+ CcToolchainProvider toolchain,
+ CppSemantics cppSemantics)
throws InterruptedException {
if (!containsCodeToLink(linkParams.getLibraries())) {
return null;
@@ -121,14 +124,15 @@ public abstract class NativeDepsHelper {
return createNativeDepsAction(
ruleContext,
- linkParams, /** extraLinkOpts */
- ImmutableList.<String>of(),
+ linkParams,
+ /* extraLinkOpts= */ ImmutableList.of(),
configuration,
toolchain,
nativeDeps,
libraryIdentifier,
configuration.getBinDirectory(ruleContext.getRule().getRepository()),
- /*useDynamicRuntime*/ false)
+ /* useDynamicRuntime= */ false,
+ cppSemantics)
.getLibrary();
}
@@ -171,7 +175,8 @@ public abstract class NativeDepsHelper {
Artifact nativeDeps,
String libraryIdentifier,
Root bindirIfShared,
- boolean useDynamicRuntime)
+ boolean useDynamicRuntime,
+ CppSemantics cppSemantics)
throws InterruptedException {
Preconditions.checkState(
ruleContext.isLegalFragment(CppConfiguration.class),
@@ -207,7 +212,13 @@ public abstract class NativeDepsHelper {
FeatureConfiguration featureConfiguration = CcCommon.configureFeatures(ruleContext, toolchain);
CppLinkActionBuilder builder =
new CppLinkActionBuilder(
- ruleContext, sharedLibrary, configuration, toolchain, fdoSupport, featureConfiguration);
+ ruleContext,
+ sharedLibrary,
+ configuration,
+ toolchain,
+ fdoSupport,
+ featureConfiguration,
+ cppSemantics);
if (useDynamicRuntime) {
builder.setRuntimeInputs(ArtifactCategory.DYNAMIC_LIBRARY,
toolchain.getDynamicRuntimeLinkMiddleman(), toolchain.getDynamicRuntimeLinkInputs());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
index 344dd79bfa..958e025f68 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
@@ -258,7 +258,9 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
outputArchive,
ccToolchain,
fdoSupport,
- getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider))
+ getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider),
+ createObjcCppSemantics(
+ objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
.addActionInputs(objcProvider.getObjcLibraries())
.addActionInputs(objcProvider.getCcLibraries())
.addActionInputs(objcProvider.get(IMPORTED_LIBRARY).toSet())
@@ -312,7 +314,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
LinkTargetType linkType = (objcProvider.is(Flag.USES_CPP))
? LinkTargetType.OBJCPP_EXECUTABLE
: LinkTargetType.OBJC_EXECUTABLE;
-
+
ObjcVariablesExtension.Builder extensionBuilder =
new ObjcVariablesExtension.Builder()
.setRuleContext(ruleContext)
@@ -334,7 +336,9 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
binaryToLink,
toolchain,
fdoSupport,
- getFeatureConfiguration(ruleContext, toolchain, buildConfiguration, objcProvider))
+ getFeatureConfiguration(ruleContext, toolchain, buildConfiguration, objcProvider),
+ createObjcCppSemantics(
+ objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
.setMnemonic("ObjcLink")
.addActionInputs(bazelBuiltLibraries)
.addActionInputs(objcProvider.getCcLibraries())
@@ -423,14 +427,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
Streams.stream(compilationArtifacts.getAdditionalHdrs()))
.collect(toImmutableSortedSet(naturalOrder()));
Artifact pchHdr = getPchFile().orNull();
- ObjcCppSemantics semantics =
- new ObjcCppSemantics(
- objcProvider,
- createIncludeProcessing(privateHdrs, objcProvider, pchHdr),
- ruleContext.getFragment(ObjcConfiguration.class),
- isHeaderThinningEnabled(),
- intermediateArtifacts,
- buildConfiguration);
+ ObjcCppSemantics semantics = createObjcCppSemantics(objcProvider, privateHdrs, pchHdr);
CcLibraryHelper result =
new CcLibraryHelper(
ruleContext,
@@ -482,6 +479,17 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
return result;
}
+ private ObjcCppSemantics createObjcCppSemantics(
+ ObjcProvider objcProvider, Collection<Artifact> privateHdrs, Artifact pchHdr) {
+ return new ObjcCppSemantics(
+ objcProvider,
+ createIncludeProcessing(privateHdrs, objcProvider, pchHdr),
+ ruleContext.getFragment(ObjcConfiguration.class),
+ isHeaderThinningEnabled(),
+ intermediateArtifacts,
+ buildConfiguration);
+ }
+
private FeatureConfiguration getFeatureConfiguration(
RuleContext ruleContext,
CcToolchainProvider ccToolchain,