diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java | 81 |
1 files changed, 16 insertions, 65 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java index bddb0a9a85..5a209c878e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java @@ -28,8 +28,6 @@ import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; -import com.google.devtools.build.lib.packages.Attribute.ComputedDefault; -import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; @@ -40,12 +38,9 @@ import com.google.devtools.build.lib.util.FileType; /** * Rule definition for objc_proto_library. * - * This is a temporary rule until it is better known how to support proto_library rules. + * <p>This is a temporary rule until it is better known how to support proto_library rules. */ public class ObjcProtoLibraryRule implements RuleDefinition { - static final String OPTIONS_FILE_ATTR = "options_file"; - static final String USE_OBJC_HEADER_NAMES_ATTR = "use_objc_header_names"; - static final String PER_PROTO_INCLUDES_ATTR = "per_proto_includes"; static final String PORTABLE_PROTO_FILTERS_ATTR = "portable_proto_filters"; static final String USES_PROTOBUF_ATTR = "uses_protobuf"; @@ -54,9 +49,8 @@ public class ObjcProtoLibraryRule implements RuleDefinition { /** * Returns a newly built rule definition for objc_proto_library. * - * @param objcProtoAspect Aspect that traverses the dependency graph through the deps attribute - * to gather all proto files and portable filters depended by - * objc_proto_library targets using the new protobuf compiler/library. + * @param objcProtoAspect Aspect that traverses the dependency graph through the deps attribute to + * gather all proto files and portable filters depended by objc_proto_library targets. */ public ObjcProtoLibraryRule(ObjcProtoAspect objcProtoAspect) { this.objcProtoAspect = objcProtoAspect; @@ -68,33 +62,19 @@ public class ObjcProtoLibraryRule implements RuleDefinition { .requiresConfigurationFragments( CppConfiguration.class, ObjcConfiguration.class, AppleConfiguration.class) /* <!-- #BLAZE_RULE(objc_proto_library).ATTRIBUTE(deps) --> - The directly depended upon proto_library rules. + The directly depended upon proto_library and objc_proto_library rules. <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ .override( attr("deps", LABEL_LIST) - // Support for files in deps is for backwards compatibility. - .allowedRuleClasses("proto_library", "filegroup", "objc_proto_library") + .allowedRuleClasses("proto_library", "objc_proto_library") .aspect(objcProtoAspect) .legacyAllowAnyFileType()) - /* <!-- #BLAZE_RULE(objc_proto_library).ATTRIBUTE(options_file) --> - Optional options file to apply to protos which affects compilation (e.g. class - whitelist/blacklist settings). - <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ - .add(attr(OPTIONS_FILE_ATTR, LABEL).legacyAllowAnyFileType().singleArtifact().cfg(HOST)) - /* <!-- #BLAZE_RULE(objc_proto_library).ATTRIBUTE(use_objc_header_names) --> - If true, output headers with .pbobjc.h, rather than .pb.h. - <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ - .add(attr(USE_OBJC_HEADER_NAMES_ATTR, BOOLEAN).value(false)) - /* <!-- #BLAZE_RULE(objc_proto_library).ATTRIBUTE(per_proto_includes) --> - If true, always add all directories to objc_library includes. - <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ - .add(attr(PER_PROTO_INCLUDES_ATTR, BOOLEAN).value(false)) /* <!-- #BLAZE_RULE(objc_proto_library).ATTRIBUTE(uses_protobuf) --> Whether to use the new protobuf compiler and runtime for this target. If you enable this option without passing portable_proto_filters, it will generate a filter file for all the protos that passed through proto_library targets as deps. <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ - .add(attr(USES_PROTOBUF_ATTR, BOOLEAN).value(false)) + .add(attr(USES_PROTOBUF_ATTR, BOOLEAN).value(true)) /* <!-- #BLAZE_RULE(objc_proto_library).ATTRIBUTE(portable_proto_filters) --> List of portable proto filters to be passed on to the protobuf compiler. This attribute cannot be used together with the options_file, output_cpp, per_proto_includes and @@ -110,42 +90,16 @@ public class ObjcProtoLibraryRule implements RuleDefinition { .allowedFileTypes(FileType.of(".py"), FileType.of(".sh")) .cfg(HOST) .singleArtifact() - .value( - new ComputedDefault(PORTABLE_PROTO_FILTERS_ATTR, USES_PROTOBUF_ATTR) { - @Override - public Object getDefault(AttributeMap rule) { - return usesProtobuf(rule) - ? env.getToolsLabel("//tools/objc:protobuf_compiler_wrapper") - : env.getToolsLabel("//tools/objc:compile_protos"); - } - })) + .value(env.getToolsLabel("//tools/objc:protobuf_compiler_wrapper"))) .add( attr(PROTO_COMPILER_SUPPORT_ATTR, LABEL) .legacyAllowAnyFileType() .cfg(HOST) - .value( - new ComputedDefault(PORTABLE_PROTO_FILTERS_ATTR, USES_PROTOBUF_ATTR) { - @Override - public Object getDefault(AttributeMap rule) { - return usesProtobuf(rule) - ? env.getToolsLabel("//tools/objc:protobuf_compiler_support") - : env.getToolsLabel("//tools/objc:proto_support"); - } - })) + .value(env.getToolsLabel("//tools/objc:protobuf_compiler_support"))) .add( attr(PROTO_LIB_ATTR, LABEL) .allowedRuleClasses("objc_library") - .value( - new ComputedDefault(PORTABLE_PROTO_FILTERS_ATTR, USES_PROTOBUF_ATTR) { - @Override - public Object getDefault(AttributeMap rule) { - if (usesProtobuf(rule)) { - return env.getLabel("//external:objc_protobuf_lib"); - } else { - return env.getLabel("//external:objc_proto_lib"); - } - } - })) + .value(env.getToolsLabel("//tools/objc:protobuf_lib"))) .add( ProtoSourceFileBlacklist.blacklistFilegroupAttribute( PROTOBUF_WELL_KNOWN_TYPES, @@ -159,21 +113,18 @@ public class ObjcProtoLibraryRule implements RuleDefinition { return RuleDefinition.Metadata.builder() .name("objc_proto_library") .factoryClass(ObjcProtoLibrary.class) - .ancestors(BaseRuleClasses.RuleBase.class, ObjcRuleClasses.LibtoolRule.class, - ObjcRuleClasses.XcrunRule.class, ObjcRuleClasses.CrosstoolRule.class) + .ancestors( + BaseRuleClasses.RuleBase.class, + ObjcRuleClasses.LibtoolRule.class, + ObjcRuleClasses.XcrunRule.class, + ObjcRuleClasses.CrosstoolRule.class) .build(); } - - static boolean usesProtobuf(AttributeMap attributes) { - return attributes.isAttributeValueExplicitlySpecified( - ObjcProtoLibraryRule.PORTABLE_PROTO_FILTERS_ATTR) - || attributes.get(ObjcProtoLibraryRule.USES_PROTOBUF_ATTR, BOOLEAN); - } } /*<!-- #BLAZE_RULE (NAME = objc_proto_library, TYPE = LIBRARY, FAMILY = Objective-C) --> -<p>This rule produces a static library from the given proto_library dependencies, after applying an -options file.</p> +<p>This rule generates ObjC headers for the proto files given through the proto_library and +objc_proto_library dependencies.</p> <!-- #END_BLAZE_RULE -->*/ |