Merge "Remove restriction on android config in generated rust_library targets" into main
diff --git a/aconfig/aconfig_declarations.go b/aconfig/aconfig_declarations.go
index f19ddb8..897f892 100644
--- a/aconfig/aconfig_declarations.go
+++ b/aconfig/aconfig_declarations.go
@@ -74,8 +74,8 @@
// RELEASE_ACONFIG_VALUE_SETS, and add any aconfig_values that
// match our package.
valuesFromConfig := ctx.Config().ReleaseAconfigValueSets()
- if valuesFromConfig != "" {
- ctx.AddDependency(ctx.Module(), implicitValuesTag, valuesFromConfig)
+ if len(valuesFromConfig) > 0 {
+ ctx.AddDependency(ctx.Module(), implicitValuesTag, valuesFromConfig...)
}
}
diff --git a/aconfig/java_aconfig_library.go b/aconfig/java_aconfig_library.go
index 79573c7..f7f8db8 100644
--- a/aconfig/java_aconfig_library.go
+++ b/aconfig/java_aconfig_library.go
@@ -99,6 +99,7 @@
Aconfig_declarations bazel.LabelAttribute
Test *bool
Sdk_version *string
+ Libs bazel.LabelListAttribute
}
func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) Bp2build(ctx android.Bp2buildMutatorContext, module *java.GeneratedJavaLibraryModule) {
@@ -118,10 +119,28 @@
// modules in framework/base use core_platform which is not supported by bazel yet.
// TODO(b/302148527): change soong to default to system_current as well.
sdkVersion := "system_current"
+
+ var libs bazel.LabelListAttribute
+ archVariantProps := module.GetArchVariantProperties(ctx, &java.CommonProperties{})
+ for axis, configToProps := range archVariantProps {
+ for config, p := range configToProps {
+ if archProps, ok := p.(*java.CommonProperties); ok {
+ var libLabels []bazel.Label
+ for _, d := range archProps.Libs {
+ neverlinkLabel := android.BazelLabelForModuleDepSingle(ctx, d)
+ neverlinkLabel.Label = neverlinkLabel.Label + "-neverlink"
+ libLabels = append(libLabels, neverlinkLabel)
+ }
+ libs.SetSelectValue(axis, config, (bazel.MakeLabelList(libLabels)))
+ }
+ }
+ }
+
attrs := bazelJavaAconfigLibraryAttributes{
Aconfig_declarations: *bazel.MakeLabelAttribute(android.BazelLabelForModuleDepSingle(ctx, callbacks.properties.Aconfig_declarations).Label),
Test: callbacks.properties.Test,
Sdk_version: &sdkVersion,
+ Libs: libs,
}
props := bazel.BazelTargetModuleProperties{
Rule_class: "java_aconfig_library",
diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go
index cc428e9..014b3cc 100644
--- a/android/allowlists/allowlists.go
+++ b/android/allowlists/allowlists.go
@@ -174,6 +174,7 @@
"external/jsr330": Bp2BuildDefaultTrueRecursively,
"external/junit": Bp2BuildDefaultTrueRecursively,
"external/kotlinc": Bp2BuildDefaultTrueRecursively,
+ "external/kotlinx.coroutines": Bp2BuildDefaultTrueRecursively,
"external/libaom": Bp2BuildDefaultTrueRecursively,
"external/libavc": Bp2BuildDefaultTrueRecursively,
"external/libcap": Bp2BuildDefaultTrueRecursively,
@@ -186,8 +187,8 @@
"external/libhevc": Bp2BuildDefaultTrueRecursively,
"external/libjpeg-turbo": Bp2BuildDefaultTrueRecursively,
"external/libmpeg2": Bp2BuildDefaultTrueRecursively,
- "external/libpng": Bp2BuildDefaultTrueRecursively,
"external/libphonenumber": Bp2BuildDefaultTrueRecursively,
+ "external/libpng": Bp2BuildDefaultTrueRecursively,
"external/libvpx": Bp2BuildDefaultTrueRecursively,
"external/libyuv": Bp2BuildDefaultTrueRecursively,
"external/lz4/lib": Bp2BuildDefaultTrue,
@@ -203,12 +204,12 @@
"external/pcre": Bp2BuildDefaultTrueRecursively,
"external/perfmark/api": Bp2BuildDefaultTrueRecursively,
"external/protobuf": Bp2BuildDefaultTrueRecursively,
- "external/python/pyfakefs/pyfakefs": Bp2BuildDefaultTrueRecursively,
- "external/python/pyyaml/lib/yaml": Bp2BuildDefaultTrueRecursively,
- "external/python/six": Bp2BuildDefaultTrueRecursively,
"external/python/jinja/src": Bp2BuildDefaultTrueRecursively,
"external/python/markupsafe/src": Bp2BuildDefaultTrueRecursively,
+ "external/python/pyfakefs/pyfakefs": Bp2BuildDefaultTrueRecursively,
+ "external/python/pyyaml/lib/yaml": Bp2BuildDefaultTrueRecursively,
"external/python/setuptools": Bp2BuildDefaultTrueRecursively,
+ "external/python/six": Bp2BuildDefaultTrueRecursively,
"external/rappor": Bp2BuildDefaultTrueRecursively,
"external/scudo": Bp2BuildDefaultTrueRecursively,
"external/selinux/checkpolicy": Bp2BuildDefaultTrueRecursively,
@@ -219,60 +220,63 @@
"external/tinyalsa": Bp2BuildDefaultTrueRecursively,
"external/tinyalsa_new": Bp2BuildDefaultTrueRecursively,
"external/toybox": Bp2BuildDefaultTrueRecursively,
+ "external/truth": Bp2BuildDefaultTrueRecursively,
"external/xz-java": Bp2BuildDefaultTrueRecursively,
"external/zlib": Bp2BuildDefaultTrueRecursively,
"external/zopfli": Bp2BuildDefaultTrueRecursively,
"external/zstd": Bp2BuildDefaultTrueRecursively,
"frameworks/av": Bp2BuildDefaultTrue,
- "frameworks/av/media/audioaidlconversion": Bp2BuildDefaultTrueRecursively,
- "frameworks/av/media/codec2/components/aom": Bp2BuildDefaultTrueRecursively,
- "frameworks/av/media/codecs": Bp2BuildDefaultTrueRecursively,
- "frameworks/av/media/liberror": Bp2BuildDefaultTrueRecursively,
- "frameworks/av/media/libmediahelper": Bp2BuildDefaultTrue,
- "frameworks/av/media/libshmem": Bp2BuildDefaultTrueRecursively,
- "frameworks/av/media/module/codecs": Bp2BuildDefaultTrueRecursively,
- "frameworks/av/media/module/foundation": Bp2BuildDefaultTrueRecursively,
- "frameworks/av/media/module/minijail": Bp2BuildDefaultTrueRecursively,
- "frameworks/av/services/minijail": Bp2BuildDefaultTrueRecursively,
- "frameworks/base/apex/jobscheduler/service/jni": Bp2BuildDefaultTrueRecursively,
- "frameworks/base/core/java": Bp2BuildDefaultTrue,
- "frameworks/base/core/res": Bp2BuildDefaultTrueRecursively,
- "frameworks/base/libs/androidfw": Bp2BuildDefaultTrue,
- "frameworks/base/libs/services": Bp2BuildDefaultTrue,
- "frameworks/base/media/tests/MediaDump": Bp2BuildDefaultTrue,
- "frameworks/base/mime": Bp2BuildDefaultTrueRecursively,
- "frameworks/base/proto": Bp2BuildDefaultTrue,
- "frameworks/base/services/tests/servicestests/aidl": Bp2BuildDefaultTrue,
- "frameworks/base/startop/apps/test": Bp2BuildDefaultTrue,
- "frameworks/base/tests/appwidgets/AppWidgetHostTest": Bp2BuildDefaultTrueRecursively,
- "frameworks/base/tools/aapt": Bp2BuildDefaultTrue,
- "frameworks/base/tools/aapt2": Bp2BuildDefaultTrue,
- "frameworks/base/tools/codegen": Bp2BuildDefaultTrueRecursively,
- "frameworks/base/tools/locked_region_code_injection": Bp2BuildDefaultTrueRecursively,
- "frameworks/base/tools/streaming_proto": Bp2BuildDefaultTrueRecursively,
- "frameworks/hardware/interfaces": Bp2BuildDefaultTrue,
- "frameworks/hardware/interfaces/displayservice": Bp2BuildDefaultTrueRecursively,
- "frameworks/hardware/interfaces/stats/aidl": Bp2BuildDefaultTrue,
- "frameworks/libs/modules-utils/build": Bp2BuildDefaultTrueRecursively,
- "frameworks/libs/modules-utils/java": Bp2BuildDefaultTrue,
- "frameworks/native": Bp2BuildDefaultTrue,
- "frameworks/native/libs/adbd_auth": Bp2BuildDefaultTrueRecursively,
- "frameworks/native/libs/arect": Bp2BuildDefaultTrueRecursively,
- "frameworks/native/libs/binder": Bp2BuildDefaultTrue,
- "frameworks/native/libs/gui": Bp2BuildDefaultTrue,
- "frameworks/native/libs/math": Bp2BuildDefaultTrueRecursively,
- "frameworks/native/libs/nativebase": Bp2BuildDefaultTrueRecursively,
- "frameworks/native/libs/permission": Bp2BuildDefaultTrueRecursively,
- "frameworks/native/libs/ui": Bp2BuildDefaultTrue,
- "frameworks/native/libs/vr": Bp2BuildDefaultTrueRecursively,
- "frameworks/native/opengl/tests/gl2_cameraeye": Bp2BuildDefaultTrue,
- "frameworks/native/opengl/tests/gl2_java": Bp2BuildDefaultTrue,
- "frameworks/native/opengl/tests/testLatency": Bp2BuildDefaultTrue,
- "frameworks/native/opengl/tests/testPauseResume": Bp2BuildDefaultTrue,
- "frameworks/native/opengl/tests/testViewport": Bp2BuildDefaultTrue,
- "frameworks/native/services/batteryservice": Bp2BuildDefaultTrue,
- "frameworks/proto_logging/stats": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av/media/audioaidlconversion": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av/media/codec2/components/aom": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av/media/codecs": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av/media/liberror": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av/media/libmediahelper": Bp2BuildDefaultTrue,
+ "frameworks/av/media/libshmem": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av/media/module/codecs": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av/media/module/foundation": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av/media/module/minijail": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av/services/minijail": Bp2BuildDefaultTrueRecursively,
+ "frameworks/base/apex/jobscheduler/service/jni": Bp2BuildDefaultTrueRecursively,
+ "frameworks/base/core/java": Bp2BuildDefaultTrue,
+ "frameworks/base/core/res": Bp2BuildDefaultTrueRecursively,
+ "frameworks/base/errorprone": Bp2BuildDefaultTrueRecursively,
+ "frameworks/base/libs/androidfw": Bp2BuildDefaultTrue,
+ "frameworks/base/libs/services": Bp2BuildDefaultTrue,
+ "frameworks/base/media/tests/MediaDump": Bp2BuildDefaultTrue,
+ "frameworks/base/mime": Bp2BuildDefaultTrueRecursively,
+ "frameworks/base/proto": Bp2BuildDefaultTrue,
+ "frameworks/base/services/tests/servicestests/aidl": Bp2BuildDefaultTrue,
+ "frameworks/base/startop/apps/test": Bp2BuildDefaultTrue,
+ "frameworks/base/tests/appwidgets/AppWidgetHostTest": Bp2BuildDefaultTrueRecursively,
+ "frameworks/base/tools/aapt": Bp2BuildDefaultTrue,
+ "frameworks/base/tools/aapt2": Bp2BuildDefaultTrue,
+ "frameworks/base/tools/codegen": Bp2BuildDefaultTrueRecursively,
+ "frameworks/base/tools/locked_region_code_injection": Bp2BuildDefaultTrueRecursively,
+ "frameworks/base/tools/streaming_proto": Bp2BuildDefaultTrueRecursively,
+ "frameworks/hardware/interfaces": Bp2BuildDefaultTrue,
+ "frameworks/hardware/interfaces/displayservice": Bp2BuildDefaultTrueRecursively,
+ "frameworks/hardware/interfaces/stats/aidl": Bp2BuildDefaultTrue,
+ "frameworks/libs/modules-utils/build": Bp2BuildDefaultTrueRecursively,
+ "frameworks/libs/modules-utils/java": Bp2BuildDefaultTrueRecursively,
+ "frameworks/libs/modules-utils/java/com/android/modules/utils/testing": Bp2BuildDefaultFalseRecursively,
+ "frameworks/native": Bp2BuildDefaultTrue,
+ "frameworks/native/libs/adbd_auth": Bp2BuildDefaultTrueRecursively,
+ "frameworks/native/libs/arect": Bp2BuildDefaultTrueRecursively,
+ "frameworks/native/libs/binder": Bp2BuildDefaultTrue,
+ "frameworks/native/libs/gui": Bp2BuildDefaultTrue,
+ "frameworks/native/libs/math": Bp2BuildDefaultTrueRecursively,
+ "frameworks/native/libs/nativebase": Bp2BuildDefaultTrueRecursively,
+ "frameworks/native/libs/permission": Bp2BuildDefaultTrueRecursively,
+ "frameworks/native/libs/ui": Bp2BuildDefaultTrue,
+ "frameworks/native/libs/vr": Bp2BuildDefaultTrueRecursively,
+ "frameworks/native/opengl/tests/gl2_cameraeye": Bp2BuildDefaultTrue,
+ "frameworks/native/opengl/tests/gl2_java": Bp2BuildDefaultTrue,
+ "frameworks/native/opengl/tests/testLatency": Bp2BuildDefaultTrue,
+ "frameworks/native/opengl/tests/testPauseResume": Bp2BuildDefaultTrue,
+ "frameworks/native/opengl/tests/testViewport": Bp2BuildDefaultTrue,
+ "frameworks/native/services/batteryservice": Bp2BuildDefaultTrue,
+ "frameworks/proto_logging/stats": Bp2BuildDefaultTrueRecursively,
"hardware/interfaces": Bp2BuildDefaultTrue,
"hardware/interfaces/audio/aidl": Bp2BuildDefaultTrue,
@@ -325,37 +329,38 @@
"libnativehelper": Bp2BuildDefaultTrueRecursively,
- "packages/apps/DevCamera": Bp2BuildDefaultTrue,
- "packages/apps/HTMLViewer": Bp2BuildDefaultTrue,
- "packages/apps/Protips": Bp2BuildDefaultTrue,
- "packages/apps/SafetyRegulatoryInfo": Bp2BuildDefaultTrue,
- "packages/apps/WallpaperPicker": Bp2BuildDefaultTrue,
- "packages/modules/NeuralNetworks/driver/cache": Bp2BuildDefaultTrueRecursively,
- "packages/modules/StatsD/lib/libstatssocket": Bp2BuildDefaultTrueRecursively,
- "packages/modules/adb": Bp2BuildDefaultTrue,
- "packages/modules/adb/apex": Bp2BuildDefaultTrue,
- "packages/modules/adb/fastdeploy": Bp2BuildDefaultTrue,
- "packages/modules/adb/crypto": Bp2BuildDefaultTrueRecursively,
- "packages/modules/adb/libs": Bp2BuildDefaultTrueRecursively,
- "packages/modules/adb/pairing_auth": Bp2BuildDefaultTrueRecursively,
- "packages/modules/adb/pairing_connection": Bp2BuildDefaultTrueRecursively,
- "packages/modules/adb/proto": Bp2BuildDefaultTrueRecursively,
- "packages/modules/adb/tls": Bp2BuildDefaultTrueRecursively,
- "packages/modules/Connectivity/bpf_progs": Bp2BuildDefaultTrueRecursively,
- "packages/modules/Connectivity/service-t": Bp2BuildDefaultTrueRecursively,
- "packages/modules/Connectivity/service/native": Bp2BuildDefaultTrueRecursively,
- "packages/modules/Connectivity/staticlibs/native": Bp2BuildDefaultTrueRecursively,
- "packages/modules/Connectivity/staticlibs/netd": Bp2BuildDefaultTrueRecursively,
- "packages/modules/Connectivity/tests/unit/jni": Bp2BuildDefaultTrueRecursively,
- "packages/modules/Gki/libkver": Bp2BuildDefaultTrue,
- "packages/modules/NetworkStack/common/captiveportal": Bp2BuildDefaultTrue,
- "packages/modules/NeuralNetworks/apex": Bp2BuildDefaultTrue,
- "packages/modules/NeuralNetworks/apex/testing": Bp2BuildDefaultTrue,
- "packages/modules/SdkExtensions/gen_sdk": Bp2BuildDefaultTrue,
- "packages/modules/common/proto": Bp2BuildDefaultTrue,
- "packages/providers/MediaProvider/tools/dialogs": Bp2BuildDefaultFalse, // TODO(b/242834374)
- "packages/screensavers/Basic": Bp2BuildDefaultTrue,
- "packages/services/Car/tests/SampleRearViewCamera": Bp2BuildDefaultFalse, // TODO(b/242834321)
+ "packages/apps/DevCamera": Bp2BuildDefaultTrue,
+ "packages/apps/HTMLViewer": Bp2BuildDefaultTrue,
+ "packages/apps/Protips": Bp2BuildDefaultTrue,
+ "packages/apps/SafetyRegulatoryInfo": Bp2BuildDefaultTrue,
+ "packages/apps/WallpaperPicker": Bp2BuildDefaultTrue,
+ "packages/modules/Connectivity/bpf_progs": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/Connectivity/service-t": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/Connectivity/service/native": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/Connectivity/staticlibs/native": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/Connectivity/staticlibs/netd": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/Connectivity/staticlibs/netd/libnetdutils": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/Connectivity/tests/unit/jni": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/Gki/libkver": Bp2BuildDefaultTrue,
+ "packages/modules/NetworkStack/common/captiveportal": Bp2BuildDefaultTrue,
+ "packages/modules/NeuralNetworks/apex": Bp2BuildDefaultTrue,
+ "packages/modules/NeuralNetworks/apex/testing": Bp2BuildDefaultTrue,
+ "packages/modules/NeuralNetworks/driver/cache": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/SdkExtensions/gen_sdk": Bp2BuildDefaultTrue,
+ "packages/modules/StatsD/lib/libstatssocket": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/adb": Bp2BuildDefaultTrue,
+ "packages/modules/adb/apex": Bp2BuildDefaultTrue,
+ "packages/modules/adb/crypto": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/adb/fastdeploy": Bp2BuildDefaultTrue,
+ "packages/modules/adb/libs": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/adb/pairing_auth": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/adb/pairing_connection": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/adb/proto": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/adb/tls": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/common/proto": Bp2BuildDefaultTrue,
+ "packages/providers/MediaProvider/tools/dialogs": Bp2BuildDefaultFalse, // TODO(b/242834374)
+ "packages/screensavers/Basic": Bp2BuildDefaultTrue,
+ "packages/services/Car/tests/SampleRearViewCamera": Bp2BuildDefaultFalse, // TODO(b/242834321)
"platform_testing/libraries/annotations": Bp2BuildDefaultTrueRecursively,
"platform_testing/libraries/flag-helpers/libflagtest": Bp2BuildDefaultTrueRecursively,
@@ -363,19 +368,20 @@
"prebuilts/clang/host/linux-x86": Bp2BuildDefaultTrueRecursively,
"prebuilts/gradle-plugin": Bp2BuildDefaultTrueRecursively,
- "prebuilts/runtime/mainline/platform/sdk": Bp2BuildDefaultTrueRecursively,
"prebuilts/module_sdk": Bp2BuildDefaultTrueRecursively,
+ "prebuilts/runtime/mainline/platform/sdk": Bp2BuildDefaultTrueRecursively,
"prebuilts/sdk": Bp2BuildDefaultTrue,
"prebuilts/sdk/current/androidx": Bp2BuildDefaultTrue,
"prebuilts/sdk/current/androidx-legacy": Bp2BuildDefaultTrue,
+ "prebuilts/sdk/current/extras/app-toolkit": Bp2BuildDefaultTrue,
"prebuilts/sdk/current/extras/constraint-layout-x": Bp2BuildDefaultTrue,
"prebuilts/sdk/current/extras/material-design-x": Bp2BuildDefaultTrue,
- "prebuilts/sdk/current/extras/app-toolkit": Bp2BuildDefaultTrue,
"prebuilts/sdk/current/support": Bp2BuildDefaultTrue,
"prebuilts/tools": Bp2BuildDefaultTrue,
"prebuilts/tools/common/m2": Bp2BuildDefaultTrue,
"prebuilts/r8": Bp2BuildDefaultTrueRecursively,
+ "sdk/annotations": Bp2BuildDefaultTrueRecursively,
"sdk/dumpeventlog": Bp2BuildDefaultTrue,
"sdk/eventanalyzer": Bp2BuildDefaultTrue,
@@ -431,6 +437,7 @@
"system/libprocinfo": Bp2BuildDefaultTrue,
"system/libvintf": Bp2BuildDefaultTrue,
"system/libziparchive": Bp2BuildDefaultTrueRecursively,
+ "system/linkerconfig": Bp2BuildDefaultTrueRecursively,
"system/logging": Bp2BuildDefaultTrueRecursively,
"system/media": Bp2BuildDefaultTrue,
"system/media/alsa_utils": Bp2BuildDefaultTrueRecursively,
@@ -456,6 +463,7 @@
"test/vts/vts_hal_hidl_target": Bp2BuildDefaultTrueRecursively,
+ "toolchain/pgo-profiles": Bp2BuildDefaultTrueRecursively,
"tools/apifinder": Bp2BuildDefaultTrue,
"tools/apksig": Bp2BuildDefaultTrue,
"tools/dexter/slicer": Bp2BuildDefaultTrueRecursively,
@@ -532,6 +540,8 @@
}
Bp2buildModuleAlwaysConvertList = []string{
+ "aconfig.test.cpp",
+ "AconfigJavaHostTest",
// aconfig
"libonce_cell",
"libanyhow",
@@ -623,6 +633,7 @@
"codec2_soft_exports",
"compatibility_matrix_schema",
"framework-connectivity-protos",
+ "framework-connectivity-javastream-protos",
"gemmlowp_headers",
"gl_headers",
"libandroid_runtime_lazy",
@@ -855,15 +866,6 @@
// for api_fingerprint.txt generation
"api_fingerprint",
- // allowlisting for kotlinx_coroutines
- "annotations",
- "kotlinx-coroutines-android-annotation-stubs",
- "kotlinx-coroutines-core",
- "kotlinx_coroutines",
- "kotlinx_coroutines-device",
- "kotlinx_coroutines-host",
- "kotlinx_coroutines_android",
-
// for building com.android.neuralnetworks
"libimapper_stablec",
"libimapper_providerutils",
@@ -975,7 +977,6 @@
"protoc-gen-grpc-java-plugin",
"perfetto_trace-full",
"tf-remote-client",
- "truth",
"tradefed-lite",
"tradefed-isolation-protos",
"snakeyaml_patched_src_files",
@@ -1009,6 +1010,8 @@
"libservice-connectivity",
"mainline_modules_sdks_test",
+
+ "fake_device_config",
}
Bp2buildModuleTypeAlwaysConvertList = []string{
@@ -1125,6 +1128,11 @@
// rust support
"libtombstoned_client_rust_bridge_code", "libtombstoned_client_wrapper", // rust conversions are not supported
+ // TODO: b/303474748 - aidl rules for java are incompatible with parcelable declarations
+ "modules-utils-list-slice",
+ "modules-utils-os",
+ "modules-utils-synchronous-result-receiver",
+
// unconverted deps
"CarHTMLViewer", // depends on unconverted modules android.car-stubs, car-ui-lib
"adb", // depends on unconverted modules: AdbWinApi, libandroidfw, libopenscreen-discovery, libopenscreen-platform-impl, libusb, bin2c_fastdeployagent, AdbWinUsbApi
@@ -1144,7 +1152,6 @@
"hidl_test_java",
"host-libprotobuf-java-nano", // b/220869005, depends on libprotobuf-java-nano
"jacoco-stubs", // b/245767077, depends on droidstubs
- "libapexutil", // depends on unconverted modules: apex-info-list-tinyxml
"libart", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
"libart-runtime", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
"libart-runtime-for-test", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
@@ -1168,6 +1175,7 @@
"libstatslog_art", // depends on unconverted modules: statslog_art.cpp, statslog_art.h
"linker_reloc_bench_main", // depends on unconverted modules: liblinker_reloc_bench_*
"malloc-rss-benchmark", // depends on unconverted modules: libmeminfo
+ "modules-utils-expresslog", // depends on unconverted modules: framework-statsd
"pbtombstone", "crash_dump", // depends on libdebuggerd, libunwindstack
"releasetools_test", // depends on unconverted modules: com.android.apex.compressed.v1
"robolectric-sqlite4java-0.282", // depends on unconverted modules: robolectric-sqlite4java-import, robolectric-sqlite4java-native
@@ -1663,13 +1671,7 @@
"libtest_with_dependency_loop_c",
"libtestshared",
- // depends on unconverted libprotobuf-java-nano
- "dnsresolverprotosnano",
- "launcherprotosnano",
- "datastallprotosnano",
- "devicepolicyprotosnano",
- "ota_metadata_proto_java",
- "merge_ota",
+ "merge_ota", // depends on ota_metadata_proto_java
// releasetools
"verity_utils",
diff --git a/android/config.go b/android/config.go
index 2930c86..8f72239 100644
--- a/android/config.go
+++ b/android/config.go
@@ -200,21 +200,23 @@
}
// The aconfig value set passed to aconfig, derived from RELEASE_VERSION
-func (c Config) ReleaseAconfigValueSets() string {
+func (c Config) ReleaseAconfigValueSets() []string {
// This logic to handle both Soong module name and bazel target is temporary in order to
// provide backward compatibility where aosp and internal both have the release
// aconfig value set but can't be updated at the same time to use bazel target
- value := strings.Split(c.config.productVariables.ReleaseAconfigValueSets, ":")
- value_len := len(value)
- if value_len > 2 {
- // This shouldn't happen as this should be either a module name or a bazel target path.
- panic(fmt.Errorf("config file: invalid value for release aconfig value sets: %s",
- c.config.productVariables.ReleaseAconfigValueSets))
+ var valueSets []string
+ for _, valueSet := range c.config.productVariables.ReleaseAconfigValueSets {
+ value := strings.Split(valueSet, ":")
+ valueLen := len(value)
+ if valueLen > 2 {
+ // This shouldn't happen as this should be either a module name or a bazel target path.
+ panic(fmt.Errorf("config file: invalid value for release aconfig value sets: %s", valueSet))
+ }
+ if valueLen > 0 {
+ valueSets = append(valueSets, value[valueLen-1])
+ }
}
- if value_len > 0 {
- return value[value_len-1]
- }
- return ""
+ return valueSets
}
// The flag default permission value passed to aconfig
diff --git a/android/variable.go b/android/variable.go
index 006a77f..ab6dfef 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -474,8 +474,8 @@
ProductBrand string `json:",omitempty"`
BuildVersionTags []string `json:",omitempty"`
- ReleaseVersion string `json:",omitempty"`
- ReleaseAconfigValueSets string `json:",omitempty"`
+ ReleaseVersion string `json:",omitempty"`
+ ReleaseAconfigValueSets []string `json:",omitempty"`
ReleaseAconfigFlagDefaultPermission string `json:",omitempty"`
diff --git a/bp2build/aconfig_conversion_test.go b/bp2build/aconfig_conversion_test.go
index be9a33d..ca41680 100644
--- a/bp2build/aconfig_conversion_test.go
+++ b/bp2build/aconfig_conversion_test.go
@@ -147,9 +147,15 @@
],
package: "com.android.foo",
}
+ java_library {
+ name: "foo_java_library",
+ srcs: ["foo.java"],
+ sdk_version: "current",
+ }
java_aconfig_library {
name: "foo",
aconfig_declarations: "foo_aconfig_declarations",
+ libs: ["foo_java_library"],
test: true,
}
`
@@ -163,10 +169,21 @@
},
),
MakeBazelTargetNoRestrictions(
+ "java_library",
+ "foo_java_library",
+ AttrNameToString{
+ "srcs": `["foo.java"]`,
+ "sdk_version": `"current"`,
+ "target_compatible_with": `["//build/bazel_common_rules/platforms/os:android"]`,
+ },
+ ),
+ MakeNeverlinkDuplicateTarget("java_library", "foo_java_library"),
+ MakeBazelTargetNoRestrictions(
"java_aconfig_library",
"foo",
AttrNameToString{
"aconfig_declarations": `":foo_aconfig_declarations"`,
+ "libs": `[":foo_java_library-neverlink"]`,
"test": `True`,
"sdk_version": `"system_current"`,
"target_compatible_with": `["//build/bazel_common_rules/platforms/os:android"]`,
diff --git a/bp2build/bp2build_product_config.go b/bp2build/bp2build_product_config.go
index 3e00453..2adcccc 100644
--- a/bp2build/bp2build_product_config.go
+++ b/bp2build/bp2build_product_config.go
@@ -29,6 +29,8 @@
target string
}
+const releaseAconfigValueSetsName = "release_aconfig_value_sets"
+
func (l *bazelLabel) Less(other *bazelLabel) bool {
if l.repo < other.repo {
return true
@@ -343,10 +345,11 @@
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:product_brand=%s\n", productVariables.ProductBrand))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:product_manufacturer=%s\n", productVariables.ProductManufacturer))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:release_aconfig_flag_default_permission=%s\n", productVariables.ReleaseAconfigFlagDefaultPermission))
- // Empty string can't be used as label_flag on the bazel side
+ releaseAconfigValueSets := "//build/bazel/product_config:empty_aconfig_value_sets"
if len(productVariables.ReleaseAconfigValueSets) > 0 {
- result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:release_aconfig_value_sets=%s\n", productVariables.ReleaseAconfigValueSets))
+ releaseAconfigValueSets = "@//" + label.pkg + ":" + releaseAconfigValueSetsName + "_" + label.target
}
+ result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:release_aconfig_value_sets=%s\n", releaseAconfigValueSets))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:release_version=%s\n", productVariables.ReleaseVersion))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:platform_sdk_version=%d\n", platform_sdk_version))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:safestack=%t\n", proptools.Bool(productVariables.Safestack)))
@@ -481,6 +484,7 @@
func createTargets(productLabelsToVariables map[bazelLabel]*android.ProductVariables, res map[string]BazelTargets) {
createGeneratedAndroidCertificateDirectories(productLabelsToVariables, res)
createAvbKeyFilegroups(productLabelsToVariables, res)
+ createReleaseAconfigValueSetsFilegroup(productLabelsToVariables, res)
for label, variables := range productLabelsToVariables {
createSystemPartition(label, &variables.PartitionVarsForBazelMigrationOnlyDoNotUse, res)
}
@@ -515,6 +519,40 @@
}
}
+func createReleaseAconfigValueSetsFilegroup(productLabelsToVariables map[bazelLabel]*android.ProductVariables, targets map[string]BazelTargets) {
+ for label, productVariables := range productLabelsToVariables {
+ if len(productVariables.ReleaseAconfigValueSets) > 0 {
+ key := label.target
+ dir := label.pkg
+ var value_sets strings.Builder
+ for _, value_set := range productVariables.ReleaseAconfigValueSets {
+ value_sets.WriteString(" \"" + value_set + "\",\n")
+ }
+
+ name := releaseAconfigValueSetsName + "_" + key
+ content := "aconfig_value_sets(\n" +
+ " name = \"" + name + "\",\n" +
+ " value_sets = [\n" +
+ value_sets.String() +
+ " ],\n" +
+ " visibility = [\"//visibility:public\"],\n" +
+ ")"
+ targets[dir] = append(targets[dir], BazelTarget{
+ name: name,
+ packageName: dir,
+ content: content,
+ ruleClass: "aconfig_value_sets",
+ loads: []BazelLoad{{
+ file: "//build/bazel/rules/aconfig:aconfig_value_sets.bzl",
+ symbols: []BazelLoadSymbol{{
+ symbol: "aconfig_value_sets",
+ }},
+ }},
+ })
+ }
+ }
+}
+
func createAvbKeyFilegroups(productLabelsToVariables map[bazelLabel]*android.ProductVariables, targets map[string]BazelTargets) {
var allAvbKeys []string
for _, productVariables := range productLabelsToVariables {
diff --git a/cc/config/global.go b/cc/config/global.go
index 62b008b..0354b25 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -170,6 +170,9 @@
// Emit additional debug info for AutoFDO
"-fdebug-info-for-profiling",
+
+ // Enable Hot Cold splitting optimization.
+ "-mllvm -hot-cold-split=true",
}
commonGlobalLldflags = []string{
diff --git a/java/aar.go b/java/aar.go
index e53653a..85a6fbb 100644
--- a/java/aar.go
+++ b/java/aar.go
@@ -311,7 +311,7 @@
func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptions) {
- staticResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedDeps, libFlags :=
+ staticResourcesNodesDepSet, sharedResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedExportPackages, libFlags :=
aaptLibs(ctx, opts.sdkContext, opts.classLoaderContexts)
// Exclude any libraries from the supplied list.
@@ -335,6 +335,7 @@
})
staticDeps := transitiveAarDeps(staticResourcesNodesDepSet.ToList())
+ sharedDeps := transitiveAarDeps(sharedResourcesNodesDepSet.ToList())
// Add additional manifest files to transitive manifests.
additionalManifests := android.PathsForModuleSrc(ctx, a.aaptProperties.Additional_manifests)
@@ -364,7 +365,7 @@
compileFlags, linkFlags, linkDeps, resDirs, overlayDirs, rroDirs, resZips := a.aapt2Flags(ctx, opts.sdkContext, manifestPath)
linkFlags = append(linkFlags, libFlags...)
- linkDeps = append(linkDeps, sharedDeps...)
+ linkDeps = append(linkDeps, sharedExportPackages...)
linkDeps = append(linkDeps, staticDeps.resPackages()...)
linkFlags = append(linkFlags, opts.extraLinkFlags...)
if a.isLibrary {
@@ -422,6 +423,11 @@
transitiveRJars = append(transitiveRJars, staticDep.rJar)
}
}
+ for _, sharedDep := range sharedDeps {
+ if sharedDep.usedResourceProcessor {
+ transitiveRJars = append(transitiveRJars, sharedDep.rJar)
+ }
+ }
} else {
// When building an app or building a library without ResourceProcessorBusyBox enabled all static
// dependencies are compiled into this module's package-res.apk as overlays.
@@ -630,7 +636,7 @@
// aaptLibs collects libraries from dependencies and sdk_version and converts them into paths
func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoaderContexts dexpreopt.ClassLoaderContextMap) (
- staticResourcesNodes *android.DepSet[*resourcesNode], staticRRODirs *android.DepSet[rroDir],
+ staticResourcesNodes, sharedResourcesNodes *android.DepSet[*resourcesNode], staticRRODirs *android.DepSet[rroDir],
staticManifests *android.DepSet[android.Path], sharedLibs android.Paths, flags []string) {
if classLoaderContexts == nil {
@@ -644,7 +650,8 @@
sharedLibs = append(sharedLibs, sdkDep.jars...)
}
- var resourcesNodeDepSets []*android.DepSet[*resourcesNode]
+ var staticResourcesNodeDepSets []*android.DepSet[*resourcesNode]
+ var sharedResourcesNodeDepSets []*android.DepSet[*resourcesNode]
rroDirsDepSetBuilder := android.NewDepSetBuilder[rroDir](android.TOPOLOGICAL)
manifestsDepSetBuilder := android.NewDepSetBuilder[android.Path](android.TOPOLOGICAL)
@@ -662,6 +669,7 @@
// Nothing, instrumentationForTag is treated as libTag for javac but not for aapt2.
case sdkLibTag, libTag:
if exportPackage != nil {
+ sharedResourcesNodeDepSets = append(sharedResourcesNodeDepSets, aarDep.ResourcesNodeDepSet())
sharedLibs = append(sharedLibs, exportPackage)
}
case frameworkResTag:
@@ -670,7 +678,7 @@
}
case staticLibTag:
if exportPackage != nil {
- resourcesNodeDepSets = append(resourcesNodeDepSets, aarDep.ResourcesNodeDepSet())
+ staticResourcesNodeDepSets = append(staticResourcesNodeDepSets, aarDep.ResourcesNodeDepSet())
rroDirsDepSetBuilder.Transitive(aarDep.RRODirsDepSet())
manifestsDepSetBuilder.Transitive(aarDep.ManifestsDepSet())
}
@@ -686,7 +694,9 @@
// dependencies) the highest priority dependency is listed first, but for resources the highest priority
// dependency has to be listed last.
staticResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil,
- android.ReverseSliceInPlace(resourcesNodeDepSets))
+ android.ReverseSliceInPlace(staticResourcesNodeDepSets))
+ sharedResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil,
+ android.ReverseSliceInPlace(sharedResourcesNodeDepSets))
staticRRODirs = rroDirsDepSetBuilder.Build()
staticManifests = manifestsDepSetBuilder.Build()
@@ -699,7 +709,7 @@
flags = append(flags, "-I "+sharedLib.String())
}
- return staticResourcesNodes, staticRRODirs, staticManifests, sharedLibs, flags
+ return staticResourcesNodes, sharedResourcesNodes, staticRRODirs, staticManifests, sharedLibs, flags
}
type AndroidLibrary struct {
@@ -1095,10 +1105,12 @@
linkFlags = append(linkFlags, "--manifest "+a.manifest.String())
linkDeps = append(linkDeps, a.manifest)
- staticResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedLibs, libFlags :=
+ staticResourcesNodesDepSet, sharedResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedLibs, libFlags :=
aaptLibs(ctx, android.SdkContext(a), nil)
+ _ = sharedResourcesNodesDepSet
_ = staticRRODirsDepSet
+
staticDeps := transitiveAarDeps(staticResourcesNodesDepSet.ToList())
linkDeps = append(linkDeps, sharedLibs...)
diff --git a/java/app_test.go b/java/app_test.go
index fc57f44..e38a724 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -722,10 +722,13 @@
func TestAndroidResourceProcessor(t *testing.T) {
testCases := []struct {
- name string
- appUsesRP bool
- directLibUsesRP bool
- transitiveLibUsesRP bool
+ name string
+ appUsesRP bool
+ directLibUsesRP bool
+ transitiveLibUsesRP bool
+ sharedLibUsesRP bool
+ sharedTransitiveStaticLibUsesRP bool
+ sharedTransitiveSharedLibUsesRP bool
dontVerifyApp bool
appResources []string
@@ -760,6 +763,14 @@
transitiveImportResources []string
transitiveImportOverlays []string
transitiveImportImports []string
+
+ dontVerifyShared bool
+ sharedResources []string
+ sharedOverlays []string
+ sharedImports []string
+ sharedSrcJars []string
+ sharedClasspath []string
+ sharedCombined []string
}{
{
// Test with all modules set to use_resource_processor: false (except android_library_import modules,
@@ -779,10 +790,14 @@
"out/soong/.intermediates/direct_import/android_common/package-res.apk",
"out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat",
},
- appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"},
+ appImports: []string{
+ "out/soong/.intermediates/shared/android_common/package-res.apk",
+ "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk",
+ },
appSrcJars: []string{"out/soong/.intermediates/app/android_common/gen/android/R.srcjar"},
appClasspath: []string{
"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
+ "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
},
@@ -819,6 +834,26 @@
transitiveClasspath: []string{"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar"},
transitiveCombined: nil,
+ sharedResources: nil,
+ sharedOverlays: []string{
+ "out/soong/.intermediates/shared_transitive_static/android_common/package-res.apk",
+ "out/soong/.intermediates/shared/android_common/aapt2/shared/res/values_strings.arsc.flat",
+ },
+ sharedImports: []string{
+ "out/soong/.intermediates/shared_transitive_shared/android_common/package-res.apk",
+ "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk",
+ },
+ sharedSrcJars: []string{"out/soong/.intermediates/shared/android_common/gen/android/R.srcjar"},
+ sharedClasspath: []string{
+ "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
+ "out/soong/.intermediates/shared_transitive_shared/android_common/turbine-combined/shared_transitive_shared.jar",
+ "out/soong/.intermediates/shared_transitive_static/android_common/turbine-combined/shared_transitive_static.jar",
+ },
+ sharedCombined: []string{
+ "out/soong/.intermediates/shared/android_common/javac/shared.jar",
+ "out/soong/.intermediates/shared_transitive_static/android_common/javac/shared_transitive_static.jar",
+ },
+
directImportResources: nil,
directImportOverlays: []string{"out/soong/.intermediates/direct_import/android_common/flat-res/gen_res.flata"},
directImportImports: []string{
@@ -835,10 +870,13 @@
},
{
// Test with all modules set to use_resource_processor: true.
- name: "resource_processor",
- appUsesRP: true,
- directLibUsesRP: true,
- transitiveLibUsesRP: true,
+ name: "resource_processor",
+ appUsesRP: true,
+ directLibUsesRP: true,
+ transitiveLibUsesRP: true,
+ sharedLibUsesRP: true,
+ sharedTransitiveSharedLibUsesRP: true,
+ sharedTransitiveStaticLibUsesRP: true,
appResources: nil,
appOverlays: []string{
@@ -850,11 +888,15 @@
"out/soong/.intermediates/direct_import/android_common/package-res.apk",
"out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat",
},
- appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"},
+ appImports: []string{
+ "out/soong/.intermediates/shared/android_common/package-res.apk",
+ "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk",
+ },
appSrcJars: nil,
appClasspath: []string{
"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
"out/soong/.intermediates/app/android_common/busybox/R.jar",
+ "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
},
@@ -899,6 +941,27 @@
},
transitiveCombined: nil,
+ sharedResources: nil,
+ sharedOverlays: []string{"out/soong/.intermediates/shared/android_common/aapt2/shared/res/values_strings.arsc.flat"},
+ sharedImports: []string{
+ "out/soong/.intermediates/shared_transitive_shared/android_common/package-res.apk",
+ "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk",
+ "out/soong/.intermediates/shared_transitive_static/android_common/package-res.apk",
+ },
+ sharedSrcJars: nil,
+ sharedClasspath: []string{
+ "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
+ "out/soong/.intermediates/shared_transitive_static/android_common/busybox/R.jar",
+ "out/soong/.intermediates/shared_transitive_shared/android_common/busybox/R.jar",
+ "out/soong/.intermediates/shared/android_common/busybox/R.jar",
+ "out/soong/.intermediates/shared_transitive_shared/android_common/turbine-combined/shared_transitive_shared.jar",
+ "out/soong/.intermediates/shared_transitive_static/android_common/turbine-combined/shared_transitive_static.jar",
+ },
+ sharedCombined: []string{
+ "out/soong/.intermediates/shared/android_common/javac/shared.jar",
+ "out/soong/.intermediates/shared_transitive_static/android_common/javac/shared_transitive_static.jar",
+ },
+
directImportResources: nil,
directImportOverlays: []string{"out/soong/.intermediates/direct_import/android_common/flat-res/gen_res.flata"},
directImportImports: []string{
@@ -930,12 +993,16 @@
"out/soong/.intermediates/direct_import/android_common/package-res.apk",
"out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat",
},
- appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"},
+ appImports: []string{
+ "out/soong/.intermediates/shared/android_common/package-res.apk",
+ "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk",
+ },
appSrcJars: nil,
appClasspath: []string{
"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
// R.jar has to come before direct.jar
"out/soong/.intermediates/app/android_common/busybox/R.jar",
+ "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
},
@@ -948,6 +1015,7 @@
dontVerifyDirect: true,
dontVerifyTransitive: true,
+ dontVerifyShared: true,
dontVerifyDirectImport: true,
dontVerifyTransitiveImport: true,
},
@@ -968,10 +1036,14 @@
"out/soong/.intermediates/direct_import/android_common/package-res.apk",
"out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat",
},
- appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"},
+ appImports: []string{
+ "out/soong/.intermediates/shared/android_common/package-res.apk",
+ "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk",
+ },
appSrcJars: []string{"out/soong/.intermediates/app/android_common/gen/android/R.srcjar"},
appClasspath: []string{
"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
+ "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
},
@@ -1005,6 +1077,7 @@
},
dontVerifyTransitive: true,
+ dontVerifyShared: true,
dontVerifyDirectImport: true,
dontVerifyTransitiveImport: true,
},
@@ -1025,10 +1098,14 @@
"out/soong/.intermediates/direct_import/android_common/package-res.apk",
"out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat",
},
- appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"},
+ appImports: []string{
+ "out/soong/.intermediates/shared/android_common/package-res.apk",
+ "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk",
+ },
appSrcJars: []string{"out/soong/.intermediates/app/android_common/gen/android/R.srcjar"},
appClasspath: []string{
"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
+ "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
},
@@ -1068,6 +1145,7 @@
},
transitiveCombined: nil,
+ dontVerifyShared: true,
dontVerifyDirectImport: true,
dontVerifyTransitiveImport: true,
},
@@ -1082,6 +1160,7 @@
srcs: ["app/app.java"],
resource_dirs: ["app/res"],
manifest: "app/AndroidManifest.xml",
+ libs: ["shared"],
static_libs: ["direct", "direct_import"],
use_resource_processor: %v,
}
@@ -1105,6 +1184,35 @@
use_resource_processor: %v,
}
+ android_library {
+ name: "shared",
+ sdk_version: "current",
+ srcs: ["shared/shared.java"],
+ resource_dirs: ["shared/res"],
+ manifest: "shared/AndroidManifest.xml",
+ use_resource_processor: %v,
+ libs: ["shared_transitive_shared"],
+ static_libs: ["shared_transitive_static"],
+ }
+
+ android_library {
+ name: "shared_transitive_shared",
+ sdk_version: "current",
+ srcs: ["shared_transitive_shared/shared_transitive_shared.java"],
+ resource_dirs: ["shared_transitive_shared/res"],
+ manifest: "shared_transitive_shared/AndroidManifest.xml",
+ use_resource_processor: %v,
+ }
+
+ android_library {
+ name: "shared_transitive_static",
+ sdk_version: "current",
+ srcs: ["shared_transitive_static/shared.java"],
+ resource_dirs: ["shared_transitive_static/res"],
+ manifest: "shared_transitive_static/AndroidManifest.xml",
+ use_resource_processor: %v,
+ }
+
android_library_import {
name: "direct_import",
sdk_version: "current",
@@ -1130,12 +1238,16 @@
sdk_version: "current",
aars: ["transitive_import_dep.aar"],
}
- `, testCase.appUsesRP, testCase.directLibUsesRP, testCase.transitiveLibUsesRP)
+ `, testCase.appUsesRP, testCase.directLibUsesRP, testCase.transitiveLibUsesRP,
+ testCase.sharedLibUsesRP, testCase.sharedTransitiveSharedLibUsesRP, testCase.sharedTransitiveStaticLibUsesRP)
fs := android.MockFS{
- "app/res/values/strings.xml": nil,
- "direct/res/values/strings.xml": nil,
- "transitive/res/values/strings.xml": nil,
+ "app/res/values/strings.xml": nil,
+ "direct/res/values/strings.xml": nil,
+ "transitive/res/values/strings.xml": nil,
+ "shared/res/values/strings.xml": nil,
+ "shared_transitive_static/res/values/strings.xml": nil,
+ "shared_transitive_shared/res/values/strings.xml": nil,
}
result := android.GroupFixturePreparers(
@@ -1182,6 +1294,7 @@
app := getAaptInfo("app")
direct := getAaptInfo("direct")
transitive := getAaptInfo("transitive")
+ shared := getAaptInfo("shared")
directImport := getAaptInfo("direct_import")
transitiveImport := getAaptInfo("transitive_import")
@@ -1212,6 +1325,15 @@
android.AssertPathsRelativeToTopEquals(t, "transitive combined", testCase.transitiveCombined, transitive.combined)
}
+ if !testCase.dontVerifyShared {
+ android.AssertPathsRelativeToTopEquals(t, "shared resources", testCase.sharedResources, shared.resources)
+ android.AssertPathsRelativeToTopEquals(t, "shared overlays", testCase.sharedOverlays, shared.overlays)
+ android.AssertPathsRelativeToTopEquals(t, "shared imports", testCase.sharedImports, shared.imports)
+ android.AssertPathsRelativeToTopEquals(t, "shared srcjars", testCase.sharedSrcJars, shared.srcJars)
+ android.AssertPathsRelativeToTopEquals(t, "shared classpath", testCase.sharedClasspath, shared.classpath)
+ android.AssertPathsRelativeToTopEquals(t, "shared combined", testCase.sharedCombined, shared.combined)
+ }
+
if !testCase.dontVerifyDirectImport {
android.AssertPathsRelativeToTopEquals(t, "direct_import resources", testCase.directImportResources, directImport.resources)
android.AssertPathsRelativeToTopEquals(t, "direct_import overlays", testCase.directImportOverlays, directImport.overlays)
diff --git a/java/core-libraries/Android.bp b/java/core-libraries/Android.bp
index 4380f4f..8b7387a 100644
--- a/java/core-libraries/Android.bp
+++ b/java/core-libraries/Android.bp
@@ -66,6 +66,7 @@
libs: [
"stub-annotations",
],
+ enable_validation: false,
}
java_library {
diff --git a/java/droidstubs.go b/java/droidstubs.go
index 5432ce7..8ab2f2a 100644
--- a/java/droidstubs.go
+++ b/java/droidstubs.go
@@ -171,6 +171,10 @@
ApiStubsSrcProvider
}
+type currentApiTimestampProvider interface {
+ CurrentApiTimestamp() android.Path
+}
+
// droidstubs passes sources files through Metalava to generate stub .java files that only contain the API to be
// documented, filtering out hidden classes and methods. The resulting .java files are intended to be passed to
// a droiddoc module to generate documentation.
@@ -238,10 +242,15 @@
return d.stubsSrcJar
}
+func (d *Droidstubs) CurrentApiTimestamp() android.Path {
+ return d.checkCurrentApiTimestamp
+}
+
var metalavaMergeAnnotationsDirTag = dependencyTag{name: "metalava-merge-annotations-dir"}
var metalavaMergeInclusionAnnotationsDirTag = dependencyTag{name: "metalava-merge-inclusion-annotations-dir"}
var metalavaAPILevelsAnnotationsDirTag = dependencyTag{name: "metalava-api-levels-annotations-dir"}
var metalavaAPILevelsModuleTag = dependencyTag{name: "metalava-api-levels-module-tag"}
+var metalavaCurrentApiTimestampTag = dependencyTag{name: "metalava-current-api-timestamp-tag"}
func (d *Droidstubs) DepsMutator(ctx android.BottomUpMutatorContext) {
d.Javadoc.addDeps(ctx)
diff --git a/java/droidstubs_test.go b/java/droidstubs_test.go
index e149b98..f86e1ac 100644
--- a/java/droidstubs_test.go
+++ b/java/droidstubs_test.go
@@ -392,7 +392,7 @@
removed_api_file: "A/removed.txt",
}
},
- visibility: ["//a"],
+ visibility: ["//a", "//b"],
}
`,
map[string][]byte{
diff --git a/java/java.go b/java/java.go
index 3b20ea4..990a084 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1664,6 +1664,8 @@
extractedSrcJar android.WritablePath
// .dex of stubs, used for hiddenapi processing
dexJarFile OptionalDexJarPath
+
+ validationPaths android.Paths
}
type JavaApiLibraryProperties struct {
@@ -1699,6 +1701,12 @@
// The jar will also be passed to metalava as a classpath to
// generate compilable stubs.
System_modules *string
+
+ // If true, the module runs validation on the API signature files provided
+ // by the modules passed via api_contributions by checking if the files are
+ // in sync with the source Java files. However, the environment variable
+ // DISABLE_STUB_VALIDATION has precedence over this property.
+ Enable_validation *bool
}
func ApiLibraryFactory() android.Module {
@@ -1787,6 +1795,12 @@
}
}
+func (al *ApiLibrary) addValidation(ctx android.ModuleContext, cmd *android.RuleBuilderCommand, validationPaths android.Paths) {
+ for _, validationPath := range validationPaths {
+ cmd.Validation(validationPath)
+ }
+}
+
// This method extracts the stub class files from the stub jar file provided
// from full_api_surface_stub module instead of compiling the srcjar generated from invoking metalava.
// This method is used because metalava can generate compilable from-text stubs only when
@@ -1823,8 +1837,28 @@
func (al *ApiLibrary) DepsMutator(ctx android.BottomUpMutatorContext) {
apiContributions := al.properties.Api_contributions
+ addValidations := !ctx.Config().IsEnvTrue("DISABLE_STUB_VALIDATION") &&
+ proptools.BoolDefault(al.properties.Enable_validation, true)
for _, apiContributionName := range apiContributions {
ctx.AddDependency(ctx.Module(), javaApiContributionTag, apiContributionName)
+
+ // Add the java_api_contribution module generating droidstubs module
+ // as dependency when validation adding conditions are met and
+ // the java_api_contribution module name has ".api.contribution" suffix.
+ // All droidstubs-generated modules possess the suffix in the name,
+ // but there is no such guarantee for tests.
+ if addValidations {
+ if strings.HasSuffix(apiContributionName, ".api.contribution") {
+ ctx.AddDependency(ctx.Module(), metalavaCurrentApiTimestampTag, strings.TrimSuffix(apiContributionName, ".api.contribution"))
+ } else {
+ ctx.ModuleErrorf("Validation is enabled for module %s but a "+
+ "current timestamp provider is not found for the api "+
+ "contribution %s",
+ ctx.ModuleName(),
+ apiContributionName,
+ )
+ }
+ }
}
ctx.AddVariationDependencies(nil, libTag, al.properties.Libs...)
ctx.AddVariationDependencies(nil, staticLibTag, al.properties.Static_libs...)
@@ -1862,8 +1896,7 @@
android.PathForModuleOut(ctx, "metalava.sbox.textproto")).
SandboxInputs()
- var stubsDir android.OptionalPath
- stubsDir = android.OptionalPathForPath(android.PathForModuleOut(ctx, "metalava", "stubsDir"))
+ stubsDir := android.OptionalPathForPath(android.PathForModuleOut(ctx, "metalava", "stubsDir"))
rule.Command().Text("rm -rf").Text(stubsDir.String())
rule.Command().Text("mkdir -p").Text(stubsDir.String())
@@ -1895,6 +1928,10 @@
case systemModulesTag:
module := dep.(SystemModulesProvider)
systemModulesPaths = append(systemModulesPaths, module.HeaderJars()...)
+ case metalavaCurrentApiTimestampTag:
+ if currentApiTimestampProvider, ok := dep.(currentApiTimestampProvider); ok {
+ al.validationPaths = append(al.validationPaths, currentApiTimestampProvider.CurrentApiTimestamp())
+ }
}
})
@@ -1918,6 +1955,8 @@
cmd.FlagWithInput("--migrate-nullness ", previousApi)
}
+ al.addValidation(ctx, cmd, al.validationPaths)
+
al.stubsSrcJar = android.PathForModuleOut(ctx, "metalava", ctx.ModuleName()+"-"+"stubs.srcjar")
al.stubsJarWithoutStaticLibs = android.PathForModuleOut(ctx, "metalava", "stubs.jar")
al.stubsJar = android.PathForModuleOut(ctx, ctx.ModuleName(), fmt.Sprintf("%s.jar", ctx.ModuleName()))
diff --git a/java/java_test.go b/java/java_test.go
index 6b8b735..c4fc55b 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -1847,9 +1847,17 @@
}
func TestJavaApiContributionEmptyApiFile(t *testing.T) {
- testJavaError(t,
+ android.GroupFixturePreparers(
+ prepareForJavaTest,
+ android.FixtureMergeEnv(
+ map[string]string{
+ "DISABLE_STUB_VALIDATION": "true",
+ },
+ ),
+ ).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
"Error: foo has an empty api file.",
- `java_api_contribution {
+ )).RunTestWithBp(t, `
+ java_api_contribution {
name: "foo",
}
java_api_library {
@@ -1874,7 +1882,20 @@
api_surface: "public",
}
`
- ctx, _ := testJavaWithFS(t, `
+ ctx := android.GroupFixturePreparers(
+ prepareForJavaTest,
+ android.FixtureMergeMockFs(
+ map[string][]byte{
+ "a/Android.bp": []byte(provider_bp_a),
+ "b/Android.bp": []byte(provider_bp_b),
+ },
+ ),
+ android.FixtureMergeEnv(
+ map[string]string{
+ "DISABLE_STUB_VALIDATION": "true",
+ },
+ ),
+ ).RunTestWithBp(t, `
java_api_library {
name: "bar1",
api_surface: "public",
@@ -1886,11 +1907,7 @@
api_surface: "system",
api_contributions: ["foo1", "foo2"],
}
- `,
- map[string][]byte{
- "a/Android.bp": []byte(provider_bp_a),
- "b/Android.bp": []byte(provider_bp_b),
- })
+ `)
testcases := []struct {
moduleName string
@@ -1944,7 +1961,22 @@
api_surface: "system",
}
`
- ctx, _ := testJavaWithFS(t, `
+ ctx := android.GroupFixturePreparers(
+ prepareForJavaTest,
+ android.FixtureMergeMockFs(
+ map[string][]byte{
+ "a/Android.bp": []byte(provider_bp_a),
+ "b/Android.bp": []byte(provider_bp_b),
+ "c/Android.bp": []byte(provider_bp_c),
+ "d/Android.bp": []byte(provider_bp_d),
+ },
+ ),
+ android.FixtureMergeEnv(
+ map[string]string{
+ "DISABLE_STUB_VALIDATION": "true",
+ },
+ ),
+ ).RunTestWithBp(t, `
java_defaults {
name: "baz1",
api_surface: "public",
@@ -1975,13 +2007,7 @@
defaults:["baz1", "baz2"],
api_contributions: ["foo4"],
}
- `,
- map[string][]byte{
- "a/Android.bp": []byte(provider_bp_a),
- "b/Android.bp": []byte(provider_bp_b),
- "c/Android.bp": []byte(provider_bp_c),
- "d/Android.bp": []byte(provider_bp_d),
- })
+ `)
testcases := []struct {
moduleName string
@@ -2026,7 +2052,20 @@
api_surface: "public",
}
`
- ctx, _ := testJavaWithFS(t, `
+ ctx := android.GroupFixturePreparers(
+ prepareForJavaTest,
+ android.FixtureMergeMockFs(
+ map[string][]byte{
+ "a/Android.bp": []byte(provider_bp_a),
+ "b/Android.bp": []byte(provider_bp_b),
+ },
+ ),
+ android.FixtureMergeEnv(
+ map[string]string{
+ "DISABLE_STUB_VALIDATION": "true",
+ },
+ ),
+ ).RunTestWithBp(t, `
java_api_library {
name: "bar1",
api_surface: "public",
@@ -2038,11 +2077,7 @@
api_surface: "system",
api_contributions: ["foo1", "foo2"],
}
- `,
- map[string][]byte{
- "a/Android.bp": []byte(provider_bp_a),
- "b/Android.bp": []byte(provider_bp_b),
- })
+ `)
testcases := []struct {
moduleName string
@@ -2094,7 +2129,24 @@
}
`
- ctx, _ := testJavaWithFS(t, `
+ ctx := android.GroupFixturePreparers(
+ prepareForJavaTest,
+ android.FixtureMergeMockFs(
+ map[string][]byte{
+ "a/Android.bp": []byte(provider_bp_a),
+ "b/Android.bp": []byte(provider_bp_b),
+ "c/Android.bp": []byte(lib_bp_a),
+ "c/Lib.java": {},
+ "d/Android.bp": []byte(lib_bp_b),
+ "d/Lib.java": {},
+ },
+ ),
+ android.FixtureMergeEnv(
+ map[string]string{
+ "DISABLE_STUB_VALIDATION": "true",
+ },
+ ),
+ ).RunTestWithBp(t, `
java_api_library {
name: "bar1",
api_surface: "public",
@@ -2108,15 +2160,7 @@
api_contributions: ["foo1", "foo2"],
libs: ["lib1", "lib2", "bar1"],
}
- `,
- map[string][]byte{
- "a/Android.bp": []byte(provider_bp_a),
- "b/Android.bp": []byte(provider_bp_b),
- "c/Android.bp": []byte(lib_bp_a),
- "c/Lib.java": {},
- "d/Android.bp": []byte(lib_bp_b),
- "d/Lib.java": {},
- })
+ `)
testcases := []struct {
moduleName string
@@ -2171,7 +2215,24 @@
}
`
- ctx, _ := testJavaWithFS(t, `
+ ctx := android.GroupFixturePreparers(
+ prepareForJavaTest,
+ android.FixtureMergeMockFs(
+ map[string][]byte{
+ "a/Android.bp": []byte(provider_bp_a),
+ "b/Android.bp": []byte(provider_bp_b),
+ "c/Android.bp": []byte(lib_bp_a),
+ "c/Lib.java": {},
+ "d/Android.bp": []byte(lib_bp_b),
+ "d/Lib.java": {},
+ },
+ ),
+ android.FixtureMergeEnv(
+ map[string]string{
+ "DISABLE_STUB_VALIDATION": "true",
+ },
+ ),
+ ).RunTestWithBp(t, `
java_api_library {
name: "bar1",
api_surface: "public",
@@ -2185,15 +2246,7 @@
api_contributions: ["foo1", "foo2"],
static_libs: ["lib1", "lib2", "bar1"],
}
- `,
- map[string][]byte{
- "a/Android.bp": []byte(provider_bp_a),
- "b/Android.bp": []byte(provider_bp_b),
- "c/Android.bp": []byte(lib_bp_a),
- "c/Lib.java": {},
- "d/Android.bp": []byte(lib_bp_b),
- "d/Lib.java": {},
- })
+ `)
testcases := []struct {
moduleName string
@@ -2242,19 +2295,28 @@
}
`
- ctx, _ := testJavaWithFS(t, `
+ ctx := android.GroupFixturePreparers(
+ prepareForJavaTest,
+ android.FixtureMergeMockFs(
+ map[string][]byte{
+ "a/Android.bp": []byte(provider_bp_a),
+ "b/Android.bp": []byte(provider_bp_b),
+ "c/Android.bp": []byte(lib_bp_a),
+ },
+ ),
+ android.FixtureMergeEnv(
+ map[string]string{
+ "DISABLE_STUB_VALIDATION": "true",
+ },
+ ),
+ ).RunTestWithBp(t, `
java_api_library {
name: "bar1",
api_surface: "public",
api_contributions: ["foo1"],
full_api_surface_stub: "lib1",
}
- `,
- map[string][]byte{
- "a/Android.bp": []byte(provider_bp_a),
- "b/Android.bp": []byte(provider_bp_b),
- "c/Android.bp": []byte(lib_bp_a),
- })
+ `)
m := ctx.ModuleForTests("bar1", "android_common")
manifest := m.Output("metalava.sbox.textproto")
@@ -2402,7 +2464,14 @@
}
func TestJavaApiContributionImport(t *testing.T) {
- ctx, _ := testJava(t, `
+ ctx := android.GroupFixturePreparers(
+ prepareForJavaTest,
+ android.FixtureMergeEnv(
+ map[string]string{
+ "DISABLE_STUB_VALIDATION": "true",
+ },
+ ),
+ ).RunTestWithBp(t, `
java_api_library {
name: "foo",
api_contributions: ["bar"],
@@ -2483,3 +2552,50 @@
classPathFlag := "--classpath __SBOX_SANDBOX_DIR__/out/.intermediates/bar/android_common/turbine-combined/bar.jar"
android.AssertStringDoesContain(t, "command expected to contain classpath flag", manifestCommand, classPathFlag)
}
+
+func TestApiLibraryDroidstubsDependency(t *testing.T) {
+ result := android.GroupFixturePreparers(
+ prepareForJavaTest,
+ PrepareForTestWithJavaSdkLibraryFiles,
+ FixtureWithLastReleaseApis("foo"),
+ android.FixtureModifyConfig(func(config android.Config) {
+ config.SetApiLibraries([]string{"foo"})
+ }),
+ android.FixtureMergeMockFs(
+ map[string][]byte{
+ "A.java": nil,
+ },
+ ),
+ ).RunTestWithBp(t, `
+ java_api_library {
+ name: "foo",
+ api_contributions: [
+ "api-stubs-docs-non-updatable.api.contribution",
+ ],
+ enable_validation: true,
+ }
+ java_api_library {
+ name: "bar",
+ api_contributions: [
+ "api-stubs-docs-non-updatable.api.contribution",
+ ],
+ enable_validation: false,
+ }
+ `)
+
+ currentApiTimestampPath := "api-stubs-docs-non-updatable/android_common/metalava/check_current_api.timestamp"
+ foo := result.ModuleForTests("foo", "android_common").Module().(*ApiLibrary)
+ fooValidationPathsString := strings.Join(foo.validationPaths.Strings(), " ")
+ bar := result.ModuleForTests("bar", "android_common").Module().(*ApiLibrary)
+ barValidationPathsString := strings.Join(bar.validationPaths.Strings(), " ")
+ android.AssertStringDoesContain(t,
+ "Module expected to have validation",
+ fooValidationPathsString,
+ currentApiTimestampPath,
+ )
+ android.AssertStringDoesNotContain(t,
+ "Module expected to not have validation",
+ barValidationPathsString,
+ currentApiTimestampPath,
+ )
+}
diff --git a/java/sdk_library.go b/java/sdk_library.go
index f72c608..041aeb7 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -1838,6 +1838,7 @@
Static_libs []string
Full_api_surface_stub *string
System_modules *string
+ Enable_validation *bool
}{}
props.Name = proptools.StringPtr(module.apiLibraryModuleName(apiScope))
@@ -1876,7 +1877,16 @@
props.Full_api_surface_stub = proptools.StringPtr(apiScope.kind.DefaultJavaLibraryName() + "_full.from-text")
}
+ // java_sdk_library modules that set sdk_version as none does not depend on other api
+ // domains. Therefore, java_api_library created from such modules should not depend on
+ // full_api_surface_stubs but create and compile stubs by the java_api_library module
+ // itself.
+ if module.SdkVersion(mctx).Kind == android.SdkNone {
+ props.Full_api_surface_stub = nil
+ }
+
props.System_modules = module.deviceProperties.System_modules
+ props.Enable_validation = proptools.BoolPtr(true)
mctx.CreateModule(ApiLibraryFactory, &props)
}
diff --git a/rust/builder.go b/rust/builder.go
index bea8ff7..fe2d03a 100644
--- a/rust/builder.go
+++ b/rust/builder.go
@@ -278,7 +278,9 @@
if ctx.Config().IsEnvTrue("SOONG_RUSTC_INCREMENTAL") {
incrementalPath := android.PathForOutput(ctx, "rustc").String()
- rustcFlags = append(rustcFlags, "-Cincremental="+incrementalPath)
+ rustcFlags = append(rustcFlags, "-C incremental="+incrementalPath)
+ } else {
+ rustcFlags = append(rustcFlags, "-C codegen-units=1")
}
// Disallow experimental features
diff --git a/rust/config/global.go b/rust/config/global.go
index 4397d58..b94d92f 100644
--- a/rust/config/global.go
+++ b/rust/config/global.go
@@ -44,7 +44,6 @@
GlobalRustFlags = []string{
"-Z stack-protector=strong",
"-Z remap-cwd-prefix=.",
- "-C codegen-units=1",
"-C debuginfo=2",
"-C opt-level=3",
"-C relocation-model=pic",
@@ -55,7 +54,7 @@
// This flag requires to have no space so that when it's exported to bazel
// it can be removed. See aosp/2768339
"--color=always",
- "-Zdylib-lto",
+ "-Z dylib-lto",
"-Z link-native-libraries=no",
}
diff --git a/scripts/manifest_check.py b/scripts/manifest_check.py
index c8d4f76..c33b104 100755
--- a/scripts/manifest_check.py
+++ b/scripts/manifest_check.py
@@ -187,18 +187,17 @@
return required, optional, tags
-def extract_uses_libs_xml(xml): #pylint: disable=inconsistent-return-statements
+def extract_uses_libs_xml(xml):
"""Extract <uses-library> tags from the manifest."""
manifest = parse_manifest(xml)
elems = get_children_with_tag(manifest, 'application')
- application = elems[0] if len(elems) == 1 else None
- if len(elems) > 1: #pylint: disable=no-else-raise
+ if len(elems) > 1:
raise RuntimeError('found multiple <application> tags')
- elif not elems:
- if uses_libraries or optional_uses_libraries: #pylint: disable=undefined-variable
- raise ManifestMismatchError('no <application> tag found')
- return
+ if not elems:
+ return [], [], []
+
+ application = elems[0]
libs = get_children_with_tag(application, 'uses-library')