aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2017-09-28 14:36:36 -0400
committerGravatar John Cater <jcater@google.com>2017-09-29 12:14:01 -0400
commit8893c4323f735a0e956b8fab7bff2c9ea53b3706 (patch)
treed3a6c8be2d6e25086f467ae79c05b2d5d5b06a3e /src/main/java
parent6cafc1fdb6aacbc5d15e97245845e7079abb5e1b (diff)
Remove compilation and bundling attributes from apple_binary and apple_static_library.
RELNOTES: apple_binary and apple_static_library no longer support compilation attributes such as 'srcs'. If this breaks any existing targets, you may migrate all such attributes to a new objc_library target and depend on that objc_library target via the 'deps' attribute of apple_binary or apple_static_library. PiperOrigin-RevId: 170373794
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinaryRule.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java69
6 files changed, 76 insertions, 33 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 -->*/