diff options
author | Han-Wen Nienhuys <hanwen@google.com> | 2015-07-29 13:46:24 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2015-07-29 16:02:49 +0000 |
commit | dd37eb7f5768fda599a9f1c195c4430ceefdd13c (patch) | |
tree | 427f55855be1fa3d2a3ea68ed6838d158294949d /src/main/java/com/google/devtools | |
parent | b914f3cbcd6606506a3dcb6fcfcc2fb6d0917eef (diff) |
Move shared settings between CcBinary and CcLibrary to
CcLibraryHelper#setCommon.
--
MOS_MIGRATED_REVID=99370685
Diffstat (limited to 'src/main/java/com/google/devtools')
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. |