Git Product home page Git Product logo

Comments (5)

pcj avatar pcj commented on August 18, 2024

Looping in @hochhaus (bazelbuild/rules_closure#89) for possible review.

from rules_protobuf.

hochhaus avatar hochhaus commented on August 18, 2024

@pcj What are your goals for this project? Are you looking for full gRPC support or just basic go protobuf support for interop with rules_closure style JS?

If the latter, it might be easier to use a very light weight stub. For example, I'm using:

ahochhaus@ahochhaus-pc:~/ll$ cat go_proto_library.bzl 
load("@io_bazel_rules_go//go:def.bzl", "go_library")

def go_proto_library(
    name,
    srcs,
    visibility = None,
    testonly = 0,
    protoc = Label("@io_bazel_rules_closure//third_party/protobuf:protoc_bin"),
    protoc_gen_go = Label("@com_github_golang_protobuf//:protoc_gen_go")):
  cmd = [
    "$(location %s)" % protoc,
    "--plugin=protoc-gen-go=$(location %s)" % protoc_gen_go,
    "--go_out=$(GENDIR)",
  ]
  cmd += ["$(location " + src + ")" for src in srcs]

  go_srcs = [src.rsplit('.', 1)[0] + ".pb.go" for src in srcs]

  native.genrule(
      name = name + "_gen",
      srcs = srcs,
      testonly = testonly,
      visibility = visibility,
      message = "Generating Go Protocol Buffer file",
      outs = go_srcs,
      tools = [protoc, protoc_gen_go],
      cmd = " ".join(cmd),
  )

  go_library(
      name = name,
      srcs = go_srcs,
      deps = [
          str(Label("@com_github_golang_protobuf//:proto")),
      ],
  )

with a BUILD file that looks like

...

load("//:go_proto_library.bzl", "go_proto_library")

...

go_proto_library(
    name = "pb",
    srcs = ["pb/pb.proto"],
)

and then importing that package in go with:

import "<prefix>/pb"

(Obviously name it something better than "pb".)

I'm hesitant to put much time into a code review until we have a plan for where it can be upstreamed for general use. For example, if @yugui would consider accepting go_proto_library support in rules_go then I would happily send a change.

However, based upon bazelbuild/rules_closure#89 I think all of the bazel protobuf support will land in upstream protobuf eventually. So I'm not sure if it makes sense to store in rules_go for the time being.

What are your thoughts Yuki Yugui Sonoda?

from rules_protobuf.

pcj avatar pcj commented on August 18, 2024

Thanks @hochhaus. My goal is ultimately to provide comprehensive protobuf support for multiple languages, with gRPC support. Based on my review of sources in getting this started, it's a highly fragmented area given the diversity of tools and existing build infrastructures.

As for golang, I'm still getting my head around how package names, import statements, go_prefix, and go_library all interact. Specifically, the protoc-gen-go plugin has this concept of an ImportMap that is exposed via the option format --go_out=Mfoo=bar:dirname.

It's not too hard to generate the *.pb.go files, but have not been able to line it all up to get those files to compile in a different source file that imports them.

from rules_protobuf.

pcj avatar pcj commented on August 18, 2024

Andy @hochhaus if you send email to [email protected] I will cc: you on email thread with @yugui.

from rules_protobuf.

pcj avatar pcj commented on August 18, 2024

Note: golang support is now provided, but there are some limitations. See #4.

from rules_protobuf.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.