You'd need to download the source code zip and build from there, to get the
necessary include files, as well as building libprotoc and  libprotobuf. As
a quick exercise, I ported my example plugin to C++
https://github.com/thesamet/protoc-plugin-in-cpp  hopefully it's going to
be useful to anyone struggling with this!




On Tue, Nov 27, 2018 at 10:42 PM Michael Powell <[email protected]>
wrote:

> On Wed, Nov 28, 2018 at 1:03 AM Nadav Samet <[email protected]> wrote:
> >
> > In Java, the dependencies you mentioned are provided by Gradle. We pull
> protobuf-java in here.
>
> I see... Been a little while since I dove that deep in any Java
> stacks, so that's a new one to me, but good  to know.
>
> > In C++, the equivalent files would come from descriptor.h which is
> shipped with protobuf sources, and the implementation is provided by
> libprotobuf, which you can build yourself of the sources.
> >
> > The plugin is going to be an executable (.EXE on Windows) file.
>
> Thanks, I appreciate the clarification. I'm not sure which download I
> saw, but it did not include sources, or I downloaded the minimal one.
> If memory serves there was a full source one, so I'll have a look
> there. Thanks!
>
> > On Tue, Nov 27, 2018 at 9:46 PM Michael Powell <[email protected]>
> wrote:
> >>
> >> So...
> >>
> >> You've got a magic set of imports (in Java).
> >>
> >> import com.google.protobuf.DescriptorProtos;
> >> import com.google.protobuf.Descriptors;
> >> import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse;
> >> import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest;
> >>
> >> Where do you get these from?
> >>
> >> Or Assemblies or NuGet Package References in .NET / C#, or
> >> source/libraries, ostensibly, for C/C++.
> >>
> >> This is the question I have in getting started.
> >>
> >> The nearest assumption I could derive is that I start with protoc.exe
> >> (Windows) and the bundled .proto files, "compile" those to target
> >> plugin language, and build them with the project?
> >>
> >> Again, as a what? .DLL? .EXE?
> >>
> >> On Wed, Nov 28, 2018 at 12:31 AM Nadav Samet <[email protected]>
> wrote:
> >> >
> >> > Hi Rahul and Michael,
> >> >
> >> > I put together a basic example of a protoc plugin in Java that
> generates text files: https://github.com/thesamet/protoc-plugin-in-java
> >> >
> >> > The plugin itself is an executable that gets executed by protoc, it
> can be written in any language. In this instance, the plugin is written in
> Java, so we use gradle to generate a shell script (or bat file for windows)
> that protoc will execute to run our plugin inside a JVM. The exact
> instructions to run it are in the provided README.md
> >> >
> >> >
> >> > On Tue, Nov 27, 2018 at 6:01 AM Michael Powell <[email protected]>
> wrote:
> >> >>
> >> >>
> >> >>
> >> >> On Saturday, November 10, 2018 at 5:33:11 PM UTC-5, Nadav Samet
> wrote:
> >> >>>
> >> >>> Michael,
> >> >>>
> >> >>> A protoc plugin is a program that receives a serialized
> CodeGeneratorRequest message via its stdin, and writes a
> CodeGeneratorResponse to its stdout.
> >> >>>
> >> >>> You asked where the CodeGeneratorRequest comes from. The answer is
> that the message is defined here. Assuming your plugin is named
> protoc-gen-boilerplate, then when you invoke protoc like this:
> >> >>> protoc --boilerplate_out=outdir file1.proto [...]
> >> >>>
> >> >>> Then protoc would parse the proto files, prepare a
> CodeGeneratorRequest and pipe it into your plugin. That request object
> contains a representation of all the files you passed in the command line
> as well as the files their transitively import. Your plugin should parse
> the request and print out a serialized CodeGeneratorResponse. Unless you
> set an error message, protoc would create the files you specified in your
> response. The plugin can be written in any language, but if you use some of
> the supported languages (at least C++, Python and Java, but probably
> others), you'll find a method named something like DescriptorPool.BuildFile
> which would convert a FileDescriptorProto to an higher-level object
> (FileDescriptor) which is easier to work with.
> >> >>>
> >> >>> Plugins are pretty simple to write (look online for examples). I
> would advise not writing a parser for proto files manually, since you'll be
> chasing a moving target - over time language features get added albeit not
> very often. It would also be hard to match the language spec perfectly.
> >> >>
> >> >>
> >> >> I guess I am not sure quite where to begin. I've downloaded the
> protoc compiler, which itself has a set of proto files, but no target
> language level generated code.
> >> >>
> >> >> Am I accurate in assuming I run those through protoc itself to my
> target language, in this case I suppose C++?
> >> >>
> >> >> On Windows, what form does the plugin need to take? DLL? Executable
> file?
> >> >>
> >> >> These are the sort of nibblets I think that would make it more
> evident where to pick up and run with it.
> >> >>
> >> >> Examples of this appear to be few and far between, if at all.
> >> >>
> >> >> Absent examples, I am working on a Boost Spirit Qi parser in the
> meantime, which the learning curve is not a plateau, I can agree there.
> It's not terrible to work through, and I end up with an AST that I know
> forwards and backwards without too much extra effort once the rules have
> done their synthetic magic.
> >> >>
> >> >> Cheers, thank you!
> >> >>
> >> >>> On Thursday, November 1, 2018 at 6:14:54 PM UTC-7, Michael Powell
> wrote:
> >> >>>>
> >> >>>> Hello,
> >> >>>>
> >> >>>> I'm a bit confused. I thought I was grasping it earlier, then I
> >> >>>> thought I wasn't ... What is the starting point developing a protoc
> >> >>>> plugin?
> >> >>>>
> >> >>>> What I want to accomplish is processing a .proto (v2) and
> generating
> >> >>>> some C# boilerplate code for it. I'm not generating a proto adapter
> >> >>>> itself, per se, but C# DSL that would be used to support it.
> >> >>>>
> >> >>>> The starting point for me would seem to be receiving the compiler
> >> >>>> request, but that itself is a .proto, which leaves me a bit
> confused.
> >> >>>> Where do you obtain that from? Or are you starting by compiling
> those
> >> >>>> .protos from the bits bundled with the protoc.exe compiler?
> >> >>>>
> >> >>>> What I want is to just have the descriptors drawn from the target
> >> >>>> .proto(s) themselves. That's it. A full-on plugin seems like a
> little
> >> >>>> bit of overkill.
> >> >>>>
> >> >>>> Suggestions?
> >> >>>>
> >> >>>> Thanks so much!
> >> >>>>
> >> >>>> Best regards,
> >> >>>>
> >> >>>> Michael Powell
> >> >>
> >> >> --
> >> >> You received this message because you are subscribed to the Google
> Groups "Protocol Buffers" group.
> >> >> To unsubscribe from this group and stop receiving emails from it,
> send an email to [email protected].
> >> >> To post to this group, send email to [email protected].
> >> >> Visit this group at https://groups.google.com/group/protobuf.
> >> >> For more options, visit https://groups.google.com/d/optout.
> >> >
> >> >
> >> >
> >> > --
> >> > -Nadav
> >>
> >> --
> >> You received this message because you are subscribed to the Google
> Groups "Protocol Buffers" group.
> >> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected].
> >> To post to this group, send email to [email protected].
> >> Visit this group at https://groups.google.com/group/protobuf.
> >> For more options, visit https://groups.google.com/d/optout.
> >
> >
> >
> > --
> > -Nadav
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/protobuf.
> For more options, visit https://groups.google.com/d/optout.
>


-- 
-Nadav

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to