aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc
diff options
context:
space:
mode:
authorGravatar Chris Parsons <cparsons@google.com>2016-04-26 00:06:33 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-04-26 08:29:51 +0000
commit35e29e5c707522d7c469947f007d4107a3e57e68 (patch)
tree562f9a17a98254bdccc53a3c798a0594c2fc42d7 /src/main/java/com/google/devtools/build/lib/rules/objc
parentbc604ab3b055ebf9b6070f0019cd74556493a939 (diff)
Refactor CompilationSupport.registerFullyLinkedAction to be the responsibility of the caller to invoke, instead of creating the fully linked artifact by default
It makes more sense for the caller rule to opt-in to creating its own implicit output. This also makes it easier for classes to use CompilationSupport without generating this artifact. -- MOS_MIGRATED_REVID=120764517
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java31
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java4
7 files changed, 28 insertions, 18 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java
index f9cb428ec1..c01fbda176 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java
@@ -144,7 +144,9 @@ public abstract class AbstractJ2ObjcProtoAspect implements ConfiguredNativeAspec
j2ObjcSource.getHeaderSearchPaths(),
DEPENDENT_ATTRIBUTES);
- new CompilationSupport(ruleContext).registerCompileAndArchiveActions(common);
+ new CompilationSupport(ruleContext)
+ .registerCompileAndArchiveActions(common)
+ .registerFullyLinkAction(common.getObjcProvider());
}
NestedSet<Artifact> j2ObjcTransitiveHeaderMappingFiles = j2ObjcTransitiveHeaderMappingFiles(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
index fccce46fe1..61fc0748ac 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
@@ -102,6 +102,7 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
CompilationSupport compilationSupport =
new CompilationSupport(ruleContext)
.registerCompileAndArchiveActions(common)
+ .registerFullyLinkAction(common.getObjcProvider())
.addXcodeSettings(xcodeProviderBuilder, common)
.registerLinkActions(
objcProvider,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 57e5215e23..73e07e9baa 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -255,8 +255,7 @@ public final class CompilationSupport {
* @param common common information about this rule and its dependencies
* @return this compilation support
*/
- CompilationSupport registerCompileAndArchiveActions(ObjcCommon common)
- throws InterruptedException {
+ CompilationSupport registerCompileAndArchiveActions(ObjcCommon common) {
if (common.getCompilationArtifacts().isPresent()) {
registerGenerateModuleMapAction(common.getCompilationArtifacts());
Optional<CppModuleMap> moduleMap;
@@ -269,8 +268,7 @@ public final class CompilationSupport {
common.getCompilationArtifacts().get(),
common.getObjcProvider(),
moduleMap,
- buildConfiguration.isCodeCoverageEnabled(),
- true);
+ buildConfiguration.isCodeCoverageEnabled());
}
return this;
}
@@ -283,8 +281,7 @@ public final class CompilationSupport {
CompilationArtifacts compilationArtifacts,
ObjcProvider objcProvider,
Optional<CppModuleMap> moduleMap,
- boolean isCodeCoverageEnabled,
- boolean isFullyLinkEnabled) throws InterruptedException {
+ boolean isCodeCoverageEnabled) {
ImmutableList.Builder<Artifact> objFiles = new ImmutableList.Builder<>();
for (Artifact sourceFile : compilationArtifacts.getSrcs()) {
Artifact objFile = intermediateArtifacts.objFile(sourceFile);
@@ -324,10 +321,6 @@ public final class CompilationSupport {
for (Artifact archive : compilationArtifacts.getArchive().asSet()) {
registerArchiveActions(objFiles, archive);
}
-
- if (isFullyLinkEnabled) {
- registerFullyLinkAction(objcProvider);
- }
}
/**
@@ -683,9 +676,16 @@ public final class CompilationSupport {
return actions.build();
}
- private void registerFullyLinkAction(ObjcProvider objcProvider) throws InterruptedException {
- Artifact archive = ruleContext.getImplicitOutputArtifact(FULLY_LINKED_LIB);
-
+ /**
+ * Registers an action to create an archive artifact by fully (statically) linking all
+ * transitive dependencies of this rule.
+ *
+ * @param objcProvider provides all compiling and linking information to create this artifact
+ */
+ public CompilationSupport registerFullyLinkAction(ObjcProvider objcProvider)
+ throws InterruptedException {
+ Artifact outputArchive =
+ ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB);
ImmutableList<Artifact> ccLibraries = ccLibraries(objcProvider);
ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(
ruleContext, appleConfiguration.getIosCpuPlatform())
@@ -696,7 +696,7 @@ public final class CompilationSupport {
.add("-static")
.add("-arch_only").add(appleConfiguration.getIosCpu())
.add("-syslibroot").add(AppleToolchain.sdkDir())
- .add("-o").add(archive.getExecPathString())
+ .add("-o").add(outputArchive.getExecPathString())
.addExecPaths(objcProvider.get(LIBRARY))
.addExecPaths(objcProvider.get(IMPORTED_LIBRARY))
.addExecPaths(ccLibraries)
@@ -704,8 +704,9 @@ public final class CompilationSupport {
.addInputs(ccLibraries)
.addTransitiveInputs(objcProvider.get(LIBRARY))
.addTransitiveInputs(objcProvider.get(IMPORTED_LIBRARY))
- .addOutput(archive)
+ .addOutput(outputArchive)
.build(ruleContext));
+ return this;
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
index db48de1e84..89541d6508 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
@@ -134,6 +134,7 @@ public final class IosTest implements RuleConfiguredTargetFactory {
.registerLinkActions(
common.getObjcProvider(), extraLinkArgs, extraLinkInputs, DsymOutputType.TEST)
.registerCompileAndArchiveActions(common)
+ .registerFullyLinkAction(common.getObjcProvider())
.addXcodeSettings(xcodeProviderBuilder, common)
.validateAttributes();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 10cf0b2610..3ff31cfe0e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -154,7 +154,9 @@ public class J2ObjcAspect implements ConfiguredNativeAspectFactory {
j2ObjcSource.getHeaderSearchPaths(),
DEPENDENT_ATTRIBUTES);
- new CompilationSupport(ruleContext).registerCompileAndArchiveActions(common);
+ new CompilationSupport(ruleContext)
+ .registerCompileAndArchiveActions(common)
+ .registerFullyLinkAction(common.getObjcProvider());
} else {
common = common(
ruleContext,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
index 9c03bf3053..88e7a219d6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
@@ -113,6 +113,7 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory {
CompilationSupport compilationSupport =
new CompilationSupport(ruleContext)
.registerCompileAndArchiveActions(common)
+ .registerFullyLinkAction(common.getObjcProvider())
.addXcodeSettings(xcodeProviderBuilder, common)
.validateAttributes();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
index b6078bb6d1..e46d8204ec 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
@@ -50,7 +50,9 @@ public class ObjcProtoLibrary implements RuleConfiguredTargetFactory {
filesToBuild.addAll(common.getCompiledArchive().asSet());
- new CompilationSupport(ruleContext).registerCompileAndArchiveActions(commonBuilder.build());
+ new CompilationSupport(ruleContext)
+ .registerCompileAndArchiveActions(commonBuilder.build())
+ .registerFullyLinkAction(common.getObjcProvider());
new XcodeSupport(ruleContext)
.addFilesToBuild(filesToBuild)