From 48e1d5b86c5c32e8b9023518254ac9023c26082f Mon Sep 17 00:00:00 2001 From: Sergio Campama Date: Thu, 9 Mar 2017 23:32:26 +0000 Subject: Adds linkmaps to the AppleDebugOutputsProvider for them to be consumed by dependents. -- PiperOrigin-RevId: 149702529 MOS_MIGRATED_REVID=149702529 --- .../build/lib/bazel/rules/BazelRuleClassProvider.java | 4 ---- .../google/devtools/build/lib/rules/objc/AppleBinary.java | 6 +++++- .../build/lib/rules/objc/AppleDebugOutputsProvider.java | 15 +++++++++++---- .../devtools/build/lib/rules/objc/AppleSkylarkCommon.java | 12 ++++++++++++ .../devtools/build/lib/rules/objc/ObjcConfiguration.java | 7 +++++++ 5 files changed, 35 insertions(+), 9 deletions(-) (limited to 'src/main') diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index f26c1ec44b..658285b6c8 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -125,7 +125,6 @@ import com.google.devtools.build.lib.rules.java.JvmConfigurationLoader; import com.google.devtools.build.lib.rules.java.ProguardLibraryRule; import com.google.devtools.build.lib.rules.java.proto.JavaProtoSkylarkCommon; import com.google.devtools.build.lib.rules.objc.AppleBinaryRule; -import com.google.devtools.build.lib.rules.objc.AppleDebugOutputsProvider; import com.google.devtools.build.lib.rules.objc.AppleSkylarkCommon; import com.google.devtools.build.lib.rules.objc.AppleStaticLibraryRule; import com.google.devtools.build.lib.rules.objc.AppleWatch1ExtensionRule; @@ -633,9 +632,6 @@ public class BazelRuleClassProvider { ObjcProvider.OBJC_SKYLARK_PROVIDER_NAME, ObjcProvider.class); builder.registerSkylarkProvider( XcTestAppProvider.XCTEST_APP_SKYLARK_PROVIDER_NAME, XcTestAppProvider.class); - builder.registerSkylarkProvider( - AppleDebugOutputsProvider.SKYLARK_PROVIDER.getName(), - AppleDebugOutputsProvider.class); builder.addSkylarkAccessibleTopLevels("apple_common", new AppleSkylarkCommon()); builder.addConfig(ObjcCommandLineOptions.class, new ObjcConfigurationLoader()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java index d96d196951..a76d2c509a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java @@ -188,9 +188,13 @@ public class AppleBinary implements RuleConfiguredTargetFactory { Artifact dsymBinary = intermediateArtifacts.dsymSymbol(DsymOutputType.APP); builder.addOutput(arch, OutputType.DSYM_BINARY, dsymBinary); } + if (childObjcConfig.generateLinkmap()) { + Artifact linkmap = intermediateArtifacts.linkmap(); + builder.addOutput(arch, OutputType.LINKMAP, linkmap); + } } - targetBuilder.addProvider(AppleDebugOutputsProvider.class, builder.build()); + targetBuilder.addNativeDeclaredProvider(builder.build()); return targetBuilder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java index 9484a50498..b2cc573f2e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java @@ -49,7 +49,10 @@ public final class AppleDebugOutputsProvider extends SkylarkClassObject BITCODE_SYMBOLS, /** A single-architecture DWARF binary with debug symbols. */ - DSYM_BINARY; + DSYM_BINARY, + + /** A single-architecture linkmap. */ + LINKMAP; @Override public String toString() { @@ -57,8 +60,12 @@ public final class AppleDebugOutputsProvider extends SkylarkClassObject } } - public static final ClassObjectConstructor SKYLARK_PROVIDER = - new NativeClassObjectConstructor("AppleDebugOutputs") { }; + /** Skylark name for the AppleDebugOutputsProvider. */ + public static final String SKYLARK_NAME = "AppleDebugOutputs"; + + /** Skylark constructor and identifier for AppleDebugOutputsProvider. */ + public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR = + new NativeClassObjectConstructor(SKYLARK_NAME) { }; /** * Creates a new provider instance. @@ -76,7 +83,7 @@ public final class AppleDebugOutputsProvider extends SkylarkClassObject * */ private AppleDebugOutputsProvider(ImmutableMap> map) { - super(SKYLARK_PROVIDER, ImmutableMap.of("outputs_map", map)); + super(SKYLARK_CONSTRUCTOR, ImmutableMap.of("outputs_map", map)); } /** A builder for {@link AppleDebugOutputsProvider}. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java index fd9b10bbf0..6bd9554cf9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java @@ -142,6 +142,18 @@ public class AppleSkylarkCommon { return AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR; } + @SkylarkCallable( + name = AppleDebugOutputsProvider.SKYLARK_NAME, + doc = + "Returns the provider constructor for AppleDebugOutputsProvider. If a target propagates " + + "the AppleDebugOutputsProvider provider, use this as the key with which to retrieve " + + "it.", + structField = true + ) + public ClassObjectConstructor getAppleDebugOutputsConstructor() { + return AppleDebugOutputsProvider.SKYLARK_CONSTRUCTOR; + } + @SkylarkCallable( name = AppleLoadableBundleBinaryProvider.SKYLARK_NAME, doc = diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java index ba36850c0c..ec93b71ada 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java @@ -188,6 +188,13 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment { return generateDsym; } + /** + * Returns whether linkmap generation is enabled. + */ + @SkylarkCallable( + name = "generate_linkmap", + doc = "Whether to generate linkmap artifacts.", + structField = true) public boolean generateLinkmap() { return generateLinkmap; } -- cgit v1.2.3