From bace06fe9f027d67bc00a4a621346929a3267a51 Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Tue, 3 Apr 2018 15:22:55 -0700 Subject: [PATCH] java_grpc_library: Add support for protobuf lite gRPC's protobuf-lite auto-selects between full and lite protobuf based on the value of crosstool_top. If the user is specifying their own --android_crosstool_top, then it will not auto-detect correctly. One day, platforms will fix problems like this, but for the moment it seems we get to live with it. --- java_grpc_library.bzl | 9 +++++---- protobuf-lite/BUILD.bazel | 22 +++++++++++++++++----- protobuf/BUILD.bazel | 2 +- repositories.bzl | 12 ++++++++++++ 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/java_grpc_library.bzl b/java_grpc_library.bzl index 2a8abb12dc..bd3f9b769e 100644 --- a/java_grpc_library.bzl +++ b/java_grpc_library.bzl @@ -109,14 +109,15 @@ def java_grpc_library(name, srcs, deps, flavor=None, added_deps = [ "@io_grpc_grpc_java//core", "@io_grpc_grpc_java//stub", - "@io_grpc_grpc_java//protobuf", "@com_google_guava_guava//jar", ] if flavor == "normal": - added_deps += ["@com_google_protobuf//:protobuf_java"] + added_deps += [ + "@com_google_protobuf//:protobuf_java", + "@io_grpc_grpc_java//protobuf", + ] elif flavor == "lite": - # TODO: This is currently blocked on https://github.com/google/protobuf/issues/2762 - added_deps += ["@com_google_protobuf_java_lite//:protobuf_java_lite"] + added_deps += ["@io_grpc_grpc_java//protobuf-lite"] else: fail("Unknown flavor type", "flavor") diff --git a/protobuf-lite/BUILD.bazel b/protobuf-lite/BUILD.bazel index 99e3a56cbc..cd97b07476 100644 --- a/protobuf-lite/BUILD.bazel +++ b/protobuf-lite/BUILD.bazel @@ -1,14 +1,26 @@ java_library( - name = "protobuf_lite", + name = "protobuf-lite", srcs = glob([ "src/main/java/**/*.java", ]), - # TOOD(zdapeng): fix visibility and deps (https://github.com/google/protobuf/issues/2762) - visibility = ["//protobuf:__pkg__"], + visibility = ["//visibility:public"], deps = [ "//core", "@com_google_code_findbugs_jsr305//jar", "@com_google_guava_guava//jar", - "@com_google_protobuf//:protobuf_java", - ], + ] + select({ + ":android": ["@com_google_protobuf_javalite//:protobuf_java_lite"], + "//conditions:default": ["@com_google_protobuf//:protobuf_java"], + }), +) + +# This config is not fully-reliable. If it breaks, it is probably because you +# are changing --android_crosstool_top. Instead of doing that, you can bind +# your own toolchain on top of the default android/crosstool, as mentioned at +# https://github.com/bazelbuild/bazel/issues/3924#issuecomment-338704582 +config_setting( + name = "android", + values = { + "crosstool_top": "//external:android/crosstool", + }, ) diff --git a/protobuf/BUILD.bazel b/protobuf/BUILD.bazel index ea611308d9..1c583ef0ac 100644 --- a/protobuf/BUILD.bazel +++ b/protobuf/BUILD.bazel @@ -6,7 +6,7 @@ java_library( visibility = ["//visibility:public"], deps = [ "//core", - "//protobuf-lite:protobuf_lite", + "//protobuf-lite", "@com_google_api_grpc_proto_google_common_protos//jar", "@com_google_code_findbugs_jsr305//jar", "@com_google_guava_guava//jar", diff --git a/repositories.bzl b/repositories.bzl index 857063b6ef..3329d09c69 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -9,6 +9,7 @@ def grpc_java_repositories( omit_com_google_guava=False, omit_com_google_protobuf=False, omit_com_google_protobuf_java=False, + omit_com_google_protobuf_javalite=False, omit_com_google_protobuf_nano_protobuf_javanano=False, omit_com_google_truth_truth=False, omit_com_squareup_okhttp=False, @@ -45,6 +46,8 @@ def grpc_java_repositories( com_google_protobuf() if omit_com_google_protobuf_java: fail("omit_com_google_protobuf_java is no longer supported and must be not be passed to grpc_java_repositories()") + if not omit_com_google_protobuf_javalite: + com_google_protobuf_javalite() if not omit_com_google_protobuf_nano_protobuf_javanano: com_google_protobuf_nano_protobuf_javanano() if not omit_com_google_truth_truth: @@ -146,6 +149,15 @@ def com_google_protobuf(): urls = ["https://github.com/google/protobuf/archive/v3.5.1.zip"], ) +def com_google_protobuf_javalite(): + # java_lite_proto_library rules implicitly depend on @com_google_protobuf_javalite + native.http_archive( + name = "com_google_protobuf_javalite", + sha256 = "d8a2fed3708781196f92e1e7e7e713cf66804bd2944894401057214aff4f468e", + strip_prefix = "protobuf-5e8916e881c573c5d83980197a6f783c132d4276", + urls = ["https://github.com/google/protobuf/archive/5e8916e881c573c5d83980197a6f783c132d4276.zip"], + ) + def com_google_protobuf_nano_protobuf_javanano(): native.maven_jar( name = "com_google_protobuf_nano_protobuf_javanano",