From 9f9f90b260f9f547e523442958c04eb3122eff74 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Mon, 12 Apr 2021 17:15:11 +0100 Subject: [PATCH 1/4] Move font tool build rules to subdir The top-level Android.bp file is very large, so move modules that can be in subdirs. Also rename the vague "base_defaults" module to something more suitable. Bug: 185128417 Test: m Change-Id: I5f3106b74edb91ac9db5b3e66cc61566d0f16e9b --- Android.bp | 38 ------------------------------- tools/fonts/Android.bp | 51 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 38 deletions(-) create mode 100644 tools/fonts/Android.bp diff --git a/Android.bp b/Android.bp index 20b26d64af010..120654d6b4466 100644 --- a/Android.bp +++ b/Android.bp @@ -751,44 +751,6 @@ cc_library { }, } -python_defaults { - name: "base_default", - version: { - py2: { - enabled: false, - embedded_launcher: false, - }, - py3: { - enabled: true, - embedded_launcher: true, - }, - }, -} - -python_binary_host { - name: "fontchain_linter", - defaults: ["base_default"], - main: "tools/fonts/fontchain_linter.py", - srcs: [ - "tools/fonts/fontchain_linter.py", - ], - libs: [ - "fontTools", - ], -} - -python_binary_host { - name: "update_font_metadata", - defaults: ["base_default"], - main: "tools/fonts/update_font_metadata.py", - srcs: [ - "tools/fonts/update_font_metadata.py", - ], - libs: [ - "fontTools", - ], -} - // utility classes statically linked into framework-wifi and dynamically linked // into wifi-service java_library { diff --git a/tools/fonts/Android.bp b/tools/fonts/Android.bp new file mode 100644 index 0000000000000..8ea114f1efc20 --- /dev/null +++ b/tools/fonts/Android.bp @@ -0,0 +1,51 @@ +// 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. + +python_defaults { + name: "fonts_python_defaults", + version: { + py2: { + enabled: false, + embedded_launcher: false, + }, + py3: { + enabled: true, + embedded_launcher: true, + }, + }, +} + +python_binary_host { + name: "fontchain_linter", + defaults: ["fonts_python_defaults"], + main: "fontchain_linter.py", + srcs: [ + "fontchain_linter.py", + ], + libs: [ + "fontTools", + ], +} + +python_binary_host { + name: "update_font_metadata", + defaults: ["fonts_python_defaults"], + main: "update_font_metadata.py", + srcs: [ + "update_font_metadata.py", + ], + libs: [ + "fontTools", + ], +} From 31fb58bd22a27076f24b4ea579e0a0562c911b6f Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Mon, 12 Apr 2021 18:03:12 +0100 Subject: [PATCH 2/4] Move framework proto build rules to separate file The proto build rules are quite large and makes the top-level Android.bp file difficult to navigate. Move them to a separate file. Bug: 185128417 Test: m Change-Id: I5719ba0fa8e03dcfca0cc32dc30db3f87ea4e3cd --- Android.bp | 235 +------------------------------------------ OWNERS | 1 + ProtoLibraries.bp | 247 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 249 insertions(+), 234 deletions(-) create mode 100644 ProtoLibraries.bp diff --git a/Android.bp b/Android.bp index 120654d6b4466..06aa776ed1ea3 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 710f13e4f5687..4970dd1223310 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 0000000000000..14415dbed877b --- /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, + }, + }, + }, +} From e3d44e8b7628fe2c0ef29c54347685a1370b28ed Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Mon, 12 Apr 2021 18:14:30 +0100 Subject: [PATCH 3/4] Move defaults closer to their targets The top-level Android.bp is large and difficult to navigate. Move these defaults closer to the targets that use them. Bug: 185128417 Test: m Change-Id: I7dd7a82837c9a0902aabd640e35ebb65c5f16c73 --- Android.bp | 35 ----------------------------------- packages/Android.bp | 28 ++++++++++++++++++++++++++++ services/Android.bp | 16 ++++++++++++++++ 3 files changed, 44 insertions(+), 35 deletions(-) create mode 100644 packages/Android.bp diff --git a/Android.bp b/Android.bp index 06aa776ed1ea3..f3888ab78b636 100644 --- a/Android.bp +++ b/Android.bp @@ -14,41 +14,6 @@ // Build the master framework library. -// Defaults for platform code that runs inside system_server -java_defaults { - name: "platform_service_defaults", - plugins: [ - "error_prone_android_framework", - ], - errorprone: { - javacflags: [ - // "-Xep:AndroidFrameworkBinderIdentity:ERROR", - "-Xep:AndroidFrameworkCompatChange:ERROR", - // "-Xep:AndroidFrameworkUid:ERROR", - // NOTE: only enable to generate local patchfiles - // "-XepPatchChecks:refaster:frameworks/base/errorprone/refaster/EfficientXml.java.refaster", - // "-XepPatchLocation:/tmp/refaster/", - ], - }, -} - -// Defaults for platform apps -java_defaults { - name: "platform_app_defaults", - plugins: [ - "error_prone_android_framework", - ], - errorprone: { - javacflags: [ - // We're less worried about performance in app code - "-Xep:AndroidFrameworkEfficientCollections:OFF", - "-Xep:AndroidFrameworkEfficientParcelable:OFF", - "-Xep:AndroidFrameworkEfficientStrings:OFF", - "-Xep:AndroidFrameworkEfficientXml:OFF", - ], - }, -} - // READ ME: ######################################################## // // When updating this list of aidl files, consider if that aidl is diff --git a/packages/Android.bp b/packages/Android.bp new file mode 100644 index 0000000000000..8b0698bc43390 --- /dev/null +++ b/packages/Android.bp @@ -0,0 +1,28 @@ +// 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. + +// Defaults for platform apps +java_defaults { + name: "platform_app_defaults", + plugins: ["error_prone_android_framework"], + errorprone: { + javacflags: [ + // We're less worried about performance in app code + "-Xep:AndroidFrameworkEfficientCollections:OFF", + "-Xep:AndroidFrameworkEfficientParcelable:OFF", + "-Xep:AndroidFrameworkEfficientStrings:OFF", + "-Xep:AndroidFrameworkEfficientXml:OFF", + ], + }, +} diff --git a/services/Android.bp b/services/Android.bp index 25b270ea1a796..ad1406c73c2fd 100644 --- a/services/Android.bp +++ b/services/Android.bp @@ -7,6 +7,22 @@ package { default_applicable_licenses: ["frameworks_base_license"], } +// Defaults for platform code that runs inside system_server +java_defaults { + name: "platform_service_defaults", + plugins: ["error_prone_android_framework"], + errorprone: { + javacflags: [ + // "-Xep:AndroidFrameworkBinderIdentity:ERROR", + "-Xep:AndroidFrameworkCompatChange:ERROR", + // "-Xep:AndroidFrameworkUid:ERROR", + // NOTE: only enable to generate local patchfiles + // "-XepPatchChecks:refaster:frameworks/base/errorprone/refaster/EfficientXml.java.refaster", + // "-XepPatchLocation:/tmp/refaster/", + ], + }, +} + filegroup { name: "services-main-sources", srcs: [ From 9c74c744fcf35107a6b00341ef7e4c98aca50de4 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Mon, 12 Apr 2021 18:24:01 +0100 Subject: [PATCH 4/4] Inline usage of jarjar_rules.txt No need to have a filegroup for this. This also has the nice side-effect of avoiding modules outside this directory depending on the file. Bug: 185128417 Test: m Change-Id: Idef6f2fd89116490c43427bba55202f46377a83d --- Android.bp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Android.bp b/Android.bp index f3888ab78b636..ca014bc7b11c1 100644 --- a/Android.bp +++ b/Android.bp @@ -271,11 +271,6 @@ java_library { installable: false, } -filegroup { - name: "framework-jarjar-rules", - srcs: ["framework-jarjar-rules.txt"], -} - java_defaults { name: "framework-minus-apex-defaults", defaults: ["framework-aidl-export-defaults"], @@ -296,7 +291,7 @@ java_defaults { "--core-library", "--multi-dex", ], - jarjar_rules: ":framework-jarjar-rules", + jarjar_rules: "framework-jarjar-rules.txt", javac_shard_size: 150, plugins: [ "view-inspector-annotation-processor",