diff options
36 files changed, 384 insertions, 2981 deletions
diff --git a/aconfig/codegen/cc_aconfig_library_test.go b/aconfig/codegen/cc_aconfig_library_test.go index c5ff6a18d..d762e9bfe 100644 --- a/aconfig/codegen/cc_aconfig_library_test.go +++ b/aconfig/codegen/cc_aconfig_library_test.go @@ -148,6 +148,7 @@ func TestAndroidMkCcLibrary(t *testing.T) { cc_library { name: "server_configurable_flags", srcs: ["server_configurable_flags.cc"], + vendor_available: true, } ` result := android.GroupFixturePreparers( @@ -155,7 +156,7 @@ func TestAndroidMkCcLibrary(t *testing.T) { cc.PrepareForTestWithCcDefaultModules). ExtendWithErrorHandler(android.FixtureExpectsNoErrors).RunTestWithBp(t, bp) - module := result.ModuleForTests("my_cc_library", "android_arm64_armv8-a_shared").Module() + module := result.ModuleForTests("my_cc_library", "android_vendor_arm64_armv8-a_shared").Module() entry := android.AndroidMkEntriesForTest(t, result.TestContext, module)[0] diff --git a/android/Android.bp b/android/Android.bp index e40e462cc..8de0c7650 100644 --- a/android/Android.bp +++ b/android/Android.bp @@ -105,7 +105,6 @@ bootstrap_go_package { "apex_test.go", "arch_test.go", "config_test.go", - "config_bp2build_test.go", "configured_jars_test.go", "csuite_config_test.go", "defaults_test.go", diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index 07e1f122d..a52bff318 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -14,30 +14,7 @@ package allowlists -// Configuration to decide if modules in a directory should default to true/false for bp2build_available -type Bp2BuildConfig map[string]BazelConversionConfigEntry -type BazelConversionConfigEntry int - const ( - // iota + 1 ensures that the int value is not 0 when used in the Bp2buildAllowlist map, - // which can also mean that the key doesn't exist in a lookup. - - // all modules in this package and subpackages default to bp2build_available: true. - // allows modules to opt-out. - Bp2BuildDefaultTrueRecursively BazelConversionConfigEntry = iota + 1 - - // all modules in this package (not recursively) default to bp2build_available: true. - // allows modules to opt-out. - Bp2BuildDefaultTrue - - // all modules in this package (not recursively) default to bp2build_available: false. - // allows modules to opt-in. - Bp2BuildDefaultFalse - - // all modules in this package and subpackages default to bp2build_available: false. - // allows modules to opt-in. - Bp2BuildDefaultFalseRecursively - // Modules with build time of more than half a minute should have high priority. DEFAULT_PRIORITIZED_WEIGHT = 1000 // Modules with build time of more than a few minute should have higher priority. @@ -48,1633 +25,6 @@ const ( ) var ( - Bp2buildDefaultConfig = Bp2BuildConfig{ - "art": Bp2BuildDefaultTrue, - "art/libartbase": Bp2BuildDefaultTrueRecursively, - "art/libartpalette": Bp2BuildDefaultTrueRecursively, - "art/libdexfile": Bp2BuildDefaultTrueRecursively, - "art/libnativebridge": Bp2BuildDefaultTrueRecursively, - "art/runtime": Bp2BuildDefaultTrueRecursively, - "art/tools": Bp2BuildDefaultTrue, - "bionic": Bp2BuildDefaultTrueRecursively, - "bootable/recovery/applypatch": Bp2BuildDefaultTrue, - "bootable/recovery/minadbd": Bp2BuildDefaultTrue, - "bootable/recovery/minui": Bp2BuildDefaultTrue, - "bootable/recovery/recovery_utils": Bp2BuildDefaultTrue, - "bootable/recovery/tools/recovery_l10n": Bp2BuildDefaultTrue, - - "build/bazel": Bp2BuildDefaultTrueRecursively, - "build/make/target/product/security": Bp2BuildDefaultTrue, - "build/make/tools": Bp2BuildDefaultTrue, - "build/make/tools/protos": Bp2BuildDefaultTrue, - "build/make/tools/releasetools": Bp2BuildDefaultTrue, - "build/make/tools/sbom": Bp2BuildDefaultTrue, - "build/make/tools/signapk": Bp2BuildDefaultTrue, - "build/make/tools/zipalign": Bp2BuildDefaultTrueRecursively, - "build/soong": Bp2BuildDefaultTrue, - "build/soong/cc/libbuildversion": Bp2BuildDefaultTrue, // Skip tests subdir - "build/soong/cc/ndkstubgen": Bp2BuildDefaultTrue, - "build/soong/cc/symbolfile": Bp2BuildDefaultTrue, - "build/soong/jar": Bp2BuildDefaultTrue, - "build/soong/licenses": Bp2BuildDefaultTrue, - "build/soong/linkerconfig": Bp2BuildDefaultTrueRecursively, - "build/soong/response": Bp2BuildDefaultTrue, - "build/soong/scripts": Bp2BuildDefaultTrueRecursively, - "build/soong/third_party/zip": Bp2BuildDefaultTrue, - - "cts/common/device-side/nativetesthelper/jni": Bp2BuildDefaultTrueRecursively, - "cts/flags/cc_tests": Bp2BuildDefaultTrueRecursively, - "cts/libs/json": Bp2BuildDefaultTrueRecursively, - "cts/tests/tests/gesture": Bp2BuildDefaultTrueRecursively, - - "dalvik/tools/dexdeps": Bp2BuildDefaultTrueRecursively, - - "development/apps/DevelopmentSettings": Bp2BuildDefaultTrue, - "development/apps/Fallback": Bp2BuildDefaultTrue, - "development/apps/WidgetPreview": Bp2BuildDefaultTrue, - "development/python-packages/adb": Bp2BuildDefaultTrueRecursively, - "development/samples/BasicGLSurfaceView": Bp2BuildDefaultTrue, - "development/samples/BluetoothChat": Bp2BuildDefaultTrue, - "development/samples/BrokenKeyDerivation": Bp2BuildDefaultTrue, - "development/samples/Compass": Bp2BuildDefaultTrue, - "development/samples/ContactManager": Bp2BuildDefaultTrue, - "development/samples/FixedGridLayout": Bp2BuildDefaultTrue, - "development/samples/HelloEffects": Bp2BuildDefaultTrue, - "development/samples/Home": Bp2BuildDefaultTrue, - "development/samples/HoneycombGallery": Bp2BuildDefaultTrue, - "development/samples/JetBoy": Bp2BuildDefaultTrue, - "development/samples/KeyChainDemo": Bp2BuildDefaultTrue, - "development/samples/LceDemo": Bp2BuildDefaultTrue, - "development/samples/LunarLander": Bp2BuildDefaultTrue, - "development/samples/MultiResolution": Bp2BuildDefaultTrue, - "development/samples/MultiWindow": Bp2BuildDefaultTrue, - "development/samples/NotePad": Bp2BuildDefaultTrue, - "development/samples/Obb": Bp2BuildDefaultTrue, - "development/samples/RSSReader": Bp2BuildDefaultTrue, - "development/samples/ReceiveShareDemo": Bp2BuildDefaultTrue, - "development/samples/SearchableDictionary": Bp2BuildDefaultTrue, - "development/samples/SipDemo": Bp2BuildDefaultTrue, - "development/samples/SkeletonApp": Bp2BuildDefaultTrue, - "development/samples/Snake": Bp2BuildDefaultTrue, - "development/samples/SpellChecker/": Bp2BuildDefaultTrueRecursively, - "development/samples/ThemedNavBarKeyboard": Bp2BuildDefaultTrue, - "development/samples/ToyVpn": Bp2BuildDefaultTrue, - "development/samples/TtsEngine": Bp2BuildDefaultTrue, - "development/samples/USB/AdbTest": Bp2BuildDefaultTrue, - "development/samples/USB/MissileLauncher": Bp2BuildDefaultTrue, - "development/samples/VoiceRecognitionService": Bp2BuildDefaultTrue, - "development/samples/VoicemailProviderDemo": Bp2BuildDefaultTrue, - "development/samples/WiFiDirectDemo": Bp2BuildDefaultTrue, - "development/sdk": Bp2BuildDefaultTrueRecursively, - - "external/aac": Bp2BuildDefaultTrueRecursively, - "external/abseil-cpp": Bp2BuildDefaultTrueRecursively, - "external/arm-optimized-routines": Bp2BuildDefaultTrueRecursively, - "external/auto": Bp2BuildDefaultTrue, - "external/auto/android-annotation-stubs": Bp2BuildDefaultTrueRecursively, - "external/auto/common": Bp2BuildDefaultTrueRecursively, - "external/auto/service": Bp2BuildDefaultTrueRecursively, - "external/auto/value": Bp2BuildDefaultTrueRecursively, - "external/boringssl": Bp2BuildDefaultTrueRecursively, - "external/bouncycastle": Bp2BuildDefaultTrue, - "external/brotli": Bp2BuildDefaultTrue, - "external/bsdiff": Bp2BuildDefaultTrueRecursively, - "external/bzip2": Bp2BuildDefaultTrueRecursively, - "external/clang/lib": Bp2BuildDefaultTrue, - "external/conscrypt": Bp2BuildDefaultTrue, - "external/dexmaker": Bp2BuildDefaultTrueRecursively, - "external/e2fsprogs": Bp2BuildDefaultTrueRecursively, - "external/eigen": Bp2BuildDefaultTrueRecursively, - "external/erofs-utils": Bp2BuildDefaultTrueRecursively, - "external/error_prone": Bp2BuildDefaultTrueRecursively, - "external/escapevelocity": Bp2BuildDefaultTrueRecursively, - "external/expat": Bp2BuildDefaultTrueRecursively, - "external/f2fs-tools": Bp2BuildDefaultTrue, - "external/flac": Bp2BuildDefaultTrueRecursively, - "external/flatbuffers": Bp2BuildDefaultTrueRecursively, - "external/fmtlib": Bp2BuildDefaultTrueRecursively, - "external/fsverity-utils": Bp2BuildDefaultTrueRecursively, - "external/gflags": Bp2BuildDefaultTrueRecursively, - "external/google-benchmark": Bp2BuildDefaultTrueRecursively, - "external/googletest": Bp2BuildDefaultTrueRecursively, - "external/guava": Bp2BuildDefaultTrueRecursively, - "external/gwp_asan": Bp2BuildDefaultTrueRecursively, - "external/hamcrest": Bp2BuildDefaultTrueRecursively, - "external/icu": Bp2BuildDefaultTrueRecursively, - "external/icu/android_icu4j": Bp2BuildDefaultFalse, // java rules incomplete - "external/icu/icu4j": Bp2BuildDefaultFalse, // java rules incomplete - "external/jacoco": Bp2BuildDefaultTrueRecursively, - "external/jarjar": Bp2BuildDefaultTrueRecursively, - "external/javaparser": Bp2BuildDefaultTrueRecursively, - "external/javapoet": Bp2BuildDefaultTrueRecursively, - "external/javassist": Bp2BuildDefaultTrueRecursively, - "external/jemalloc_new": Bp2BuildDefaultTrueRecursively, - "external/jsoncpp": Bp2BuildDefaultTrueRecursively, - "external/jsr305": Bp2BuildDefaultTrueRecursively, - "external/jsr330": Bp2BuildDefaultTrueRecursively, - "external/junit": Bp2BuildDefaultTrueRecursively, - "external/kotlinc": Bp2BuildDefaultTrueRecursively, - "external/kotlinx.coroutines": Bp2BuildDefaultTrueRecursively, - "external/libaom": Bp2BuildDefaultTrueRecursively, - "external/libavc": Bp2BuildDefaultTrueRecursively, - "external/libcap": Bp2BuildDefaultTrueRecursively, - "external/libcxx": Bp2BuildDefaultTrueRecursively, - "external/libcxxabi": Bp2BuildDefaultTrueRecursively, - "external/libdivsufsort": Bp2BuildDefaultTrueRecursively, - "external/libdrm": Bp2BuildDefaultTrue, - "external/libevent": Bp2BuildDefaultTrueRecursively, - "external/libgav1": Bp2BuildDefaultTrueRecursively, - "external/libdav1d": Bp2BuildDefaultTrueRecursively, - "external/libhevc": Bp2BuildDefaultTrueRecursively, - "external/libjpeg-turbo": Bp2BuildDefaultTrueRecursively, - "external/libmpeg2": Bp2BuildDefaultTrueRecursively, - "external/libphonenumber": Bp2BuildDefaultTrueRecursively, - "external/libpng": Bp2BuildDefaultTrueRecursively, - "external/libvpx": Bp2BuildDefaultTrueRecursively, - "external/libyuv": Bp2BuildDefaultTrueRecursively, - "external/lz4/lib": Bp2BuildDefaultTrue, - "external/lz4/programs": Bp2BuildDefaultTrue, - "external/lzma/C": Bp2BuildDefaultTrueRecursively, - "external/mdnsresponder": Bp2BuildDefaultTrueRecursively, - "external/minijail": Bp2BuildDefaultTrueRecursively, - "external/mockito": Bp2BuildDefaultTrueRecursively, - "external/musl": Bp2BuildDefaultTrueRecursively, - "external/objenesis": Bp2BuildDefaultTrueRecursively, - "external/openscreen": Bp2BuildDefaultTrueRecursively, - "external/ow2-asm": Bp2BuildDefaultTrueRecursively, - "external/pcre": Bp2BuildDefaultTrueRecursively, - "external/perfmark/api": Bp2BuildDefaultTrueRecursively, - "external/perfetto": Bp2BuildDefaultTrue, - "external/protobuf": 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/rust/crates/rustc-demangle": Bp2BuildDefaultTrueRecursively, - "external/rust/crates/rustc-demangle-capi": Bp2BuildDefaultTrueRecursively, - "external/scudo": Bp2BuildDefaultTrueRecursively, - "external/selinux/checkpolicy": Bp2BuildDefaultTrueRecursively, - "external/selinux/libselinux": Bp2BuildDefaultTrueRecursively, - "external/selinux/libsepol": Bp2BuildDefaultTrueRecursively, - "external/speex": Bp2BuildDefaultTrueRecursively, - "external/sqlite": Bp2BuildDefaultTrueRecursively, - "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/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, - "hardware/interfaces/audio/aidl/common": Bp2BuildDefaultTrue, - "hardware/interfaces/audio/aidl/default": Bp2BuildDefaultTrue, - "hardware/interfaces/audio/aidl/sounddose": Bp2BuildDefaultTrue, - "hardware/interfaces/camera/metadata/aidl": Bp2BuildDefaultTrueRecursively, - "hardware/interfaces/common/aidl": Bp2BuildDefaultTrue, - "hardware/interfaces/common/fmq/aidl": Bp2BuildDefaultTrue, - "hardware/interfaces/common/support": Bp2BuildDefaultTrue, - "hardware/interfaces/configstore/1.0": Bp2BuildDefaultTrue, - "hardware/interfaces/configstore/1.1": Bp2BuildDefaultTrue, - "hardware/interfaces/configstore/utils": Bp2BuildDefaultTrue, - "hardware/interfaces/contexthub/aidl": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/allocator/2.0": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/allocator/3.0": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/allocator/4.0": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/allocator/aidl": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/bufferqueue/1.0": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/bufferqueue/2.0": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/common/1.0": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/common/1.1": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/common/1.2": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/common/aidl": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/mapper/2.0": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/mapper/2.1": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/mapper/3.0": Bp2BuildDefaultTrue, - "hardware/interfaces/graphics/mapper/4.0": Bp2BuildDefaultTrue, - "hardware/interfaces/health/1.0": Bp2BuildDefaultTrue, - "hardware/interfaces/health/1.0/default": Bp2BuildDefaultTrue, - "hardware/interfaces/health/2.0": Bp2BuildDefaultTrue, - "hardware/interfaces/health/2.0/default": Bp2BuildDefaultTrue, - "hardware/interfaces/health/2.0/utils": Bp2BuildDefaultTrueRecursively, - "hardware/interfaces/health/2.1": Bp2BuildDefaultTrue, - "hardware/interfaces/health/aidl": Bp2BuildDefaultTrue, - "hardware/interfaces/health/utils": Bp2BuildDefaultTrueRecursively, - "hardware/interfaces/media": Bp2BuildDefaultTrueRecursively, - "hardware/interfaces/media/bufferpool/aidl/default/tests": Bp2BuildDefaultFalseRecursively, - "hardware/interfaces/media/omx/1.0/vts": Bp2BuildDefaultFalseRecursively, - "hardware/interfaces/neuralnetworks": Bp2BuildDefaultTrueRecursively, - "hardware/interfaces/neuralnetworks/aidl/vts": Bp2BuildDefaultFalseRecursively, - "hardware/interfaces/neuralnetworks/1.0/vts": Bp2BuildDefaultFalseRecursively, - "hardware/interfaces/neuralnetworks/1.1/vts": Bp2BuildDefaultFalseRecursively, - "hardware/interfaces/neuralnetworks/1.2/vts": Bp2BuildDefaultFalseRecursively, - "hardware/interfaces/neuralnetworks/1.3/vts": Bp2BuildDefaultFalseRecursively, - "hardware/interfaces/neuralnetworks/1.4/vts": Bp2BuildDefaultFalseRecursively, - "hardware/interfaces/tests": Bp2BuildDefaultTrueRecursively, - "hardware/interfaces/tests/extension": Bp2BuildDefaultFalseRecursively, // missing deps - "hardware/interfaces/tests/msgq": Bp2BuildDefaultFalseRecursively, // missing deps - - "libnativehelper": Bp2BuildDefaultTrueRecursively, - - "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, - "platform_testing/tests/example": Bp2BuildDefaultTrueRecursively, - - "prebuilts/clang/host/linux-x86": Bp2BuildDefaultTrueRecursively, - "prebuilts/gradle-plugin": 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/support": Bp2BuildDefaultTrue, - "prebuilts/tools": Bp2BuildDefaultTrue, - "prebuilts/tools/common/m2": Bp2BuildDefaultTrue, - "prebuilts/r8": Bp2BuildDefaultTrueRecursively, - - "sdk/annotations": Bp2BuildDefaultTrueRecursively, - "sdk/dumpeventlog": Bp2BuildDefaultTrue, - "sdk/eventanalyzer": Bp2BuildDefaultTrue, - - "system/apex": Bp2BuildDefaultFalse, // TODO(b/207466993): flaky failures - "system/apex/apexer": Bp2BuildDefaultTrue, - "system/apex/libs": Bp2BuildDefaultTrueRecursively, - "system/apex/libs/libapexsupport": Bp2BuildDefaultFalseRecursively, // TODO(b/267572288): depends on rust - "system/apex/proto": Bp2BuildDefaultTrueRecursively, - "system/apex/tools": Bp2BuildDefaultTrueRecursively, - "system/core/debuggerd": Bp2BuildDefaultTrueRecursively, - "system/core/diagnose_usb": Bp2BuildDefaultTrueRecursively, - "system/core/fs_mgr": Bp2BuildDefaultTrueRecursively, - "system/core/healthd": Bp2BuildDefaultTrue, - "system/core/healthd/testdata": Bp2BuildDefaultTrue, - "system/core/libasyncio": Bp2BuildDefaultTrue, - "system/core/libcrypto_utils": Bp2BuildDefaultTrueRecursively, - "system/core/libcutils": Bp2BuildDefaultTrueRecursively, - "system/core/libpackagelistparser": Bp2BuildDefaultTrueRecursively, - "system/core/libprocessgroup": Bp2BuildDefaultTrue, - "system/core/libprocessgroup/cgrouprc": Bp2BuildDefaultTrue, - "system/core/libprocessgroup/cgrouprc_format": Bp2BuildDefaultTrue, - "system/core/libsparse": Bp2BuildDefaultTrueRecursively, - "system/core/libstats/expresslog": Bp2BuildDefaultTrueRecursively, - "system/core/libsuspend": Bp2BuildDefaultTrue, - "system/core/libsystem": Bp2BuildDefaultTrueRecursively, - "system/core/libsysutils": Bp2BuildDefaultTrueRecursively, - "system/core/libutils": Bp2BuildDefaultTrueRecursively, - "system/core/libvndksupport": Bp2BuildDefaultTrueRecursively, - "system/core/mkbootfs": Bp2BuildDefaultTrueRecursively, - "system/core/property_service/libpropertyinfoparser": Bp2BuildDefaultTrueRecursively, - "system/core/property_service/libpropertyinfoserializer": Bp2BuildDefaultTrueRecursively, - "system/core/trusty/libtrusty": Bp2BuildDefaultTrue, - "system/extras/f2fs_utils": Bp2BuildDefaultTrueRecursively, - "system/extras/toolchain-extras": Bp2BuildDefaultTrue, - "system/extras/verity": Bp2BuildDefaultTrueRecursively, - "system/hardware/interfaces/media": Bp2BuildDefaultTrueRecursively, - "system/incremental_delivery/incfs": Bp2BuildDefaultTrue, - "system/libartpalette": Bp2BuildDefaultTrueRecursively, - "system/libbase": Bp2BuildDefaultTrueRecursively, - "system/libfmq": Bp2BuildDefaultTrue, - "system/libhidl": Bp2BuildDefaultTrue, - "system/libhidl/libhidlmemory": Bp2BuildDefaultTrue, - "system/libhidl/transport": Bp2BuildDefaultTrue, - "system/libhidl/transport/allocator/1.0": Bp2BuildDefaultTrue, - "system/libhidl/transport/base/1.0": Bp2BuildDefaultTrue, - "system/libhidl/transport/manager/1.0": Bp2BuildDefaultTrue, - "system/libhidl/transport/manager/1.1": Bp2BuildDefaultTrue, - "system/libhidl/transport/manager/1.2": Bp2BuildDefaultTrue, - "system/libhidl/transport/memory": Bp2BuildDefaultTrueRecursively, - "system/libhidl/transport/safe_union/1.0": Bp2BuildDefaultTrue, - "system/libhidl/transport/token/1.0": Bp2BuildDefaultTrue, - "system/libhidl/transport/token/1.0/utils": Bp2BuildDefaultTrue, - "system/libhwbinder": Bp2BuildDefaultTrueRecursively, - "system/libprocinfo": Bp2BuildDefaultTrue, - "system/libvintf": Bp2BuildDefaultTrue, - "system/libziparchive": Bp2BuildDefaultTrueRecursively, - "system/linkerconfig": Bp2BuildDefaultTrueRecursively, - "system/logging": Bp2BuildDefaultTrueRecursively, - "system/media": Bp2BuildDefaultTrue, - "system/media/alsa_utils": Bp2BuildDefaultTrueRecursively, - "system/media/audio": Bp2BuildDefaultTrueRecursively, - "system/media/audio_utils": Bp2BuildDefaultTrueRecursively, - "system/media/camera": Bp2BuildDefaultTrueRecursively, - "system/memory/libion": Bp2BuildDefaultTrueRecursively, - "system/memory/libmemunreachable": Bp2BuildDefaultTrueRecursively, - "system/netd": Bp2BuildDefaultTrue, - "system/security/fsverity": Bp2BuildDefaultTrueRecursively, - "system/sepolicy/apex": Bp2BuildDefaultTrueRecursively, - "system/testing/gtest_extras": Bp2BuildDefaultTrueRecursively, - "system/timezone/apex": Bp2BuildDefaultTrueRecursively, - "system/timezone/output_data": Bp2BuildDefaultTrueRecursively, - "system/timezone/testdata": Bp2BuildDefaultTrueRecursively, - "system/timezone/testing": Bp2BuildDefaultTrueRecursively, - "system/tools/aidl/build/tests_bp2build": Bp2BuildDefaultTrue, - "system/tools/aidl/metadata": Bp2BuildDefaultTrue, - "system/tools/hidl": Bp2BuildDefaultTrueRecursively, - "system/tools/mkbootimg": Bp2BuildDefaultTrueRecursively, - "system/tools/sysprop": Bp2BuildDefaultTrue, - "system/tools/xsdc/utils": Bp2BuildDefaultTrueRecursively, - "system/unwinding/libunwindstack": Bp2BuildDefaultTrueRecursively, - - "test/vts/vts_hal_hidl_target": Bp2BuildDefaultTrueRecursively, - - "toolchain/pgo-profiles": Bp2BuildDefaultTrueRecursively, - "tools/apifinder": Bp2BuildDefaultTrue, - "tools/apksig": Bp2BuildDefaultTrue, - "tools/dexter/slicer": Bp2BuildDefaultTrueRecursively, - "tools/external_updater": Bp2BuildDefaultTrueRecursively, - "tools/metalava": Bp2BuildDefaultTrueRecursively, - "tools/platform-compat/java/android/compat": Bp2BuildDefaultTrueRecursively, - "tools/platform-compat/java/androidprocessor": Bp2BuildDefaultTrueRecursively, - "tools/tradefederation/core/util_apps": Bp2BuildDefaultTrueRecursively, - "tools/tradefederation/prebuilts/filegroups": Bp2BuildDefaultTrueRecursively, - } - - Bp2buildKeepExistingBuildFile = map[string]bool{ - // This is actually build/bazel/build.BAZEL symlinked to ./BUILD - ".":/*recursive = */ false, - - "build/bazel":/* recursive = */ true, - "build/make/core":/* recursive = */ false, - "build/bazel_common_rules":/* recursive = */ true, - "build/make/target/product/security":/* recursive = */ false, - // build/make/tools/signapk BUILD file is generated, so build/make/tools is not recursive. - "build/make/tools":/* recursive = */ false, - "build/pesto":/* recursive = */ true, - "build/soong":/* recursive = */ true, - - // external/bazelbuild-rules_android/... is needed by mixed builds, otherwise mixed builds analysis fails - // e.g. ERROR: Analysis of target '@soong_injection//mixed_builds:buildroot' failed - "external/bazelbuild-rules_android":/* recursive = */ true, - "external/bazelbuild-rules_cc":/* recursive = */ true, - "external/bazelbuild-rules_java":/* recursive = */ true, - "external/bazelbuild-rules_license":/* recursive = */ true, - "external/bazelbuild-rules_go":/* recursive = */ true, - "external/bazelbuild-rules_python":/* recursive = */ true, - "external/bazelbuild-rules_rust":/* recursive = */ true, - "external/bazelbuild-rules_testing":/* recursive = */ true, - "external/bazelbuild-kotlin-rules":/* recursive = */ true, - "external/bazel-skylib":/* recursive = */ true, - "external/protobuf":/* recursive = */ false, - "external/python/absl-py":/* recursive = */ true, - - "external/compiler-rt/lib/cfi":/* recursive = */ false, - - // this BUILD file is globbed by //external/icu/icu4c/source:icu4c_test_data's "data/**/*". - "external/icu/icu4c/source/data/unidata/norm2":/* recursive = */ false, - - // Building manually due to b/179889880: resource files cross package boundary - "packages/apps/Music":/* recursive = */ true, - - "prebuilts/abi-dumps/platform":/* recursive = */ true, - "prebuilts/abi-dumps/ndk":/* recursive = */ true, - "prebuilts/bazel":/* recursive = */ true, - "prebuilts/bundletool":/* recursive = */ true, - "prebuilts/clang/host/linux-x86":/* recursive = */ false, - "prebuilts/clang-tools":/* recursive = */ true, - "prebuilts/gcc":/* recursive = */ true, - "prebuilts/build-tools":/* recursive = */ true, - "prebuilts/jdk/jdk8":/* recursive = */ true, - "prebuilts/jdk/jdk17":/* recursive = */ true, - "prebuilts/misc":/* recursive = */ false, // not recursive because we need bp2build converted build files in prebuilts/misc/common/asm - "prebuilts/sdk":/* recursive = */ false, - "prebuilts/sdk/tools":/* recursive = */ false, - "prebuilts/r8":/* recursive = */ false, - "prebuilts/runtime":/* recursive = */ false, - "prebuilts/rust":/* recursive = */ true, - - // not recursive due to conflicting workspace paths in tools/atest/bazel/rules - "tools/asuite/atest":/* recursive = */ false, - "tools/asuite/atest/bazel/reporter":/* recursive = */ true, - - // Used for testing purposes only. Should not actually exist in the real source tree. - "testpkg/keep_build_file":/* recursive = */ false, - } - - Bp2buildModuleAlwaysConvertList = []string{ - "aconfig.test.cpp", - "AconfigJavaHostTest", - // aconfig - "libonce_cell", - "libanyhow", - "libunicode_segmentation", - "libmemchr", - "libbitflags-1.3.2", - "libryu", - "libitoa", - "libos_str_bytes", - "libheck", - "libclap_lex", - "libsyn", - "libquote", - "libunicode_ident", - "libproc_macro2", - "libthiserror_impl", - "libserde_derive", - "libclap_derive", - "libthiserror", - "libserde", - "libclap", - "libbytes", - "libprotobuf_support", - "libtinytemplate", - "libserde_json", - "libprotobuf", - - "protoc-gen-rust", - "libprotobuf_codegen", - "libprotobuf_parse", - "libregex", - "libtempfile", - "libwhich", - "libregex_syntax", - "libfastrand", - "libeither", - "libaho_corasick", - "liblibc", - "libcfg_if", - "liblog_rust", - "libgetrandom", - "libremove_dir_all", - "libahash", - "libhashbrown", - "libindexmap", - "libaconfig_protos", - "libpaste", - "aconfig", - - // ext - "tagsoup", - - // framework-minus-apex - "AndroidFrameworkLintChecker", - "ImmutabilityAnnotationProcessor", - "debian.mime.types.minimized", - "framework-javastream-protos", - "libview-inspector-annotation-processor", - - // services - "apache-commons-math", - "cbor-java", - "icu4j_calendar_astronomer", - "statslog-art-java-gen", - - "AndroidCommonLint", - "ImmutabilityAnnotation", - "ImmutabilityAnnotationProcessorHostLibrary", - - "libidmap2_policies", - "libSurfaceFlingerProp", - "toolbox_input_labels", - - // cc mainline modules - - // com.android.media.swcodec - "com.android.media.swcodec", - "com.android.media.swcodec-androidManifest", - "com.android.media.swcodec-ld.config.txt", - "com.android.media.swcodec-mediaswcodec.32rc", - "com.android.media.swcodec-mediaswcodec.rc", - "com.android.media.swcodec.certificate", - "com.android.media.swcodec.key", - "test_com.android.media.swcodec", - - // deps - "code_coverage.policy", - "code_coverage.policy.other", - "codec2_soft_exports", - "compatibility_matrix_schema", - "framework-connectivity-protos", - "framework-connectivity-javastream-protos", - "gemmlowp_headers", - "gl_headers", - "libandroid_runtime_lazy", - "libandroid_runtime_vm_headers", - "libaudioclient_aidl_conversion_util", - "libbinder_headers_platform_shared", - "libbinderthreadstateutils", - "libbluetooth-types-header", - "libcodec2", - "libcodec2_headers", - "libcodec2_internal", - "libdmabufheap", - "libgsm", - "libgrallocusage", - "libgralloctypes", - "libnativewindow", - "libneuralnetworks", - "libneuralnetworks_static", - "libgraphicsenv", - "libhardware_headers", - "libnativeloader-headers", - "libnativewindow_headers", - "libneuralnetworks_headers", - "libneuralnetworks_packageinfo", - "libopus", - "libprocpartition", - "libruy_static", - "libandroidio", - "libandroidio_srcs", - "libserviceutils", - "libsurfaceflinger_headers", - "libsync", - "libtextclassifier_hash_headers", - "libtextclassifier_hash_static", - "libtflite_kernel_utils", - "libtinyxml2", - "libvorbisidec", - "media_ndk_headers", - "media_plugin_headers", - "mediaswcodec.policy", - "mediaswcodec.xml", - "neuralnetworks_types", - "libneuralnetworks_common", - "philox_random", - "philox_random_headers", - "server_configurable_flags", - "service-permission-streaming-proto-sources", - "statslog_neuralnetworks.cpp", - "statslog_neuralnetworks.h", - "tensorflow_headers", - - "libstagefright_bufferpool@2.0", - "libstagefright_bufferpool@2.0.1", - "libSurfaceFlingerProp", - - // prebuilts - "prebuilt_stats-log-api-gen", - "prebuilt_aapt2", - - // fastboot - "fastboot", - "libfastboot", - - "PluginCoreLib", - "dagger2", - "dagger2-android-annotation-stubs", - "dagger2-bootstrap-compiler", - "dagger2-producers", - "okio-lib", - "setupdesign-strings", - - //external/avb - "avbtool", - "libavb", - "avb_headers", - - //external/libxml2 - "xmllint", - "libxml2", - - //external/fec - "libfec_rs", - - //system/extras/ext4_utils - "libext4_utils", - "mke2fs_conf", - "mkuserimg_mke2fs", - "blk_alloc_to_base_fs", - - //system/extras/libfec - "libfec", - - //system/extras/squashfs_utils - "libsquashfs_utils", - - //packages/apps/Car/libs/car-ui-lib/car-ui-androidx - // genrule dependencies for java_imports - "car-ui-androidx-annotation-nodeps", - "car-ui-androidx-collection-nodeps", - "car-ui-androidx-core-common-nodeps", - "car-ui-androidx-lifecycle-common-nodeps", - "car-ui-androidx-constraintlayout-solver-nodeps", - - //frameworks/native/libs/input - "inputconstants_aidl", - - // needed for aidl_interface's ndk backend - "libbinder_ndk", - - "libusb", - - //frameworks/native/cmds/cmd - "libcmd", - - //system/chre - "chre_api", - - //system/gsid - "libgsi", - "libgsi_headers", - - //system/core/libkeyutils - "libkeyutils", - - //bootable/recovery/otautil - "libotautil", - - //system/vold - "libvold_headers", - - //system/extras/libfscrypt - "libfscrypt", - - //bootable/recovery/fuse_sideload - "libfusesideload", - - "libcodec2_aidl", - "libcodec2_hidl@1.0", - "libcodec2_hidl@1.1", - "libcodec2_hidl@1.2", - "libcodec2_hidl_plugin_stub", - "libcodec2_hidl_plugin", - "libcodec2_hal_common", - "libstagefright_bufferqueue_helper_novndk", - "libGLESv2", - "libEGL", - "libcodec2_vndk", - "libnativeloader_lazy", - "libnativeloader", - "libEGL_getProcAddress", - "libEGL_blobCache", - - "mediaswcodec", - "libmedia_headers", - "libmedia_codecserviceregistrant", - "libsfplugin_ccodec_utils", - "libcodec2_soft_aacenc", - "libcodec2_soft_amrnbdec", - "libcodec2_soft_amrnbenc", - "libcodec2_soft_amrwbdec", - "libcodec2_soft_amrwbenc", - "libcodec2_soft_hevcdec", - "libcodec2_soft_hevcenc", - "libcodec2_soft_g711alawdec", - "libcodec2_soft_g711mlawdec", - "libcodec2_soft_mpeg2dec", - "libcodec2_soft_h263dec", - "libcodec2_soft_h263enc", - "libcodec2_soft_mpeg4dec", - "libcodec2_soft_mpeg4enc", - "libcodec2_soft_mp3dec", - "libcodec2_soft_vorbisdec", - "libcodec2_soft_opusdec", - "libcodec2_soft_opusenc", - "libcodec2_soft_vp8dec", - "libcodec2_soft_vp9dec", - "libcodec2_soft_av1dec_gav1", - "libcodec2_soft_av1dec_dav1d", - "libcodec2_soft_vp8enc", - "libcodec2_soft_vp9enc", - "libcodec2_soft_rawdec", - "libcodec2_soft_flacdec", - "libcodec2_soft_flacenc", - "libcodec2_soft_gsmdec", - "libcodec2_soft_avcdec", - "libcodec2_soft_avcenc", - "libcodec2_soft_aacdec", - "libcodec2_soft_common", - - // kotlin srcs in java libs - "kotlinx_atomicfu", - - // kotlin srcs in java binary - "AnalyzerKt", - "trebuchet-core", - - // kotlin srcs in android_library - "renderscript_toolkit", - - //kotlin srcs in android_binary - "MusicKotlin", - - // java_library with prebuilt sdk_version - "android-common", - - // checked in current.txt for merged_txts - "non-updatable-current.txt", - "non-updatable-system-current.txt", - "non-updatable-module-lib-current.txt", - "non-updatable-system-server-current.txt", - - // for api_fingerprint.txt generation - "api_fingerprint", - - // for building com.android.neuralnetworks - "libimapper_stablec", - "libimapper_providerutils", - - // min_sdk_version in android_app - "CtsShimUpgrade", - - "art_cmdlineparser_headers", - - // Mainline Module Apps - "CaptivePortalLogin", - "ModuleMetadata", - - "libstagefright_headers", - - // Apps with JNI libs - "SimpleJNI", - "libsimplejni", - - // aidl - "aidl", - "libaidl-common", - - // Used by xsd_config - "xsdc", - - // cc_test that can be run by b test - "binderRpcWireProtocolTest", - "binderUnitTest", - "cpu_features-bit_utils_test", - "android.hardware.audio.common.test.utility_tests", - "HalAudioStreamWorkerTest", - "libjavacore-unit-tests", - "NeuralNetworksTest_utils", - "NeuralNetworksTest_logtag", - "NeuralNetworksTest_operations", - "nanoapp_chqts_shared_tests", - "fakeservicemanager_test", - "tristate_test", - "binderUtilsHostTest", - "run_dex2oat_test", - "bluetooth-address-unit-tests", - - // for platform_compat_config - "process-compat-config", - - // cc_* modules with rscript srcs - "rstest-latency", - "libRScpp_static", - "rs-headers", - "rs_script_api", - "libRSDispatch", - - // hal_unit_tests and deps - "chre_flatbuffers", - "event_logger", - "hal_unit_tests", - - "merge_annotation_zips_test", - - // java_resources with multiple resource_dirs - "emma", - - // NDK STL - "ndk_libc++abi", - "ndk_libunwind", - "ndk_libc++_static", - "ndk_libc++_shared", - "ndk_system", - - // allowlist //prebuilts/common/misc/androidx-test/... - "androidx.test.runner", - "androidx.test.runner-nodeps", - "androidx.test.services.storage", - "androidx.test.services.storage-nodeps", - "androidx.test.monitor", - "androidx.test.monitor-nodeps", - "androidx.test.annotation", - "androidx.test.annotation-nodeps", - - // jni deps of an internal android_test (b/297405812) - "libopenjdkjvmti_headers", - - // tradefed deps - "apache-commons-compress", - "tradefed-protos", - "grpc-java", - "grpc-java-api", - "grpc-java-auth", - "grpc-java-context", - "grpc-java-core", - "grpc-java-core-inprocess", - "grpc-java-core-internal", - "grpc-java-core-util", - "grpc-java-protobuf", - "grpc-java-protobuf-lite", - "grpc-java-stub", - "grpc-java-annotation-stubs", - "grpc-java-annotation-stubs-srcjar", - "gen_annotations", - "opencensus-java-contrib-grpc-metrics", - "opencensus-java-api", - "gson", - "GsonBuildConfig.java", - "gson_version_generator", - "lab-resource-grpc", - "blueprint-deptools", - "protoc-gen-grpc-java-plugin", - "tf-remote-client", - "tradefed-lite", - "tradefed-isolation-protos", - "snakeyaml_patched_src_files", - "asuite_proto_java", - "tradefed-service-grpc-lib", - "tradefed-invocation-grpc", - "tradefed-external-dependencies", - "tradefed-dynamic-sharding-grpc", - "tradefed-device-manager-grpc", - "statsd_internal_protos", - "snakeyaml", - "loganalysis", - "junit-params", - "grpc-java-testing", - "grpc-java-netty-shaded", - "aoa-helper", - "test-services.apk", - "test-composers", - "py3-stdlib-prebuilt-srcs", - "platformprotos", - "test-services-normalized.apk", - "tradefed-common-util", - "tradefed-clearcut-client", - "tradefed-result-interfaces", - "tradefed-device-build-interfaces", - "tradefed-invocation-interfaces", - "tradefed-lib-core", - - "libandroid_net_connectivity_com_android_net_module_util_jni", - "libservice-connectivity", - - "mainline_modules_sdks_test", - - "fake_device_config", - } - - Bp2buildModuleTypeAlwaysConvertList = []string{ - // go/keep-sorted start - "aconfig_declarations", - "aconfig_value_set", - "aconfig_values", - "aidl_interface_headers", - "bpf", - "cc_aconfig_library", - "cc_prebuilt_library", - "cc_prebuilt_library_headers", - "cc_prebuilt_library_shared", - "cc_prebuilt_library_static", - "combined_apis", - "droiddoc_exported_dir", - "java_aconfig_library", - "java_import", - "java_import_host", - "java_sdk_library", - "java_sdk_library_import", - "license", - "linker_config", - "ndk_headers", - "ndk_library", - "sysprop_library", - "versioned_ndk_headers", - "xsd_config", - // go/keep-sorted end - } - - // Add the names of modules that bp2build should never convert, if it is - // in the package allowlist. An error will be thrown if a module must - // not be here and in the alwaysConvert lists. - // - // For prebuilt modules (e.g. android_library_import), remember to add - // the "prebuilt_" prefix to the name, so that it's differentiable from - // the source versions within Soong's module graph. - Bp2buildModuleDoNotConvertList = []string{ - - // rust modules that have cc deps - "liblogger", - "libbssl_ffi", - "libbssl_ffi_nostd", - "pull_rust", - "libstatslog_rust", - "libstatslog_rust_header", - "libflatbuffers", - "liblog_event_list", - "libminijail_rust", - "libminijail_sys", - "libfsverity_rs", - "libtombstoned_client_rust", - - // TODO(b/263326760): Failed already. - "minijail_compiler_unittest", - "minijail_parser_unittest", - - // cc bugs - - // TODO(b/198619163) module has same name as source - "logtagd.rc", - - "libgtest_ndk_c++", "libgtest_main_ndk_c++", // TODO(b/201816222): Requires sdk_version support. - - // TODO(b/202876379): has arch-variant static_executable - "linkerconfig", - "mdnsd", - "libcutils_test_static", - "KernelLibcutilsTest", - - "linker", // TODO(b/228316882): cc_binary uses link_crt - "versioner", // TODO(b/228313961): depends on prebuilt shared library libclang-cpp_host as a shared library, which does not supply expected providers for a shared library - - // requires host tools for apexer - "apexer_test", "apexer_test_host_tools", "host_apex_verifier", "host-apex-verifier", - - // java bugs - "libbase_ndk", // TODO(b/186826477): fails to link libctscamera2_jni for device (required for CtsCameraTestCases) - "bouncycastle", // TODO(b/274474005): Need support for custom system_modules. - "bouncycastle-test-lib", // TODO(b/274474005): Reverse dependency of bouncycastle - - // genrule incompatibilities - "brotli-fuzzer-corpus", // TODO(b/202015218): outputs are in location incompatible with bazel genrule handling. - "platform_tools_properties", "build_tools_source_properties", // TODO(b/203369847): multiple genrules in the same package creating the same file - - // aar support - "prebuilt_car-ui-androidx-core-common", // TODO(b/224773339), genrule dependency creates an .aar, not a .jar - // ERROR: The dependencies for the following 1 jar(s) are not complete. - // 1.bazel-out/android_target-fastbuild/bin/prebuilts/tools/common/m2/_aar/robolectric-monitor-1.0.2-alpha1/classes_and_libs_merged.jar - "prebuilt_robolectric-monitor-1.0.2-alpha1", - - // path property for filegroups - "conscrypt", // TODO(b/210751803), we don't handle path property for filegroups - "conscrypt-for-host", // TODO(b/210751803), we don't handle path property for filegroups - "host-libprotobuf-java-full", // TODO(b/210751803), we don't handle path property for filegroups - "libprotobuf-internal-python-srcs", // TODO(b/210751803), we don't handle path property for filegroups - - // go deps. - // TODO: b/305091740 - Rely on bp2build_deps to remove these dependencies. - "analyze_bcpf", // depends on bpmodify a blueprint_go_binary. - "analyze_bcpf_test", // depends on bpmodify a blueprint_go_binary. - "host_bionic_linker_asm", // depends on extract_linker, a go binary. - "host_bionic_linker_script", // depends on extract_linker, a go binary. - - // 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", - - // aidl files not created - "overlayable_policy_aidl_interface", - - // cc_test related. - // b/274164834 "Could not open Configuration file test.cfg" - "svcenc", "svcdec", - - // Failing host cc_tests - "gtest_isolated_tests", - "libunwindstack_unit_test", - "power_tests", // failing test on server, but not on host - - // reflect: call of reflect.Value.NumField on interface Value - // affects all cc_tests that depend on art_defaults - "libnativebridge-tests", - "libnativeloader_test", - "art_libnativebridge_cts_tests", - "art_standalone_libdexfile_external_tests", - "art_standalone_libdexfile_support_tests", - "libnativebridge-lazy-tests", - "libnativebridge-test-case", - "libnativebridge2-test-case", - "libnativebridge3-test-case", - "libnativebridge6-test-case", - "libnativebridge6prezygotefork", - - "libandroidfw_tests", // failing due to data path issues - - // error: overriding commands for target - // `out/host/linux-x86/nativetest64/gmock_tests/gmock_tests__cc_runner_test', - // previously defined at out/soong/installs-aosp_arm.mk:64919` - "gmock_tests", - - // cc_test with unconverted deps, or are device-only (and not verified to pass yet) - "AMRWBEncTest", - "avcdec", - "avcenc", - "boringssl_test_support", //b/244431896 - "cfi_test_helper", - "cintltst32", - "cintltst64", - "compare", - "cpuid", - "elftls_dlopen_ie_error_helper", - "fdtrack_test", - "google-benchmark-test", - "gtest-typed-test_test", - "gtest_tests", - "gtest_tests_no_main", - "gwp_asan_unittest", - "half_test", - "hashcombine_test", - "hevcdec", - "hevcenc", - "i444tonv12_eg", - "icu4c_sample_break", - "intltest32", - "intltest64", - "ion-unit-tests", - "jemalloc5_integrationtests", - "jemalloc5_unittests", - "jemalloc5_stresstests", // run by run_jemalloc_tests.sh and will be deleted after V - "libcutils_sockets_test", - "libhwbinder_latency", - "liblog-host-test", // failing tests - "libminijail_test", - "libminijail_unittest_gtest", - "libpackagelistparser_test", - "libprotobuf_vendor_suffix_test", - "libstagefright_amrnbenc_test", - "libstagefright_amrwbdec_test", // error: did not report any run - "libstagefright_m4vh263enc_test", - "libvndksupport-tests", - "libyuv_unittest", - "linker-unit-tests", - "malloc_debug_system_tests", - "malloc_debug_unit_tests", - "malloc_hooks_system_tests", - "mat_test", - "mathtest", - "memunreachable_test", - "metadata_tests", - "mpeg2dec", - "mvcdec", - "pngtest", - "preinit_getauxval_test_helper", - "preinit_syscall_test_helper", - "psnr", - "quat_test", - "scudo_unit_tests", - "thread_exit_cb_helper", - "ulp", - "vec_test", - "yuvconstants", - "yuvconvert", - - // cc_test_library - "clang_diagnostic_tests", - "exec_linker_helper_lib", - "fortify_disabled_for_tidy", - "ld_config_test_helper_lib1", - "ld_config_test_helper_lib2", - "ld_config_test_helper_lib3", - "ld_preload_test_helper_lib1", - "ld_preload_test_helper_lib2", - "libBionicElfTlsLoaderTests", - "libBionicElfTlsTests", - "libBionicElfTlsTests", - "libBionicFramePointerTests", - "libBionicFramePointerTests", - "libBionicStandardTests", - "libBionicStandardTests", - "libBionicTests", - "libart-broken", - "libatest_simple_zip", - "libcfi-test", - "libcfi-test-bad", - "libcrash_test", - "libcrypto_fuzz_unsafe", - "libdl_preempt_test_1", - "libdl_preempt_test_2", - "libdl_test_df_1_global", - "libdlext_test", - "libdlext_test_different_soname", - "libdlext_test_fd", - "libdlext_test_norelro", - "libdlext_test_recursive", - "libdlext_test_zip", - "libdvrcommon_test", - "libfortify1-new-tests-clang", - "libfortify1-new-tests-clang", - "libfortify1-tests-clang", - "libfortify1-tests-clang", - "libfortify2-new-tests-clang", - "libfortify2-new-tests-clang", - "libfortify2-tests-clang", - "libfortify2-tests-clang", - "libgnu-hash-table-library", - "libicutest_static", - "liblinker_reloc_bench_000", - "liblinker_reloc_bench_001", - "liblinker_reloc_bench_002", - "liblinker_reloc_bench_003", - "liblinker_reloc_bench_004", - "liblinker_reloc_bench_005", - "liblinker_reloc_bench_006", - "liblinker_reloc_bench_007", - "liblinker_reloc_bench_008", - "liblinker_reloc_bench_009", - "liblinker_reloc_bench_010", - "liblinker_reloc_bench_011", - "liblinker_reloc_bench_012", - "liblinker_reloc_bench_013", - "liblinker_reloc_bench_014", - "liblinker_reloc_bench_015", - "liblinker_reloc_bench_016", - "liblinker_reloc_bench_017", - "liblinker_reloc_bench_018", - "liblinker_reloc_bench_019", - "liblinker_reloc_bench_020", - "liblinker_reloc_bench_021", - "liblinker_reloc_bench_022", - "liblinker_reloc_bench_023", - "liblinker_reloc_bench_024", - "liblinker_reloc_bench_025", - "liblinker_reloc_bench_026", - "liblinker_reloc_bench_027", - "liblinker_reloc_bench_028", - "liblinker_reloc_bench_029", - "liblinker_reloc_bench_030", - "liblinker_reloc_bench_031", - "liblinker_reloc_bench_032", - "liblinker_reloc_bench_033", - "liblinker_reloc_bench_034", - "liblinker_reloc_bench_035", - "liblinker_reloc_bench_036", - "liblinker_reloc_bench_037", - "liblinker_reloc_bench_038", - "liblinker_reloc_bench_039", - "liblinker_reloc_bench_040", - "liblinker_reloc_bench_041", - "liblinker_reloc_bench_042", - "liblinker_reloc_bench_043", - "liblinker_reloc_bench_044", - "liblinker_reloc_bench_045", - "liblinker_reloc_bench_046", - "liblinker_reloc_bench_047", - "liblinker_reloc_bench_048", - "liblinker_reloc_bench_049", - "liblinker_reloc_bench_050", - "liblinker_reloc_bench_051", - "liblinker_reloc_bench_052", - "liblinker_reloc_bench_053", - "liblinker_reloc_bench_054", - "liblinker_reloc_bench_055", - "liblinker_reloc_bench_056", - "liblinker_reloc_bench_057", - "liblinker_reloc_bench_058", - "liblinker_reloc_bench_059", - "liblinker_reloc_bench_060", - "liblinker_reloc_bench_061", - "liblinker_reloc_bench_062", - "liblinker_reloc_bench_063", - "liblinker_reloc_bench_064", - "liblinker_reloc_bench_065", - "liblinker_reloc_bench_066", - "liblinker_reloc_bench_067", - "liblinker_reloc_bench_068", - "liblinker_reloc_bench_069", - "liblinker_reloc_bench_070", - "liblinker_reloc_bench_071", - "liblinker_reloc_bench_072", - "liblinker_reloc_bench_073", - "liblinker_reloc_bench_074", - "liblinker_reloc_bench_075", - "liblinker_reloc_bench_076", - "liblinker_reloc_bench_077", - "liblinker_reloc_bench_078", - "liblinker_reloc_bench_079", - "liblinker_reloc_bench_080", - "liblinker_reloc_bench_081", - "liblinker_reloc_bench_082", - "liblinker_reloc_bench_083", - "liblinker_reloc_bench_084", - "liblinker_reloc_bench_085", - "liblinker_reloc_bench_086", - "liblinker_reloc_bench_087", - "liblinker_reloc_bench_088", - "liblinker_reloc_bench_089", - "liblinker_reloc_bench_090", - "liblinker_reloc_bench_091", - "liblinker_reloc_bench_092", - "liblinker_reloc_bench_093", - "liblinker_reloc_bench_094", - "liblinker_reloc_bench_095", - "liblinker_reloc_bench_096", - "liblinker_reloc_bench_097", - "liblinker_reloc_bench_098", - "liblinker_reloc_bench_099", - "liblinker_reloc_bench_100", - "liblinker_reloc_bench_101", - "liblinker_reloc_bench_102", - "liblinker_reloc_bench_103", - "liblinker_reloc_bench_104", - "liblinker_reloc_bench_105", - "liblinker_reloc_bench_106", - "liblinker_reloc_bench_107", - "liblinker_reloc_bench_108", - "liblinker_reloc_bench_109", - "liblinker_reloc_bench_110", - "liblinker_reloc_bench_111", - "liblinker_reloc_bench_112", - "liblinker_reloc_bench_113", - "liblinker_reloc_bench_114", - "liblinker_reloc_bench_115", - "liblinker_reloc_bench_116", - "liblinker_reloc_bench_117", - "liblinker_reloc_bench_118", - "liblinker_reloc_bench_119", - "liblinker_reloc_bench_120", - "liblinker_reloc_bench_121", - "liblinker_reloc_bench_122", - "liblinker_reloc_bench_123", - "liblinker_reloc_bench_124", - "liblinker_reloc_bench_125", - "liblinker_reloc_bench_126", - "liblinker_reloc_bench_127", - "liblinker_reloc_bench_128", - "liblinker_reloc_bench_129", - "liblinker_reloc_bench_130", - "liblinker_reloc_bench_131", - "liblinker_reloc_bench_132", - "liblinker_reloc_bench_133", - "liblinker_reloc_bench_134", - "liblinker_reloc_bench_135", - "liblinker_reloc_bench_136", - "liblinker_reloc_bench_137", - "liblinker_reloc_bench_138", - "liblinker_reloc_bench_139", - "liblinker_reloc_bench_140", - "liblinker_reloc_bench_141", - "liblinker_reloc_bench_142", - "liblinker_reloc_bench_143", - "liblinker_reloc_bench_144", - "liblinker_reloc_bench_145", - "liblinker_reloc_bench_146", - "liblinker_reloc_bench_147", - "liblinker_reloc_bench_148", - "liblinker_reloc_bench_149", - "liblinker_reloc_bench_150", - "liblinker_reloc_bench_151", - "liblinker_reloc_bench_152", - "liblinker_reloc_bench_153", - "liblinker_reloc_bench_154", - "liblinker_reloc_bench_155", - "liblinker_reloc_bench_156", - "liblinker_reloc_bench_157", - "liblinker_reloc_bench_158", - "liblinker_reloc_bench_159", - "liblinker_reloc_bench_160", - "liblinker_reloc_bench_161", - "liblinker_reloc_bench_162", - "liblinker_reloc_bench_163", - "liblinker_reloc_bench_164", - "liblinker_reloc_bench_165", - "liblinker_reloc_bench_166", - "liblinker_reloc_bench_167", - "liblinker_reloc_bench_168", - "libns_hidden_child_app", - "libns_hidden_child_global", - "libns_hidden_child_internal", - "libns_hidden_child_public", - "libnstest_dlopened", - "libnstest_ns_a_public1", - "libnstest_ns_a_public1_internal", - "libnstest_ns_b_public2", - "libnstest_ns_b_public3", - "libnstest_private", - "libnstest_private_external", - "libnstest_public", - "libnstest_public_internal", - "libnstest_root", - "libnstest_root_not_isolated", - "librelocations-ANDROID_REL", - "librelocations-ANDROID_RELR", - "librelocations-RELR", - "librelocations-fat", - "libsegment_gap_inner", - "libsegment_gap_outer", - "libssl_fuzz_unsafe", - "libstatssocket_private", - "libsysv-hash-table-library", - "libtest_atexit", - "libtest_check_order_dlsym", - "libtest_check_order_dlsym_1_left", - "libtest_check_order_dlsym_2_right", - "libtest_check_order_dlsym_3_c", - "libtest_check_order_dlsym_a", - "libtest_check_order_dlsym_b", - "libtest_check_order_dlsym_d", - "libtest_check_order_reloc_root", - "libtest_check_order_reloc_root_1", - "libtest_check_order_reloc_root_2", - "libtest_check_order_reloc_siblings", - "libtest_check_order_reloc_siblings_1", - "libtest_check_order_reloc_siblings_2", - "libtest_check_order_reloc_siblings_3", - "libtest_check_order_reloc_siblings_a", - "libtest_check_order_reloc_siblings_b", - "libtest_check_order_reloc_siblings_c", - "libtest_check_order_reloc_siblings_c_1", - "libtest_check_order_reloc_siblings_c_2", - "libtest_check_order_reloc_siblings_d", - "libtest_check_order_reloc_siblings_e", - "libtest_check_order_reloc_siblings_f", - "libtest_check_rtld_next_from_library", - "libtest_dlopen_df_1_global", - "libtest_dlopen_from_ctor", - "libtest_dlopen_from_ctor_main", - "libtest_dlopen_weak_undefined_func", - "libtest_dlsym_df_1_global", - "libtest_dlsym_from_this", - "libtest_dlsym_from_this_child", - "libtest_dlsym_from_this_grandchild", - "libtest_dlsym_weak_func", - "libtest_dt_runpath_a", - "libtest_dt_runpath_b", - "libtest_dt_runpath_c", - "libtest_dt_runpath_d", - "libtest_dt_runpath_d_zip", - "libtest_dt_runpath_x", - "libtest_dt_runpath_y", - "libtest_elftls_dynamic", - "libtest_elftls_dynamic_filler_1", - "libtest_elftls_dynamic_filler_2", - "libtest_elftls_dynamic_filler_3", - "libtest_elftls_shared_var", - "libtest_elftls_shared_var_ie", - "libtest_elftls_tprel", - "libtest_empty", - "libtest_ifunc", - "libtest_ifunc_variable", - "libtest_ifunc_variable_impl", - "libtest_indirect_thread_local_dtor", - "libtest_init_fini_order_child", - "libtest_init_fini_order_grand_child", - "libtest_init_fini_order_root", - "libtest_init_fini_order_root2", - "libtest_missing_symbol", - "libtest_missing_symbol_child_private", - "libtest_missing_symbol_child_public", - "libtest_missing_symbol_root", - "libtest_nodelete_1", - "libtest_nodelete_2", - "libtest_nodelete_dt_flags_1", - "libtest_pthread_atfork", - "libtest_relo_check_dt_needed_order", - "libtest_relo_check_dt_needed_order_1", - "libtest_relo_check_dt_needed_order_2", - "libtest_simple", - "libtest_thread_local_dtor", - "libtest_thread_local_dtor2", - "libtest_two_parents_child", - "libtest_two_parents_parent1", - "libtest_two_parents_parent2", - "libtest_versioned_lib", - "libtest_versioned_libv1", - "libtest_versioned_libv2", - "libtest_versioned_otherlib", - "libtest_versioned_otherlib_empty", - "libtest_versioned_uselibv1", - "libtest_versioned_uselibv2", - "libtest_versioned_uselibv2_other", - "libtest_versioned_uselibv3_other", - "libtest_with_dependency", - "libtest_with_dependency_loop", - "libtest_with_dependency_loop_a", - "libtest_with_dependency_loop_b", - "libtest_with_dependency_loop_b_tmp", - "libtest_with_dependency_loop_c", - "libtestshared", - - // releasetools - "verity_utils", - "check_ota_package_signature", - "check_target_files_vintf", - "releasetools_check_target_files_vintf", - "ota_from_target_files", - "releasetools_ota_from_target_files", - "add_img_to_target_files", - "releasetools_add_img_to_target_files", - "fsverity_metadata_generator", - "sign_target_files_apks", - - // depends on the support of yacc file - "libapplypatch", - "libapplypatch_modes", - "applypatch", - - // TODO(b/254476335): disable the following due to this bug - "libapexinfo", - "libapexinfo_tests", - - // uses glob in $(locations) - "libc_musl_sysroot", - - // TODO(b/266459895): depends on libunwindstack - "libutils_test", - - // Has dependencies on other tools like ziptool, bp2build'd data properties don't work with these tests atm - "ziparchive_tests_large", - "mkbootimg_test", - "certify_bootimg_test", - - // Despite being _host module types, these require devices to run - "logd_integration_test", - "mobly-hello-world-test", - "mobly-multidevice-test", - - // TODO(b/274805756): Support core_platform and current java APIs - "fake-framework", - - // TODO(b/277616982): These modules depend on private java APIs, but maybe they don't need to. - "StreamingProtoTest", - "textclassifierprotoslite", - "styleprotoslite", - "CtsPkgInstallerConstants", - "guava-android-testlib", - - // python_test_host with test data - "sbom_writers_test", - "hidl_test", - - // TODO(B/283193845): Remove tradefed from this list. - "tradefed", - - "libprotobuf-full-test", // TODO(b/246997908): cannot convert proto_libraries which implicitly include other srcs in the same directory - "libprotobuf-lite-test", // TODO(b/246997908): cannot convert proto_libraries which implicitly include other srcs in the same directory - - "logcat", // TODO(b/246997908): cannot convert proto_libraries which implicitly include other srcs in the same directory - - "expresscatalogvalidator", // TODO(b/246997908): cannot convert proto_libraries which implicitly include other srcs in the same directory - - // r8 is a java_binary, which creates an implicit "r8.jar" target, but the - // same package contains a "r8.jar" file which gets overshadowed by the implicit target. - // We don't need this target as we're not using the Soong wrapper for now - "r8", - - // TODO(b/299924782): Fix linking error - "libbinder_on_trusty_mock", - - // TODO(b/299943581): Depends on aidl filegroups with implicit headers - "libdataloader_aidl-cpp", - "libincremental_manager_aidl-cpp", - - // TODO(b/299974637) Fix linking error - "libbinder_rpc_unstable", - - // TODO(b/297356704) sdk_version is unset. - "VendorAtomCodeGenJavaTest", - - // TODO: b/305223367 - Missing dep on android.test.base-neverlink - "ObjenesisTck", - - // TODO - b/306197073: Sets different STL for host and device variants - "trace_processor_shell", - - // TODO - b/303713102: duplicate deps added by cc_lite_proto_library - "perfetto_unittests", - "perfetto_integrationtests", - - // TODO - b/306194966: Depends on an empty filegroup - "libperfetto_c", - } - - // Bazel prod-mode allowlist. Modules in this list are built by Bazel - // in either prod mode or staging mode. - ProdMixedBuildsEnabledList = []string{ - // M5: tzdata launch - "com.android.tzdata", - "test1_com.android.tzdata", - "test3_com.android.tzdata", - // M7: adbd launch - "com.android.adbd", - "test_com.android.adbd", - "adbd_test", - "adb_crypto_test", - "adb_pairing_auth_test", - "adb_pairing_connection_test", - "adb_tls_connection_test", - // M9: mixed builds for mainline trains launch - "api_fingerprint", - // M11: neuralnetworks launch - "com.android.neuralnetworks", - "test_com.android.neuralnetworks", - "libneuralnetworks", - "libneuralnetworks_static", - // M13: media.swcodec launch - // TODO(b/307389608) Relaunch swcodec after fixing rust dependencies - // "com.android.media.swcodec", - // "test_com.android.media.swcodec", - // "libstagefright_foundation", - // "libcodec2_hidl@1.0", - } - - // Staging-mode allowlist. Modules in this list are only built - // by Bazel with --bazel-mode-staging. This list should contain modules - // which will soon be added to the prod allowlist. - // It is implicit that all modules in ProdMixedBuildsEnabledList will - // also be built - do not add them to this list. - StagingMixedBuildsEnabledList = []string{} - - // These should be the libs that are included by the apexes in the ProdMixedBuildsEnabledList - ProdDclaMixedBuildsEnabledList = []string{ - "libbase", - "libc++", - "libcrypto", - "libcutils", - "libstagefright_flacdec", - "libutils", - } - - // These should be the libs that are included by the apexes in the StagingMixedBuildsEnabledList - StagingDclaMixedBuildsEnabledList = []string{} - - // TODO(b/269342245): Enable the rest of the DCLA libs - // "libssl", - // The list of module types which are expected to spend lots of build time. // With `--ninja_weight_source=soong`, ninja builds these module types and deps first. HugeModuleTypePrefixMap = map[string]int{ diff --git a/android/androidmk.go b/android/androidmk.go index f65e084be..235d7c0d6 100644 --- a/android/androidmk.go +++ b/android/androidmk.go @@ -276,14 +276,17 @@ func (a *AndroidMkEntries) AddStrings(name string, value ...string) { } // AddCompatibilityTestSuites adds the supplied test suites to the EntryMap, with special handling -// for partial MTS test suites. +// for partial MTS and MCTS test suites. func (a *AndroidMkEntries) AddCompatibilityTestSuites(suites ...string) { - // MTS supports a full test suite and partial per-module MTS test suites, with naming mts-${MODULE}. - // To reduce repetition, if we find a partial MTS test suite without an full MTS test suite, + // M(C)TS supports a full test suite and partial per-module MTS test suites, with naming mts-${MODULE}. + // To reduce repetition, if we find a partial M(C)TS test suite without an full M(C)TS test suite, // we add the full test suite to our list. if PrefixInList(suites, "mts-") && !InList("mts", suites) { suites = append(suites, "mts") } + if PrefixInList(suites, "mcts-") && !InList("mcts", suites) { + suites = append(suites, "mcts") + } a.AddStrings("LOCAL_COMPATIBILITY_SUITE", suites...) } diff --git a/android/arch_list.go b/android/arch_list.go index ab644a4aa..801ac49c8 100644 --- a/android/arch_list.go +++ b/android/arch_list.go @@ -34,6 +34,11 @@ var archVariants = map[ArchType][]string{ "broadwell", "goldmont", "goldmont-plus", + // Target arch is goldmont, but without xsaves support. + // This ensures efficient execution on a broad range of Intel/AMD CPUs used + // in Chromebooks, including those lacking xsaves support. + // (e.g. Kaby Lake, Gemini Lake, Alder Lake and AMD Zen series) + "goldmont-without-xsaves", "haswell", "icelake", "ivybridge", @@ -52,6 +57,7 @@ var archVariants = map[ArchType][]string{ "broadwell", "goldmont", "goldmont-plus", + "goldmont-without-xsaves", "haswell", "icelake", "ivybridge", @@ -197,6 +203,15 @@ var androidArchFeatureMap = map[ArchType]map[string][]string{ "popcnt", "movbe", }, + "goldmont-without-xsaves": { + "ssse3", + "sse4", + "sse4_1", + "sse4_2", + "aes_ni", + "popcnt", + "movbe", + }, "haswell": { "ssse3", "sse4", @@ -358,6 +373,14 @@ var androidArchFeatureMap = map[ArchType]map[string][]string{ "aes_ni", "popcnt", }, + "goldmont-without-xsaves": { + "ssse3", + "sse4", + "sse4_1", + "sse4_2", + "aes_ni", + "popcnt", + }, "haswell": { "ssse3", "sse4", diff --git a/android/config.go b/android/config.go index 24b9b8a62..1ea0d949c 100644 --- a/android/config.go +++ b/android/config.go @@ -1849,6 +1849,10 @@ func (c *deviceConfig) BuildBrokenInputDir(name string) bool { return InList(name, c.config.productVariables.BuildBrokenInputDirModules) } +func (c *deviceConfig) BuildBrokenDontCheckSystemSdk() bool { + return c.config.productVariables.BuildBrokenDontCheckSystemSdk +} + func (c *config) BuildWarningBadOptionalUsesLibsAllowlist() []string { return c.productVariables.BuildWarningBadOptionalUsesLibsAllowlist } diff --git a/android/config_bp2build.go b/android/config_bp2build.go index b632e3302..4c2fb5e4a 100644 --- a/android/config_bp2build.go +++ b/android/config_bp2build.go @@ -15,24 +15,11 @@ package android import ( - "fmt" - "reflect" - "regexp" - "sort" "strings" - "android/soong/bazel" - "android/soong/starlark_fmt" - "github.com/google/blueprint" ) -// BazelVarExporter is a collection of configuration variables that can be exported for use in Bazel rules -type BazelVarExporter interface { - // asBazel expands strings of configuration variables into their concrete values - asBazel(Config, ExportedStringVariables, ExportedStringListVariables, ExportedConfigDependingVariables) []bazelConstant -} - // ExportedVariables is a collection of interdependent configuration variables type ExportedVariables struct { // Maps containing toolchain variables that are independent of the @@ -61,18 +48,6 @@ func NewExportedVariables(pctx PackageContext) ExportedVariables { } } -func (ev ExportedVariables) asBazel(config Config, - stringVars ExportedStringVariables, stringListVars ExportedStringListVariables, cfgDepVars ExportedConfigDependingVariables) []bazelConstant { - ret := []bazelConstant{} - ret = append(ret, ev.exportedStringVars.asBazel(config, stringVars, stringListVars, cfgDepVars)...) - ret = append(ret, ev.exportedStringListVars.asBazel(config, stringVars, stringListVars, cfgDepVars)...) - ret = append(ret, ev.exportedStringListDictVars.asBazel(config, stringVars, stringListVars, cfgDepVars)...) - // Note: ExportedVariableReferenceDictVars collections can only contain references to other variables and must be printed last - ret = append(ret, ev.exportedVariableReferenceDictVars.asBazel(config, stringVars, stringListVars, cfgDepVars)...) - ret = append(ret, ev.exportedConfigDependingVars.asBazel(config, stringVars, stringListVars, cfgDepVars)...) - return ret -} - // ExportStringStaticVariable declares a static string variable and exports it to // Bazel's toolchain. func (ev ExportedVariables) ExportStringStaticVariable(name string, value string) { @@ -142,49 +117,6 @@ func (m ExportedConfigDependingVariables) set(k string, v interface{}) { m[k] = v } -func (m ExportedConfigDependingVariables) asBazel(config Config, - stringVars ExportedStringVariables, stringListVars ExportedStringListVariables, cfgDepVars ExportedConfigDependingVariables) []bazelConstant { - ret := make([]bazelConstant, 0, len(m)) - for variable, unevaluatedVar := range m { - evalFunc := reflect.ValueOf(unevaluatedVar) - validateVariableMethod(variable, evalFunc) - evaluatedResult := evalFunc.Call([]reflect.Value{reflect.ValueOf(config)}) - evaluatedValue := evaluatedResult[0].Interface().(string) - expandedVars, err := expandVar(config, evaluatedValue, stringVars, stringListVars, cfgDepVars) - if err != nil { - panic(fmt.Errorf("error expanding config variable %s: %s", variable, err)) - } - if len(expandedVars) > 1 { - ret = append(ret, bazelConstant{ - variableName: variable, - internalDefinition: starlark_fmt.PrintStringList(expandedVars, 0), - }) - } else { - ret = append(ret, bazelConstant{ - variableName: variable, - internalDefinition: fmt.Sprintf(`"%s"`, validateCharacters(expandedVars[0])), - }) - } - } - return ret -} - -// Ensure that string s has no invalid characters to be generated into the bzl file. -func validateCharacters(s string) string { - for _, c := range []string{`\n`, `"`, `\`} { - if strings.Contains(s, c) { - panic(fmt.Errorf("%s contains illegal character %s", s, c)) - } - } - return s -} - -type bazelConstant struct { - variableName string - internalDefinition string - sortLast bool -} - // ExportedStringVariables is a mapping of variable names to string values type ExportedStringVariables map[string]string @@ -192,25 +124,6 @@ func (m ExportedStringVariables) set(k string, v string) { m[k] = v } -func (m ExportedStringVariables) asBazel(config Config, - stringVars ExportedStringVariables, stringListVars ExportedStringListVariables, cfgDepVars ExportedConfigDependingVariables) []bazelConstant { - ret := make([]bazelConstant, 0, len(m)) - for k, variableValue := range m { - expandedVar, err := expandVar(config, variableValue, stringVars, stringListVars, cfgDepVars) - if err != nil { - panic(fmt.Errorf("error expanding config variable %s: %s", k, err)) - } - if len(expandedVar) > 1 { - panic(fmt.Errorf("%q expands to more than one string value: %q", variableValue, expandedVar)) - } - ret = append(ret, bazelConstant{ - variableName: k, - internalDefinition: fmt.Sprintf(`"%s"`, validateCharacters(expandedVar[0])), - }) - } - return ret -} - // ExportedStringListVariables is a mapping of variable names to a list of strings type ExportedStringListVariables map[string][]string @@ -218,32 +131,6 @@ func (m ExportedStringListVariables) set(k string, v []string) { m[k] = v } -func (m ExportedStringListVariables) asBazel(config Config, - stringScope ExportedStringVariables, stringListScope ExportedStringListVariables, - exportedVars ExportedConfigDependingVariables) []bazelConstant { - ret := make([]bazelConstant, 0, len(m)) - // For each exported variable, recursively expand elements in the variableValue - // list to ensure that interpolated variables are expanded according to their values - // in the variable scope. - for k, variableValue := range m { - var expandedVars []string - for _, v := range variableValue { - expandedVar, err := expandVar(config, v, stringScope, stringListScope, exportedVars) - if err != nil { - panic(fmt.Errorf("Error expanding config variable %s=%s: %s", k, v, err)) - } - expandedVars = append(expandedVars, expandedVar...) - } - // Assign the list as a bzl-private variable; this variable will be exported - // out through a constants struct later. - ret = append(ret, bazelConstant{ - variableName: k, - internalDefinition: starlark_fmt.PrintStringList(expandedVars, 0), - }) - } - return ret -} - // ExportedStringListDictVariables is a mapping from variable names to a // dictionary which maps keys to lists of strings type ExportedStringListDictVariables map[string]map[string][]string @@ -252,19 +139,6 @@ func (m ExportedStringListDictVariables) set(k string, v map[string][]string) { m[k] = v } -// Since dictionaries are not supported in Ninja, we do not expand variables for dictionaries -func (m ExportedStringListDictVariables) asBazel(_ Config, _ ExportedStringVariables, - _ ExportedStringListVariables, _ ExportedConfigDependingVariables) []bazelConstant { - ret := make([]bazelConstant, 0, len(m)) - for k, dict := range m { - ret = append(ret, bazelConstant{ - variableName: k, - internalDefinition: starlark_fmt.PrintStringListDict(dict, 0), - }) - } - return ret -} - // ExportedVariableReferenceDictVariables is a mapping from variable names to a // dictionary which references previously defined variables. This is used to // create a Starlark output such as: @@ -281,237 +155,3 @@ type ExportedVariableReferenceDictVariables map[string]map[string]string func (m ExportedVariableReferenceDictVariables) set(k string, v map[string]string) { m[k] = v } - -func (m ExportedVariableReferenceDictVariables) asBazel(_ Config, _ ExportedStringVariables, - _ ExportedStringListVariables, _ ExportedConfigDependingVariables) []bazelConstant { - ret := make([]bazelConstant, 0, len(m)) - for n, dict := range m { - for k, v := range dict { - matches, err := variableReference(v) - if err != nil { - panic(err) - } else if !matches.matches { - panic(fmt.Errorf("Expected a variable reference, got %q", v)) - } else if len(matches.fullVariableReference) != len(v) { - panic(fmt.Errorf("Expected only a variable reference, got %q", v)) - } - dict[k] = "_" + matches.variable - } - ret = append(ret, bazelConstant{ - variableName: n, - internalDefinition: starlark_fmt.PrintDict(dict, 0), - sortLast: true, - }) - } - return ret -} - -// BazelToolchainVars expands an ExportedVariables collection and returns a string -// of formatted Starlark variable definitions -func BazelToolchainVars(config Config, exportedVars ExportedVariables) string { - results := exportedVars.asBazel( - config, - exportedVars.exportedStringVars, - exportedVars.exportedStringListVars, - exportedVars.exportedConfigDependingVars, - ) - - sort.Slice(results, func(i, j int) bool { - if results[i].sortLast != results[j].sortLast { - return !results[i].sortLast - } - return results[i].variableName < results[j].variableName - }) - - definitions := make([]string, 0, len(results)) - constants := make([]string, 0, len(results)) - for _, b := range results { - definitions = append(definitions, - fmt.Sprintf("_%s = %s", b.variableName, b.internalDefinition)) - constants = append(constants, - fmt.Sprintf("%[1]s%[2]s = _%[2]s,", starlark_fmt.Indention(1), b.variableName)) - } - - // Build the exported constants struct. - ret := bazel.GeneratedBazelFileWarning - ret += "\n\n" - ret += strings.Join(definitions, "\n\n") - ret += "\n\n" - ret += "constants = struct(\n" - ret += strings.Join(constants, "\n") - ret += "\n)" - - return ret -} - -type match struct { - matches bool - fullVariableReference string - variable string -} - -func variableReference(input string) (match, error) { - // e.g. "${ExternalCflags}" - r := regexp.MustCompile(`\${(?:config\.)?([a-zA-Z0-9_]+)}`) - - matches := r.FindStringSubmatch(input) - if len(matches) == 0 { - return match{}, nil - } - if len(matches) != 2 { - return match{}, fmt.Errorf("Expected to only match 1 subexpression in %s, got %d", input, len(matches)-1) - } - return match{ - matches: true, - fullVariableReference: matches[0], - // Index 1 of FindStringSubmatch contains the subexpression match - // (variable name) of the capture group. - variable: matches[1], - }, nil -} - -// expandVar recursively expand interpolated variables in the exportedVars scope. -// -// We're using a string slice to track the seen variables to avoid -// stackoverflow errors with infinite recursion. it's simpler to use a -// string slice than to handle a pass-by-referenced map, which would make it -// quite complex to track depth-first interpolations. It's also unlikely the -// interpolation stacks are deep (n > 1). -func expandVar(config Config, toExpand string, stringScope ExportedStringVariables, - stringListScope ExportedStringListVariables, exportedVars ExportedConfigDependingVariables) ([]string, error) { - - // Internal recursive function. - var expandVarInternal func(string, map[string]bool) (string, error) - expandVarInternal = func(toExpand string, seenVars map[string]bool) (string, error) { - var ret string - remainingString := toExpand - for len(remainingString) > 0 { - matches, err := variableReference(remainingString) - if err != nil { - panic(err) - } - if !matches.matches { - return ret + remainingString, nil - } - matchIndex := strings.Index(remainingString, matches.fullVariableReference) - ret += remainingString[:matchIndex] - remainingString = remainingString[matchIndex+len(matches.fullVariableReference):] - - variable := matches.variable - // toExpand contains a variable. - if _, ok := seenVars[variable]; ok { - return ret, fmt.Errorf( - "Unbounded recursive interpolation of variable: %s", variable) - } - // A map is passed-by-reference. Create a new map for - // this scope to prevent variables seen in one depth-first expansion - // to be also treated as "seen" in other depth-first traversals. - newSeenVars := map[string]bool{} - for k := range seenVars { - newSeenVars[k] = true - } - newSeenVars[variable] = true - if unexpandedVars, ok := stringListScope[variable]; ok { - expandedVars := []string{} - for _, unexpandedVar := range unexpandedVars { - expandedVar, err := expandVarInternal(unexpandedVar, newSeenVars) - if err != nil { - return ret, err - } - expandedVars = append(expandedVars, expandedVar) - } - ret += strings.Join(expandedVars, " ") - } else if unexpandedVar, ok := stringScope[variable]; ok { - expandedVar, err := expandVarInternal(unexpandedVar, newSeenVars) - if err != nil { - return ret, err - } - ret += expandedVar - } else if unevaluatedVar, ok := exportedVars[variable]; ok { - evalFunc := reflect.ValueOf(unevaluatedVar) - validateVariableMethod(variable, evalFunc) - evaluatedResult := evalFunc.Call([]reflect.Value{reflect.ValueOf(config)}) - evaluatedValue := evaluatedResult[0].Interface().(string) - expandedVar, err := expandVarInternal(evaluatedValue, newSeenVars) - if err != nil { - return ret, err - } - ret += expandedVar - } else { - return "", fmt.Errorf("Unbound config variable %s", variable) - } - } - return ret, nil - } - var ret []string - stringFields := splitStringKeepingQuotedSubstring(toExpand, ' ') - for _, v := range stringFields { - val, err := expandVarInternal(v, map[string]bool{}) - if err != nil { - return ret, err - } - ret = append(ret, val) - } - - return ret, nil -} - -// splitStringKeepingQuotedSubstring splits a string on a provided separator, -// but it will not split substrings inside unescaped double quotes. If the double -// quotes are escaped, then the returned string will only include the quote, and -// not the escape. -func splitStringKeepingQuotedSubstring(s string, delimiter byte) []string { - var ret []string - quote := byte('"') - - var substring []byte - quoted := false - escaped := false - - for i := range s { - if !quoted && s[i] == delimiter { - ret = append(ret, string(substring)) - substring = []byte{} - continue - } - - characterIsEscape := i < len(s)-1 && s[i] == '\\' && s[i+1] == quote - if characterIsEscape { - escaped = true - continue - } - - if s[i] == quote { - if !escaped { - quoted = !quoted - } - escaped = false - } - - substring = append(substring, s[i]) - } - - ret = append(ret, string(substring)) - - return ret -} - -func validateVariableMethod(name string, methodValue reflect.Value) { - methodType := methodValue.Type() - if methodType.Kind() != reflect.Func { - panic(fmt.Errorf("method given for variable %s is not a function", - name)) - } - if n := methodType.NumIn(); n != 1 { - panic(fmt.Errorf("method for variable %s has %d inputs (should be 1)", - name, n)) - } - if n := methodType.NumOut(); n != 1 { - panic(fmt.Errorf("method for variable %s has %d outputs (should be 1)", - name, n)) - } - if kind := methodType.Out(0).Kind(); kind != reflect.String { - panic(fmt.Errorf("method for variable %s does not return a string", - name)) - } -} diff --git a/android/config_bp2build_test.go b/android/config_bp2build_test.go deleted file mode 100644 index 1a0ba7b93..000000000 --- a/android/config_bp2build_test.go +++ /dev/null @@ -1,454 +0,0 @@ -// Copyright 2021 Google Inc. All rights reserved. -// -// 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. - -package android - -import ( - "android/soong/bazel" - "testing" -) - -func TestExpandVars(t *testing.T) { - android_arm64_config := TestConfig("out", nil, "", nil) - android_arm64_config.BuildOS = Android - android_arm64_config.BuildArch = Arm64 - - testCases := []struct { - description string - config Config - stringScope ExportedStringVariables - stringListScope ExportedStringListVariables - configVars ExportedConfigDependingVariables - toExpand string - expectedValues []string - }{ - { - description: "no expansion for non-interpolated value", - toExpand: "foo", - expectedValues: []string{"foo"}, - }, - { - description: "single level expansion for string var", - stringScope: ExportedStringVariables{ - "foo": "bar", - }, - toExpand: "${foo}", - expectedValues: []string{"bar"}, - }, - { - description: "single level expansion with short-name for string var", - stringScope: ExportedStringVariables{ - "foo": "bar", - }, - toExpand: "${config.foo}", - expectedValues: []string{"bar"}, - }, - { - description: "single level expansion string list var", - stringListScope: ExportedStringListVariables{ - "foo": []string{"bar"}, - }, - toExpand: "${foo}", - expectedValues: []string{"bar"}, - }, - { - description: "mixed level expansion for string list var", - stringScope: ExportedStringVariables{ - "foo": "${bar}", - "qux": "hello", - }, - stringListScope: ExportedStringListVariables{ - "bar": []string{"baz", "${qux}"}, - }, - toExpand: "${foo}", - expectedValues: []string{"baz hello"}, - }, - { - description: "double level expansion", - stringListScope: ExportedStringListVariables{ - "foo": []string{"${bar}"}, - "bar": []string{"baz"}, - }, - toExpand: "${foo}", - expectedValues: []string{"baz"}, - }, - { - description: "double level expansion with a literal", - stringListScope: ExportedStringListVariables{ - "a": []string{"${b}", "c"}, - "b": []string{"d"}, - }, - toExpand: "${a}", - expectedValues: []string{"d c"}, - }, - { - description: "double level expansion, with two variables in a string", - stringListScope: ExportedStringListVariables{ - "a": []string{"${b} ${c}"}, - "b": []string{"d"}, - "c": []string{"e"}, - }, - toExpand: "${a}", - expectedValues: []string{"d e"}, - }, - { - description: "triple level expansion with two variables in a string", - stringListScope: ExportedStringListVariables{ - "a": []string{"${b} ${c}"}, - "b": []string{"${c}", "${d}"}, - "c": []string{"${d}"}, - "d": []string{"foo"}, - }, - toExpand: "${a}", - expectedValues: []string{"foo foo foo"}, - }, - { - description: "expansion with config depending vars", - configVars: ExportedConfigDependingVariables{ - "a": func(c Config) string { return c.BuildOS.String() }, - "b": func(c Config) string { return c.BuildArch.String() }, - }, - config: android_arm64_config, - toExpand: "${a}-${b}", - expectedValues: []string{"android-arm64"}, - }, - { - description: "double level multi type expansion", - stringListScope: ExportedStringListVariables{ - "platform": []string{"${os}-${arch}"}, - "const": []string{"const"}, - }, - configVars: ExportedConfigDependingVariables{ - "os": func(c Config) string { return c.BuildOS.String() }, - "arch": func(c Config) string { return c.BuildArch.String() }, - "foo": func(c Config) string { return "foo" }, - }, - config: android_arm64_config, - toExpand: "${const}/${platform}/${foo}", - expectedValues: []string{"const/android-arm64/foo"}, - }, - } - - for _, testCase := range testCases { - t.Run(testCase.description, func(t *testing.T) { - output, _ := expandVar(testCase.config, testCase.toExpand, testCase.stringScope, testCase.stringListScope, testCase.configVars) - if len(output) != len(testCase.expectedValues) { - t.Errorf("Expected %d values, got %d", len(testCase.expectedValues), len(output)) - } - for i, actual := range output { - expectedValue := testCase.expectedValues[i] - if actual != expectedValue { - t.Errorf("Actual value '%s' doesn't match expected value '%s'", actual, expectedValue) - } - } - }) - } -} - -func TestBazelToolchainVars(t *testing.T) { - testCases := []struct { - name string - config Config - vars ExportedVariables - expectedOut string - }{ - { - name: "exports strings", - vars: ExportedVariables{ - exportedStringVars: ExportedStringVariables{ - "a": "b", - "c": "d", - }, - }, - expectedOut: bazel.GeneratedBazelFileWarning + ` - -_a = "b" - -_c = "d" - -constants = struct( - a = _a, - c = _c, -)`, - }, - { - name: "exports string lists", - vars: ExportedVariables{ - exportedStringListVars: ExportedStringListVariables{ - "a": []string{"b1", "b2"}, - "c": []string{"d1", "d2"}, - }, - }, - expectedOut: bazel.GeneratedBazelFileWarning + ` - -_a = [ - "b1", - "b2", -] - -_c = [ - "d1", - "d2", -] - -constants = struct( - a = _a, - c = _c, -)`, - }, - { - name: "exports string lists dicts", - vars: ExportedVariables{ - exportedStringListDictVars: ExportedStringListDictVariables{ - "a": map[string][]string{"b1": {"b2"}}, - "c": map[string][]string{"d1": {"d2"}}, - }, - }, - expectedOut: bazel.GeneratedBazelFileWarning + ` - -_a = { - "b1": ["b2"], -} - -_c = { - "d1": ["d2"], -} - -constants = struct( - a = _a, - c = _c, -)`, - }, - { - name: "exports dict with var refs", - vars: ExportedVariables{ - exportedVariableReferenceDictVars: ExportedVariableReferenceDictVariables{ - "a": map[string]string{"b1": "${b2}"}, - "c": map[string]string{"d1": "${config.d2}"}, - }, - }, - expectedOut: bazel.GeneratedBazelFileWarning + ` - -_a = { - "b1": _b2, -} - -_c = { - "d1": _d2, -} - -constants = struct( - a = _a, - c = _c, -)`, - }, - { - name: "sorts across types with variable references last", - vars: ExportedVariables{ - exportedStringVars: ExportedStringVariables{ - "b": "b-val", - "d": "d-val", - }, - exportedStringListVars: ExportedStringListVariables{ - "c": []string{"c-val"}, - "e": []string{"e-val"}, - }, - exportedStringListDictVars: ExportedStringListDictVariables{ - "a": map[string][]string{"a1": {"a2"}}, - "f": map[string][]string{"f1": {"f2"}}, - }, - exportedVariableReferenceDictVars: ExportedVariableReferenceDictVariables{ - "aa": map[string]string{"b1": "${b}"}, - "cc": map[string]string{"d1": "${config.d}"}, - }, - }, - expectedOut: bazel.GeneratedBazelFileWarning + ` - -_a = { - "a1": ["a2"], -} - -_b = "b-val" - -_c = ["c-val"] - -_d = "d-val" - -_e = ["e-val"] - -_f = { - "f1": ["f2"], -} - -_aa = { - "b1": _b, -} - -_cc = { - "d1": _d, -} - -constants = struct( - a = _a, - b = _b, - c = _c, - d = _d, - e = _e, - f = _f, - aa = _aa, - cc = _cc, -)`, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - out := BazelToolchainVars(tc.config, tc.vars) - if out != tc.expectedOut { - t.Errorf("Expected \n%s, got \n%s", tc.expectedOut, out) - } - }) - } -} - -func TestSplitStringKeepingQuotedSubstring(t *testing.T) { - testCases := []struct { - description string - s string - delimiter byte - split []string - }{ - { - description: "empty string returns single empty string", - s: "", - delimiter: ' ', - split: []string{ - "", - }, - }, - { - description: "string with single space returns two empty strings", - s: " ", - delimiter: ' ', - split: []string{ - "", - "", - }, - }, - { - description: "string with two spaces returns three empty strings", - s: " ", - delimiter: ' ', - split: []string{ - "", - "", - "", - }, - }, - { - description: "string with four words returns four word string", - s: "hello world with words", - delimiter: ' ', - split: []string{ - "hello", - "world", - "with", - "words", - }, - }, - { - description: "string with words and nested quote returns word strings and quote string", - s: `hello "world with" words`, - delimiter: ' ', - split: []string{ - "hello", - `"world with"`, - "words", - }, - }, - { - description: "string with escaped quote inside real quotes", - s: `hello \"world "with\" words"`, - delimiter: ' ', - split: []string{ - "hello", - `"world`, - `"with" words"`, - }, - }, - { - description: "string with words and escaped quotes returns word strings", - s: `hello \"world with\" words`, - delimiter: ' ', - split: []string{ - "hello", - `"world`, - `with"`, - "words", - }, - }, - { - description: "string which is single quoted substring returns only substring", - s: `"hello world with words"`, - delimiter: ' ', - split: []string{ - `"hello world with words"`, - }, - }, - { - description: "string starting with quote returns quoted string", - s: `"hello world with" words`, - delimiter: ' ', - split: []string{ - `"hello world with"`, - "words", - }, - }, - { - description: "string with starting quote and no ending quote returns quote to end of string", - s: `hello "world with words`, - delimiter: ' ', - split: []string{ - "hello", - `"world with words`, - }, - }, - { - description: "quoted string is treated as a single \"word\" unless separated by delimiter", - s: `hello "world"with words`, - delimiter: ' ', - split: []string{ - "hello", - `"world"with`, - "words", - }, - }, - } - - for _, tc := range testCases { - t.Run(tc.description, func(t *testing.T) { - split := splitStringKeepingQuotedSubstring(tc.s, tc.delimiter) - if len(split) != len(tc.split) { - t.Fatalf("number of split string elements (%d) differs from expected (%d): split string (%v), expected (%v)", - len(split), len(tc.split), split, tc.split, - ) - } - for i := range split { - if split[i] != tc.split[i] { - t.Errorf("split string element (%d), %v, differs from expected, %v", i, split[i], tc.split[i]) - } - } - }) - } -} diff --git a/android/defs.go b/android/defs.go index a9889648b..fe5293640 100644 --- a/android/defs.go +++ b/android/defs.go @@ -136,10 +136,6 @@ func init() { exportedVars.ExportStringList("NeverAllowNoUseIncludeDir", neverallowNoUseIncludeDir) } -func BazelCcToolchainVars(config Config) string { - return BazelToolchainVars(config, exportedVars) -} - // GlobToListFileRule creates a rule that writes a list of files matching a pattern to a file. func GlobToListFileRule(ctx ModuleContext, pattern string, excludes []string, file WritablePath) { bootstrap.GlobFile(ctx.blueprintModuleContext(), pattern, excludes, file.String()) diff --git a/android/neverallow.go b/android/neverallow.go index f721b945c..62c5e595e 100644 --- a/android/neverallow.go +++ b/android/neverallow.go @@ -57,7 +57,6 @@ func init() { AddNeverAllowRules(createUncompressDexRules()...) AddNeverAllowRules(createInitFirstStageRules()...) AddNeverAllowRules(createProhibitFrameworkAccessRules()...) - AddNeverAllowRules(createBp2BuildRule()) AddNeverAllowRules(createCcStubsRule()) AddNeverAllowRules(createJavaExcludeStaticLibsRule()) AddNeverAllowRules(createProhibitHeaderOnlyRule()) @@ -68,14 +67,6 @@ func AddNeverAllowRules(rules ...Rule) { neverallows = append(neverallows, rules...) } -func createBp2BuildRule() Rule { - return NeverAllow(). - With("bazel_module.bp2build_available", "true"). - NotIn("soong_tests"). // only used in tests - Because("setting bp2build_available in Android.bp is not " + - "supported for custom conversion, use allowlists.go instead.") -} - var ( neverallowNotInIncludeDir = []string{ "art", diff --git a/android/packaging.go b/android/packaging.go index 2506378d7..8873540c5 100644 --- a/android/packaging.go +++ b/android/packaging.go @@ -240,10 +240,14 @@ func (p *PackagingBase) GatherPackagingSpecs(ctx ModuleContext) map[string]Packa // CopySpecsToDir is a helper that will add commands to the rule builder to copy the PackagingSpec // entries into the specified directory. func (p *PackagingBase) CopySpecsToDir(ctx ModuleContext, builder *RuleBuilder, specs map[string]PackagingSpec, dir WritablePath) (entries []string) { + if len(specs) == 0 { + return entries + } seenDir := make(map[string]bool) preparerPath := PathForModuleOut(ctx, "preparer.sh") cmd := builder.Command().Tool(preparerPath) var sb strings.Builder + sb.WriteString("set -e\n") for _, k := range SortedKeys(specs) { ps := specs[k] destPath := filepath.Join(dir.String(), ps.relPathInPackage) diff --git a/android/sdk_version.go b/android/sdk_version.go index aafcee79a..73568af8a 100644 --- a/android/sdk_version.go +++ b/android/sdk_version.go @@ -16,6 +16,7 @@ package android import ( "fmt" + "reflect" "strconv" "strings" ) @@ -162,6 +163,17 @@ func (s SdkSpec) ForVendorPartition(ctx EarlyModuleContext) SdkSpec { // If BOARD_CURRENT_API_LEVEL_FOR_VENDOR_MODULES has a numeric value, // use it instead of "current" for the vendor partition. currentSdkVersion := ctx.DeviceConfig().CurrentApiLevelForVendorModules() + // b/314011075: special case for Java modules in vendor partition. They can no longer use + // SDK 35 or later. Their maximum API level is limited to 34 (Android U). This is to + // discourage the use of Java APIs in the vendor partition which hasn't been officially + // supported since the Project Treble back in Android 10. We would like to eventually + // evacuate all Java modules from the partition, but that shall be done progressively. + // Note that the check for the availability of SDK 34 is to not break existing tests where + // any of the frozen SDK version is unavailable. + if isJava(ctx.Module()) && isSdkVersion34AvailableIn(ctx.Config()) { + currentSdkVersion = "34" + } + if currentSdkVersion == "current" { return s } @@ -290,28 +302,79 @@ func SdkSpecFromWithConfig(config Config, str string) SdkSpec { } } +// Checks if the use of this SDK `s` is valid for the given module context `ctx`. func (s SdkSpec) ValidateSystemSdk(ctx EarlyModuleContext) bool { - // Ensures that the specified system SDK version is one of BOARD_SYSTEMSDK_VERSIONS (for vendor/product Java module) - // Assuming that BOARD_SYSTEMSDK_VERSIONS := 28 29, - // sdk_version of the modules in vendor/product that use system sdk must be either system_28, system_29 or system_current - if s.Kind != SdkSystem || s.ApiLevel.IsPreview() { + // Do some early checks. This check is currently only for Java modules. And our only concern + // is the use of "system" SDKs. + if !isJava(ctx.Module()) || s.Kind != SdkSystem || ctx.DeviceConfig().BuildBrokenDontCheckSystemSdk() { return true } - allowedVersions := ctx.DeviceConfig().PlatformSystemSdkVersions() - if ctx.DeviceSpecific() || ctx.SocSpecific() || (ctx.ProductSpecific() && ctx.Config().EnforceProductPartitionInterface()) { - systemSdkVersions := ctx.DeviceConfig().SystemSdkVersions() - if len(systemSdkVersions) > 0 { - allowedVersions = systemSdkVersions + + inVendor := ctx.DeviceSpecific() || ctx.SocSpecific() + inProduct := ctx.ProductSpecific() + isProductUnbundled := ctx.Config().EnforceProductPartitionInterface() + inApex := false + if am, ok := ctx.Module().(ApexModule); ok { + inApex = am.InAnyApex() + } + isUnbundled := inVendor || (inProduct && isProductUnbundled) || inApex + + // Bundled modules can use any SDK + if !isUnbundled { + return true + } + + // Unbundled modules are allowed to use BOARD_SYSTEMSDK_VERSIONS + supportedVersions := ctx.DeviceConfig().SystemSdkVersions() + + // b/314011075: special case for vendor modules. Java modules in the vendor partition can + // not use SDK 35 or later. This is to discourage the use of Java APIs in the vendor + // partition which hasn't been officially supported since the Project Treble back in Android + // 10. We would like to eventually evacuate all Java modules from the partition, but that + // shall be done progressively. + if inVendor { + // 28 was the API when BOARD_SYSTEMSDK_VERSIONS was introduced, so that's the oldest + // we should allow. + supportedVersions = []string{} + for v := 28; v <= 34; v++ { + supportedVersions = append(supportedVersions, strconv.Itoa(v)) } } - if len(allowedVersions) > 0 && !InList(s.ApiLevel.String(), allowedVersions) { + + // APEXes in the system partition are still considered as part of the platform, thus can use + // more SDKs from PLATFORM_SYSTEMSDK_VERSIONS + if inApex && !inVendor { + supportedVersions = ctx.DeviceConfig().PlatformSystemSdkVersions() + } + + thisVer, err := s.EffectiveVersion(ctx) + if err != nil { + ctx.PropertyErrorf("sdk_version", "invalid sdk version %q", s.Raw) + return false + } + + thisVerString := strconv.Itoa(thisVer.FinalOrPreviewInt()) + if thisVer.IsPreview() { + thisVerString = *ctx.Config().productVariables.Platform_sdk_version_or_codename + } + + if !InList(thisVerString, supportedVersions) { ctx.PropertyErrorf("sdk_version", "incompatible sdk version %q. System SDK version should be one of %q", - s.Raw, allowedVersions) + s.Raw, supportedVersions) return false } return true } +func isJava(m Module) bool { + moduleType := reflect.TypeOf(m).String() + return strings.HasPrefix(moduleType, "*java.") +} + +func isSdkVersion34AvailableIn(c Config) bool { + return c.PlatformSdkVersion().FinalInt() >= 34 +} + func init() { RegisterMakeVarsProvider(pctx, javaSdkMakeVars) } diff --git a/android/soong_config_modules_test.go b/android/soong_config_modules_test.go index 79bdeb829..a6b2c51c6 100644 --- a/android/soong_config_modules_test.go +++ b/android/soong_config_modules_test.go @@ -376,8 +376,7 @@ func TestNonExistentPropertyInSoongConfigModule(t *testing.T) { prepareForSoongConfigTestModule, FixtureWithRootAndroidBp(bp), ).ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern([]string{ - // TODO(b/171232169): improve the error message for non-existent properties - `unrecognized property "soong_config_variables`, + `unrecognized property "soong_config_variables.feature1.made_up_property`, })).RunTest(t) } diff --git a/android/soongconfig/modules.go b/android/soongconfig/modules.go index 23c8afa0b..f6b49382c 100644 --- a/android/soongconfig/modules.go +++ b/android/soongconfig/modules.go @@ -16,16 +16,12 @@ package soongconfig import ( "fmt" + "github.com/google/blueprint/parser" + "github.com/google/blueprint/proptools" "io" "reflect" "sort" "strings" - "sync" - - "github.com/google/blueprint/parser" - "github.com/google/blueprint/proptools" - - "android/soong/starlark_fmt" ) const conditionsDefault = "conditions_default" @@ -236,110 +232,6 @@ type SoongConfigDefinition struct { variables map[string]soongConfigVariable } -// Bp2BuildSoongConfigDefinition keeps a global record of all soong config -// string vars, bool vars and value vars created by every -// soong_config_module_type in this build. -type Bp2BuildSoongConfigDefinitions struct { - StringVars map[string]map[string]bool - BoolVars map[string]bool - ValueVars map[string]bool -} - -var bp2buildSoongConfigVarsLock sync.Mutex - -// SoongConfigVariablesForBp2build extracts information from a -// SoongConfigDefinition that bp2build needs to generate constraint settings and -// values for, in order to migrate soong_config_module_type usages to Bazel. -func (defs *Bp2BuildSoongConfigDefinitions) AddVars(mtDef *SoongConfigDefinition) { - // In bp2build mode, this method is called concurrently in goroutines from - // loadhooks while parsing soong_config_module_type, so add a mutex to - // prevent concurrent map writes. See b/207572723 - bp2buildSoongConfigVarsLock.Lock() - defer bp2buildSoongConfigVarsLock.Unlock() - - if defs.StringVars == nil { - defs.StringVars = make(map[string]map[string]bool) - } - if defs.BoolVars == nil { - defs.BoolVars = make(map[string]bool) - } - if defs.ValueVars == nil { - defs.ValueVars = make(map[string]bool) - } - // varCache contains a cache of string variables namespace + property - // The same variable may be used in multiple module types (for example, if need support - // for cc_default and java_default), only need to process once - varCache := map[string]bool{} - - for _, moduleType := range mtDef.ModuleTypes { - for _, v := range moduleType.Variables { - key := strings.Join([]string{moduleType.ConfigNamespace, v.variableProperty()}, "__") - - // The same variable may be used in multiple module types (for example, if need support - // for cc_default and java_default), only need to process once - if _, keyInCache := varCache[key]; keyInCache { - continue - } else { - varCache[key] = true - } - - if strVar, ok := v.(*stringVariable); ok { - if _, ok := defs.StringVars[key]; !ok { - defs.StringVars[key] = make(map[string]bool, len(strVar.values)) - } - for _, value := range strVar.values { - defs.StringVars[key][value] = true - } - } else if _, ok := v.(*boolVariable); ok { - defs.BoolVars[key] = true - } else if _, ok := v.(*valueVariable); ok { - defs.ValueVars[key] = true - } else { - panic(fmt.Errorf("Unsupported variable type: %+v", v)) - } - } - } -} - -// This is a copy of the one available in soong/android/util.go, but depending -// on the android package causes a cyclic dependency. A refactoring here is to -// extract common utils out from android/utils.go for other packages like this. -func sortedStringKeys(m interface{}) []string { - v := reflect.ValueOf(m) - if v.Kind() != reflect.Map { - panic(fmt.Sprintf("%#v is not a map", m)) - } - keys := v.MapKeys() - s := make([]string, 0, len(keys)) - for _, key := range keys { - s = append(s, key.String()) - } - sort.Strings(s) - return s -} - -// String emits the Soong config variable definitions as Starlark dictionaries. -func (defs Bp2BuildSoongConfigDefinitions) String() string { - ret := "" - ret += "soong_config_bool_variables = " - ret += starlark_fmt.PrintBoolDict(defs.BoolVars, 0) - ret += "\n\n" - - ret += "soong_config_value_variables = " - ret += starlark_fmt.PrintBoolDict(defs.ValueVars, 0) - ret += "\n\n" - - stringVars := make(map[string][]string, len(defs.StringVars)) - for k, v := range defs.StringVars { - stringVars[k] = sortedStringKeys(v) - } - - ret += "soong_config_string_variables = " - ret += starlark_fmt.PrintStringListDict(stringVars, 0) - - return ret -} - // CreateProperties returns a reflect.Value of a newly constructed type that contains the desired // property layout for the Soong config variables, with each possible value an interface{} that // contains a nil pointer to another newly constructed type that contains the affectable properties. diff --git a/android/soongconfig/modules_test.go b/android/soongconfig/modules_test.go index a5fa34938..00e8b785a 100644 --- a/android/soongconfig/modules_test.go +++ b/android/soongconfig/modules_test.go @@ -413,220 +413,3 @@ func Test_PropertiesToApply_String_Error(t *testing.T) { t.Fatalf("Error message was not correct, expected %q, got %q", expected, err.Error()) } } - -func Test_Bp2BuildSoongConfigDefinitionsAddVars(t *testing.T) { - testCases := []struct { - desc string - defs []*SoongConfigDefinition - expected Bp2BuildSoongConfigDefinitions - }{ - { - desc: "non-overlapping", - defs: []*SoongConfigDefinition{ - &SoongConfigDefinition{ - ModuleTypes: map[string]*ModuleType{ - "a": &ModuleType{ - ConfigNamespace: "foo", - Variables: []soongConfigVariable{ - &stringVariable{ - baseVariable: baseVariable{"string_var"}, - values: []string{"a", "b", "c"}, - }, - }, - }, - }, - }, - &SoongConfigDefinition{ - ModuleTypes: map[string]*ModuleType{ - "b": &ModuleType{ - ConfigNamespace: "foo", - Variables: []soongConfigVariable{ - &stringVariable{ - baseVariable: baseVariable{"string_var"}, - values: []string{"a", "b", "c"}, - }, - &boolVariable{baseVariable: baseVariable{"bool_var"}}, - &valueVariable{baseVariable: baseVariable{"variable_var"}}, - }, - }, - }, - }, - }, - expected: Bp2BuildSoongConfigDefinitions{ - StringVars: map[string]map[string]bool{ - "foo__string_var": map[string]bool{"a": true, "b": true, "c": true}, - }, - BoolVars: map[string]bool{"foo__bool_var": true}, - ValueVars: map[string]bool{"foo__variable_var": true}, - }, - }, - { - desc: "overlapping", - defs: []*SoongConfigDefinition{ - &SoongConfigDefinition{ - ModuleTypes: map[string]*ModuleType{ - "a": &ModuleType{ - ConfigNamespace: "foo", - Variables: []soongConfigVariable{ - &stringVariable{ - baseVariable: baseVariable{"string_var"}, - values: []string{"a", "b", "c"}, - }, - }, - }, - }, - }, - &SoongConfigDefinition{ - ModuleTypes: map[string]*ModuleType{ - "b": &ModuleType{ - ConfigNamespace: "foo", - Variables: []soongConfigVariable{ - &stringVariable{ - baseVariable: baseVariable{"string_var"}, - values: []string{"b", "c", "d"}, - }, - &boolVariable{baseVariable: baseVariable{"bool_var"}}, - &valueVariable{baseVariable: baseVariable{"variable_var"}}, - }, - }, - }, - }, - }, - expected: Bp2BuildSoongConfigDefinitions{ - StringVars: map[string]map[string]bool{ - "foo__string_var": map[string]bool{"a": true, "b": true, "c": true, "d": true}, - }, - BoolVars: map[string]bool{"foo__bool_var": true}, - ValueVars: map[string]bool{"foo__variable_var": true}, - }, - }, - } - - for _, tc := range testCases { - t.Run(tc.desc, func(t *testing.T) { - actual := &Bp2BuildSoongConfigDefinitions{} - for _, d := range tc.defs { - func(def *SoongConfigDefinition) { - actual.AddVars(def) - }(d) - } - if !reflect.DeepEqual(*actual, tc.expected) { - t.Errorf("Expected %#v, got %#v", tc.expected, *actual) - } - }) - } - -} - -func Test_Bp2BuildSoongConfigDefinitions(t *testing.T) { - testCases := []struct { - desc string - defs Bp2BuildSoongConfigDefinitions - expected string - }{ - { - desc: "all empty", - defs: Bp2BuildSoongConfigDefinitions{}, - expected: `soong_config_bool_variables = {} - -soong_config_value_variables = {} - -soong_config_string_variables = {}`}, { - desc: "only bool", - defs: Bp2BuildSoongConfigDefinitions{ - BoolVars: map[string]bool{ - "bool_var": true, - }, - }, - expected: `soong_config_bool_variables = { - "bool_var": True, -} - -soong_config_value_variables = {} - -soong_config_string_variables = {}`}, { - desc: "only value vars", - defs: Bp2BuildSoongConfigDefinitions{ - ValueVars: map[string]bool{ - "value_var": true, - }, - }, - expected: `soong_config_bool_variables = {} - -soong_config_value_variables = { - "value_var": True, -} - -soong_config_string_variables = {}`}, { - desc: "only string vars", - defs: Bp2BuildSoongConfigDefinitions{ - StringVars: map[string]map[string]bool{ - "string_var": map[string]bool{ - "choice1": true, - "choice2": true, - "choice3": true, - }, - }, - }, - expected: `soong_config_bool_variables = {} - -soong_config_value_variables = {} - -soong_config_string_variables = { - "string_var": [ - "choice1", - "choice2", - "choice3", - ], -}`}, { - desc: "all vars", - defs: Bp2BuildSoongConfigDefinitions{ - BoolVars: map[string]bool{ - "bool_var_one": true, - }, - ValueVars: map[string]bool{ - "value_var_one": true, - "value_var_two": true, - }, - StringVars: map[string]map[string]bool{ - "string_var_one": map[string]bool{ - "choice1": true, - "choice2": true, - "choice3": true, - }, - "string_var_two": map[string]bool{ - "foo": true, - "bar": true, - }, - }, - }, - expected: `soong_config_bool_variables = { - "bool_var_one": True, -} - -soong_config_value_variables = { - "value_var_one": True, - "value_var_two": True, -} - -soong_config_string_variables = { - "string_var_one": [ - "choice1", - "choice2", - "choice3", - ], - "string_var_two": [ - "bar", - "foo", - ], -}`}, - } - for _, test := range testCases { - t.Run(test.desc, func(t *testing.T) { - actual := test.defs.String() - if actual != test.expected { - t.Errorf("Expected:\n%s\nbut got:\n%s", test.expected, actual) - } - }) - } -} diff --git a/android/test_config.go b/android/test_config.go index 9e1ac70df..a15343adb 100644 --- a/android/test_config.go +++ b/android/test_config.go @@ -39,11 +39,12 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string DeviceName: stringPtr("test_device"), DeviceProduct: stringPtr("test_product"), Platform_sdk_version: intPtr(30), + Platform_sdk_version_or_codename: stringPtr("S"), Platform_sdk_codename: stringPtr("S"), Platform_base_sdk_extension_version: intPtr(1), Platform_version_active_codenames: []string{"S", "Tiramisu"}, - DeviceSystemSdkVersions: []string{"14", "15"}, - Platform_systemsdk_versions: []string{"29", "30"}, + DeviceSystemSdkVersions: []string{"29", "30", "S"}, + Platform_systemsdk_versions: []string{"29", "30", "S", "Tiramisu"}, AAPTConfig: []string{"normal", "large", "xlarge", "hdpi", "xhdpi", "xxhdpi"}, AAPTPreferredConfig: stringPtr("xhdpi"), AAPTCharacteristics: stringPtr("nosdcard"), diff --git a/android/testing.go b/android/testing.go index 3d0300a01..78afaa5fc 100644 --- a/android/testing.go +++ b/android/testing.go @@ -183,7 +183,6 @@ func NewTestArchContext(config Config) *TestContext { type TestContext struct { *Context preArch, preDeps, postDeps, finalDeps []RegisterMutatorFunc - bp2buildPreArch, bp2buildMutators []RegisterMutatorFunc NameResolver *NameResolver // The list of singletons registered for the test. @@ -219,12 +218,6 @@ func (ctx *TestContext) FinalDepsMutators(f RegisterMutatorFunc) { ctx.finalDeps = append(ctx.finalDeps, f) } -// PreArchBp2BuildMutators adds mutators to be register for converting Android Blueprint modules -// into Bazel BUILD targets that should run prior to deps and conversion. -func (ctx *TestContext) PreArchBp2BuildMutators(f RegisterMutatorFunc) { - ctx.bp2buildPreArch = append(ctx.bp2buildPreArch, f) -} - func (ctx *TestContext) OtherModuleProviderAdaptor() OtherModuleProviderContext { return NewOtherModuleProviderAdaptor(func(module blueprint.Module, provider blueprint.AnyProviderKey) (any, bool) { return ctx.moduleProvider(module, provider) diff --git a/android/variable.go b/android/variable.go index fa4cfc1fd..98440802f 100644 --- a/android/variable.go +++ b/android/variable.go @@ -448,6 +448,7 @@ type ProductVariables struct { BuildBrokenVendorPropertyNamespace bool `json:",omitempty"` BuildBrokenIncorrectPartitionImages bool `json:",omitempty"` BuildBrokenInputDirModules []string `json:",omitempty"` + BuildBrokenDontCheckSystemSdk bool `json:",omitempty"` BuildWarningBadOptionalUsesLibsAllowlist []string `json:",omitempty"` diff --git a/apex/apex.go b/apex/apex.go index c4545d292..42a7d73e7 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -719,7 +719,7 @@ func (a *apexBundle) combineProperties(ctx android.BottomUpMutatorContext) { // getImageVariationPair returns a pair for the image variation name as its // prefix and suffix. The prefix indicates whether it's core/vendor/product and the -// suffix indicates the vndk version when it's vendor or product. +// suffix indicates the vndk version for vendor/product if vndk is enabled. // getImageVariation can simply join the result of this function to get the // image variation name. func (a *apexBundle) getImageVariationPair(deviceConfig android.DeviceConfig) (string, string) { @@ -727,8 +727,8 @@ func (a *apexBundle) getImageVariationPair(deviceConfig android.DeviceConfig) (s return cc.VendorVariationPrefix, a.vndkVersion(deviceConfig) } - var prefix string - var vndkVersion string + prefix := android.CoreVariation + vndkVersion := "" if deviceConfig.VndkVersion() != "" { if a.SocSpecific() || a.DeviceSpecific() { prefix = cc.VendorVariationPrefix @@ -737,15 +737,18 @@ func (a *apexBundle) getImageVariationPair(deviceConfig android.DeviceConfig) (s prefix = cc.ProductVariationPrefix vndkVersion = deviceConfig.PlatformVndkVersion() } + } else { + if a.SocSpecific() || a.DeviceSpecific() { + prefix = cc.VendorVariation + } else if a.ProductSpecific() { + prefix = cc.ProductVariation + } } if vndkVersion == "current" { vndkVersion = deviceConfig.PlatformVndkVersion() } - if vndkVersion != "" { - return prefix, vndkVersion - } - return android.CoreVariation, "" // The usual case + return prefix, vndkVersion } // getImageVariation returns the image variant name for this apexBundle. In most cases, it's simply @@ -2853,17 +2856,6 @@ func makeApexAvailableBaseline() map[string][]string { // // Module separator // - m["com.android.mediaprovider"] = []string{ - "MediaProvider", - "MediaProviderGoogle", - "fmtlib_ndk", - "libbase_ndk", - "libfuse", - "libfuse_jni", - } - // - // Module separator - // m["com.android.runtime"] = []string{ "libdebuggerd", "libdebuggerd_common_headers", @@ -25,6 +25,7 @@ import ( "strings" "android/soong/testing" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" @@ -300,8 +301,8 @@ type BaseProperties struct { // Set by DepsMutator. AndroidMkSystemSharedLibs []string `blueprint:"mutated"` - // The name of the image this module is built for, suffixed with a '.' - ImageVariationPrefix string `blueprint:"mutated"` + // The name of the image this module is built for + ImageVariation string `blueprint:"mutated"` // The VNDK version this module is built against. If empty, the module is not // build against the VNDK. @@ -1948,6 +1949,7 @@ var ( "libdl_android": true, "libm": true, "libdl": true, + "libz": true, // art apex "libandroidio": true, "libdexfile": true, @@ -2426,9 +2428,9 @@ func GetSnapshot(c LinkableInterface, snapshotInfo **SnapshotInfo, actx android. // Only retrieve the snapshot on demand in order to avoid circular dependencies // between the modules in the snapshot and the snapshot itself. var snapshotModule []blueprint.Module - if c.InVendor() && c.VndkVersion() == actx.DeviceConfig().VndkVersion() { + if c.InVendor() && c.VndkVersion() == actx.DeviceConfig().VndkVersion() && actx.OtherModuleExists("vendor_snapshot") { snapshotModule = actx.AddVariationDependencies(nil, nil, "vendor_snapshot") - } else if recoverySnapshotVersion := actx.DeviceConfig().RecoverySnapshotVersion(); recoverySnapshotVersion != "current" && recoverySnapshotVersion != "" && c.InRecovery() { + } else if recoverySnapshotVersion := actx.DeviceConfig().RecoverySnapshotVersion(); recoverySnapshotVersion != "current" && recoverySnapshotVersion != "" && c.InRecovery() && actx.OtherModuleExists("recovery_snapshot") { snapshotModule = actx.AddVariationDependencies(nil, nil, "recovery_snapshot") } if len(snapshotModule) > 0 && snapshotModule[0] != nil { diff --git a/cc/cc_test.go b/cc/cc_test.go index 5c5275ede..321bd380b 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -26,6 +26,8 @@ import ( "android/soong/aidl_library" "android/soong/android" + + "github.com/google/blueprint" ) func init() { @@ -45,6 +47,14 @@ var prepareForCcTest = android.GroupFixturePreparers( }), ) +// TODO(b/316829758) Update prepareForCcTest with this configuration and remove prepareForCcTestWithoutVndk +var prepareForCcTestWithoutVndk = android.GroupFixturePreparers( + PrepareForIntegrationTestWithCc, + android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + variables.VendorApiLevel = StringPtr("202404") + }), +) + var apexVariationName = "apex28" var apexVersion = "28" @@ -2640,6 +2650,7 @@ func TestLlndkLibrary(t *testing.T) { name: "libexternal_headers", export_include_dirs: ["include"], vendor_available: true, + product_available: true, } cc_library_headers { name: "libexternal_llndk_headers", @@ -4784,3 +4795,51 @@ func TestStrippedAllOutputFile(t *testing.T) { return } } + +// TODO(b/316829758) Remove this test and do not set VNDK version from other tests +func TestImageVariantsWithoutVndk(t *testing.T) { + t.Parallel() + + bp := ` + cc_binary { + name: "binfoo", + srcs: ["binfoo.cc"], + vendor_available: true, + product_available: true, + shared_libs: ["libbar"] + } + cc_library { + name: "libbar", + srcs: ["libbar.cc"], + vendor_available: true, + product_available: true, + } + ` + + ctx := prepareForCcTestWithoutVndk.RunTestWithBp(t, bp) + + hasDep := func(m android.Module, wantDep android.Module) bool { + t.Helper() + var found bool + ctx.VisitDirectDeps(m, func(dep blueprint.Module) { + if dep == wantDep { + found = true + } + }) + return found + } + + testDepWithVariant := func(imageVariant string) { + imageVariantStr := "" + if imageVariant != "core" { + imageVariantStr = "_" + imageVariant + } + binFooModule := ctx.ModuleForTests("binfoo", "android"+imageVariantStr+"_arm64_armv8-a").Module() + libBarModule := ctx.ModuleForTests("libbar", "android"+imageVariantStr+"_arm64_armv8-a_shared").Module() + android.AssertBoolEquals(t, "binfoo should have dependency on libbar with image variant "+imageVariant, true, hasDep(binFooModule, libBarModule)) + } + + testDepWithVariant("core") + testDepWithVariant("vendor") + testDepWithVariant("product") +} diff --git a/cc/config/x86_64_device.go b/cc/config/x86_64_device.go index e43848cc9..ff0a3b7b6 100644 --- a/cc/config/x86_64_device.go +++ b/cc/config/x86_64_device.go @@ -49,6 +49,10 @@ var ( "goldmont-plus": []string{ "-march=goldmont-plus", }, + "goldmont-without-xsaves": []string{ + "-march=goldmont", + "-mno-xsaves", + }, "haswell": []string{ "-march=core-avx2", }, diff --git a/cc/config/x86_device.go b/cc/config/x86_device.go index c826d3c45..08be8698c 100644 --- a/cc/config/x86_device.go +++ b/cc/config/x86_device.go @@ -56,6 +56,10 @@ var ( "goldmont-plus": []string{ "-march=goldmont-plus", }, + "goldmont-without-xsaves": []string{ + "-march=goldmont", + "-mno-xsaves", + }, "haswell": []string{ "-march=core-avx2", }, diff --git a/cc/image.go b/cc/image.go index 4c0c72280..9eec25588 100644 --- a/cc/image.go +++ b/cc/image.go @@ -42,10 +42,18 @@ const ( ) const ( + // VendorVariation is the variant name used for /vendor code that does not + // compile against the VNDK. + VendorVariation = "vendor" + // VendorVariationPrefix is the variant prefix used for /vendor code that compiles // against the VNDK. VendorVariationPrefix = "vendor." + // ProductVariation is the variant name used for /product code that does not + // compile against the VNDK. + ProductVariation = "product" + // ProductVariationPrefix is the variant prefix used for /product code that compiles // against the VNDK. ProductVariationPrefix = "product." @@ -112,12 +120,12 @@ func (c *Module) HasNonSystemVariants() bool { // Returns true if the module is "product" variant. Usually these modules are installed in /product func (c *Module) InProduct() bool { - return c.Properties.ImageVariationPrefix == ProductVariationPrefix + return c.Properties.ImageVariation == ProductVariation } // Returns true if the module is "vendor" variant. Usually these modules are installed in /vendor func (c *Module) InVendor() bool { - return c.Properties.ImageVariationPrefix == VendorVariationPrefix + return c.Properties.ImageVariation == VendorVariation } func (c *Module) InRamdisk() bool { @@ -439,10 +447,8 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { // and vendor and product variants will be created with LLNDK stubs. // The LLNDK libraries need vendor variants even if there is no VNDK. coreVariantNeeded = true - if platformVndkVersion != "" { - vendorVariants = append(vendorVariants, platformVndkVersion) - productVariants = append(productVariants, platformVndkVersion) - } + vendorVariants = append(vendorVariants, platformVndkVersion) + productVariants = append(productVariants, platformVndkVersion) // Generate vendor variants for boardVndkVersion only if the VNDK snapshot does not // provide the LLNDK stub libraries. if needVndkVersionVendorVariantForLlndk { @@ -453,13 +459,7 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { // for system and product. coreVariantNeeded = true vendorVariants = append(vendorVariants, boardVndkVersion) - if platformVndkVersion != "" { - productVariants = append(productVariants, platformVndkVersion) - } - } else if boardVndkVersion == "" { - // If the device isn't compiling against the VNDK, we always - // use the core mode. - coreVariantNeeded = true + productVariants = append(productVariants, platformVndkVersion) } else if m.IsSnapshotPrebuilt() { // Make vendor variants only for the versions in BOARD_VNDK_VERSION and // PRODUCT_EXTRA_VNDK_VERSIONS. @@ -557,11 +557,19 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { } for _, variant := range android.FirstUniqueStrings(vendorVariants) { - m.AppendExtraVariant(VendorVariationPrefix + variant) + if variant == "" { + m.AppendExtraVariant(VendorVariation) + } else { + m.AppendExtraVariant(VendorVariationPrefix + variant) + } } for _, variant := range android.FirstUniqueStrings(productVariants) { - m.AppendExtraVariant(ProductVariationPrefix + variant) + if variant == "" { + m.AppendExtraVariant(ProductVariation) + } else { + m.AppendExtraVariant(ProductVariationPrefix + variant) + } } m.SetRamdiskVariantNeeded(ramdiskVariantNeeded) @@ -672,9 +680,12 @@ func (c *Module) SetImageVariation(ctx android.BaseModuleContext, variant string } else if variant == android.RecoveryVariation { m.MakeAsPlatform() squashRecoverySrcs(m) - } else if strings.HasPrefix(variant, VendorVariationPrefix) { - m.Properties.ImageVariationPrefix = VendorVariationPrefix - m.Properties.VndkVersion = strings.TrimPrefix(variant, VendorVariationPrefix) + } else if strings.HasPrefix(variant, VendorVariation) { + m.Properties.ImageVariation = VendorVariation + + if strings.HasPrefix(variant, VendorVariationPrefix) { + m.Properties.VndkVersion = strings.TrimPrefix(variant, VendorVariationPrefix) + } squashVendorSrcs(m) // Makefile shouldn't know vendor modules other than BOARD_VNDK_VERSION. @@ -684,9 +695,11 @@ func (c *Module) SetImageVariation(ctx android.BaseModuleContext, variant string m.Properties.HideFromMake = true m.HideFromMake() } - } else if strings.HasPrefix(variant, ProductVariationPrefix) { - m.Properties.ImageVariationPrefix = ProductVariationPrefix - m.Properties.VndkVersion = strings.TrimPrefix(variant, ProductVariationPrefix) + } else if strings.HasPrefix(variant, ProductVariation) { + m.Properties.ImageVariation = ProductVariation + if strings.HasPrefix(variant, ProductVariationPrefix) { + m.Properties.VndkVersion = strings.TrimPrefix(variant, ProductVariationPrefix) + } squashProductSrcs(m) } diff --git a/java/Android.bp b/java/Android.bp index 79cd3f923..2585cd23f 100644 --- a/java/Android.bp +++ b/java/Android.bp @@ -108,8 +108,9 @@ bootstrap_go_package { "prebuilt_apis_test.go", "proto_test.go", "rro_test.go", - "sdk_test.go", "sdk_library_test.go", + "sdk_test.go", + "sdk_version_test.go", "system_modules_test.go", "systemserver_classpath_fragment_test.go", "test_spec_test.go", diff --git a/java/aar.go b/java/aar.go index 2ad8fdff4..eb07e0fb2 100644 --- a/java/aar.go +++ b/java/aar.go @@ -544,7 +544,7 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio if a.useResourceProcessorBusyBox() { rJar := android.PathForModuleOut(ctx, "busybox/R.jar") - resourceProcessorBusyBoxGenerateBinaryR(ctx, rTxt, a.mergedManifestFile, rJar, staticDeps, a.isLibrary) + resourceProcessorBusyBoxGenerateBinaryR(ctx, rTxt, a.mergedManifestFile, rJar, staticDeps, a.isLibrary, a.aaptProperties.Aaptflags) aapt2ExtractExtraPackages(ctx, extraPackages, rJar) transitiveRJars = append(transitiveRJars, rJar) a.rJar = rJar @@ -604,7 +604,7 @@ var resourceProcessorBusyBox = pctx.AndroidStaticRule("resourceProcessorBusyBox" // using Bazel's ResourceProcessorBusyBox tool, which is faster than compiling the R.java files and // supports producing classes for static dependencies that only include resources from that dependency. func resourceProcessorBusyBoxGenerateBinaryR(ctx android.ModuleContext, rTxt, manifest android.Path, - rJar android.WritablePath, transitiveDeps transitiveAarDeps, isLibrary bool) { + rJar android.WritablePath, transitiveDeps transitiveAarDeps, isLibrary bool, aaptFlags []string) { var args []string var deps android.Paths @@ -621,6 +621,17 @@ func resourceProcessorBusyBoxGenerateBinaryR(ctx android.ModuleContext, rTxt, ma args = append(args, "--finalFields=false") } + for i, arg := range aaptFlags { + const AAPT_CUSTOM_PACKAGE = "--custom-package" + if strings.HasPrefix(arg, AAPT_CUSTOM_PACKAGE) { + pkg := strings.TrimSpace(strings.TrimPrefix(arg, AAPT_CUSTOM_PACKAGE)) + if pkg == "" && i+1 < len(aaptFlags) { + pkg = aaptFlags[i+1] + } + args = append(args, "--packageForR "+pkg) + } + } + deps = append(deps, rTxt, manifest) ctx.Build(pctx, android.BuildParams{ @@ -1194,7 +1205,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { linkFlags, linkDeps, nil, overlayRes, transitiveAssets, nil, nil) a.rJar = android.PathForModuleOut(ctx, "busybox/R.jar") - resourceProcessorBusyBoxGenerateBinaryR(ctx, a.rTxt, a.manifest, a.rJar, nil, true) + resourceProcessorBusyBoxGenerateBinaryR(ctx, a.rTxt, a.manifest, a.rJar, nil, true, nil) aapt2ExtractExtraPackages(ctx, a.extraAaptPackagesFile, a.rJar) diff --git a/java/app_test.go b/java/app_test.go index 861c04761..3ee94d531 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -2109,7 +2109,7 @@ func TestJNISDK(t *testing.T) { Output("libjni.so").Output.String() sdkJNI := ctx.ModuleForTests("libjni", "android_arm64_armv8-a_sdk_shared"). Output("libjni.so").Output.String() - vendorJNI := ctx.ModuleForTests("libvendorjni", "android_arm64_armv8-a_shared"). + vendorJNI := ctx.ModuleForTests("libvendorjni", "android_vendor_arm64_armv8-a_shared"). Output("libvendorjni.so").Output.String() for _, test := range testCases { diff --git a/java/base.go b/java/base.go index 0d3e4dbe3..51471ea3a 100644 --- a/java/base.go +++ b/java/base.go @@ -1644,30 +1644,11 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } if ctx.Device() { - lintSDKVersion := func(apiLevel android.ApiLevel) int { + lintSDKVersion := func(apiLevel android.ApiLevel) android.ApiLevel { if !apiLevel.IsPreview() { - return apiLevel.FinalInt() + return apiLevel } else { - // When running metalava, we pass --version-codename. When that value - // is not REL, metalava will add 1 to the --current-version argument. - // On old branches, PLATFORM_SDK_VERSION is the latest version (for that - // branch) and the codename is REL, except potentially on the most - // recent non-master branch. On that branch, it goes through two other - // phases before it gets to the phase previously described: - // - PLATFORM_SDK_VERSION has not been updated yet, and the codename - // is not rel. This happens for most of the internal branch's life - // while the branch has been cut but is still under active development. - // - PLATFORM_SDK_VERSION has been set, but the codename is still not - // REL. This happens briefly during the release process. During this - // state the code to add --current-version is commented out, and then - // that commenting out is reverted after the codename is set to REL. - // On the master branch, the PLATFORM_SDK_VERSION always represents a - // prior version and the codename is always non-REL. - // - // We need to add one here to match metalava adding 1. Technically - // this means that in the state described in the second bullet point - // above, this number is 1 higher than it should be. - return ctx.Config().PlatformSdkVersion().FinalInt() + 1 + return ctx.Config().DefaultAppTargetSdk(ctx) } } diff --git a/java/lint.go b/java/lint.go index 5a684a8c0..c3d723b40 100644 --- a/java/lint.go +++ b/java/lint.go @@ -17,7 +17,6 @@ package java import ( "fmt" "sort" - "strconv" "strings" "github.com/google/blueprint/proptools" @@ -56,7 +55,8 @@ type LintProperties struct { // Modules that provide extra lint checks Extra_check_modules []string - // Name of the file that lint uses as the baseline. Defaults to "lint-baseline.xml". + // The lint baseline file to use. If specified, lint warnings listed in this file will be + // suppressed during lint checks. Baseline_filename *string // If true, baselining updatability lint checks (e.g. NewApi) is prohibited. Defaults to false. @@ -84,9 +84,9 @@ type linter struct { classes android.Path extraLintCheckJars android.Paths library bool - minSdkVersion int - targetSdkVersion int - compileSdkVersion int + minSdkVersion android.ApiLevel + targetSdkVersion android.ApiLevel + compileSdkVersion android.ApiLevel compileSdkKind android.SdkKind javaLanguageLevel string kotlinLanguageLevel string @@ -357,33 +357,20 @@ func (l *linter) generateManifest(ctx android.ModuleContext, rule *android.RuleB Text(`echo "<?xml version='1.0' encoding='utf-8'?>" &&`). Text(`echo "<manifest xmlns:android='http://schemas.android.com/apk/res/android'" &&`). Text(`echo " android:versionCode='1' android:versionName='1' >" &&`). - Textf(`echo " <uses-sdk android:minSdkVersion='%d' android:targetSdkVersion='%d'/>" &&`, - l.minSdkVersion, l.targetSdkVersion). + Textf(`echo " <uses-sdk android:minSdkVersion='%s' android:targetSdkVersion='%s'/>" &&`, + l.minSdkVersion.String(), l.targetSdkVersion.String()). Text(`echo "</manifest>"`). Text(") >").Output(manifestPath) return manifestPath } -func (l *linter) getBaselineFilepath(ctx android.ModuleContext) android.OptionalPath { - var lintBaseline android.OptionalPath - if lintFilename := proptools.StringDefault(l.properties.Lint.Baseline_filename, "lint-baseline.xml"); lintFilename != "" { - if String(l.properties.Lint.Baseline_filename) != "" { - // if manually specified, we require the file to exist - lintBaseline = android.OptionalPathForPath(android.PathForModuleSrc(ctx, lintFilename)) - } else { - lintBaseline = android.ExistentPathForSource(ctx, ctx.ModuleDir(), lintFilename) - } - } - return lintBaseline -} - func (l *linter) lint(ctx android.ModuleContext) { if !l.enabled() { return } - if l.minSdkVersion != l.compileSdkVersion { + if l.minSdkVersion.CompareTo(l.compileSdkVersion) == -1 { l.extraMainlineLintErrors = append(l.extraMainlineLintErrors, updatabilityChecks...) // Skip lint warning checks for NewApi warnings for libcore where they come from source // files that reference the API they are adding (b/208656169). @@ -497,7 +484,7 @@ func (l *linter) lint(ctx android.ModuleContext) { FlagWithOutput("--html ", html). FlagWithOutput("--text ", text). FlagWithOutput("--xml ", xml). - FlagWithArg("--compile-sdk-version ", strconv.Itoa(l.compileSdkVersion)). + FlagWithArg("--compile-sdk-version ", l.compileSdkVersion.String()). FlagWithArg("--java-language-level ", l.javaLanguageLevel). FlagWithArg("--kotlin-language-level ", l.kotlinLanguageLevel). FlagWithArg("--url ", fmt.Sprintf(".=.,%s=out", android.PathForOutput(ctx).String())). @@ -518,9 +505,8 @@ func (l *linter) lint(ctx android.ModuleContext) { cmd.FlagWithArg("--check ", checkOnly) } - lintBaseline := l.getBaselineFilepath(ctx) - if lintBaseline.Valid() { - cmd.FlagWithInput("--baseline ", lintBaseline.Path()) + if l.properties.Lint.Baseline_filename != nil { + cmd.FlagWithInput("--baseline ", android.PathForModuleSrc(ctx, *l.properties.Lint.Baseline_filename)) } cmd.FlagWithOutput("--write-reference-baseline ", referenceBaseline) @@ -556,6 +542,10 @@ func (l *linter) lint(ctx android.ModuleContext) { if l.buildModuleReportZip { l.reports = BuildModuleLintReportZips(ctx, l.LintDepSets()) } + + // Create a per-module phony target to run the lint check. + phonyName := ctx.ModuleName() + "-lint" + ctx.Phony(phonyName, xml) } func BuildModuleLintReportZips(ctx android.ModuleContext, depSets LintDepSets) android.Paths { diff --git a/java/lint_test.go b/java/lint_test.go index 5e6b8bcea..b7e6aad8e 100644 --- a/java/lint_test.go +++ b/java/lint_test.go @@ -21,7 +21,7 @@ import ( "android/soong/android" ) -func TestJavaLint(t *testing.T) { +func TestJavaLintDoesntUseBaselineImplicitly(t *testing.T) { ctx, _ := testJavaWithFS(t, ` java_library { name: "foo", @@ -40,30 +40,8 @@ func TestJavaLint(t *testing.T) { foo := ctx.ModuleForTests("foo", "android_common") sboxProto := android.RuleBuilderSboxProtoForTests(t, ctx, foo.Output("lint.sbox.textproto")) - if !strings.Contains(*sboxProto.Commands[0].Command, "--baseline lint-baseline.xml") { - t.Error("did not pass --baseline flag") - } -} - -func TestJavaLintWithoutBaseline(t *testing.T) { - ctx, _ := testJavaWithFS(t, ` - java_library { - name: "foo", - srcs: [ - "a.java", - "b.java", - "c.java", - ], - min_sdk_version: "29", - sdk_version: "system_current", - } - `, map[string][]byte{}) - - foo := ctx.ModuleForTests("foo", "android_common") - - sboxProto := android.RuleBuilderSboxProtoForTests(t, ctx, foo.Output("lint.sbox.textproto")) - if strings.Contains(*sboxProto.Commands[0].Command, "--baseline") { - t.Error("passed --baseline flag for non existent file") + if strings.Contains(*sboxProto.Commands[0].Command, "--baseline lint-baseline.xml") { + t.Error("Passed --baseline flag when baseline_filename was not set") } } diff --git a/java/sdk_version_test.go b/java/sdk_version_test.go new file mode 100644 index 000000000..88351d2ef --- /dev/null +++ b/java/sdk_version_test.go @@ -0,0 +1,66 @@ +// Copyright 2024 Google Inc. All rights reserved. +// +// 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. + +package java + +import ( + "testing" + + "android/soong/android" +) + +func stringPtr(v string) *string { + return &v +} + +func TestSystemSdkFromVendor(t *testing.T) { + fixtures := android.GroupFixturePreparers( + PrepareForTestWithJavaDefaultModules, + android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + variables.Platform_sdk_version = intPtr(34) + variables.Platform_sdk_codename = stringPtr("VanillaIceCream") + variables.Platform_version_active_codenames = []string{"VanillaIceCream"} + variables.Platform_systemsdk_versions = []string{"33", "34", "VanillaIceCream"} + variables.DeviceSystemSdkVersions = []string{"VanillaIceCream"} + }), + FixtureWithPrebuiltApis(map[string][]string{ + "33": {}, + "34": {}, + "35": {}, + }), + ) + + fixtures.ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern("incompatible sdk version")). + RunTestWithBp(t, ` + android_app { + name: "foo", + srcs: ["a.java"], + vendor: true, + sdk_version: "system_35", + }`) + + result := fixtures.RunTestWithBp(t, ` + android_app { + name: "foo", + srcs: ["a.java"], + vendor: true, + sdk_version: "system_current", + }`) + fooModule := result.ModuleForTests("foo", "android_common") + fooClasspath := fooModule.Rule("javac").Args["classpath"] + + android.AssertStringDoesContain(t, "foo classpath", fooClasspath, "prebuilts/sdk/34/system/android.jar") + android.AssertStringDoesNotContain(t, "foo classpath", fooClasspath, "prebuilts/sdk/35/system/android.jar") + android.AssertStringDoesNotContain(t, "foo classpath", fooClasspath, "prebuilts/sdk/current/system/android.jar") +} diff --git a/rust/config/x86_64_device.go b/rust/config/x86_64_device.go index c797eefe3..cc1670417 100644 --- a/rust/config/x86_64_device.go +++ b/rust/config/x86_64_device.go @@ -28,15 +28,16 @@ var ( x86_64LinkFlags = []string{} x86_64ArchVariantRustFlags = map[string][]string{ - "": []string{}, - "broadwell": []string{"-C target-cpu=broadwell"}, - "goldmont": []string{"-C target-cpu=goldmont"}, - "goldmont-plus": []string{"-C target-cpu=goldmont-plus"}, - "haswell": []string{"-C target-cpu=haswell"}, - "ivybridge": []string{"-C target-cpu=ivybridge"}, - "sandybridge": []string{"-C target-cpu=sandybridge"}, - "silvermont": []string{"-C target-cpu=silvermont"}, - "skylake": []string{"-C target-cpu=skylake"}, + "": []string{}, + "broadwell": []string{"-C target-cpu=broadwell"}, + "goldmont": []string{"-C target-cpu=goldmont"}, + "goldmont-plus": []string{"-C target-cpu=goldmont-plus"}, + "goldmont-without-xsaves": []string{"-C target-cpu=goldmont", "-C target-feature=-xsaves"}, + "haswell": []string{"-C target-cpu=haswell"}, + "ivybridge": []string{"-C target-cpu=ivybridge"}, + "sandybridge": []string{"-C target-cpu=sandybridge"}, + "silvermont": []string{"-C target-cpu=silvermont"}, + "skylake": []string{"-C target-cpu=skylake"}, //TODO: Add target-cpu=stoneyridge when rustc supports it. "stoneyridge": []string{""}, "tremont": []string{"-C target-cpu=tremont"}, diff --git a/rust/config/x86_device.go b/rust/config/x86_device.go index 822f281a8..e7b575cd5 100644 --- a/rust/config/x86_device.go +++ b/rust/config/x86_device.go @@ -26,16 +26,17 @@ var ( x86LinkFlags = []string{} x86ArchVariantRustFlags = map[string][]string{ - "": []string{}, - "atom": []string{"-C target-cpu=atom"}, - "broadwell": []string{"-C target-cpu=broadwell"}, - "goldmont": []string{"-C target-cpu=goldmont"}, - "goldmont-plus": []string{"-C target-cpu=goldmont-plus"}, - "haswell": []string{"-C target-cpu=haswell"}, - "ivybridge": []string{"-C target-cpu=ivybridge"}, - "sandybridge": []string{"-C target-cpu=sandybridge"}, - "silvermont": []string{"-C target-cpu=silvermont"}, - "skylake": []string{"-C target-cpu=skylake"}, + "": []string{}, + "atom": []string{"-C target-cpu=atom"}, + "broadwell": []string{"-C target-cpu=broadwell"}, + "goldmont": []string{"-C target-cpu=goldmont"}, + "goldmont-plus": []string{"-C target-cpu=goldmont-plus"}, + "goldmont-without-xsaves": []string{"-C target-cpu=goldmont", "-C target-feature=-xsaves"}, + "haswell": []string{"-C target-cpu=haswell"}, + "ivybridge": []string{"-C target-cpu=ivybridge"}, + "sandybridge": []string{"-C target-cpu=sandybridge"}, + "silvermont": []string{"-C target-cpu=silvermont"}, + "skylake": []string{"-C target-cpu=skylake"}, //TODO: Add target-cpu=stoneyridge when rustc supports it. "stoneyridge": []string{""}, "tremont": []string{"-C target-cpu=tremont"}, diff --git a/rust/image.go b/rust/image.go index d0218f00e..7adf23460 100644 --- a/rust/image.go +++ b/rust/image.go @@ -184,12 +184,12 @@ func (mod *Module) HasNonSystemVariants() bool { } func (mod *Module) InProduct() bool { - return mod.Properties.ImageVariationPrefix == cc.ProductVariationPrefix + return mod.Properties.ImageVariation == cc.ProductVariation } // Returns true if the module is "vendor" variant. Usually these modules are installed in /vendor func (mod *Module) InVendor() bool { - return mod.Properties.ImageVariationPrefix == cc.VendorVariationPrefix + return mod.Properties.ImageVariation == cc.VendorVariation } func (mod *Module) SetImageVariation(ctx android.BaseModuleContext, variant string, module android.Module) { @@ -198,9 +198,11 @@ func (mod *Module) SetImageVariation(ctx android.BaseModuleContext, variant stri m.MakeAsPlatform() } else if variant == android.RecoveryVariation { m.MakeAsPlatform() - } else if strings.HasPrefix(variant, cc.VendorVariationPrefix) { - m.Properties.ImageVariationPrefix = cc.VendorVariationPrefix - m.Properties.VndkVersion = strings.TrimPrefix(variant, cc.VendorVariationPrefix) + } else if strings.HasPrefix(variant, cc.VendorVariation) { + m.Properties.ImageVariation = cc.VendorVariation + if strings.HasPrefix(variant, cc.VendorVariationPrefix) { + m.Properties.VndkVersion = strings.TrimPrefix(variant, cc.VendorVariationPrefix) + } // Makefile shouldn't know vendor modules other than BOARD_VNDK_VERSION. // Hide other vendor variants to avoid collision. @@ -209,9 +211,11 @@ func (mod *Module) SetImageVariation(ctx android.BaseModuleContext, variant stri m.Properties.HideFromMake = true m.HideFromMake() } - } else if strings.HasPrefix(variant, cc.ProductVariationPrefix) { - m.Properties.ImageVariationPrefix = cc.ProductVariationPrefix - m.Properties.VndkVersion = strings.TrimPrefix(variant, cc.ProductVariationPrefix) + } else if strings.HasPrefix(variant, cc.ProductVariation) { + m.Properties.ImageVariation = cc.ProductVariation + if strings.HasPrefix(variant, cc.ProductVariationPrefix) { + m.Properties.VndkVersion = strings.TrimPrefix(variant, cc.ProductVariationPrefix) + } } } diff --git a/rust/rust.go b/rust/rust.go index 6f4631de7..34ce4c545 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -20,6 +20,7 @@ import ( "android/soong/bloaty" "android/soong/testing" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" @@ -69,9 +70,9 @@ type BaseProperties struct { AndroidMkProcMacroLibs []string `blueprint:"mutated"` AndroidMkStaticLibs []string `blueprint:"mutated"` - ImageVariationPrefix string `blueprint:"mutated"` - VndkVersion string `blueprint:"mutated"` - SubName string `blueprint:"mutated"` + ImageVariation string `blueprint:"mutated"` + VndkVersion string `blueprint:"mutated"` + SubName string `blueprint:"mutated"` // SubName is used by CC for tracking image variants / SDK versions. RustSubName is used for Rust-specific // subnaming which shouldn't be visible to CC modules (such as the rlib stdlinkage subname). This should be diff --git a/sysprop/sysprop_test.go b/sysprop/sysprop_test.go index e51fe39c9..e5b3dea05 100644 --- a/sysprop/sysprop_test.go +++ b/sysprop/sysprop_test.go @@ -125,6 +125,12 @@ func test(t *testing.T, bp string) *android.TestResult { variables.DeviceSystemSdkVersions = []string{"28"} variables.DeviceVndkVersion = proptools.StringPtr("current") variables.Platform_vndk_version = proptools.StringPtr("29") + variables.DeviceCurrentApiLevelForVendorModules = proptools.StringPtr("28") + }), + java.FixtureWithPrebuiltApis(map[string][]string{ + "28": {}, + "29": {}, + "30": {}, }), mockFS.AddToFixture(), android.FixtureWithRootAndroidBp(bp), |