diff options
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.java | 30 |
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(); |