diff options
Diffstat (limited to 'src')
8 files changed, 89 insertions, 38 deletions
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 c9749efa91..b2f18dddaa 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 @@ -589,7 +589,7 @@ public class BazelRuleClassProvider { builder.addRuleDefinition(new ObjcRuleClasses.CompilingRule()); builder.addRuleDefinition(new ObjcRuleClasses.LinkingRule(objcProtoAspect)); builder.addRuleDefinition(new ObjcRuleClasses.PlatformRule()); - builder.addRuleDefinition(new ObjcRuleClasses.MultiArchPlatformRule()); + builder.addRuleDefinition(new ObjcRuleClasses.MultiArchPlatformRule(objcProtoAspect)); builder.addRuleDefinition(new ObjcRuleClasses.ResourcesRule()); builder.addRuleDefinition(new ObjcRuleClasses.AlwaysLinkRule()); builder.addRuleDefinition(new ObjcRuleClasses.SdkFrameworksDependerRule()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinaryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinaryRule.java index bfe8193cce..8537551247 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinaryRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinaryRule.java @@ -77,8 +77,6 @@ public class AppleBinaryRule implements RuleDefinition { */ @Override public RuleClass build(Builder builder, RuleDefinitionEnvironment env) { - MultiArchSplitTransitionProvider splitTransitionProvider = - new MultiArchSplitTransitionProvider(); return builder .requiresConfigurationFragments( ObjcConfiguration.class, @@ -131,8 +129,6 @@ public class AppleBinaryRule implements RuleDefinition { .allowedFileTypes() .singleArtifact() .aspect(objcProtoAspect)) - .override(builder.copy("deps").cfg(splitTransitionProvider)) - .override(builder.copy("non_propagated_deps").cfg(splitTransitionProvider)) /*<!-- #BLAZE_RULE(apple_binary).IMPLICIT_OUTPUTS --> <ul> <li><code><var>name</var>_lipobin</code>: the 'lipo'ed potentially multi-architecture @@ -150,8 +146,7 @@ public class AppleBinaryRule implements RuleDefinition { return RuleDefinition.Metadata.builder() .name("apple_binary") .factoryClass(AppleBinary.class) - .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.LinkingRule.class, - ObjcRuleClasses.MultiArchPlatformRule.class, ObjcRuleClasses.SimulatorRule.class, + .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.MultiArchPlatformRule.class, ObjcRuleClasses.DylibDependingRule.class) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java index 0a32e6124d..f90aa1883e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java @@ -36,7 +36,6 @@ import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo; import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.cpp.CppHelper; -import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes; import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key; import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider; import java.util.List; @@ -204,18 +203,13 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory { List<TransitiveInfoCollection> propagatedDeps, Optional<ObjcProvider> protosObjcProvider) { - CompilationArtifacts compilationArtifacts = - CompilationSupport.compilationArtifacts(ruleContext, intermediateArtifacts); + CompilationArtifacts compilationArtifacts = new CompilationArtifacts.Builder().build(); return new ObjcCommon.Builder(ruleContext, buildConfiguration) .setCompilationAttributes( CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) .setCompilationArtifacts(compilationArtifacts) - .setResourceAttributes(new ResourceAttributes(ruleContext)) - .addDefines(ruleContext.getTokenizedStringListAttr("defines")) .addDeps(propagatedDeps) - .addDepObjcProviders( - ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR)) .addDepObjcProviders(protosObjcProvider.asSet()) .setIntermediateArtifacts(intermediateArtifacts) .setAlwayslink(false) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java index 20bc6656f4..ba57e765e1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java @@ -60,7 +60,6 @@ public class AppleStaticLibraryRule implements RuleDefinition { .requiresConfigurationFragments( ObjcConfiguration.class, J2ObjcConfiguration.class, AppleConfiguration.class, CppConfiguration.class) - .override(builder.copy("deps").cfg(splitTransitionProvider)) /* <!-- #BLAZE_RULE(apple_static_library).ATTRIBUTE(avoid_deps) --> <p>A list of targets which should not be included (nor their transitive dependencies included) in the outputs of this rule -- even if they are otherwise transitively depended @@ -102,8 +101,8 @@ public class AppleStaticLibraryRule implements RuleDefinition { return RuleDefinition.Metadata.builder() .name("apple_static_library") .factoryClass(AppleStaticLibrary.class) - .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.LinkingRule.class, - ObjcRuleClasses.MultiArchPlatformRule.class, ObjcRuleClasses.SimulatorRule.class) + .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.MultiArchPlatformRule.class, + ObjcRuleClasses.SimulatorRule.class) .build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java index 568d007e83..523d23363b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java @@ -34,7 +34,6 @@ import com.google.devtools.build.lib.rules.apple.ApplePlatform; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo; import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs; -import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes; import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider; import java.util.List; import java.util.Map; @@ -168,11 +167,10 @@ public class MultiArchBinarySupport { binariesToLipo.add(intermediateArtifacts.strippedSingleArchitectureBinary()); ObjcProvider objcProvider = dependencySpecificConfiguration.objcLinkProvider(); - CompilationArtifacts compilationArtifacts = - CompilationSupport.compilationArtifacts( - ruleContext, - ObjcRuleClasses.intermediateArtifacts( - ruleContext, dependencySpecificConfiguration.config())); + CompilationArtifacts compilationArtifacts = new CompilationArtifacts.Builder() + .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts( + ruleContext, dependencySpecificConfiguration.config())) + .build(); CompilationSupport compilationSupport = new CompilationSupport.Builder() @@ -260,8 +258,6 @@ public class MultiArchBinarySupport { Iterable<ObjcProvider> additionalDepProviders = Iterables.concat( dylibObjcProviders, - ruleContext.getPrerequisites("bundles", Mode.TARGET, - ObjcProvider.SKYLARK_CONSTRUCTOR), protosObjcProvider.asSet()); ObjcCommon common = @@ -295,15 +291,9 @@ public class MultiArchBinarySupport { List<ObjcProvider> nonPropagatedObjcDeps, Iterable<ObjcProvider> additionalDepProviders) { - CompilationArtifacts compilationArtifacts = - CompilationSupport.compilationArtifacts(ruleContext, intermediateArtifacts); - ObjcCommon.Builder commonBuilder = new ObjcCommon.Builder(ruleContext, buildConfiguration) .setCompilationAttributes( CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) - .setCompilationArtifacts(compilationArtifacts) - .setResourceAttributes(new ResourceAttributes(ruleContext)) - .addDefines(ruleContext.getTokenizedStringListAttr("defines")) .addDeps(propagatedDeps) .addDepObjcProviders(additionalDepProviders) .addNonPropagatedDepObjcProviders(nonPropagatedObjcDeps) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java index c27e52a21d..642b94ac07 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java @@ -937,6 +937,19 @@ public class ObjcRuleClasses { */ public static class MultiArchPlatformRule implements RuleDefinition { + private final ObjcProtoAspect objcProtoAspect; + + public MultiArchPlatformRule(ObjcProtoAspect objcProtoAspect) { + this.objcProtoAspect = objcProtoAspect; + } + + /** + * Rule class names for cc rules which are allowed as targets of the 'deps' attribute of this + * rule. + */ + static final ImmutableSet<String> ALLOWED_CC_DEPS_RULE_CLASSES = + ImmutableSet.of("cc_library", "cc_inc_library"); + @Override public RuleClass build(Builder builder, RuleDefinitionEnvironment env) { MultiArchSplitTransitionProvider splitTransitionProvider = @@ -949,6 +962,57 @@ public class ObjcRuleClasses { attr(CHILD_CONFIG_ATTR, LABEL) .cfg(splitTransitionProvider) .value(ObjcRuleClasses.APPLE_TOOLCHAIN)) + /* <!-- #BLAZE_RULE($apple_multiarch_rule).ATTRIBUTE(deps) --> + The list of targets that are linked together to form the final binary. + <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ + .override( + attr("deps", LABEL_LIST) + .direct_compile_time_input() + .allowedRuleClasses(ALLOWED_CC_DEPS_RULE_CLASSES) + .mandatoryProviders(ObjcProvider.SKYLARK_CONSTRUCTOR.id()) + .cfg(splitTransitionProvider) + .aspect(objcProtoAspect) + .allowedFileTypes()) + /* <!-- #BLAZE_RULE($apple_multiarch_rule).ATTRIBUTE(linkopts) --> + Extra flags to pass to the linker. + <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ + .add(attr("linkopts", STRING_LIST)) + /* <!-- #BLAZE_RULE($apple_multiarch_rule).ATTRIBUTE(non_propagated_deps) --> + The list of targets that are required in order to build this target, + but which are not included in the final binary. + This attribute should only rarely be used, and probably only for proto + dependencies. + <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ + .add( + attr("non_propagated_deps", LABEL_LIST) + .direct_compile_time_input() + .allowedRuleClasses(ALLOWED_CC_DEPS_RULE_CLASSES) + .mandatoryProviders(ObjcProvider.SKYLARK_CONSTRUCTOR.id()) + .cfg(splitTransitionProvider) + .allowedFileTypes()) + .add( + attr("$j2objc_dead_code_pruner", LABEL) + .allowedFileTypes(FileType.of(".py")) + .cfg(HOST) + .exec() + .singleArtifact() + .value(env.getToolsLabel("//tools/objc:j2objc_dead_code_pruner"))) + .add(attr("$dummy_lib", LABEL).value(env.getToolsLabel("//tools/objc:dummy_lib"))) + .add( + attr(PROTO_COMPILER_ATTR, LABEL) + .allowedFileTypes(FileType.of(".sh")) + .cfg(HOST) + .singleArtifact() + .value(env.getToolsLabel("//tools/objc:protobuf_compiler_wrapper"))) + .add( + attr(PROTO_COMPILER_SUPPORT_ATTR, LABEL) + .legacyAllowAnyFileType() + .cfg(HOST) + .value(env.getToolsLabel("//tools/objc:protobuf_compiler_support"))) + .add( + ProtoSourceFileBlacklist.blacklistFilegroupAttribute( + PROTOBUF_WELL_KNOWN_TYPES, + ImmutableList.of(env.getToolsLabel("//tools/objc:protobuf_well_known_types")))) .build(); } @@ -957,7 +1021,8 @@ public class ObjcRuleClasses { return RuleDefinition.Metadata.builder() .name("$apple_multiarch_rule") .type(RuleClassType.ABSTRACT) - .ancestors(PlatformRule.class, CrosstoolRule.class) + .ancestors(PlatformRule.class, CrosstoolRule.class, BaseRuleClasses.RuleBase.class, + XcrunRule.class, SdkFrameworksDependerRule.class, LibtoolRule.class) .build(); } } @@ -983,7 +1048,7 @@ public class ObjcRuleClasses { return builder /* <!-- #BLAZE_RULE($apple_dylib_depending_rule).ATTRIBUTE(dylibs) --> <p>A list of dynamic library targets to be linked against in this rule and included - in the final bundle. Libraries which are transitive dependencies of any such dylibs will + in the final binary. Libraries which are transitive dependencies of any such dylibs will not be statically linked in this target (even if they are otherwise transitively depended on via the <code>deps</code> attribute) to avoid duplicate symbols. <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java index 05130bd7f6..075087231d 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java @@ -399,7 +399,7 @@ public class IosTestTest extends ObjcRuleTestCase { @Test public void testHasDefaultInfoplistForXcTest() throws Exception { - createBinaryTargetWriter("//bin:bin").setAndCreateFiles("srcs", "a.m").write(); + createBinaryTargetWriter("//bin:bin").write(); scratch.file("x/BUILD", "ios_test(", " name = 'x',", @@ -428,7 +428,7 @@ public class IosTestTest extends ObjcRuleTestCase { @Test public void testErrorForNoSources() throws Exception { - createBinaryTargetWriter("//bin:bin").setAndCreateFiles("srcs", "a.m").write(); + createBinaryTargetWriter("//bin:bin").write(); createLibraryTargetWriter("//lib:lib") .setAndCreateFiles("srcs", "a.m", "b.m", "private.h") .setAndCreateFiles("hdrs", "hdr.h") @@ -444,7 +444,7 @@ public class IosTestTest extends ObjcRuleTestCase { private void checkTestScript(Map<String, String> templateArguments, String... extraAttrs) throws Exception { - createBinaryTargetWriter("//bin:bin").setAndCreateFiles("srcs", "a.m").write(); + createBinaryTargetWriter("//bin:bin").write(); scratch.file("x/BUILD", "ios_test(", " name = 'x',", diff --git a/src/test/shell/bazel/apple/bazel_apple_test.sh b/src/test/shell/bazel/apple/bazel_apple_test.sh index 54663bd559..26bedf94ad 100755 --- a/src/test/shell/bazel/apple/bazel_apple_test.sh +++ b/src/test/shell/bazel/apple/bazel_apple_test.sh @@ -135,9 +135,13 @@ cc_library( ) apple_binary( name = "main_binary", + deps = [":main_lib"], + platform_type = "ios", +) +objc_library( + name = "main_lib", deps = [":lib_a", ":lib_b"], srcs = ["main.m"], - platform_type = "ios", ) genrule( name = "lipo_run", @@ -189,9 +193,13 @@ genrule( apple_binary( name = "main_binary", + deps = [":main_lib"], + platform_type = "watchos", +) +objc_library( + name = "main_lib", srcs = ["main.m"], deps = [":lib_a"], - platform_type = "watchos", ) cc_library( name = "cc_lib", |