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 /annotation-stubs | |
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
Diffstat (limited to 'annotation-stubs')
-rw-r--r-- | annotation-stubs/Android.bp | 38 | ||||
-rwxr-xr-x | annotation-stubs/gen_annotations.py | 56 |
2 files changed, 94 insertions, 0 deletions
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])) |