aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
index 5a3314aa77..aef4f2795f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.rules.objc;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -23,6 +24,8 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.Builder;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.VariablesExtension;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.PrecompiledFiles;
import com.google.devtools.build.lib.rules.objc.ObjcCommon.CompilationAttributes;
@@ -34,6 +37,20 @@ import java.util.Collection;
*/
public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory {
+ private static final String PCH_FILE_VARIABLE_NAME = "pch_file";
+
+ private VariablesExtension variablesExtension(final RuleContext ruleContext) {
+ return new VariablesExtension() {
+ @Override
+ public void addVariables(Builder builder) {
+ if (ruleContext.getPrerequisiteArtifact("pch", Mode.TARGET) != null) {
+ builder.addVariable(PCH_FILE_VARIABLE_NAME,
+ ruleContext.getPrerequisiteArtifact("pch", Mode.TARGET).getExecPathString());
+ }
+ }
+ };
+ }
+
@Override
public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException {
@@ -48,8 +65,16 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory {
ruleContext
.getPrerequisite(":cc_toolchain", Mode.TARGET)
.getProvider(CcToolchainProvider.class);
- FeatureConfiguration featureConfiguration = toolchain.getFeatures().getFeatureConfiguration();
+ ImmutableList.Builder<String> extraFeatures = ImmutableList.builder();
+ if (ruleContext.getPrerequisiteArtifact("pch", Mode.TARGET) != null) {
+ extraFeatures.add("pch");
+ }
+
+ FeatureConfiguration featureConfiguration =
+ toolchain.getFeatures().getFeatureConfiguration(extraFeatures.build());
+
+
Collection<Artifact> sources = Sets.newHashSet(compilationArtifacts.getSrcs());
Collection<Artifact> privateHdrs = Sets.newHashSet(compilationArtifacts.getPrivateHdrs());
Collection<Artifact> publicHdrs = Sets.newHashSet(compilationAttributes.hdrs());
@@ -65,7 +90,8 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory {
.enableCompileProviders()
.addPublicHeaders(publicHdrs)
.addPrecompiledFiles(precompiledFiles)
- .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET));
+ .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET))
+ .addVariableExtension(variablesExtension(ruleContext));
CcLibraryHelper.Info info = helper.build();