diff options
author | 2017-03-27 22:41:02 +0000 | |
---|---|---|
committer | 2017-03-28 19:49:14 +0000 | |
commit | 47e52357d4b339cafe383945c25964d470700915 (patch) | |
tree | 1db782cfdd34217f32121b38ced2ec99ce0110f3 /src/main/java/com/google | |
parent | bf0b990f5c00b9fb3d60f1c54956f4a22cabc687 (diff) |
A flag to control the outputs that cc_proto_library expects from proto-compiler.
--
PiperOrigin-RevId: 151381769
MOS_MIGRATED_REVID=151381769
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java | 24 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java | 59 |
2 files changed, 55 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java index 8abcaef9d8..b7395a914c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java @@ -145,6 +145,7 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect this.supportData = supportData; this.cppSemantics = cppSemantics; FeatureConfiguration featureConfiguration = getFeatureConfiguration(supportData); + ProtoConfiguration protoConfiguration = ruleContext.getFragment(ProtoConfiguration.class); CcLibraryHelper helper = initializeCcLibraryHelper(featureConfiguration); helper.addDeps(ruleContext.getPrerequisites("deps", TARGET)); @@ -155,8 +156,10 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect registerBlacklistedSrcs(supportData, helper); headerProvider = null; } else if (supportData.hasProtoSources()) { - Collection<Artifact> headers = getHeaders(supportData); - Collection<Artifact> sources = getSources(supportData); + Collection<Artifact> headers = + getOutputFiles(supportData, protoConfiguration.ccProtoLibraryHeaderSuffixes()); + Collection<Artifact> sources = + getOutputFiles(supportData, protoConfiguration.ccProtoLibrarySourceSuffixes()); outputs.addAll(headers); outputs.addAll(sources); @@ -245,14 +248,15 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect ruleContext, ruleContext.getPrerequisite(":cc_toolchain", TARGET)); } - private Collection<Artifact> getHeaders(SupportData supportData) { - return ProtoCommon.getGeneratedOutputs( - ruleContext, supportData.getDirectProtoSources(), ".pb.h"); - } - - private Collection<Artifact> getSources(SupportData supportData) { - return ProtoCommon.getGeneratedOutputs( - ruleContext, supportData.getDirectProtoSources(), ".pb.cc"); + private ImmutableSet<Artifact> getOutputFiles( + SupportData supportData, Iterable<String> suffixes) { + ImmutableSet.Builder<Artifact> result = ImmutableSet.builder(); + for (String suffix : suffixes) { + result.addAll( + ProtoCommon.getGeneratedOutputs( + ruleContext, supportData.getDirectProtoSources(), suffix)); + } + return result.build(); } private void registerBlacklistedSrcs(SupportData supportData, CcLibraryHelper helper) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java index 36b1785e6a..83faa0783e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.common.options.Converters; import com.google.devtools.common.options.Option; import java.util.List; @@ -111,6 +112,24 @@ public class ProtoConfiguration extends Fragment { public StrictDepsMode strictProtoDeps; @Option( + name = "cc_proto_library_header_suffixes", + defaultValue = ".pb.h", + category = "semantics", + help = "Sets the prefixes of header files that a cc_proto_library creates.", + converter = Converters.CommaSeparatedOptionListConverter.class + ) + public List<String> ccProtoLibraryHeaderSuffixes; + + @Option( + name = "cc_proto_library_source_suffixes", + defaultValue = ".pb.cc", + category = "semantics", + help = "Sets the prefixes of source files that a cc_proto_library creates.", + converter = Converters.CommaSeparatedOptionListConverter.class + ) + public List<String> ccProtoLibrarySourceSuffixes; + + @Option( name = "reuseJavaCompileActionsFromProtoLibrary", defaultValue = "true", category = "experimental", @@ -129,6 +148,8 @@ public class ProtoConfiguration extends Fragment { host.protoToolchainForJavaLite = protoToolchainForJavaLite; host.protoToolchainForCc = protoToolchainForCc; host.strictProtoDeps = strictProtoDeps; + host.ccProtoLibraryHeaderSuffixes = ccProtoLibraryHeaderSuffixes; + host.ccProtoLibrarySourceSuffixes = ccProtoLibrarySourceSuffixes; return host; } } @@ -154,22 +175,16 @@ public class ProtoConfiguration extends Fragment { } } - private final boolean experimentalProtoExtraActions; private final ImmutableList<String> protocOpts; - private final Label protoCompiler; - private final Label protoToolchainForJava; - private final Label protoToolchainForJavaLite; - private final Label protoToolchainForCc; - private final StrictDepsMode strictProtoDeps; + private final ImmutableList<String> ccProtoLibraryHeaderSuffixes; + private final ImmutableList<String> ccProtoLibrarySourceSuffixes; + private final Options options; public ProtoConfiguration(Options options) { - this.experimentalProtoExtraActions = options.experimentalProtoExtraActions; this.protocOpts = ImmutableList.copyOf(options.protocOpts); - this.protoCompiler = options.protoCompiler; - this.protoToolchainForJava = options.protoToolchainForJava; - this.protoToolchainForJavaLite = options.protoToolchainForJavaLite; - this.protoToolchainForCc = options.protoToolchainForCc; - this.strictProtoDeps = options.strictProtoDeps; + this.ccProtoLibraryHeaderSuffixes = ImmutableList.copyOf(options.ccProtoLibraryHeaderSuffixes); + this.ccProtoLibrarySourceSuffixes = ImmutableList.copyOf(options.ccProtoLibrarySourceSuffixes); + this.options = options; } public ImmutableList<String> protocOpts() { @@ -182,26 +197,34 @@ public class ProtoConfiguration extends Fragment { * proto_library target are run. */ public boolean runExperimentalProtoExtraActions() { - return experimentalProtoExtraActions; + return options.experimentalProtoExtraActions; } public Label protoCompiler() { - return protoCompiler; + return options.protoCompiler; } public Label protoToolchainForJava() { - return protoToolchainForJava; + return options.protoToolchainForJava; } public Label protoToolchainForJavaLite() { - return protoToolchainForJavaLite; + return options.protoToolchainForJavaLite; } public Label protoToolchainForCc() { - return protoToolchainForCc; + return options.protoToolchainForCc; } public StrictDepsMode strictProtoDeps() { - return strictProtoDeps; + return options.strictProtoDeps; + } + + public List<String> ccProtoLibraryHeaderSuffixes() { + return ccProtoLibraryHeaderSuffixes; + } + + public List<String> ccProtoLibrarySourceSuffixes() { + return ccProtoLibrarySourceSuffixes; } } |