aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Han-Wen Nienhuys <hanwen@google.com>2015-07-29 13:46:24 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-07-29 16:02:49 +0000
commitdd37eb7f5768fda599a9f1c195c4430ceefdd13c (patch)
tree427f55855be1fa3d2a3ea68ed6838d158294949d /src/main
parentb914f3cbcd6606506a3dcb6fcfcc2fb6d0917eef (diff)
Move shared settings between CcBinary and CcLibrary to
CcLibraryHelper#setCommon. -- MOS_MIGRATED_REVID=99370685
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java37
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java28
3 files changed, 46 insertions, 45 deletions
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 326575c9d3..bff7edf667 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
@@ -159,27 +159,16 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
LinkTargetType linkType =
isLinkShared(ruleContext) ? LinkTargetType.DYNAMIC_LIBRARY : LinkTargetType.EXECUTABLE;
- CcLibraryHelper helper = new CcLibraryHelper(ruleContext, semantics, featureConfiguration)
- .setLinkType(linkType)
- .setHeadersCheckingMode(common.determineHeadersCheckingMode())
- .addCopts(common.getCopts())
- .setNoCopts(common.getNoCopts())
- .addDefines(common.getDefines())
- .addCompilationPrerequisites(common.getSharedLibrariesFromSrcs())
- .addCompilationPrerequisites(common.getStaticLibrariesFromSrcs())
- .addSources(common.getCAndCppSources())
- .addPrivateHeaders(FileType.filter(
- ruleContext.getPrerequisiteArtifacts("srcs", Mode.TARGET).list(),
- CppFileTypes.CPP_HEADER))
- .addObjectFiles(common.getObjectFilesFromSrcs(false))
- .addPicObjectFiles(common.getObjectFilesFromSrcs(true))
- .addPicIndependentObjectFiles(common.getLinkerScripts())
- .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET))
- .addDeps(ImmutableList.of(CppHelper.mallocForTarget(ruleContext)))
- .addSystemIncludeDirs(common.getSystemIncludeDirs())
- .addIncludeDirs(common.getIncludeDirs())
- .addLooseIncludeDirs(common.getLooseIncludeDirs())
- .setFake(fake);
+ CcLibraryHelper helper =
+ new CcLibraryHelper(ruleContext, semantics, featureConfiguration)
+ .fromCommon(common)
+ .addDeps(ImmutableList.of(CppHelper.mallocForTarget(ruleContext)))
+ .addPrivateHeaders(
+ FileType.filter(
+ ruleContext.getPrerequisiteArtifacts("srcs", Mode.TARGET).list(),
+ CppFileTypes.CPP_HEADER))
+ .setFake(fake)
+ .setLinkType(linkType);
CcLibraryHelper.Info info = helper.build();
CppCompilationContext cppCompilationContext = info.getCppCompilationContext();
@@ -189,8 +178,10 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
// linkopt "-shared", which causes the result of linking to be a shared
// library. In this case, the name of the executable target should end
// in ".so".
- PathFragment executableName = ruleContext.getPackageDirectory().getRelative(
- ruleContext.getTarget().getName() + OsUtils.executableExtension());
+ PathFragment executableName =
+ ruleContext
+ .getPackageDirectory()
+ .getRelative(ruleContext.getTarget().getName() + OsUtils.executableExtension());
CppLinkAction.Builder linkActionBuilder = determineLinkerArguments(
ruleContext, common, cppConfiguration, ccCompilationOutputs,
cppCompilationContext.getCompilationPrerequisites(), fake, executableName);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index f4c2bb4382..57748ce222 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -117,33 +117,21 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory {
CcLibraryHelper helper =
new CcLibraryHelper(ruleContext, semantics, featureConfiguration)
- .setLinkType(linkType)
+ .fromCommon(common)
+
+ .addLinkopts(common.getLinkopts())
+ .addPublicHeaders(common.getHeaders())
.enableCcNativeLibrariesProvider()
- .enableInterfaceSharedObjects()
.enableCompileProviders()
+ .enableInterfaceSharedObjects()
// Generate .a and .so outputs even without object files to fulfill the rule class contract
// wrt. implicit output files, if the contract says so. Behavior here differs between Bazel
// and Blaze.
.setGenerateLinkActionsIfEmpty(
ruleContext.getRule().getRuleClassObject().getImplicitOutputsFunction()
!= ImplicitOutputsFunction.NONE)
- .setNeverLink(neverLink)
- .setHeadersCheckingMode(common.determineHeadersCheckingMode())
- .addCopts(common.getCopts())
- .setNoCopts(common.getNoCopts())
- .addLinkopts(common.getLinkopts())
- .addDefines(common.getDefines())
- .addCompilationPrerequisites(common.getSharedLibrariesFromSrcs())
- .addCompilationPrerequisites(common.getStaticLibrariesFromSrcs())
- .addSources(common.getCAndCppSources())
- .addPublicHeaders(common.getHeaders())
- .addObjectFiles(common.getObjectFilesFromSrcs(false))
- .addPicObjectFiles(common.getObjectFilesFromSrcs(true))
- .addPicIndependentObjectFiles(common.getLinkerScripts())
- .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET))
- .addSystemIncludeDirs(common.getSystemIncludeDirs())
- .addIncludeDirs(common.getIncludeDirs())
- .addLooseIncludeDirs(common.getLooseIncludeDirs());
+ .setLinkType(linkType)
+ .setNeverLink(neverLink);
if (collectLinkstamp) {
helper.addLinkstamps(ruleContext.getPrerequisites("linkstamp", Mode.TARGET));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
index ce817b2749..062bd979e7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
@@ -185,7 +185,7 @@ public final class CcLibraryHelper {
private boolean emitDynamicLibrary = true;
private boolean checkDepsGenerateCpp = true;
private boolean emitCompileProviders;
-
+
private final FeatureConfiguration featureConfiguration;
public CcLibraryHelper(RuleContext ruleContext, CppSemantics semantics,
@@ -195,7 +195,29 @@ public final class CcLibraryHelper {
this.semantics = Preconditions.checkNotNull(semantics);
this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration);
}
-
+
+ /**
+ * Sets fields that overlap for cc_library and cc_binary rules.
+ */
+ public CcLibraryHelper fromCommon(CcCommon common) {
+ this
+ .addCompilationPrerequisites(common.getSharedLibrariesFromSrcs())
+ .addCompilationPrerequisites(common.getStaticLibrariesFromSrcs())
+ .addCopts(common.getCopts())
+ .addDefines(common.getDefines())
+ .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET))
+ .addIncludeDirs(common.getIncludeDirs())
+ .addLooseIncludeDirs(common.getLooseIncludeDirs())
+ .addObjectFiles(common.getObjectFilesFromSrcs( /*usePic*/false))
+ .addPicIndependentObjectFiles(common.getLinkerScripts())
+ .addPicObjectFiles(common.getObjectFilesFromSrcs( /*usePic*/true))
+ .addSources(common.getCAndCppSources())
+ .addSystemIncludeDirs(common.getSystemIncludeDirs())
+ .setNoCopts(common.getNoCopts())
+ .setHeadersCheckingMode(common.determineHeadersCheckingMode());
+ return this;
+ }
+
/**
* Add the corresponding files as header files, i.e., these files will not be compiled, but are
* made visible as includes to dependent rules.
@@ -243,7 +265,7 @@ public final class CcLibraryHelper {
}
return this;
}
-
+
/**
* Add the corresponding files as source files. These may also be header files, in which case
* they will not be compiled, but also not made visible as includes to dependent rules.