diff options
author | Hadrien Zalek <hzalek@google.com> | 2020-05-26 21:51:30 -0700 |
---|---|---|
committer | Hadrien Zalek <hzalek@google.com> | 2020-06-03 00:22:23 -0700 |
commit | 2d04a324870582b87e05dbffbe9fe0d77dab1cf1 (patch) | |
tree | 04652f0b6ae382f635cc5565422cdb1a146a7c75 | |
parent | 830181d779c33ae6b8a04ab428974bc0752c62b2 (diff) | |
download | grpc-grpc-java-2d04a324870582b87e05dbffbe9fe0d77dab1cf1.tar.gz |
Build the gRPC Java library from source
Build the library from source since the imported prebuilts are
inconsistent and incomplete. For starters, the source is that of version
1.15.0 but the imported jars are those of version 1.14.0.
More importantly the grpc-java-protobuf library depends on the
grpc-java-protobuf-lite library that is not prebuilt. This causes
runtime errors due to missing symbols that should have been caught at
compile-time.
The Soong build modules follow the upstream Bazel rules as closely as
possible. Note that some static libraries were added to the grpc-java to
maintain compatibility with other rules that depend on it since the
original prebuilt grpc-java-core jar contained all sources under core/
which is not how the library is built using Bazel.
Test: m grpc-java
Test: Diffed the entries between the old and new jars
Bug: 148404241
Change-Id: I060333a68848272d5d9e09c040c1e35451a408c6
-rw-r--r-- | Android.bp | 12 | ||||
-rw-r--r-- | annotation-stubs/Android.bp | 38 | ||||
-rwxr-xr-x | annotation-stubs/gen_annotations.py | 56 | ||||
-rw-r--r-- | core/Android.bp | 59 | ||||
-rw-r--r-- | core/grpc-core-1.14.0.jar | bin | 696875 -> 0 bytes | |||
-rw-r--r-- | protobuf-lite/Android.bp | 28 | ||||
-rw-r--r-- | protobuf/Android.bp | 18 | ||||
-rw-r--r-- | protobuf/grpc-protobuf-1.14.0.jar | bin | 4870 -> 0 bytes |
8 files changed, 199 insertions, 12 deletions
diff --git a/Android.bp b/Android.bp index 67278a936..f7835ef33 100644 --- a/Android.bp +++ b/Android.bp @@ -17,10 +17,14 @@ java_library_host { name: "grpc-java", static_libs: [ + "grpc-java-context", "grpc-java-core", - "grpc-java-context", - "grpc-java-protobuf", - "grpc-java-stub", - "grpc-java-netty-shaded", + "grpc-java-core-inprocess", + "grpc-java-core-internal", + "grpc-java-core-util", + "grpc-java-netty-shaded", + "grpc-java-protobuf", + "grpc-java-protobuf-lite", + "grpc-java-stub", ] } diff --git a/annotation-stubs/Android.bp b/annotation-stubs/Android.bp new file mode 100644 index 000000000..32d177a81 --- /dev/null +++ b/annotation-stubs/Android.bp @@ -0,0 +1,38 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +java_library_host { + name: "grpc-java-annotation-stubs", + srcs: [ + ":grpc-java-annotation-stubs-srcjar", + ], +} + +gensrcs { + name: "grpc-java-annotation-stubs-srcjar", + tool_files: [ + "gen_annotations.py", + ], + tools: [ + "soong_zip", + ], + cmd: "$(location gen_annotations.py) $(genDir)/java && " + + "$(location soong_zip) -jar -o $(out) -C $(genDir)/java -D $(genDir)/java", + srcs: [ + // A dummy source file since Soong crashes otherwise. + "Android.bp", + ], + output_extension: "srcjar", +} diff --git a/annotation-stubs/gen_annotations.py b/annotation-stubs/gen_annotations.py new file mode 100755 index 000000000..10c33fa7d --- /dev/null +++ b/annotation-stubs/gen_annotations.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2020 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Generates stubs for annotations that aren't in the Android source tree.""" + +import pathlib +import string +import sys + +_ANNOTATIONS_CLASSES = ['org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement'] + +_CLASS_TEMPLATE = string.Template(""" +package ${package_name}; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ + ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, + ElementType.FIELD, + ElementType.LOCAL_VARIABLE, + ElementType.METHOD, + ElementType.PACKAGE, + ElementType.PARAMETER, + ElementType.TYPE, + ElementType.TYPE_PARAMETER, + ElementType.TYPE_USE}) +@Retention(RetentionPolicy.SOURCE) +public @interface ${class_name} {} +""") + +if __name__ == '__main__': + out_dir = pathlib.Path(sys.argv[1]) + + for c in _ANNOTATIONS_CLASSES: + parts = c.split('.') + src_path = out_dir.joinpath(*parts).with_suffix('.java') + src_path.parent.mkdir(parents=True) + src_path.write_text( + _CLASS_TEMPLATE.substitute( + package_name='.'.join(parts[:-1]), class_name=parts[-1])) diff --git a/core/Android.bp b/core/Android.bp index 1d7d87ebd..ed371b0d0 100644 --- a/core/Android.bp +++ b/core/Android.bp @@ -12,12 +12,63 @@ // See the License for the specific language governing permissions and // limitations under the License. // -// TODO: build from source instead -java_import_host { +java_library_host { name: "grpc-java-core", - jars: [ - "grpc-core-1.14.0.jar", + srcs: [ + "src/main/java/io/grpc/*.java", + ], + java_resource_dirs: [ + "src/main/resources", + ], + libs: [ + "grpc-java-context", + "jsr305", + "guava", ], } +java_library_host { + name: "grpc-java-core-inprocess", + srcs: [ + "src/main/java/io/grpc/inprocess/*.java", + ], + libs: [ + "grpc-java-core", + "grpc-java-core-internal", + "grpc-java-context", + "jsr305", + "guava", + ], +} + +java_library_host { + name: "grpc-java-core-internal", + srcs: [ + "src/main/java/io/grpc/internal/*.java", + ], + libs: [ + "grpc-java-annotation-stubs", + "grpc-java-core", + "grpc-java-context", + "jsr305", + "gson-prebuilt-jar", + "error_prone_annotations", + "guava", + "opencensus-java-api", + "opencensus-java-contrib-grpc-metrics", + ], +} + +java_library_host { + name: "grpc-java-core-util", + srcs: [ + "src/main/java/io/grpc/util/*.java", + ], + libs: [ + "grpc-java-core", + "grpc-java-core-internal", + "jsr305", + "guava", + ], +} diff --git a/core/grpc-core-1.14.0.jar b/core/grpc-core-1.14.0.jar Binary files differdeleted file mode 100644 index 4057e1a17..000000000 --- a/core/grpc-core-1.14.0.jar +++ /dev/null diff --git a/protobuf-lite/Android.bp b/protobuf-lite/Android.bp new file mode 100644 index 000000000..a8374f5be --- /dev/null +++ b/protobuf-lite/Android.bp @@ -0,0 +1,28 @@ +// Copyright (C) 2020 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// + +java_library_host { + name: "grpc-java-protobuf-lite", + srcs: [ + "src/main/java/**/*.java", + ], + libs: [ + "grpc-java-core", + "guava", + "jsr305", + "libprotobuf-java-full", + ], +} diff --git a/protobuf/Android.bp b/protobuf/Android.bp index cec1d76aa..3e1d243f9 100644 --- a/protobuf/Android.bp +++ b/protobuf/Android.bp @@ -13,10 +13,20 @@ // See the License for the specific language governing permissions and // limitations under the License. // -// TODO: Build from source instead -java_import_host { +// + +java_library_host { name: "grpc-java-protobuf", - jars: [ - "grpc-protobuf-1.14.0.jar", + srcs: [ + "src/main/java/**/*.java", + ], + libs: [ + "grpc-java-core", + "grpc-java-protobuf-lite", + "com.google.api.grpc_proto-google-common-protos-prebuilt-jar", + "jsr305", + "guava", + "libprotobuf-java-full", + "libprotobuf-java-util-full", ], } diff --git a/protobuf/grpc-protobuf-1.14.0.jar b/protobuf/grpc-protobuf-1.14.0.jar Binary files differdeleted file mode 100644 index c9bad6938..000000000 --- a/protobuf/grpc-protobuf-1.14.0.jar +++ /dev/null |