diff --git a/Android.bp b/Android.bp index 120654d6b446..06aa776ed1ea 100644 --- a/Android.bp +++ b/Android.bp @@ -428,66 +428,6 @@ platform_compat_config { src: ":framework-minus-apex", } -gensrcs { - name: "framework-javastream-protos", - depfile: true, - - tools: [ - "aprotoc", - "protoc-gen-javastream", - "soong_zip", - ], - - cmd: "mkdir -p $(genDir)/$(in) " + - "&& $(location aprotoc) " + - " --plugin=$(location protoc-gen-javastream) " + - " --dependency_out=$(depfile) " + - " --javastream_out=$(genDir)/$(in) " + - " -Iexternal/protobuf/src " + - " -I . " + - " $(in) " + - "&& $(location soong_zip) -jar -o $(out) -C $(genDir)/$(in) -D $(genDir)/$(in)", - - srcs: [ - ":ipconnectivity-proto-src", - ":libstats_atom_enum_protos", - ":libtombstone_proto-src", - "core/proto/**/*.proto", - "libs/incident/**/*.proto", - ":service-permission-protos", - ], - output_extension: "srcjar", -} - -gensrcs { - name: "framework-cppstream-protos", - depfile: true, - - tools: [ - "aprotoc", - "protoc-gen-cppstream", - ], - - cmd: "mkdir -p $(genDir) " + - "&& $(location aprotoc) " + - " --plugin=$(location protoc-gen-cppstream) " + - " --dependency_out=$(depfile) " + - " --cppstream_out=$(genDir) " + - " -Iexternal/protobuf/src " + - " -I . " + - " $(in)", - - srcs: [ - ":ipconnectivity-proto-src", - ":libstats_atom_enum_protos", - "core/proto/**/*.proto", - "libs/incident/**/*.proto", - ":service-permission-protos", - ], - - output_extension: "proto.h", -} - filegroup { name: "framework-annotations", srcs: [ @@ -577,180 +517,6 @@ java_library { dxflags: ["--core-library"], } -// ==== java proto host library ============================== -java_library_host { - name: "platformprotos", - srcs: [ - ":ipconnectivity-proto-src", - ":libstats_atom_enum_protos", - ":libstats_internal_protos", - ":statsd_internal_protos", - "cmds/am/proto/instrumentation_data.proto", - "cmds/statsd/src/**/*.proto", - "core/proto/**/*.proto", - "libs/incident/proto/**/*.proto", - ":service-permission-protos", - ], - proto: { - include_dirs: [ - "external/protobuf/src", - "frameworks/proto_logging/stats", - ], - type: "full", - }, - // Protos have lots of MissingOverride and similar. - errorprone: { - javacflags: ["-XepDisableAllChecks"], - }, -} - -// ==== java proto device library (for test only) ============================== -java_library { - name: "platformprotosnano", - proto: { - type: "nano", - output_params: ["store_unknown_fields=true"], - include_dirs: ["external/protobuf/src"], - }, - exclude_srcs: [ - "core/proto/android/privacy.proto", - "core/proto/android/section.proto", - "core/proto/android/typedef.proto", - ], - sdk_version: "9", - srcs: [ - ":ipconnectivity-proto-src", - ":libstats_atom_enum_protos", - "core/proto/**/*.proto", - "libs/incident/proto/android/os/**/*.proto", - ":service-permission-protos", - ], -} - -// ==== java proto device library (for test only) ============================== -java_library { - name: "platformprotoslite", - proto: { - type: "lite", - include_dirs: ["external/protobuf/src"], - }, - - srcs: [ - ":ipconnectivity-proto-src", - ":libstats_atom_enum_protos", - "core/proto/**/*.proto", - "libs/incident/proto/android/os/**/*.proto", - ":service-permission-protos", - ], - exclude_srcs: [ - "core/proto/android/privacy.proto", - "core/proto/android/section.proto", - "core/proto/android/typedef.proto", - ], - sdk_version: "core_current", - // Protos have lots of MissingOverride and similar. - errorprone: { - javacflags: ["-XepDisableAllChecks"], - }, -} - -// ==== c++ proto device library ============================== -cc_defaults { - name: "libplatformprotos-defaults", - - proto: { - export_proto_headers: true, - include_dirs: [ - "external/protobuf/src", - ], - }, - - cflags: [ - "-Wall", - "-Werror", - "-Wno-unused-parameter", - ], - - srcs: [ - ":ipconnectivity-proto-src", - ":libstats_atom_enum_protos", - "core/proto/**/*.proto", - ":service-permission-protos", - ], -} - -cc_library { - name: "libplatformprotos", - defaults: ["libplatformprotos-defaults"], - host_supported: true, - - target: { - host: { - proto: { - type: "full", - }, - }, - android: { - proto: { - type: "lite", - }, - shared_libs: [ - "libprotobuf-cpp-lite", - ], - shared: { - enabled: false, - }, - }, - }, -} - -// This library is meant for vendor code that needs to output protobuf. It links -// against the static version of libprotobuf-cpp-lite, for which we can not guarantee -// binary compatibility. -cc_library { - name: "libplatformprotos-static", - defaults: ["libplatformprotos-defaults"], - host_supported: false, - - // This is okay because this library is only built as a static library. The C++ - // API is not guaranteed. The proto API is guaranteed to be stable via Metrics Council, - // but is not authorized to be used outside of debugging. - vendor_available: true, - - target: { - android: { - proto: { - type: "lite", - }, - static_libs: [ - "libprotobuf-cpp-lite", - ], - shared: { - enabled: false, - }, - }, - }, -} - -// This is the full proto version of libplatformprotos. It may only -// be used by test code that is not shipped on the device. -cc_library { - name: "libplatformprotos-test", - defaults: ["libplatformprotos-defaults"], - host_supported: false, - - target: { - android: { - proto: { - type: "full", - }, - shared: { - enabled: false, - }, - }, - }, -} - // utility classes statically linked into framework-wifi and dynamically linked // into wifi-service java_library { @@ -811,4 +577,5 @@ filegroup { build = [ "StubLibraries.bp", "ApiDocs.bp", + "ProtoLibraries.bp", ] diff --git a/OWNERS b/OWNERS index 710f13e4f568..4970dd122331 100644 --- a/OWNERS +++ b/OWNERS @@ -30,3 +30,4 @@ per-file Android.bp = file:platform/build/soong:/OWNERS per-file Android.mk = file:platform/build/soong:/OWNERS per-file ApiDocs.bp = file:platform/build/soong:/OWNERS per-file StubLibraries.bp = file:platform/build/soong:/OWNERS +per-file ProtoLibraries.bp = file:platform/build/soong:/OWNERS diff --git a/ProtoLibraries.bp b/ProtoLibraries.bp new file mode 100644 index 000000000000..14415dbed877 --- /dev/null +++ b/ProtoLibraries.bp @@ -0,0 +1,247 @@ +// Copyright (C) 2021 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. + +gensrcs { + name: "framework-javastream-protos", + depfile: true, + + tools: [ + "aprotoc", + "protoc-gen-javastream", + "soong_zip", + ], + + cmd: "mkdir -p $(genDir)/$(in) " + + "&& $(location aprotoc) " + + " --plugin=$(location protoc-gen-javastream) " + + " --dependency_out=$(depfile) " + + " --javastream_out=$(genDir)/$(in) " + + " -Iexternal/protobuf/src " + + " -I . " + + " $(in) " + + "&& $(location soong_zip) -jar -o $(out) -C $(genDir)/$(in) -D $(genDir)/$(in)", + + srcs: [ + ":ipconnectivity-proto-src", + ":libstats_atom_enum_protos", + ":libtombstone_proto-src", + "core/proto/**/*.proto", + "libs/incident/**/*.proto", + ":service-permission-protos", + ], + output_extension: "srcjar", +} + +gensrcs { + name: "framework-cppstream-protos", + depfile: true, + + tools: [ + "aprotoc", + "protoc-gen-cppstream", + ], + + cmd: "mkdir -p $(genDir) " + + "&& $(location aprotoc) " + + " --plugin=$(location protoc-gen-cppstream) " + + " --dependency_out=$(depfile) " + + " --cppstream_out=$(genDir) " + + " -Iexternal/protobuf/src " + + " -I . " + + " $(in)", + + srcs: [ + ":ipconnectivity-proto-src", + ":libstats_atom_enum_protos", + "core/proto/**/*.proto", + "libs/incident/**/*.proto", + ":service-permission-protos", + ], + + output_extension: "proto.h", +} + +// ==== java proto host library ============================== +java_library_host { + name: "platformprotos", + srcs: [ + ":ipconnectivity-proto-src", + ":libstats_atom_enum_protos", + ":libstats_internal_protos", + ":statsd_internal_protos", + "cmds/am/proto/instrumentation_data.proto", + "cmds/statsd/src/**/*.proto", + "core/proto/**/*.proto", + "libs/incident/proto/**/*.proto", + ":service-permission-protos", + ], + proto: { + include_dirs: [ + "external/protobuf/src", + "frameworks/proto_logging/stats", + ], + type: "full", + }, + // Protos have lots of MissingOverride and similar. + errorprone: { + javacflags: ["-XepDisableAllChecks"], + }, +} + +// ==== java proto device library (for test only) ============================== +java_library { + name: "platformprotosnano", + proto: { + type: "nano", + output_params: ["store_unknown_fields=true"], + include_dirs: ["external/protobuf/src"], + }, + exclude_srcs: [ + "core/proto/android/privacy.proto", + "core/proto/android/section.proto", + "core/proto/android/typedef.proto", + ], + sdk_version: "9", + srcs: [ + ":ipconnectivity-proto-src", + ":libstats_atom_enum_protos", + "core/proto/**/*.proto", + "libs/incident/proto/android/os/**/*.proto", + ":service-permission-protos", + ], +} + +// ==== java proto device library (for test only) ============================== +java_library { + name: "platformprotoslite", + proto: { + type: "lite", + include_dirs: ["external/protobuf/src"], + }, + + srcs: [ + ":ipconnectivity-proto-src", + ":libstats_atom_enum_protos", + "core/proto/**/*.proto", + "libs/incident/proto/android/os/**/*.proto", + ":service-permission-protos", + ], + exclude_srcs: [ + "core/proto/android/privacy.proto", + "core/proto/android/section.proto", + "core/proto/android/typedef.proto", + ], + sdk_version: "core_current", + // Protos have lots of MissingOverride and similar. + errorprone: { + javacflags: ["-XepDisableAllChecks"], + }, +} + +// ==== c++ proto device library ============================== +cc_defaults { + name: "libplatformprotos-defaults", + + proto: { + export_proto_headers: true, + include_dirs: [ + "external/protobuf/src", + ], + }, + + cflags: [ + "-Wall", + "-Werror", + "-Wno-unused-parameter", + ], + + srcs: [ + ":ipconnectivity-proto-src", + ":libstats_atom_enum_protos", + "core/proto/**/*.proto", + ":service-permission-protos", + ], +} + +cc_library { + name: "libplatformprotos", + defaults: ["libplatformprotos-defaults"], + host_supported: true, + + target: { + host: { + proto: { + type: "full", + }, + }, + android: { + proto: { + type: "lite", + }, + shared_libs: [ + "libprotobuf-cpp-lite", + ], + shared: { + enabled: false, + }, + }, + }, +} + +// This library is meant for vendor code that needs to output protobuf. It links +// against the static version of libprotobuf-cpp-lite, for which we can not guarantee +// binary compatibility. +cc_library { + name: "libplatformprotos-static", + defaults: ["libplatformprotos-defaults"], + host_supported: false, + + // This is okay because this library is only built as a static library. The C++ + // API is not guaranteed. The proto API is guaranteed to be stable via Metrics Council, + // but is not authorized to be used outside of debugging. + vendor_available: true, + + target: { + android: { + proto: { + type: "lite", + }, + static_libs: [ + "libprotobuf-cpp-lite", + ], + shared: { + enabled: false, + }, + }, + }, +} + +// This is the full proto version of libplatformprotos. It may only +// be used by test code that is not shipped on the device. +cc_library { + name: "libplatformprotos-test", + defaults: ["libplatformprotos-defaults"], + host_supported: false, + + target: { + android: { + proto: { + type: "full", + }, + shared: { + enabled: false, + }, + }, + }, +}