aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-04-14 22:47:47 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-04-18 11:28:13 +0200
commit0334cd446bb2fde1a6ee53525d463abd8bab2631 (patch)
tree22809c7853c21b003a52d1e83996692cacf4215d /src/main/java/com/google/devtools/build/lib/rules/objc
parentf87b7080a399906bdf9b3a1ecdf8694eca22498e (diff)
Add bitcode support to objc crosstool linking.
PiperOrigin-RevId: 153202296
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/CrosstoolCompilationSupport.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java30
2 files changed, 41 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
index 773fb33c46..e3168bf068 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
@@ -38,6 +38,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.packages.TargetUtils;
+import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions.AppleBitcodeMode;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper;
import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper.Info;
@@ -316,6 +317,14 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
executableLinkAction.addActionOutput(linkmap);
}
+ if (appleConfiguration.getBitcodeMode() == AppleBitcodeMode.EMBEDDED) {
+ Artifact bitcodeSymbolMap = intermediateArtifacts.bitcodeSymbolMap();
+ extensionBuilder
+ .setBitcodeSymbolMap(bitcodeSymbolMap)
+ .addVariableCategory(VariableCategory.BITCODE_VARIABLES);
+ executableLinkAction.addActionOutput(bitcodeSymbolMap);
+ }
+
executableLinkAction.addVariablesExtension(extensionBuilder.build());
ruleContext.registerAction(executableLinkAction.build());
@@ -460,6 +469,11 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
if (configuration.getFragment(ObjcConfiguration.class).generateLinkmap()) {
activatedCrosstoolSelectables.add(GENERATE_LINKMAP_FEATURE_NAME);
}
+ AppleBitcodeMode bitcodeMode =
+ configuration.getFragment(AppleConfiguration.class).getBitcodeMode();
+ if (bitcodeMode != AppleBitcodeMode.NONE) {
+ activatedCrosstoolSelectables.addAll(bitcodeMode.getFeatureNames());
+ }
activatedCrosstoolSelectables.addAll(ruleContext.getFeatures());
return configuration
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java
index 0e98cb374b..99c44948fc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java
@@ -47,6 +47,7 @@ class ObjcVariablesExtension implements VariablesExtension {
static final String CC_LIBRARY_EXEC_PATHS_VARIABLE_NAME = "cc_library_exec_paths";
static final String IMPORTED_LIBRARY_EXEC_PATHS_VARIABLE_NAME = "imported_library_exec_paths";
static final String LINKMAP_EXEC_PATH = "linkmap_exec_path";
+ static final String BITCODE_SYMBOL_MAP_PATH_VARAIBLE_NAME = "bitcode_symbol_map_path";
// executable linking variables
static final String FRAMEWORK_NAMES_VARIABLE_NAME = "framework_names";
@@ -77,6 +78,7 @@ class ObjcVariablesExtension implements VariablesExtension {
private final DsymOutputType dsymOutputType;
private final Artifact dsymBundleZip;
private final Artifact linkmap;
+ private final Artifact bitcodeSymbolMap;
private ObjcVariablesExtension(
RuleContext ruleContext,
@@ -92,7 +94,8 @@ class ObjcVariablesExtension implements VariablesExtension {
ImmutableSet<VariableCategory> activeVariableCategories,
DsymOutputType dsymOutputType,
Artifact dsymBundleZip,
- Artifact linkmap) {
+ Artifact linkmap,
+ Artifact bitcodeSymbolMap) {
this.ruleContext = ruleContext;
this.objcProvider = objcProvider;
this.compilationArtifacts = compilationArtifacts;
@@ -108,6 +111,7 @@ class ObjcVariablesExtension implements VariablesExtension {
this.dsymOutputType = dsymOutputType;
this.dsymBundleZip = dsymBundleZip;
this.linkmap = linkmap;
+ this.bitcodeSymbolMap = bitcodeSymbolMap;
}
/** Type of build variable that can optionally exported by this extension. */
@@ -116,7 +120,8 @@ class ObjcVariablesExtension implements VariablesExtension {
FULLY_LINK_VARIABLES,
EXECUTABLE_LINKING_VARIABLES,
DSYM_VARIABLES,
- LINKMAP_VARIABLES;
+ LINKMAP_VARIABLES,
+ BITCODE_VARIABLES;
}
@Override
@@ -139,6 +144,9 @@ class ObjcVariablesExtension implements VariablesExtension {
if (activeVariableCategories.contains(VariableCategory.LINKMAP_VARIABLES)) {
addLinkmapVariables(builder);
}
+ if (activeVariableCategories.contains(VariableCategory.BITCODE_VARIABLES)) {
+ addBitcodeVariables(builder);
+ }
}
private void addPchVariables(CcToolchainFeatures.Variables.Builder builder) {
@@ -229,6 +237,11 @@ class ObjcVariablesExtension implements VariablesExtension {
builder.addStringVariable(LINKMAP_EXEC_PATH, linkmap.getExecPathString());
}
+ private void addBitcodeVariables(CcToolchainFeatures.Variables.Builder builder) {
+ builder.addStringVariable(
+ BITCODE_SYMBOL_MAP_PATH_VARAIBLE_NAME, bitcodeSymbolMap.getExecPathString());
+ }
+
/** A Builder for {@link ObjcVariablesExtension}. */
static class Builder {
private RuleContext ruleContext;
@@ -244,6 +257,7 @@ class ObjcVariablesExtension implements VariablesExtension {
private DsymOutputType dsymOutputType;
private Artifact dsymBundleZip;
private Artifact linkmap;
+ private Artifact bitcodeSymbolMap;
private final ImmutableSet.Builder<VariableCategory> activeVariableCategoriesBuilder =
ImmutableSet.builder();
@@ -332,6 +346,12 @@ class ObjcVariablesExtension implements VariablesExtension {
return this;
}
+ /** Sets the Artifact for the bitcode symbol map. */
+ public Builder setBitcodeSymbolMap(Artifact bitcodeSymbolMap) {
+ this.bitcodeSymbolMap = bitcodeSymbolMap;
+ return this;
+ }
+
public ObjcVariablesExtension build() {
ImmutableSet<VariableCategory> activeVariableCategories =
@@ -359,6 +379,9 @@ class ObjcVariablesExtension implements VariablesExtension {
if (activeVariableCategories.contains(VariableCategory.LINKMAP_VARIABLES)) {
Preconditions.checkNotNull(linkmap, "missing linkmap artifact");
}
+ if (activeVariableCategories.contains(VariableCategory.BITCODE_VARIABLES)) {
+ Preconditions.checkNotNull(bitcodeSymbolMap, "missing bitcode symbol map artifact");
+ }
return new ObjcVariablesExtension(
ruleContext,
@@ -374,7 +397,8 @@ class ObjcVariablesExtension implements VariablesExtension {
activeVariableCategories,
dsymOutputType,
dsymBundleZip,
- linkmap);
+ linkmap,
+ bitcodeSymbolMap);
}
}
}