aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHadrien Zalek <hzalek@google.com>2020-05-26 21:51:30 -0700
committerHadrien Zalek <hzalek@google.com>2020-06-03 00:22:23 -0700
commit2d04a324870582b87e05dbffbe9fe0d77dab1cf1 (patch)
tree04652f0b6ae382f635cc5565422cdb1a146a7c75
parent830181d779c33ae6b8a04ab428974bc0752c62b2 (diff)
downloadgrpc-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.bp12
-rw-r--r--annotation-stubs/Android.bp38
-rwxr-xr-xannotation-stubs/gen_annotations.py56
-rw-r--r--core/Android.bp59
-rw-r--r--core/grpc-core-1.14.0.jarbin696875 -> 0 bytes
-rw-r--r--protobuf-lite/Android.bp28
-rw-r--r--protobuf/Android.bp18
-rw-r--r--protobuf/grpc-protobuf-1.14.0.jarbin4870 -> 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
deleted file mode 100644
index 4057e1a17..000000000
--- a/core/grpc-core-1.14.0.jar
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index c9bad6938..000000000
--- a/protobuf/grpc-protobuf-1.14.0.jar
+++ /dev/null
Binary files differ