Fix p4runtime runtime dependencies when building with Bazel
A convenient macro for packaging together all proto and gRPC libraries
in an OSGi jar is provided. Also re-packaging of gRPC core (to avoid OSGi
split problem) is simplified by depending on a patched fork of grpc-java.
Change-Id: Idb79a5bea8ae0bc57b146bda1fc47a4568d12c60
diff --git a/tools/build/bazel/osgi_java_library.bzl b/tools/build/bazel/osgi_java_library.bzl
index 03913f4..0c2c21c 100644
--- a/tools/build/bazel/osgi_java_library.bzl
+++ b/tools/build/bazel/osgi_java_library.bzl
@@ -20,7 +20,12 @@
load("//tools/build/bazel:checkstyle.bzl", "checkstyle_test")
load("//tools/build/bazel:pom_file.bzl", "pom_file")
load("//tools/build/bazel:java_sources.bzl", "java_sources")
+load("//tools/build/bazel:java_sources.bzl", "java_sources_alt")
load("//tools/build/bazel:javadoc.bzl", "javadoc")
+load("@io_grpc_grpc_java//:java_grpc_library.bzl", "java_grpc_library")
+
+def _auto_name():
+ return "onos-" + native.package_name().replace("/", "-")
def _all_java_sources():
return native.glob(["src/main/java/**/*.java"])
@@ -381,7 +386,7 @@
import_packages = None,
bundle_classpath = ""):
if name == None:
- name = "onos-" + native.package_name().replace("/", "-")
+ name = _auto_name()
if srcs == None:
srcs = _all_java_sources()
if resources == None:
@@ -573,3 +578,91 @@
web_context = web_context,
bundle_classpath = bundle_classpath,
)
+
+
+"""
+ Creates an OSGI jar file from a set of protobuf and gRPC libraries.
+
+ Args:
+ name: Name of the rule to generate. Optional, defaults to a name based on the location in the source tree.
+ For example apps/mcast/app becomes onos-apps-mcast-app
+ proto_libs: (required) list of proto_library targets which generated Java classes will be included to this OSGi
+ jar. It is important that all the given targets reference to a single proto source files, for example
+ only the first 2 rules are good:
+
+ proto_library(
+ name = "foo_proto",
+ srcs = ["foo.proto"],
+ )
+
+ proto_library(
+ name = "bar_proto",
+ srcs = ["bar.proto"],
+ )
+
+ # THIS WILL NOT WORK
+ proto_library(
+ name = "foo_and_bar_proto",
+ srcs = ["foo.proto", "bar.proto"],
+ )
+
+ grpc_proto_lib: (optional) proto_library target that contains the schema of a gRPC service. If not passed,
+ the produced jar will NOT have any gRPC stub classes.
+ deps: Dependencies of the generated jar file. Expressed as a list of targets
+ group: Maven group ID for the resulting jar file. Optional, defaults to 'org.onosproject'
+ visibility: Visibility of the produced jar file to other BUILDs. Optional, defaults to public
+ version: Version of the generated jar file. Optional, defaults to the current ONOS version
+"""
+
+def osgi_proto_jar(
+ proto_libs,
+ grpc_proto_lib = None,
+ name = None,
+ deps = [],
+ group = "org.onosproject",
+ visibility = ["//visibility:public"],
+ version = ONOS_VERSION
+ ):
+ if name == None:
+ name = _auto_name()
+ native.java_proto_library(
+ name = name + "-java-proto",
+ deps = proto_libs,
+ )
+ java_sources_alt(
+ name = name + "-proto-srcjar",
+ srcs = [":%s-java-proto" % name],
+ )
+ osgi_srcs = [
+ ":%s-proto-srcjar" % name,
+ ]
+ base_deps = [
+ "@com_google_protobuf//:protobuf_java",
+ ]
+ if grpc_proto_lib != None:
+ grpc_java_lib = name + "-java-grpc"
+ java_grpc_library(
+ name = name + "-java-grpc",
+ srcs = [grpc_proto_lib],
+ deps = [":%s-java-proto" % name],
+ )
+ osgi_srcs.append(
+ ":%s-java-grpc__do_not_reference__srcjar" % name
+ )
+ base_deps.extend([
+ "@com_google_guava_guava//jar",
+ "@io_grpc_grpc_java//core",
+ "@io_grpc_grpc_java//stub",
+ "@io_grpc_grpc_java//protobuf",
+ ])
+ osgi_jar(
+ name = name,
+ srcs = osgi_srcs,
+ deps = base_deps + deps,
+ group = group,
+ visibility = visibility,
+ version = version,
+ suppress_errorprone = True,
+ suppress_checkstyle = True,
+ suppress_javadocs = True,
+ )