diff options
author | cpeyser <cpeyser@google.com> | 2017-04-14 22:47:47 +0200 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2017-04-18 11:28:13 +0200 |
commit | 0334cd446bb2fde1a6ee53525d463abd8bab2631 (patch) | |
tree | 22809c7853c21b003a52d1e83996692cacf4215d /src/main/java/com/google/devtools/build/lib/rules/objc | |
parent | f87b7080a399906bdf9b3a1ecdf8694eca22498e (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.java | 14 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java | 30 |
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); } } } |