README
¶
rules_protobuf
(αlpha) 
Bazel skylark rules for building protocol buffers on (macosx, linux).
![]() |
![]() |
![]() |
---|---|---|
Bazel | rules_protobuf | gRPC |
Language | Compile (1) | Build (2) | gRPC (3) |
---|---|---|---|
C++ | cc_proto_compile | cc_proto_library | yes |
C# | |||
Go | go_proto_compile | go_proto_library | yes |
Java | java_proto_compile | java_proto_library | yes |
JavaNano | android_proto_compile | android_proto_library | yes |
Javascript | |||
Objective-C | |||
Python | yes | ||
Ruby |
- Support for generation of protobuf classes via the
protoc
tool. - Support for generation + compilation of outputs with protobuf dependencies.
- gRPC support via the
with_grpc
flag.
Requirements
These are build rules for bazel. If you have not already
installed bazel
on your workstation, follow the
bazel instructions. Here's one way (osx):
Note about protoc and related tools: bazel and rules_protobuf will download or build-from-source all required dependencies, including the
protoc
tool and required plugins. If you do already have these tools installed, bazel will not use them.
$ curl -O -J -L https://github.com/bazelbuild/bazel/releases/download/0.3.1/bazel-0.3.1-installer-darwin-x86_64.sh
$ shasum -a256 bazel-0.3.1-installer-darwin-x86_64.sh
8d035de9c137bde4f709e3666271af01d1ef6bed6921e1a676d6a6dc0186395c bazel-0.3.1-installer-darwin-x86_64.sh
$ chmod +x bazel-0.3.1-installer-darwin-x86_64.sh
$ ./bazel-0.3.1-installer-darwin-x86_64.sh
$ bazel version
Build label: 0.3.1
...
Note about golang: this project uses rules-go for
go_library
,go_binary
, andgo_test
.
Quick Start
Require these rules your WORKSPACE
:
git_repository(
name = "org_pubref_rules_protobuf",
remote = "https://github.com/pubref/rules_protobuf",
tag = "0.3.0",
)
Trigger loading of external dependencies. Specify the language(s) you'd like support for.
load("@org_pubref_rules_protobuf//bzl:rules.bzl", "protobuf_dependencies")
protobuf_dependencies(
with_go = True,
with_java = True,
with_cpp = True,
with_grpc = True,
)
Note: refer to the bzl/repositories.bzl file for the set of external dependencies that will be loaded into your project.
Build a java-based gRPC library:
load("@org_pubref_rules_protobuf//bzl:java/rules.bzl", "java_proto_library")
java_proto_library(
name = "protolib",
srcs = ["my.proto"],
with_grpc = True,
)
Examples
To run the examples & tests in this repository, clone it to your workstation.
# Clone this repo
$ git clone https://github.com/pubref/rules_protobuf
# Go to examples/helloworld directory
$ cd rules_protobuf/examples/helloworld
# Run all tests
$ bazel test ...
# Build a server
$ bazel build cpp/server
# Run a server from the command-line
$ $(bazel info bazel-bin)/examples/helloworld/cpp/server
# Run a client
$ bazel run go/client
$ bazel run cpp/client
$ bazel run java/org/pubref/rules_closure/examples/helloworld/client:netty
Overriding Dependencies
To load alternate versions of dependencies, pass in a dict
having
the same overall structure of the repositories.bzl
file. Entries having a matching key will override those found in the
file. For example, to load a different version of
https://github.com/golang/protobuf, provide a different commit ID:
load("@org_pubref_rules_protobuf//bzl:rules.bzl", "protobuf_dependencies")
protobuf_dependencies(
with_go = True,
overrides = {
"com_github_golang_protobuf": {
"commit": "2c1988e8c18d14b142c0b472624f71647cf39adb", # Aug 8, 2016
}
},
)
Contributing
Contributions welcome; please create Issues or GitHub pull requests.
Credits
-
@yugui: Primary source for the go support from grpc-gateway.
-
@mzhaom: Primary source for the skylark rule (from https://github.com/mzhaom/trunk/blob/master/third_party/grpc/grpc_proto.bzl).
-
@jart: Overall repository structure and bazel code layout (based on rules_closure).
-
Much thanks to all the members of the bazel, protobuf, and gRPC teams.