Merge "Error out if skip_preprocessed_apk_checks is set when it's not necessary" into main
diff --git a/README.md b/README.md
index 2d8f0af..22daa95 100644
--- a/README.md
+++ b/README.md
@@ -26,8 +26,6 @@
[bug tracker](https://issuetracker.google.com/issues/new?component=381517) or
or write us at android-building@googlegroups.com .
-For Googlers, see our [internal documentation](http://go/soong).
-
## Android.bp file format
By design, Android.bp files are very simple. There are no conditionals or
diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go
index fb2e0d7..483cc84 100644
--- a/android/allowlists/allowlists.go
+++ b/android/allowlists/allowlists.go
@@ -79,6 +79,7 @@
"build/soong/scripts": Bp2BuildDefaultTrueRecursively,
"cts/common/device-side/nativetesthelper/jni": Bp2BuildDefaultTrueRecursively,
+ "cts/libs/json": Bp2BuildDefaultTrueRecursively,
"dalvik/tools/dexdeps": Bp2BuildDefaultTrueRecursively,
@@ -127,6 +128,7 @@
"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,
@@ -178,6 +180,7 @@
"external/libjpeg-turbo": Bp2BuildDefaultTrueRecursively,
"external/libmpeg2": Bp2BuildDefaultTrueRecursively,
"external/libpng": Bp2BuildDefaultTrueRecursively,
+ "external/libphonenumber": Bp2BuildDefaultTrueRecursively,
"external/libvpx": Bp2BuildDefaultTrueRecursively,
"external/libyuv": Bp2BuildDefaultTrueRecursively,
"external/lz4/lib": Bp2BuildDefaultTrue,
@@ -221,6 +224,8 @@
"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/libs/androidfw": Bp2BuildDefaultTrue,
"frameworks/base/libs/services": Bp2BuildDefaultTrue,
"frameworks/base/media/tests/MediaDump": Bp2BuildDefaultTrue,
@@ -231,17 +236,21 @@
"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/stats/aidl": Bp2BuildDefaultTrue,
"frameworks/libs/modules-utils/build": Bp2BuildDefaultTrueRecursively,
+ "frameworks/libs/modules-utils/java": Bp2BuildDefaultTrue,
"frameworks/libs/net/common/native": Bp2BuildDefaultTrueRecursively, // TODO(b/296014682): Remove this path
"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,
@@ -285,13 +294,9 @@
"hardware/interfaces/health/2.1": Bp2BuildDefaultTrue,
"hardware/interfaces/health/aidl": Bp2BuildDefaultTrue,
"hardware/interfaces/health/utils": Bp2BuildDefaultTrueRecursively,
- "hardware/interfaces/media/1.0": Bp2BuildDefaultTrue,
- "hardware/interfaces/media/bufferpool": Bp2BuildDefaultTrueRecursively,
+ "hardware/interfaces/media": Bp2BuildDefaultTrueRecursively,
"hardware/interfaces/media/bufferpool/aidl/default/tests": Bp2BuildDefaultFalseRecursively,
- "hardware/interfaces/media/c2/1.0": Bp2BuildDefaultTrue,
- "hardware/interfaces/media/c2/1.1": Bp2BuildDefaultTrue,
- "hardware/interfaces/media/c2/1.2": Bp2BuildDefaultTrue,
- "hardware/interfaces/media/omx/1.0": Bp2BuildDefaultTrue,
+ "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,
@@ -372,6 +377,7 @@
"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,
@@ -380,6 +386,7 @@
"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,
@@ -414,17 +421,19 @@
"system/tools/aidl/build/tests_bp2build": Bp2BuildDefaultTrue,
"system/tools/aidl/metadata": Bp2BuildDefaultTrue,
"system/tools/hidl/metadata": Bp2BuildDefaultTrue,
+ "system/tools/hidl/utils": Bp2BuildDefaultTrue,
"system/tools/mkbootimg": Bp2BuildDefaultTrueRecursively,
"system/tools/sysprop": Bp2BuildDefaultTrue,
"system/tools/xsdc/utils": Bp2BuildDefaultTrueRecursively,
"system/unwinding/libunwindstack": Bp2BuildDefaultTrueRecursively,
- "tools/apifinder": Bp2BuildDefaultTrue,
- "tools/apksig": Bp2BuildDefaultTrue,
- "tools/external_updater": Bp2BuildDefaultTrueRecursively,
- "tools/metalava": Bp2BuildDefaultTrue,
- "tools/platform-compat/java/android/compat": Bp2BuildDefaultTrueRecursively,
- "tools/tradefederation/prebuilts/filegroups": Bp2BuildDefaultTrueRecursively,
+ "tools/apifinder": Bp2BuildDefaultTrue,
+ "tools/apksig": Bp2BuildDefaultTrue,
+ "tools/external_updater": Bp2BuildDefaultTrueRecursively,
+ "tools/metalava": Bp2BuildDefaultTrueRecursively,
+ "tools/platform-compat/java/android/compat": Bp2BuildDefaultTrueRecursively,
+ "tools/platform-compat/java/androidprocessor": Bp2BuildDefaultTrueRecursively,
+ "tools/tradefederation/prebuilts/filegroups": Bp2BuildDefaultTrueRecursively,
}
Bp2buildKeepExistingBuildFile = map[string]bool{
@@ -547,6 +556,7 @@
"remote-color-resources-compile-colors",
// framework-minus-apex
+ "ImmutabilityAnnotationProcessor",
"android.mime.types.minimized",
"debian.mime.types.minimized",
"framework-javastream-protos",
@@ -556,10 +566,8 @@
"apache-commons-math",
"cbor-java",
"icu4j_calendar_astronomer",
- "json",
"remote-color-resources-compile-public",
"statslog-art-java-gen",
- "statslog-framework-java-gen",
"AndroidCommonLint",
"ImmutabilityAnnotation",
@@ -592,10 +600,6 @@
"libandroid_runtime_lazy",
"libandroid_runtime_vm_headers",
"libaudioclient_aidl_conversion_util",
- "libbinder",
- "libbinder_device_interface_sources",
- "libbinder_aidl",
- "libbinder_headers",
"libbinder_headers_platform_shared",
"libbinderthreadstateutils",
"libbluetooth-types-header",
@@ -628,9 +632,6 @@
"libtextclassifier_hash_static",
"libtflite_kernel_utils",
"libtinyxml2",
- "libui",
- "libui-types",
- "libui_headers",
"libvorbisidec",
"media_ndk_headers",
"media_plugin_headers",
@@ -638,8 +639,6 @@
"mediaswcodec.xml",
"neuralnetworks_types",
"libneuralnetworks_common",
- // packagemanager_aidl_interface is created implicitly in packagemanager_aidl module
- "packagemanager_aidl_interface",
"philox_random",
"philox_random_headers",
"server_configurable_flags",
@@ -681,9 +680,6 @@
//external/fec
"libfec_rs",
- //frameworks/base/core/java
- "IDropBoxManagerService_aidl",
-
//system/extras/ext4_utils
"libext4_utils",
"mke2fs_conf",
@@ -704,10 +700,6 @@
"car-ui-androidx-lifecycle-common-nodeps",
"car-ui-androidx-constraintlayout-solver-nodeps",
- //system/libhidl
- "libhidlbase", // needed by cc_hidl_library
- "libhidl_gtest_helper",
-
//frameworks/native/libs/input
"inputconstants_aidl",
@@ -716,11 +708,6 @@
"libusb",
- // needed by liblogd
- "ILogcatManagerService_aidl",
- "libincremental_aidl-cpp",
- "incremental_aidl",
-
//frameworks/native/cmds/cmd
"libcmd",
@@ -866,11 +853,6 @@
"aidl",
"libaidl-common",
- // java_resources containing only a single filegroup
- "libauto_value_plugin",
- "auto_value_plugin_resources",
- "auto_value_extension",
-
// Used by xsd_config
"xsdc",
@@ -1003,7 +985,6 @@
"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
- "libprotobuf-java-full", // TODO(b/210751803), we don't handle path property for filegroups
"libprotobuf-java-util-full", // TODO(b/210751803), we don't handle path property for filegroups
// go deps:
@@ -1016,15 +997,15 @@
"libtombstoned_client_rust_bridge_code", "libtombstoned_client_wrapper", // rust conversions are not supported
// unconverted deps
- "apexer_with_DCLA_preprocessing_test", // depends on unconverted modules: apexer_test_host_tools, com.android.example.apex
+ "CarHTMLViewer", // depends on unconverted modules android.car-stubs, car-ui-lib
"adb", // depends on unconverted modules: AdbWinApi, libandroidfw, libopenscreen-discovery, libopenscreen-platform-impl, libusb, bin2c_fastdeployagent, AdbWinUsbApi
"android_icu4j_srcgen", // depends on unconverted modules: currysrc
"android_icu4j_srcgen_binary", // depends on unconverted modules: android_icu4j_srcgen, currysrc
"apex_compression_test", // depends on unconverted modules: soong_zip, com.android.example.apex
"apex_manifest_proto_java", // b/210751803, depends on libprotobuf-java-full
+ "apexer_with_DCLA_preprocessing_test", // depends on unconverted modules: apexer_test_host_tools, com.android.example.apex
"art-script", // depends on unconverted modules: dalvikvm, dex2oat
"bin2c_fastdeployagent", // depends on unconverted modules: deployagent
- "CarHTMLViewer", // depends on unconverted modules android.car-stubs, car-ui-lib
"com.android.runtime", // depends on unconverted modules: bionic-linker-config, linkerconfig
"currysrc", // depends on unconverted modules: currysrc_org.eclipse, guavalib, jopt-simple-4.9
"dex2oat-script", // depends on unconverted modules: dex2oat
@@ -1034,12 +1015,12 @@
"jacoco-stubs", // b/245767077, depends on droidstubs
"libapexutil", // depends on unconverted modules: apex-info-list-tinyxml
"libart", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
+ "libart-runtime", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
+ "libart-runtime-for-test", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
"libart-runtime-gtest", // depends on unconverted modules: libgtest_isolated, libart-compiler, libdexfile, libprofile, libartbase, libartbase-art-gtest
"libart_headers", // depends on unconverted modules: art_libartbase_headers
"libartbase-art-gtest", // depends on unconverted modules: libgtest_isolated, libart, libart-compiler, libdexfile, libprofile
"libartbased-art-gtest", // depends on unconverted modules: libgtest_isolated, libartd, libartd-compiler, libdexfiled, libprofiled
- "libart-runtime", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
- "libart-runtime-for-test", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
"libartd", // depends on unconverted modules: art_operator_srcs, libcpu_features, libodrstatslog, libelffiled, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfiled, libnativebridge, libnativeloader, libsigchain, libartbased, libprofiled, cpp-define-generator-asm-support, apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api
"libartd-runtime", // depends on unconverted modules: art_operator_srcs, libcpu_features, libodrstatslog, libelffiled, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfiled, libnativebridge, libnativeloader, libsigchain, libartbased, libprofiled, cpp-define-generator-asm-support, apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api
"libartd-runtime-gtest", // depends on unconverted modules: libgtest_isolated, libartd-compiler, libdexfiled, libprofiled, libartbased, libartbased-art-gtest
@@ -1051,6 +1032,7 @@
"libgmock_ndk", // depends on unconverted modules: libgtest_ndk_c++
"libnativehelper_lazy_mts_jni", "libnativehelper_mts_jni", // depends on unconverted modules: libnativetesthelper_jni, libgmock_ndk
"libnativetesthelper_jni", // depends on unconverted modules: libgtest_ndk_c++
+ "libphonenumber_test", // depends on android.test.mock
"libstatslog", // depends on unconverted modules: libstatspull, statsd-aidl-ndk
"libstatslog_art", // depends on unconverted modules: statslog_art.cpp, statslog_art.h
"linker_reloc_bench_main", // depends on unconverted modules: liblinker_reloc_bench_*
@@ -1636,10 +1618,6 @@
// depends on libart-unstripped and new module type llvm_prebuilt_build_tool
"check_cfi",
- // TODO(b/297070571): cannot convert prebuilts_etc module which possess identical name and src properties
- "boringssl_self_test.zygote64.rc",
- "boringssl_self_test.zygote64_32.rc",
-
// depends on unconverted module tradefed
"HelloWorldPerformanceTest",
@@ -1650,6 +1628,16 @@
// Depends on the module defined in the directory not bp2build default allowed
"ota_from_raw_img",
+
+ // 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",
}
// Bazel prod-mode allowlist. Modules in this list are built by Bazel
diff --git a/android/apex.go b/android/apex.go
index 6119b08..d84499b 100644
--- a/android/apex.go
+++ b/android/apex.go
@@ -934,6 +934,19 @@
})
}
+// Construct ApiLevel object from min_sdk_version string value
+func MinSdkVersionFromValue(ctx EarlyModuleContext, value string) ApiLevel {
+ if value == "" {
+ return NoneApiLevel
+ }
+ apiLevel, err := ApiLevelFromUser(ctx, value)
+ if err != nil {
+ ctx.PropertyErrorf("min_sdk_version", "%s", err.Error())
+ return NoneApiLevel
+ }
+ return apiLevel
+}
+
// Implemented by apexBundle.
type ApexTestInterface interface {
// Return true if the apex bundle is an apex_test
diff --git a/android/variable.go b/android/variable.go
index 02eff25..524cdf7 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -438,16 +438,17 @@
ShippingApiLevel *string `json:",omitempty"`
- BuildBrokenPluginValidation []string `json:",omitempty"`
- BuildBrokenClangAsFlags bool `json:",omitempty"`
- BuildBrokenClangCFlags bool `json:",omitempty"`
- BuildBrokenClangProperty bool `json:",omitempty"`
- GenruleSandboxing *bool `json:",omitempty"`
- BuildBrokenEnforceSyspropOwner bool `json:",omitempty"`
- BuildBrokenTrebleSyspropNeverallow bool `json:",omitempty"`
- BuildBrokenUsesSoongPython2Modules bool `json:",omitempty"`
- BuildBrokenVendorPropertyNamespace bool `json:",omitempty"`
- BuildBrokenInputDirModules []string `json:",omitempty"`
+ BuildBrokenPluginValidation []string `json:",omitempty"`
+ BuildBrokenClangAsFlags bool `json:",omitempty"`
+ BuildBrokenClangCFlags bool `json:",omitempty"`
+ BuildBrokenClangProperty bool `json:",omitempty"`
+ GenruleSandboxing *bool `json:",omitempty"`
+ BuildBrokenEnforceSyspropOwner bool `json:",omitempty"`
+ BuildBrokenTrebleSyspropNeverallow bool `json:",omitempty"`
+ BuildBrokenUsesSoongPython2Modules bool `json:",omitempty"`
+ BuildBrokenVendorPropertyNamespace bool `json:",omitempty"`
+ BuildBrokenIncorrectPartitionImages bool `json:",omitempty"`
+ BuildBrokenInputDirModules []string `json:",omitempty"`
BuildWarningBadOptionalUsesLibsAllowlist []string `json:",omitempty"`
diff --git a/apex/apex.go b/apex/apex.go
index 1e65b0f..a116b85 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -18,6 +18,7 @@
import (
"fmt"
+ "log"
"path/filepath"
"regexp"
"sort"
@@ -991,6 +992,13 @@
return false
}
}
+
+ //TODO: b/296491928 Vendor APEX should use libbinder.ndk instead of libbinder once VNDK is fully deprecated.
+ if useVndk && mctx.Config().IsVndkDeprecated() && child.Name() == "libbinder" {
+ log.Print("Libbinder is linked from Vendor APEX ", a.Name(), " with module ", parent.Name())
+ return false
+ }
+
// By default, all the transitive dependencies are collected, unless filtered out
// above.
return true
@@ -2225,6 +2233,11 @@
vctx.requireNativeLibs = append(vctx.requireNativeLibs, ":vndk")
return false
}
+
+ //TODO: b/296491928 Vendor APEX should use libbinder.ndk instead of libbinder once VNDK is fully deprecated.
+ if ch.UseVndk() && ctx.Config().IsVndkDeprecated() && child.Name() == "libbinder" {
+ return false
+ }
af := apexFileForNativeLibrary(ctx, ch, vctx.handleSpecialLibs)
af.transitiveDep = true
@@ -2730,13 +2743,13 @@
// Only override the minSdkVersion value on Apexes which already specify
// a min_sdk_version (it's optional for non-updatable apexes), and that its
// min_sdk_version value is lower than the one to override with.
- minApiLevel := minSdkVersionFromValue(ctx, proptools.String(a.properties.Min_sdk_version))
+ minApiLevel := android.MinSdkVersionFromValue(ctx, proptools.String(a.properties.Min_sdk_version))
if minApiLevel.IsNone() {
return ""
}
overrideMinSdkValue := ctx.DeviceConfig().ApexGlobalMinSdkVersionOverride()
- overrideApiLevel := minSdkVersionFromValue(ctx, overrideMinSdkValue)
+ overrideApiLevel := android.MinSdkVersionFromValue(ctx, overrideMinSdkValue)
if !overrideApiLevel.IsNone() && overrideApiLevel.CompareTo(minApiLevel) > 0 {
minApiLevel = overrideApiLevel
}
@@ -2751,20 +2764,7 @@
// Returns apex's min_sdk_version ApiLevel, honoring overrides
func (a *apexBundle) minSdkVersion(ctx android.EarlyModuleContext) android.ApiLevel {
- return minSdkVersionFromValue(ctx, a.minSdkVersionValue(ctx))
-}
-
-// Construct ApiLevel object from min_sdk_version string value
-func minSdkVersionFromValue(ctx android.EarlyModuleContext, value string) android.ApiLevel {
- if value == "" {
- return android.NoneApiLevel
- }
- apiLevel, err := android.ApiLevelFromUser(ctx, value)
- if err != nil {
- ctx.PropertyErrorf("min_sdk_version", "%s", err.Error())
- return android.NoneApiLevel
- }
- return apiLevel
+ return android.MinSdkVersionFromValue(ctx, a.minSdkVersionValue(ctx))
}
// Ensures that a lib providing stub isn't statically linked
diff --git a/apex/builder.go b/apex/builder.go
index 4b42b74..1204dbb 100644
--- a/apex/builder.go
+++ b/apex/builder.go
@@ -75,6 +75,8 @@
pctx.HostBinToolVariable("deapexer", "deapexer")
pctx.HostBinToolVariable("debugfs_static", "debugfs_static")
pctx.SourcePathVariable("genNdkUsedbyApexPath", "build/soong/scripts/gen_ndk_usedby_apex.sh")
+ pctx.HostBinToolVariable("conv_linker_config", "conv_linker_config")
+ pctx.HostBinToolVariable("assemble_vintf", "assemble_vintf")
}
var (
@@ -222,6 +224,18 @@
CommandDeps: []string{"${apex_sepolicy_tests}", "${deapexer}", "${debugfs_static}"},
Description: "run apex_sepolicy_tests",
})
+
+ apexLinkerconfigValidationRule = pctx.StaticRule("apexLinkerconfigValidationRule", blueprint.RuleParams{
+ Command: `${conv_linker_config} validate --type apex ${image_dir} && touch ${out}`,
+ CommandDeps: []string{"${conv_linker_config}"},
+ Description: "run apex_linkerconfig_validation",
+ }, "image_dir")
+
+ apexVintfFragmentsValidationRule = pctx.StaticRule("apexVintfFragmentsValidationRule", blueprint.RuleParams{
+ Command: `/bin/bash -c '(shopt -s nullglob; for f in ${image_dir}/etc/vintf/*.xml; do VINTF_IGNORE_TARGET_FCM_VERSION=true ${assemble_vintf} -i "$$f" > /dev/null; done)' && touch ${out}`,
+ CommandDeps: []string{"${assemble_vintf}"},
+ Description: "run apex_vintf_validation",
+ }, "image_dir")
)
// buildManifest creates buile rules to modify the input apex_manifest.json to add information
@@ -843,6 +857,10 @@
args["outCommaList"] = signedOutputFile.String()
}
var validations android.Paths
+ validations = append(validations, runApexLinkerconfigValidation(ctx, unsignedOutputFile.OutputPath, imageDir.OutputPath))
+ if !a.testApex && a.SocSpecific() {
+ validations = append(validations, runApexVintfFragmentsValidation(ctx, unsignedOutputFile.OutputPath, imageDir.OutputPath))
+ }
// TODO(b/279688635) deapexer supports [ext4]
if suffix == imageApexSuffix && ext4 == a.payloadFsType {
validations = append(validations, runApexSepolicyTests(ctx, unsignedOutputFile.OutputPath))
@@ -1097,6 +1115,32 @@
return cannedFsConfig.OutputPath
}
+func runApexLinkerconfigValidation(ctx android.ModuleContext, apexFile android.OutputPath, imageDir android.OutputPath) android.Path {
+ timestamp := android.PathForModuleOut(ctx, "apex_linkerconfig_validation.timestamp")
+ ctx.Build(pctx, android.BuildParams{
+ Rule: apexLinkerconfigValidationRule,
+ Input: apexFile,
+ Output: timestamp,
+ Args: map[string]string{
+ "image_dir": imageDir.String(),
+ },
+ })
+ return timestamp
+}
+
+func runApexVintfFragmentsValidation(ctx android.ModuleContext, apexFile android.OutputPath, imageDir android.OutputPath) android.Path {
+ timestamp := android.PathForModuleOut(ctx, "apex_vintf_fragments_validation.timestamp")
+ ctx.Build(pctx, android.BuildParams{
+ Rule: apexVintfFragmentsValidationRule,
+ Input: apexFile,
+ Output: timestamp,
+ Args: map[string]string{
+ "image_dir": imageDir.String(),
+ },
+ })
+ return timestamp
+}
+
// Runs apex_sepolicy_tests
//
// $ deapexer list -Z {apex_file} > {file_contexts}
diff --git a/bazel/aquery.go b/bazel/aquery.go
index 76cd972..c355712 100644
--- a/bazel/aquery.go
+++ b/bazel/aquery.go
@@ -177,6 +177,21 @@
if err != nil {
return nil, err
}
+ if artifact.IsTreeArtifact &&
+ !strings.HasPrefix(artifactPath, "bazel-out/io_bazel_rules_go/") &&
+ !strings.HasPrefix(artifactPath, "bazel-out/rules_java_builtin/") {
+ // Since we're using ninja as an executor, we can't use tree artifacts. Ninja only
+ // considers a file/directory "dirty" when it's mtime changes. Directories' mtimes will
+ // only change when a file in the directory is added/removed, but not when files in
+ // the directory are changed, or when files in subdirectories are changed/added/removed.
+ // Bazel handles this by walking the directory and generating a hash for it after the
+ // action runs, which we would have to do as well if we wanted to support these
+ // artifacts in mixed builds.
+ //
+ // However, there are some bazel built-in rules that use tree artifacts. Allow those,
+ // but keep in mind that they'll have incrementality issues.
+ return nil, fmt.Errorf("tree artifacts are currently not supported in mixed builds: " + artifactPath)
+ }
artifactIdToPath[artifactId(artifact.Id)] = artifactPath
}
diff --git a/bp2build/aar_conversion_test.go b/bp2build/aar_conversion_test.go
index a24378c..13bb167 100644
--- a/bp2build/aar_conversion_test.go
+++ b/bp2build/aar_conversion_test.go
@@ -35,7 +35,7 @@
"res/res.png": "",
"manifest/AndroidManifest.xml": "",
},
- Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
name: "TestLib",
srcs: ["lib.java"],
@@ -82,7 +82,7 @@
"res/res.png": "",
"AndroidManifest.xml": "",
},
- Blueprint: simpleModuleDoNotConvertBp2build("android_library", "lib_dep") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("android_library", "lib_dep") + `
android_library {
name: "TestLib",
srcs: [],
@@ -113,8 +113,8 @@
// Bazel's aar_import can only export *_import targets, so we expect
// only "static_import_dep" in exports, but both "static_lib_dep" and
// "static_import_dep" in deps
- Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") +
- simpleModuleDoNotConvertBp2build("android_library_import", "static_import_dep") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") +
+ SimpleModuleDoNotConvertBp2build("android_library_import", "static_import_dep") + `
android_library_import {
name: "TestImport",
aars: ["import.aar"],
diff --git a/bp2build/android_app_conversion_test.go b/bp2build/android_app_conversion_test.go
index f2ee322..0d206b0 100644
--- a/bp2build/android_app_conversion_test.go
+++ b/bp2build/android_app_conversion_test.go
@@ -78,7 +78,7 @@
"manifest/AndroidManifest.xml": "",
"assets_/asset.png": "",
},
- Blueprint: simpleModuleDoNotConvertBp2build("android_app", "static_lib_dep") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("android_app", "static_lib_dep") + `
android_app {
name: "TestApp",
srcs: ["app.java"],
@@ -177,7 +177,7 @@
ModuleTypeUnderTest: "android_app",
ModuleTypeUnderTestFactory: java.AndroidAppFactory,
Filesystem: map[string]string{},
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
android_app {
name: "TestApp",
certificate: ":foocert",
@@ -262,7 +262,7 @@
ModuleTypeUnderTest: "android_app",
ModuleTypeUnderTestFactory: java.AndroidAppFactory,
Filesystem: map[string]string{},
- Blueprint: simpleModuleDoNotConvertBp2build("java_library", "barLib") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("java_library", "barLib") + `
android_app {
name: "foo",
libs: ["barLib"],
@@ -291,8 +291,8 @@
Filesystem: map[string]string{
"res/res.png": "",
},
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") +
- simpleModuleDoNotConvertBp2build("java_library", "barLib") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("filegroup", "foocert") +
+ SimpleModuleDoNotConvertBp2build("java_library", "barLib") + `
android_app {
name: "foo",
srcs: ["a.java", "b.kt"],
diff --git a/bp2build/apex_conversion_test.go b/bp2build/apex_conversion_test.go
index 2383247..5aed4ad 100644
--- a/bp2build/apex_conversion_test.go
+++ b/bp2build/apex_conversion_test.go
@@ -1263,7 +1263,7 @@
file_contexts: ":com.android.apogee-file_contexts",
certificate: ":com.android.apogee.certificate",
}
-` + simpleModuleDoNotConvertBp2build("filegroup", "com.android.apogee-file_contexts"),
+` + SimpleModuleDoNotConvertBp2build("filegroup", "com.android.apogee-file_contexts"),
ExpectedBazelTargets: []string{
MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"certificate": `":com.android.apogee.certificate"`,
@@ -1299,7 +1299,7 @@
binaries: ["bar"],
native_shared_libs: ["foo"],
}
-` + simpleModuleDoNotConvertBp2build("filegroup", "myapex-file_contexts"),
+` + SimpleModuleDoNotConvertBp2build("filegroup", "myapex-file_contexts"),
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_binary", "bar", AttrNameToString{
"local_includes": `["."]`,
@@ -1356,7 +1356,7 @@
file_contexts: ":com.android.apogee-file_contexts",
certificate: "com.android.apogee.certificate",
}
-` + simpleModuleDoNotConvertBp2build("filegroup", "com.android.apogee-file_contexts"),
+` + SimpleModuleDoNotConvertBp2build("filegroup", "com.android.apogee-file_contexts"),
ExpectedBazelTargets: []string{
MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{
"certificate_name": `"com.android.apogee.certificate"`,
diff --git a/bp2build/apex_key_conversion_test.go b/bp2build/apex_key_conversion_test.go
index 1230a48..8f6e843 100644
--- a/bp2build/apex_key_conversion_test.go
+++ b/bp2build/apex_key_conversion_test.go
@@ -89,8 +89,8 @@
public_key: ":com.android.apogee.avbpubkey",
private_key: ":com.android.apogee.pem",
}
-` + simpleModuleDoNotConvertBp2build("filegroup", "com.android.apogee.avbpubkey") +
- simpleModuleDoNotConvertBp2build("filegroup", "com.android.apogee.pem"),
+` + SimpleModuleDoNotConvertBp2build("filegroup", "com.android.apogee.avbpubkey") +
+ SimpleModuleDoNotConvertBp2build("filegroup", "com.android.apogee.pem"),
ExpectedBazelTargets: []string{MakeBazelTargetNoRestrictions("apex_key", "com.android.apogee.key", AttrNameToString{
"private_key": `":com.android.apogee.pem"`,
"public_key": `":com.android.apogee.avbpubkey"`,
diff --git a/bp2build/api_domain_conversion_test.go b/bp2build/api_domain_conversion_test.go
deleted file mode 100644
index 224008f..0000000
--- a/bp2build/api_domain_conversion_test.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2022 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 bp2build
-
-import (
- "testing"
-
- "android/soong/android"
- "android/soong/cc"
-)
-
-func registerApiDomainModuleTypes(ctx android.RegistrationContext) {
- android.RegisterApiDomainBuildComponents(ctx)
- cc.RegisterNdkModuleTypes(ctx)
- cc.RegisterLibraryBuildComponents(ctx)
-}
-
-func TestApiDomainContributionsTest(t *testing.T) {
- bp := `
- api_domain {
- name: "system",
- cc_api_contributions: [
- "libfoo.ndk",
- "libbar",
- ],
- }
- `
- fs := map[string]string{
- "libfoo/Android.bp": `
- ndk_library {
- name: "libfoo",
- }
- `,
- "libbar/Android.bp": `
- cc_library {
- name: "libbar",
- }
- `,
- }
- expectedBazelTarget := MakeBazelTargetNoRestrictions(
- "api_domain",
- "system",
- AttrNameToString{
- "cc_api_contributions": `[
- "//libfoo:libfoo.ndk.contribution",
- "//libbar:libbar.contribution",
- ]`,
- "target_compatible_with": `["//build/bazel/platforms/os:android"]`,
- },
- )
- RunApiBp2BuildTestCase(t, registerApiDomainModuleTypes, Bp2buildTestCase{
- Blueprint: bp,
- ExpectedBazelTargets: []string{expectedBazelTarget},
- Filesystem: fs,
- })
-}
diff --git a/bp2build/bp2build.go b/bp2build/bp2build.go
index 5f7b382..6c9d903 100644
--- a/bp2build/bp2build.go
+++ b/bp2build/bp2build.go
@@ -82,15 +82,25 @@
os.Exit(1)
}
var bp2buildFiles []BazelFile
+ productConfig, err := createProductConfigFiles(ctx, res.metrics)
ctx.Context().EventHandler.Do("CreateBazelFile", func() {
- bp2buildFiles = CreateBazelFiles(nil, res.buildFileToTargets, ctx.mode)
+ allTargets := make(map[string]BazelTargets)
+ for k, v := range res.buildFileToTargets {
+ allTargets[k] = append(allTargets[k], v...)
+ }
+ for k, v := range productConfig.bp2buildTargets {
+ allTargets[k] = append(allTargets[k], v...)
+ }
+ bp2buildFiles = CreateBazelFiles(nil, allTargets, ctx.mode)
})
- injectionFiles, additionalBp2buildFiles, err := CreateSoongInjectionDirFiles(ctx, res.metrics)
+ bp2buildFiles = append(bp2buildFiles, productConfig.bp2buildFiles...)
+ injectionFiles, err := createSoongInjectionDirFiles(ctx, res.metrics)
if err != nil {
fmt.Printf("%s\n", err.Error())
os.Exit(1)
}
- bp2buildFiles = append(bp2buildFiles, additionalBp2buildFiles...)
+ injectionFiles = append(injectionFiles, productConfig.injectionFiles...)
+
writeFiles(ctx, bp2buildDir, bp2buildFiles)
// Delete files under the bp2build root which weren't just written. An
// alternative would have been to delete the whole directory and write these
@@ -109,26 +119,6 @@
return &res.metrics
}
-// Wrapper function that will be responsible for all files in soong_injection directory
-// This includes
-// 1. config value(s) that are hardcoded in Soong
-// 2. product_config variables
-func CreateSoongInjectionDirFiles(ctx *CodegenContext, metrics CodegenMetrics) ([]BazelFile, []BazelFile, error) {
- var ret []BazelFile
-
- productConfigInjectionFiles, productConfigBp2BuildDirFiles, err := CreateProductConfigFiles(ctx, metrics)
- if err != nil {
- return nil, nil, err
- }
- ret = append(ret, productConfigInjectionFiles...)
- injectionFiles, err := soongInjectionFiles(ctx.Config(), metrics)
- if err != nil {
- return nil, nil, err
- }
- ret = append(injectionFiles, ret...)
- return ret, productConfigBp2BuildDirFiles, nil
-}
-
// Get the output directory and create it if it doesn't exist.
func getOrCreateOutputDir(outputDir android.OutputPath, ctx android.PathContext, dir string) android.OutputPath {
dirPath := outputDir.Join(ctx, dir)
diff --git a/bp2build/bp2build_product_config.go b/bp2build/bp2build_product_config.go
index 7717993..50b8358 100644
--- a/bp2build/bp2build_product_config.go
+++ b/bp2build/bp2build_product_config.go
@@ -16,9 +16,15 @@
"go.starlark.net/starlark"
)
-func CreateProductConfigFiles(
+type createProductConfigFilesResult struct {
+ injectionFiles []BazelFile
+ bp2buildFiles []BazelFile
+ bp2buildTargets map[string]BazelTargets
+}
+
+func createProductConfigFiles(
ctx *CodegenContext,
- metrics CodegenMetrics) ([]BazelFile, []BazelFile, error) {
+ metrics CodegenMetrics) (createProductConfigFilesResult, error) {
cfg := &ctx.config
targetProduct := "unknown"
if cfg.HasDeviceProduct() {
@@ -31,18 +37,20 @@
targetBuildVariant = "userdebug"
}
+ var res createProductConfigFilesResult
+
productVariablesFileName := cfg.ProductVariablesFileName
if !strings.HasPrefix(productVariablesFileName, "/") {
productVariablesFileName = filepath.Join(ctx.topDir, productVariablesFileName)
}
productVariablesBytes, err := os.ReadFile(productVariablesFileName)
if err != nil {
- return nil, nil, err
+ return res, err
}
productVariables := android.ProductVariables{}
err = json.Unmarshal(productVariablesBytes, &productVariables)
if err != nil {
- return nil, nil, err
+ return res, err
}
// TODO(b/249685973): the name is product_config_platforms because product_config
@@ -54,25 +62,36 @@
"{VARIANT}", targetBuildVariant,
"{PRODUCT_FOLDER}", currentProductFolder)
- platformMappingContent, err := platformMappingContent(
- productReplacer.Replace("@soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}"),
- &productVariables,
- ctx.Config().Bp2buildSoongConfigDefinitions,
- metrics.convertedModulePathMap)
- if err != nil {
- return nil, nil, err
- }
-
productsForTestingMap, err := starlark_import.GetStarlarkValue[map[string]map[string]starlark.Value]("products_for_testing")
if err != nil {
- return nil, nil, err
+ return res, err
}
productsForTesting := android.SortedKeys(productsForTestingMap)
for i := range productsForTesting {
productsForTesting[i] = fmt.Sprintf(" \"@//build/bazel/tests/products:%s\",", productsForTesting[i])
}
- injectionDirFiles := []BazelFile{
+ productLabelsToVariables := make(map[string]*android.ProductVariables)
+ productLabelsToVariables[productReplacer.Replace("@soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}")] = &productVariables
+ for product, productVariablesStarlark := range productsForTestingMap {
+ productVariables, err := starlarkMapToProductVariables(productVariablesStarlark)
+ if err != nil {
+ return res, err
+ }
+ productLabelsToVariables["@//build/bazel/tests/products:"+product] = &productVariables
+ }
+
+ res.bp2buildTargets = createTargets(productLabelsToVariables)
+
+ platformMappingContent, err := platformMappingContent(
+ productLabelsToVariables,
+ ctx.Config().Bp2buildSoongConfigDefinitions,
+ metrics.convertedModulePathMap)
+ if err != nil {
+ return res, err
+ }
+
+ res.injectionFiles = []BazelFile{
newFile(
currentProductFolder,
"soong.variables.bzl",
@@ -155,24 +174,20 @@
build --host_platform @soong_injection//{PRODUCT_FOLDER}:{PRODUCT}-{VARIANT}_darwin_x86_64
`)),
}
- bp2buildDirFiles := []BazelFile{
+ res.bp2buildFiles = []BazelFile{
newFile(
"",
"platform_mappings",
platformMappingContent),
}
- return injectionDirFiles, bp2buildDirFiles, nil
+
+ return res, nil
}
func platformMappingContent(
- mainProductLabel string,
- mainProductVariables *android.ProductVariables,
+ productLabelToVariables map[string]*android.ProductVariables,
soongConfigDefinitions soongconfig.Bp2BuildSoongConfigDefinitions,
convertedModulePathMap map[string]string) (string, error) {
- productsForTesting, err := starlark_import.GetStarlarkValue[map[string]map[string]starlark.Value]("products_for_testing")
- if err != nil {
- return "", err
- }
var result strings.Builder
mergedConvertedModulePathMap := make(map[string]string)
@@ -188,13 +203,8 @@
}
result.WriteString("platforms:\n")
- platformMappingSingleProduct(mainProductLabel, mainProductVariables, soongConfigDefinitions, mergedConvertedModulePathMap, &result)
- for product, productVariablesStarlark := range productsForTesting {
- productVariables, err := starlarkMapToProductVariables(productVariablesStarlark)
- if err != nil {
- return "", err
- }
- platformMappingSingleProduct("@//build/bazel/tests/products:"+product, &productVariables, soongConfigDefinitions, mergedConvertedModulePathMap, &result)
+ for productLabel, productVariables := range productLabelToVariables {
+ platformMappingSingleProduct(productLabel, productVariables, soongConfigDefinitions, mergedConvertedModulePathMap, &result)
}
return result.String(), nil
}
@@ -233,7 +243,7 @@
defaultAppCertificateFilegroup := "//build/bazel/utils:empty_filegroup"
if proptools.String(productVariables.DefaultAppCertificate) != "" {
- defaultAppCertificateFilegroup = "@//" + filepath.Dir(proptools.String(productVariables.DefaultAppCertificate)) + ":android_certificate_directory"
+ defaultAppCertificateFilegroup = "@//" + filepath.Dir(proptools.String(productVariables.DefaultAppCertificate)) + ":generated_android_certificate_directory"
}
for _, suffix := range bazelPlatformSuffixes {
@@ -246,6 +256,7 @@
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:apex_global_min_sdk_version_override=%s\n", proptools.String(productVariables.ApexGlobalMinSdkVersionOverride)))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:binder32bit=%t\n", proptools.Bool(productVariables.Binder32bit)))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:build_from_text_stub=%t\n", proptools.Bool(productVariables.Build_from_text_stub)))
+ result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:build_broken_incorrect_partition_images=%t\n", productVariables.BuildBrokenIncorrectPartitionImages))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:build_id=%s\n", proptools.String(productVariables.BuildId)))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:build_version_tags=%s\n", strings.Join(productVariables.BuildVersionTags, ",")))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:cfi_exclude_paths=%s\n", strings.Join(productVariables.CFIExcludePaths, ",")))
@@ -403,3 +414,33 @@
return result, nil
}
+
+func createTargets(productLabelsToVariables map[string]*android.ProductVariables) map[string]BazelTargets {
+ res := make(map[string]BazelTargets)
+ var allDefaultAppCertificateDirs []string
+ for _, productVariables := range productLabelsToVariables {
+ if proptools.String(productVariables.DefaultAppCertificate) != "" {
+ d := filepath.Dir(proptools.String(productVariables.DefaultAppCertificate))
+ if !android.InList(d, allDefaultAppCertificateDirs) {
+ allDefaultAppCertificateDirs = append(allDefaultAppCertificateDirs, d)
+ }
+ }
+ }
+ for _, dir := range allDefaultAppCertificateDirs {
+ content := fmt.Sprintf(ruleTargetTemplate, "filegroup", "generated_android_certificate_directory", propsToAttributes(map[string]string{
+ "srcs": `glob([
+ "*.pk8",
+ "*.pem",
+ "*.avbpubkey",
+ ])`,
+ "visibility": `["//visibility:public"]`,
+ }))
+ res[dir] = append(res[dir], BazelTarget{
+ name: "generated_android_certificate_directory",
+ packageName: dir,
+ content: content,
+ ruleClass: "filegroup",
+ })
+ }
+ return res
+}
diff --git a/bp2build/build_conversion_test.go b/bp2build/build_conversion_test.go
index 3887c5d..4897566 100644
--- a/bp2build/build_conversion_test.go
+++ b/bp2build/build_conversion_test.go
@@ -1743,7 +1743,7 @@
Description: "Required into data test",
ModuleTypeUnderTest: "filegroup",
ModuleTypeUnderTestFactory: android.FileGroupFactory,
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
filegroup {
name: "fg_foo",
required: ["reqd"],
@@ -1759,7 +1759,7 @@
Description: "Required into data test, cyclic self reference is filtered out",
ModuleTypeUnderTest: "filegroup",
ModuleTypeUnderTestFactory: android.FileGroupFactory,
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
filegroup {
name: "fg_foo",
required: ["reqd", "fg_foo"],
@@ -1775,8 +1775,8 @@
Description: "Required via arch into data test",
ModuleTypeUnderTest: "python_library",
ModuleTypeUnderTestFactory: python.PythonLibraryFactory,
- Blueprint: simpleModuleDoNotConvertBp2build("python_library", "reqdx86") +
- simpleModuleDoNotConvertBp2build("python_library", "reqdarm") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("python_library", "reqdx86") +
+ SimpleModuleDoNotConvertBp2build("python_library", "reqdarm") + `
python_library {
name: "fg_foo",
arch: {
@@ -1809,7 +1809,7 @@
"data.bin": "",
"src.py": "",
},
- Blueprint: simpleModuleDoNotConvertBp2build("python_library", "reqd") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("python_library", "reqd") + `
python_library {
name: "fg_foo",
data: ["data.bin"],
@@ -1831,7 +1831,7 @@
Description: "All props-to-attrs at once together test",
ModuleTypeUnderTest: "filegroup",
ModuleTypeUnderTestFactory: android.FileGroupFactory,
- Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
filegroup {
name: "fg_foo",
required: ["reqd"],
diff --git a/bp2build/cc_binary_conversion_test.go b/bp2build/cc_binary_conversion_test.go
index 90db365..3d3b860 100644
--- a/bp2build/cc_binary_conversion_test.go
+++ b/bp2build/cc_binary_conversion_test.go
@@ -276,7 +276,7 @@
],
include_build_directory: false,
}
-` + simpleModuleDoNotConvertBp2build("filegroup", "fg_foo"),
+` + SimpleModuleDoNotConvertBp2build("filegroup", "fg_foo"),
targets: []testBazelTarget{
{"cc_binary", "foo", AttrNameToString{
"srcs": `[
@@ -326,12 +326,12 @@
export_generated_headers: ["export_generated_hdr"],
}
` +
- simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep") +
- simpleModuleDoNotConvertBp2build("cc_library", "shared_dep") +
- simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep"),
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "static_dep") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "shared_dep") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep"),
targets: []testBazelTarget{
{"cc_binary", "foo", AttrNameToString{
"deps": `[
@@ -1226,7 +1226,7 @@
runCcBinaryTestCase(t, ccBinaryBp2buildTestCase{
description: "cc_library_static system_shared_lib empty for linux_bionic variant",
blueprint: soongCcLibraryStaticPreamble +
- simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
+ SimpleModuleDoNotConvertBp2build("cc_library", "libc") + `
cc_library {
name: "libm",
diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go
index 246f169..7af788e 100644
--- a/bp2build/cc_library_conversion_test.go
+++ b/bp2build/cc_library_conversion_test.go
@@ -94,7 +94,7 @@
"foo-dir/a.h": "",
},
Blueprint: soongCcLibraryPreamble +
- simpleModuleDoNotConvertBp2build("cc_library_headers", "some-headers") + `
+ SimpleModuleDoNotConvertBp2build("cc_library_headers", "some-headers") + `
cc_library {
name: "foo-lib",
srcs: ["impl.cpp"],
@@ -176,7 +176,7 @@
"linker_cfi.h": "",
},
Blueprint: soongCcLibraryPreamble +
- simpleModuleDoNotConvertBp2build("cc_library_headers", "libc_headers") + `
+ SimpleModuleDoNotConvertBp2build("cc_library_headers", "libc_headers") + `
cc_library {
name: "fake-ld-android",
srcs: ["ld_android.cpp"],
@@ -457,24 +457,24 @@
},
include_build_directory: false,
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_shared") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_shared") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_static") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_static") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_both") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_both") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_shared") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_shared") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_static") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_static") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_both") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_both") +
- simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_shared") +
- simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_shared") +
- simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_static") +
- simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_static") +
- simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") +
- simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_shared") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_shared") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_static") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_static") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_both") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_both") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_shared") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_shared") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_static") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_static") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_both") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_both") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_shared") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_shared") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_static") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_static") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"),
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{
"copts": `[
@@ -2549,10 +2549,10 @@
ModuleTypeUnderTest: "cc_library",
ModuleTypeUnderTestFactory: cc.LibraryFactory,
Blueprint: soongCcProtoPreamble +
- simpleModuleDoNotConvertBp2build("filegroup", "a_fg_proto") +
- simpleModuleDoNotConvertBp2build("filegroup", "b_protos") +
- simpleModuleDoNotConvertBp2build("filegroup", "c-proto-srcs") +
- simpleModuleDoNotConvertBp2build("filegroup", "proto-srcs-d") + `
+ SimpleModuleDoNotConvertBp2build("filegroup", "a_fg_proto") +
+ SimpleModuleDoNotConvertBp2build("filegroup", "b_protos") +
+ SimpleModuleDoNotConvertBp2build("filegroup", "c-proto-srcs") +
+ SimpleModuleDoNotConvertBp2build("filegroup", "proto-srcs-d") + `
cc_library {
name: "a",
srcs: [":a_fg_proto"],
@@ -2867,7 +2867,6 @@
ExpectedBazelTargets: makeCcLibraryTargets("foolib", AttrNameToString{
"implementation_dynamic_deps": `select({
"//build/bazel/rules/apex:foo": ["@api_surfaces//module-libapi/current:barlib"],
- "//build/bazel/rules/apex:system": ["@api_surfaces//module-libapi/current:barlib"],
"//conditions:default": [":barlib"],
})`,
"local_includes": `["."]`,
@@ -2883,7 +2882,7 @@
Filesystem: map[string]string{
"bar.map.txt": "",
},
- Blueprint: simpleModuleDoNotConvertBp2build("cc_library", "bazlib") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("cc_library", "bazlib") + `
cc_library {
name: "quxlib",
stubs: { symbol_file: "bar.map.txt", versions: ["current"] },
@@ -2925,10 +2924,6 @@
"@api_surfaces//module-libapi/current:barlib",
"@api_surfaces//module-libapi/current:quxlib",
],
- "//build/bazel/rules/apex:system": [
- "@api_surfaces//module-libapi/current:barlib",
- "@api_surfaces//module-libapi/current:quxlib",
- ],
"//conditions:default": [
":barlib",
":quxlib",
@@ -3542,10 +3537,10 @@
"baz-shared",
],
}` +
- simpleModuleDoNotConvertBp2build("cc_library_static", "bar-static") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "baz-static") +
- simpleModuleDoNotConvertBp2build("cc_library", "bar-shared") +
- simpleModuleDoNotConvertBp2build("cc_library", "baz-shared"),
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "bar-static") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "baz-static") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "bar-shared") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "baz-shared"),
ExpectedBazelTargets: []string{
MakeBazelTarget("aidl_library", "foo_aidl_library", AttrNameToString{
"srcs": `["Foo.aidl"]`,
@@ -4749,7 +4744,7 @@
canonical_path_from_root: true,
}
}
-` + simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
+` + SimpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
Filesystem: map[string]string{
"bar/Android.bp": "",
"baz/subbaz/Android.bp": "",
@@ -4817,7 +4812,7 @@
canonical_path_from_root: false,
}
}
-` + simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
+` + SimpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
Filesystem: map[string]string{
"bar/Android.bp": "",
"baz/subbaz/Android.bp": "",
@@ -4887,7 +4882,7 @@
include_dirs: ["bar"],
}
}
-` + simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
+` + SimpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
Filesystem: map[string]string{
"bar/Android.bp": "",
"bar/bar.proto": "",
@@ -4958,7 +4953,7 @@
include_dirs: ["baz"],
}
}
-` + simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
+` + SimpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
Filesystem: map[string]string{
"bar/Android.bp": "", // package boundary
"baz/Android.bp": "",
@@ -4993,7 +4988,7 @@
Description: "cc_library depends on .proto files using proto.local_include_dirs",
ModuleTypeUnderTest: "cc_library",
ModuleTypeUnderTestFactory: cc.LibraryFactory,
- Blueprint: simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
+ Blueprint: SimpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
Filesystem: map[string]string{
"foo/Android.bp": `cc_library_static {
name: "foo",
@@ -5050,7 +5045,7 @@
Description: "proto_library generated for proto.include_dirs is compatible for all axes",
ModuleTypeUnderTest: "cc_library",
ModuleTypeUnderTestFactory: cc.LibraryFactory,
- Blueprint: simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite") + `
cc_library {
name: "foo_device",
device_supported: true, // this is the default behavior, but added explicitly here for illustration
diff --git a/bp2build/cc_library_headers_conversion_test.go b/bp2build/cc_library_headers_conversion_test.go
index a592ca9..40e8451 100644
--- a/bp2build/cc_library_headers_conversion_test.go
+++ b/bp2build/cc_library_headers_conversion_test.go
@@ -340,7 +340,7 @@
static_libs: ["foo_export", "foo_no_reexport"],
bazel_module: { bp2build_available: true },
}
-` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":foo_export"]`,
@@ -362,7 +362,7 @@
shared_libs: ["foo_export", "foo_no_reexport"],
bazel_module: { bp2build_available: true },
}
-` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":foo_export"]`,
@@ -384,7 +384,7 @@
header_libs: ["foo_export", "foo_no_reexport"],
bazel_module: { bp2build_available: true },
}
-` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":foo_export"]`,
@@ -405,7 +405,7 @@
whole_static_libs: ["foo_export"],
bazel_module: { bp2build_available: true },
}
-` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"),
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":foo_export"]`,
diff --git a/bp2build/cc_library_shared_conversion_test.go b/bp2build/cc_library_shared_conversion_test.go
index 90b13b0..44b9722 100644
--- a/bp2build/cc_library_shared_conversion_test.go
+++ b/bp2build/cc_library_shared_conversion_test.go
@@ -661,7 +661,7 @@
":libapexfoo_stable",
],
"//build/bazel/rules/apex:system": [
- "@api_surfaces//module-libapi/current:libplatform_stable",
+ ":libplatform_stable",
"@api_surfaces//module-libapi/current:libapexfoo_stable",
],
"//conditions:default": [
diff --git a/bp2build/cc_library_static_conversion_test.go b/bp2build/cc_library_static_conversion_test.go
index 89ec8f9..b9508e9 100644
--- a/bp2build/cc_library_static_conversion_test.go
+++ b/bp2build/cc_library_static_conversion_test.go
@@ -1045,17 +1045,17 @@
"for-x86.cpp": "",
"not-for-x86.cpp": "",
"not-for-everything.cpp": "",
- "dep/Android.bp": simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg") +
- simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg") +
- simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg_x86") +
- simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
- simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
+ "dep/Android.bp": SimpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg") +
+ SimpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg") +
+ SimpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg_x86") +
+ SimpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
+ SimpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
},
Blueprint: soongCcLibraryStaticPreamble +
- simpleModuleDoNotConvertBp2build("genrule", "generated_src") +
- simpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
- simpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
- simpleModuleDoNotConvertBp2build("genrule", "generated_hdr") + `
+ SimpleModuleDoNotConvertBp2build("genrule", "generated_src") +
+ SimpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
+ SimpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
+ SimpleModuleDoNotConvertBp2build("genrule", "generated_hdr") + `
cc_library_static {
name: "foo_static",
srcs: ["common.cpp", "not-for-*.cpp"],
@@ -1460,7 +1460,7 @@
runCcLibraryStaticTestCase(t, Bp2buildTestCase{
Description: "cc_library_static system_shared_libs set for bionic variant",
Blueprint: soongCcLibraryStaticPreamble +
- simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
+ SimpleModuleDoNotConvertBp2build("cc_library", "libc") + `
cc_library {
name: "libc_musl",
bazel_module: { bp2build_available: false },
@@ -1493,8 +1493,8 @@
runCcLibraryStaticTestCase(t, Bp2buildTestCase{
Description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
Blueprint: soongCcLibraryStaticPreamble +
- simpleModuleDoNotConvertBp2build("cc_library", "libc") +
- simpleModuleDoNotConvertBp2build("cc_library", "libm") + `
+ SimpleModuleDoNotConvertBp2build("cc_library", "libc") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "libm") + `
cc_library {
name: "libc_musl",
bazel_module: { bp2build_available: false },
@@ -1527,7 +1527,7 @@
runCcLibraryStaticTestCase(t, Bp2buildTestCase{
Description: "cc_library_static system_shared_lib empty for linux_bionic variant",
Blueprint: soongCcLibraryStaticPreamble +
- simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
+ SimpleModuleDoNotConvertBp2build("cc_library", "libc") + `
cc_library {
name: "libm",
@@ -2269,7 +2269,7 @@
name: "myprotogen",
out: ["myproto.proto"],
}
-` + simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
+` + SimpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "mylib", AttrNameToString{
"local_includes": `["."]`,
diff --git a/bp2build/cc_test_conversion_test.go b/bp2build/cc_test_conversion_test.go
index 9639ab9..74a5c0d 100644
--- a/bp2build/cc_test_conversion_test.go
+++ b/bp2build/cc_test_conversion_test.go
@@ -89,14 +89,14 @@
host_supported: true,
include_build_directory: false,
}
-` + simpleModuleDoNotConvertBp2build("cc_library", "foolib") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "hostlib") +
- simpleModuleDoNotConvertBp2build("genrule", "data_mod") +
- simpleModuleDoNotConvertBp2build("cc_binary", "cc_bin") +
- simpleModuleDoNotConvertBp2build("cc_library", "cc_lib") +
- simpleModuleDoNotConvertBp2build("cc_test_library", "cc_test_lib2") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
+` + SimpleModuleDoNotConvertBp2build("cc_library", "foolib") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "hostlib") +
+ SimpleModuleDoNotConvertBp2build("genrule", "data_mod") +
+ SimpleModuleDoNotConvertBp2build("cc_binary", "cc_bin") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "cc_lib") +
+ SimpleModuleDoNotConvertBp2build("cc_test_library", "cc_test_lib2") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
targets: []testBazelTarget{
{"cc_library_shared", "cc_test_lib1", AttrNameToString{}},
{"cc_library_static", "cc_test_lib1_bp2build_cc_library_static", AttrNameToString{}},
@@ -196,8 +196,8 @@
srcs: ["test.cpp"],
test_options: { tags: ["no-remote"] },
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"tags": `["no-remote"]`,
@@ -236,8 +236,8 @@
srcs: ["test.cpp"],
test_config: "test_config.xml",
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"local_includes": `["."]`,
@@ -274,8 +274,8 @@
name: "mytest",
srcs: ["test.cpp"],
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"local_includes": `["."]`,
@@ -315,8 +315,8 @@
auto_gen_config: true,
isolated: true,
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
- simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "liblog"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"auto_generate_test_config": "True",
@@ -354,8 +354,8 @@
srcs: ["test.cpp"],
static_libs: ["libgtest"],
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"local_includes": `["."]`,
@@ -389,8 +389,8 @@
srcs: ["test.cpp"],
isolated: true,
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
- simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "liblog"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"local_includes": `["."]`,
@@ -425,8 +425,8 @@
name: "mytest_with_no_gtest",
gtest: false,
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
- simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest"),
targets: []testBazelTarget{
{"cc_test", "mytest_with_gtest", AttrNameToString{
"local_includes": `["."]`,
@@ -477,8 +477,8 @@
memtag_heap: false,
},
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
- simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "liblog"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"local_includes": `["."]`,
@@ -513,8 +513,8 @@
}
},
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
- simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "liblog"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"local_includes": `["."]`,
@@ -549,8 +549,8 @@
}
},
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
- simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "liblog"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"local_includes": `["."]`,
@@ -594,8 +594,8 @@
}
},
}
-` + simpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
- simpleModuleDoNotConvertBp2build("cc_library", "liblog"),
+` + SimpleModuleDoNotConvertBp2build("cc_library_static", "libgtest_isolated_main") +
+ SimpleModuleDoNotConvertBp2build("cc_library", "liblog"),
targets: []testBazelTarget{
{"cc_test", "mytest", AttrNameToString{
"local_includes": `["."]`,
diff --git a/bp2build/conversion.go b/bp2build/conversion.go
index da4b5cf..c697235 100644
--- a/bp2build/conversion.go
+++ b/bp2build/conversion.go
@@ -15,6 +15,7 @@
rust_config "android/soong/rust/config"
"android/soong/starlark_fmt"
+ "github.com/google/blueprint"
"github.com/google/blueprint/proptools"
)
@@ -24,16 +25,28 @@
Contents string
}
-// PRIVATE: Use CreateSoongInjectionDirFiles instead
-func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) ([]BazelFile, error) {
+// createSoongInjectionDirFiles returns most of the files to write to the soong_injection directory.
+// Some other files also come from CreateProductConfigFiles
+func createSoongInjectionDirFiles(ctx *CodegenContext, metrics CodegenMetrics) ([]BazelFile, error) {
+ cfg := ctx.Config()
var files []BazelFile
files = append(files, newFile("android", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package.
files = append(files, newFile("android", "constants.bzl", android.BazelCcToolchainVars(cfg)))
+ // Visit all modules to determine the list of ndk libraries
+ // This list will be used to add additional flags for cc stub generation
+ ndkLibsStringFormatted := []string{}
+ ctx.Context().VisitAllModules(func(m blueprint.Module) {
+ if ctx.Context().ModuleType(m) == "ndk_library" {
+ ndkLibsStringFormatted = append(ndkLibsStringFormatted, fmt.Sprintf(`"%s"`, m.Name())) // name will be `"libc.ndk"`
+ }
+ })
+
files = append(files, newFile("cc_toolchain", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package.
files = append(files, newFile("cc_toolchain", "config_constants.bzl", cc_config.BazelCcToolchainVars(cfg)))
files = append(files, newFile("cc_toolchain", "sanitizer_constants.bzl", cc.BazelCcSanitizerToolchainVars(cfg)))
+ files = append(files, newFile("cc_toolchain", "ndk_libs.bzl", fmt.Sprintf("ndk_libs = [%v]", strings.Join(ndkLibsStringFormatted, ", "))))
files = append(files, newFile("java_toolchain", GeneratedBuildFileName, "")) // Creates a //java_toolchain package.
files = append(files, newFile("java_toolchain", "constants.bzl", java_config.BazelJavaToolchainVars(cfg)))
diff --git a/bp2build/conversion_test.go b/bp2build/conversion_test.go
index 89dd38e..6b10077 100644
--- a/bp2build/conversion_test.go
+++ b/bp2build/conversion_test.go
@@ -83,7 +83,8 @@
func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) {
testConfig := android.TestConfig("", make(map[string]string), "", make(map[string][]byte))
- files, err := soongInjectionFiles(testConfig, CreateCodegenMetrics())
+ codegenCtx := NewCodegenContext(testConfig, android.NewTestContext(testConfig).Context, Bp2Build, "")
+ files, err := createSoongInjectionDirFiles(codegenCtx, CreateCodegenMetrics())
if err != nil {
t.Error(err)
}
@@ -106,6 +107,10 @@
},
{
dir: "cc_toolchain",
+ basename: "ndk_libs.bzl",
+ },
+ {
+ dir: "cc_toolchain",
basename: "sanitizer_constants.bzl",
},
{
@@ -182,15 +187,45 @@
},
}
- if len(files) != len(expectedFilePaths) {
- t.Errorf("Expected %d file, got %d", len(expectedFilePaths), len(files))
+ less := func(a bazelFilepath, b bazelFilepath) bool {
+ return a.dir+"/"+a.basename < b.dir+"/"+b.basename
}
- for i := range files {
- actualFile, expectedFile := files[i], expectedFilePaths[i]
+ fileToFilepath := func(a BazelFile) bazelFilepath {
+ return bazelFilepath{basename: a.Basename, dir: a.Dir}
+ }
- if actualFile.Dir != expectedFile.dir || actualFile.Basename != expectedFile.basename {
- t.Errorf("Did not find expected file %s/%s", actualFile.Dir, actualFile.Basename)
+ sort.Slice(expectedFilePaths, func(i, j int) bool {
+ return less(expectedFilePaths[i], expectedFilePaths[j])
+ })
+ sort.Slice(files, func(i, j int) bool {
+ return less(fileToFilepath(files[i]), fileToFilepath(files[j]))
+ })
+
+ i := 0
+ j := 0
+ for i < len(expectedFilePaths) && j < len(files) {
+ expectedFile, actualFile := expectedFilePaths[i], files[j]
+
+ if actualFile.Dir == expectedFile.dir && actualFile.Basename == expectedFile.basename {
+ i++
+ j++
+ } else if less(expectedFile, fileToFilepath(actualFile)) {
+ t.Errorf("Did not find expected file %s/%s", expectedFile.dir, expectedFile.basename)
+ i++
+ } else {
+ t.Errorf("Found unexpected file %s/%s", actualFile.Dir, actualFile.Basename)
+ j++
}
}
+ for i < len(expectedFilePaths) {
+ expectedFile := expectedFilePaths[i]
+ t.Errorf("Did not find expected file %s/%s", expectedFile.dir, expectedFile.basename)
+ i++
+ }
+ for j < len(files) {
+ actualFile := files[j]
+ t.Errorf("Found unexpected file %s/%s", actualFile.Dir, actualFile.Basename)
+ j++
+ }
}
diff --git a/bp2build/java_library_conversion_test.go b/bp2build/java_library_conversion_test.go
index 7429ae6..8c78217 100644
--- a/bp2build/java_library_conversion_test.go
+++ b/bp2build/java_library_conversion_test.go
@@ -441,12 +441,13 @@
func TestJavaLibraryResourcesWithMultipleDirs(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{
Filesystem: map[string]string{
- "res/a.res": "",
- "res1/b.res": "",
+ "res/a.res": "",
+ "res1/b.res": "",
+ "res2/b.java": "",
},
Blueprint: `java_library {
name: "java-lib-1",
- java_resource_dirs: ["res", "res1"],
+ java_resource_dirs: ["res", "res1", "res2"],
sdk_version: "current",
}`,
ExpectedBazelTargets: []string{
@@ -676,7 +677,7 @@
Description: "Android Library - simple arch feature",
ModuleTypeUnderTest: "android_library",
ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
- Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
name: "TestLib",
manifest: "manifest/AndroidManifest.xml",
@@ -714,7 +715,7 @@
Description: "Android Library - multiple arch features",
ModuleTypeUnderTest: "android_library",
ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
- Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
name: "TestLib",
manifest: "manifest/AndroidManifest.xml",
@@ -760,7 +761,7 @@
Description: "Android Library - exclude_srcs with arch feature",
ModuleTypeUnderTest: "android_library",
ModuleTypeUnderTestFactory: java.AndroidLibraryFactory,
- Blueprint: simpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
+ Blueprint: SimpleModuleDoNotConvertBp2build("android_library", "static_lib_dep") + `
android_library {
name: "TestLib",
manifest: "manifest/AndroidManifest.xml",
@@ -1046,3 +1047,14 @@
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
})
}
+
+func TestJavaSdkVersionCorePlatformDoesNotConvert(t *testing.T) {
+ runJavaLibraryTestCase(t, Bp2buildTestCase{
+ Blueprint: `java_library {
+ name: "java-lib-1",
+ sdk_version: "core_platform",
+ bazel_module: { bp2build_available: true },
+}`,
+ ExpectedBazelTargets: []string{},
+ })
+}
diff --git a/bp2build/java_proto_conversion_test.go b/bp2build/java_proto_conversion_test.go
index 5d6b088..dfef697 100644
--- a/bp2build/java_proto_conversion_test.go
+++ b/bp2build/java_proto_conversion_test.go
@@ -137,3 +137,50 @@
},
})
}
+
+func TestJavaLibsAndOnlyProtoSrcs(t *testing.T) {
+ runJavaProtoTestCase(t, Bp2buildTestCase{
+ Description: "java_library that has only proto srcs",
+ Blueprint: `java_library_static {
+ name: "java-protos",
+ srcs: ["a.proto"],
+ libs: ["java-lib"],
+ java_version: "7",
+ sdk_version: "current",
+}
+
+java_library_static {
+ name: "java-lib",
+ bazel_module: { bp2build_available: false },
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{
+ "srcs": `["a.proto"]`,
+ }),
+ MakeBazelTarget(
+ "java_lite_proto_library",
+ "java-protos_java_proto_lite",
+ AttrNameToString{
+ "deps": `[":java-protos_proto"]`,
+ "java_version": `"7"`,
+ "sdk_version": `"current"`,
+ }),
+ MakeBazelTarget("java_library", "java-protos", AttrNameToString{
+ "exports": `[
+ ":java-protos_java_proto_lite",
+ ":java-lib-neverlink",
+ ]`,
+ "java_version": `"7"`,
+ "sdk_version": `"current"`,
+ }),
+ MakeNeverlinkDuplicateTargetWithAttrs(
+ "java_library",
+ "java-protos",
+ AttrNameToString{
+ "java_version": `"7"`,
+ "sdk_version": `"current"`,
+ }),
+ },
+ })
+}
diff --git a/bp2build/prebuilt_etc_conversion_test.go b/bp2build/prebuilt_etc_conversion_test.go
index 5b2d609..e237303 100644
--- a/bp2build/prebuilt_etc_conversion_test.go
+++ b/bp2build/prebuilt_etc_conversion_test.go
@@ -346,3 +346,17 @@
ExpectedErr: fmt.Errorf("label attribute could not be collapsed"),
})
}
+
+func TestPrebuiltEtcNoConversionIfSrcEqualsName(t *testing.T) {
+ runPrebuiltEtcTestCase(t, Bp2buildTestCase{
+ Description: "",
+ Filesystem: map[string]string{},
+ Blueprint: `
+prebuilt_etc {
+ name: "foo",
+ filename: "fooFilename",
+ src: "foo",
+}`,
+ ExpectedBazelTargets: []string{},
+ })
+}
diff --git a/bp2build/python_binary_conversion_test.go b/bp2build/python_binary_conversion_test.go
index 1b538d0..4ccdba7 100644
--- a/bp2build/python_binary_conversion_test.go
+++ b/bp2build/python_binary_conversion_test.go
@@ -298,8 +298,8 @@
"r1",
"r2",
],
-}` + simpleModuleDoNotConvertBp2build("genrule", "r1") +
- simpleModuleDoNotConvertBp2build("genrule", "r2"),
+}` + SimpleModuleDoNotConvertBp2build("genrule", "r1") +
+ SimpleModuleDoNotConvertBp2build("genrule", "r2"),
ExpectedBazelTargets: []string{
MakeBazelTarget("py_binary", "foo", AttrNameToString{
diff --git a/bp2build/symlink_forest.go b/bp2build/symlink_forest.go
index 5c33308..966b94a 100644
--- a/bp2build/symlink_forest.go
+++ b/bp2build/symlink_forest.go
@@ -43,7 +43,7 @@
// clean the whole symlink forest and recreate it. This number can be bumped whenever there's
// an incompatible change to the forest layout or a bug in incrementality that needs to be fixed
// on machines that may still have the bug present in their forest.
-const symlinkForestVersion = 1
+const symlinkForestVersion = 2
type instructionsNode struct {
name string
diff --git a/bp2build/testing.go b/bp2build/testing.go
index 997df64..0e7ef44 100644
--- a/bp2build/testing.go
+++ b/bp2build/testing.go
@@ -570,7 +570,7 @@
ctx.RegisterForBazelConversion()
}
-func simpleModuleDoNotConvertBp2build(typ, name string) string {
+func SimpleModuleDoNotConvertBp2build(typ, name string) string {
return fmt.Sprintf(`
%s {
name: "%s",
diff --git a/cc/bp2build.go b/cc/bp2build.go
index 83553c8..039a3cf 100644
--- a/cc/bp2build.go
+++ b/cc/bp2build.go
@@ -1380,10 +1380,10 @@
// having stubs or not, so Bazel select() statement can be used to choose
// source/stub variants of them.
apexAvailable := module.ApexAvailable()
- setStubsForDynamicDeps(ctx, axis, config, apexAvailable, sharedDeps.export, &la.dynamicDeps, 0, false)
- setStubsForDynamicDeps(ctx, axis, config, apexAvailable, sharedDeps.implementation, &la.implementationDynamicDeps, 1, false)
+ SetStubsForDynamicDeps(ctx, axis, config, apexAvailable, sharedDeps.export, &la.dynamicDeps, 0, false)
+ SetStubsForDynamicDeps(ctx, axis, config, apexAvailable, sharedDeps.implementation, &la.implementationDynamicDeps, 1, false)
if len(systemSharedLibs) > 0 {
- setStubsForDynamicDeps(ctx, axis, config, apexAvailable, bazelLabelForSharedDeps(ctx, systemSharedLibs), &la.systemDynamicDeps, 2, true)
+ SetStubsForDynamicDeps(ctx, axis, config, apexAvailable, bazelLabelForSharedDeps(ctx, systemSharedLibs), &la.systemDynamicDeps, 2, true)
}
}
@@ -1583,7 +1583,7 @@
}
}
-func setStubsForDynamicDeps(ctx android.BazelConversionPathContext, axis bazel.ConfigurationAxis,
+func SetStubsForDynamicDeps(ctx android.BazelConversionPathContext, axis bazel.ConfigurationAxis,
config string, apexAvailable []string, dynamicLibs bazel.LabelList, dynamicDeps *bazel.LabelListAttribute, ind int, buildNonApexWithStubs bool) {
// Create a config_setting for each apex_available.
@@ -1624,6 +1624,11 @@
if linkable, ok := ctx.Module().(LinkableInterface); ok && linkable.Bootstrap() {
sameApiDomain = true
}
+ // If dependency has `apex_available: ["//apex_available:platform]`, then the platform variant of rdep should link against its impl.
+ // https://cs.android.com/android/_/android/platform/build/soong/+/main:cc/cc.go;l=3617;bpv=1;bpt=0;drc=c6a93d853b37ec90786e745b8d282145e6d3b589
+ if depApexAvailable := dep.(*Module).ApexAvailable(); len(depApexAvailable) == 1 && depApexAvailable[0] == android.AvailableToPlatform {
+ sameApiDomain = true
+ }
} else {
sameApiDomain = android.InList(apiDomain, dep.(*Module).ApexAvailable())
}
diff --git a/cc/config/global.go b/cc/config/global.go
index 174b12c..a586a3f 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -67,10 +67,6 @@
// not emit the table by default on Android since NDK still uses GNU binutils.
"-faddrsig",
- // Turn on -fcommon explicitly, since Clang now defaults to -fno-common. The cleanup bug
- // tracking this is http://b/151457797.
- "-fcommon",
-
// Help catch common 32/64-bit errors.
"-Werror=int-conversion",
@@ -253,6 +249,8 @@
// (anything for which IsThirdPartyPath() in build/soong/android/paths.go
// returns true - includes external/, most of vendor/ and most of hardware/)
noOverrideExternalGlobalCflags = []string{
+ // http://b/151457797
+ "-fcommon",
// http://b/191699019
"-Wno-format-insufficient-args",
// http://b/296321145
diff --git a/cc/config/riscv64_device.go b/cc/config/riscv64_device.go
index 40919c0..e048622 100644
--- a/cc/config/riscv64_device.go
+++ b/cc/config/riscv64_device.go
@@ -26,14 +26,14 @@
// Help catch common 32/64-bit errors.
"-Werror=implicit-function-declaration",
"-fno-emulated-tls",
- "-march=rv64gc_zba_zbb_zbs",
+ "-march=rv64gcv_zba_zbb_zbs",
}
riscv64ArchVariantCflags = map[string][]string{}
riscv64Ldflags = []string{
"-Wl,--hash-style=gnu",
- "-march=rv64gc_zba_zbb_zbs",
+ "-march=rv64gcv_zba_zbb_zbs",
}
riscv64Lldflags = append(riscv64Ldflags,
diff --git a/cc/stl.go b/cc/stl.go
index 8f92dcb..a31a585 100644
--- a/cc/stl.go
+++ b/cc/stl.go
@@ -172,6 +172,7 @@
// The system STL doesn't have a prebuilt (it uses the system's libstdc++), but it does have
// its own includes. The includes are handled in CCBase.Flags().
deps.SharedLibs = append([]string{"libstdc++"}, deps.SharedLibs...)
+ deps.HeaderLibs = append([]string{"ndk_system"}, deps.HeaderLibs...)
case "ndk_libc++_shared", "ndk_libc++_static":
if stl.Properties.SelectedStl == "ndk_libc++_shared" {
deps.SharedLibs = append(deps.SharedLibs, stl.Properties.SelectedStl)
@@ -219,8 +220,7 @@
case "libstdc++":
// Nothing
case "ndk_system":
- ndkSrcRoot := android.PathForSource(ctx, "prebuilts/ndk/current/sources/cxx-stl/system/include")
- flags.Local.CFlags = append(flags.Local.CFlags, "-isystem "+ndkSrcRoot.String())
+ // Nothing: The exports of ndk_system will be added automatically to the local cflags
case "ndk_libc++_shared", "ndk_libc++_static":
if ctx.Arch().ArchType == android.Arm {
// Make sure the _Unwind_XXX symbols are not re-exported.
diff --git a/etc/prebuilt_etc.go b/etc/prebuilt_etc.go
index 370a423..c48bafa 100644
--- a/etc/prebuilt_etc.go
+++ b/etc/prebuilt_etc.go
@@ -40,6 +40,7 @@
"android/soong/bazel"
"android/soong/bazel/cquery"
"android/soong/snapshot"
+ "android/soong/ui/metrics/bp2build_metrics_proto"
)
var pctx = android.NewPackageContext("android/soong/etc")
@@ -711,7 +712,7 @@
// Bp2buildHelper returns a bazelPrebuiltFileAttributes used for the conversion
// of prebuilt_* modules. bazelPrebuiltFileAttributes has the common attributes
// used by both prebuilt_etc_xml and other prebuilt_* moodules
-func (module *PrebuiltEtc) Bp2buildHelper(ctx android.TopDownMutatorContext) *bazelPrebuiltFileAttributes {
+func (module *PrebuiltEtc) Bp2buildHelper(ctx android.TopDownMutatorContext) (*bazelPrebuiltFileAttributes, bool) {
var src bazel.LabelAttribute
for axis, configToProps := range module.GetArchVariantProperties(ctx, &prebuiltEtcProperties{}) {
for config, p := range configToProps {
@@ -720,7 +721,12 @@
continue
}
if props.Src != nil {
- label := android.BazelLabelForModuleSrcSingle(ctx, *props.Src)
+ srcStr := proptools.String(props.Src)
+ if srcStr == ctx.ModuleName() {
+ ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_PROPERTY_UNSUPPORTED, "src == name")
+ return &bazelPrebuiltFileAttributes{}, false
+ }
+ label := android.BazelLabelForModuleSrcSingle(ctx, srcStr)
src.SetSelectValue(axis, config, label)
}
}
@@ -779,8 +785,7 @@
attrs.Filename_from_src = bazel.BoolAttribute{Value: moduleProps.Filename_from_src}
}
- return attrs
-
+ return attrs, true
}
// ConvertWithBp2build performs bp2build conversion of PrebuiltEtc
@@ -793,7 +798,10 @@
return
}
- attrs := module.Bp2buildHelper(ctx)
+ attrs, convertible := module.Bp2buildHelper(ctx)
+ if !convertible {
+ return
+ }
props := bazel.BazelTargetModuleProperties{
Rule_class: "prebuilt_file",
diff --git a/filesystem/avb_add_hash_footer.go b/filesystem/avb_add_hash_footer.go
index f3fecd0..dabbc46 100644
--- a/filesystem/avb_add_hash_footer.go
+++ b/filesystem/avb_add_hash_footer.go
@@ -68,6 +68,9 @@
// List of properties to add to the footer
Props []avbProp
+ // The index used to prevent rollback of the image on device.
+ Rollback_index *int64
+
// Include descriptors from images
Include_descriptors_from_images []string `android:"path,arch_variant"`
}
@@ -128,6 +131,14 @@
addAvbProp(ctx, cmd, prop)
}
+ if a.properties.Rollback_index != nil {
+ rollbackIndex := proptools.Int(a.properties.Rollback_index)
+ if rollbackIndex < 0 {
+ ctx.PropertyErrorf("rollback_index", "Rollback index must be non-negative")
+ }
+ cmd.Flag(fmt.Sprintf(" --rollback_index %x", rollbackIndex))
+ }
+
cmd.FlagWithOutput("--image ", a.output)
builder.Build("avbAddHashFooter", fmt.Sprintf("avbAddHashFooter %s", ctx.ModuleName()))
diff --git a/java/app.go b/java/app.go
index d71cd77..7ee0e38 100755
--- a/java/app.go
+++ b/java/app.go
@@ -316,6 +316,17 @@
a.generateJavaUsedByApex(ctx)
}
+func (a *AndroidApp) MinSdkVersion(ctx android.EarlyModuleContext) android.ApiLevel {
+ defaultMinSdkVersion := a.Module.MinSdkVersion(ctx)
+ if proptools.Bool(a.appProperties.Updatable) {
+ overrideApiLevel := android.MinSdkVersionFromValue(ctx, ctx.DeviceConfig().ApexGlobalMinSdkVersionOverride())
+ if !overrideApiLevel.IsNone() && overrideApiLevel.CompareTo(defaultMinSdkVersion) > 0 {
+ return overrideApiLevel
+ }
+ }
+ return defaultMinSdkVersion
+}
+
func (a *AndroidApp) checkAppSdkVersions(ctx android.ModuleContext) {
if a.Updatable() {
if !a.SdkVersion(ctx).Stable() {
@@ -1621,15 +1632,6 @@
// ConvertWithBp2build is used to convert android_app to Bazel.
func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
- commonAttrs, bp2BuildInfo, supported := a.convertLibraryAttrsBp2Build(ctx)
- if !supported {
- return
- }
- depLabels := bp2BuildInfo.DepLabels
-
- deps := depLabels.Deps
- deps.Append(depLabels.StaticDeps)
-
aapt, supported := a.convertAaptAttrsWithBp2Build(ctx)
if !supported {
return
@@ -1700,9 +1702,17 @@
})
appAttrs.Proguard_specs.Add(bazel.MakeLabelAttribute(":" + generatedFlagFileRuleName))
}
-
}
+ commonAttrs, bp2BuildInfo, supported := a.convertLibraryAttrsBp2Build(ctx)
+ if !supported {
+ return
+ }
+ depLabels := bp2BuildInfo.DepLabels
+
+ deps := depLabels.Deps
+ deps.Append(depLabels.StaticDeps)
+
props := bazel.BazelTargetModuleProperties{
Rule_class: "android_binary",
Bzl_load_location: "//build/bazel/rules/android:android_binary.bzl",
diff --git a/java/app_test.go b/java/app_test.go
index 8474ea7..fc57f44 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -4137,3 +4137,49 @@
"\\S+soong/.intermediates/foo/android_common_bar/privapp_allowlist_com.google.android.foo.xml:\\S+/target/product/test_device/system/etc/permissions/bar.xml",
)
}
+
+func TestApexGlobalMinSdkVersionOverride(t *testing.T) {
+ result := android.GroupFixturePreparers(
+ PrepareForTestWithJavaDefaultModules,
+ android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
+ variables.ApexGlobalMinSdkVersionOverride = proptools.StringPtr("Tiramisu")
+ }),
+ ).RunTestWithBp(t, `
+ android_app {
+ name: "com.android.bar",
+ srcs: ["a.java"],
+ sdk_version: "current",
+ }
+ android_app {
+ name: "com.android.foo",
+ srcs: ["a.java"],
+ sdk_version: "current",
+ min_sdk_version: "S",
+ updatable: true,
+ }
+ override_android_app {
+ name: "com.android.go.foo",
+ base: "com.android.foo",
+ }
+ `)
+ foo := result.ModuleForTests("com.android.foo", "android_common").Rule("manifestFixer")
+ fooOverride := result.ModuleForTests("com.android.foo", "android_common_com.android.go.foo").Rule("manifestFixer")
+ bar := result.ModuleForTests("com.android.bar", "android_common").Rule("manifestFixer")
+
+ android.AssertStringDoesContain(t,
+ "expected manifest fixer to set com.android.bar minSdkVersion to S",
+ bar.BuildParams.Args["args"],
+ "--minSdkVersion S",
+ )
+ android.AssertStringDoesContain(t,
+ "com.android.foo: expected manifest fixer to set minSdkVersion to T",
+ foo.BuildParams.Args["args"],
+ "--minSdkVersion T",
+ )
+ android.AssertStringDoesContain(t,
+ "com.android.go.foo: expected manifest fixer to set minSdkVersion to T",
+ fooOverride.BuildParams.Args["args"],
+ "--minSdkVersion T",
+ )
+
+}
diff --git a/java/droidstubs.go b/java/droidstubs.go
index f05ef1f..1d5dd76 100644
--- a/java/droidstubs.go
+++ b/java/droidstubs.go
@@ -539,7 +539,7 @@
// Force metalava to sort overloaded methods by their order in the source code.
// See b/285312164 for more information.
- cmd.FlagWithArg("--api-overloaded-method-order ", "source")
+ cmd.FlagWithArg("--format-defaults ", "overloaded-method-order=source")
return cmd
}
diff --git a/java/java.go b/java/java.go
index 521aef3..270f456 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1798,6 +1798,7 @@
Flag("-jar").
Flag("-write_if_changed").
Flag("-ignore_missing_files").
+ Flag("-quiet").
FlagWithArg("-C ", unzippedSrcJarDir.String()).
FlagWithInput("-l ", classFilesList).
FlagWithOutput("-o ", al.stubsJarWithoutStaticLibs)
@@ -2826,7 +2827,7 @@
if resourceStripPrefix == nil && i == 0 {
resourceStripPrefix = resAttr.Resource_strip_prefix
resources = resAttr.Resources.Value
- } else {
+ } else if !resAttr.Resources.IsEmpty() {
ctx.CreateBazelTargetModule(
bazel.BazelTargetModuleProperties{
Rule_class: "java_resources",
@@ -2885,8 +2886,9 @@
// depending on the module type.
type bp2BuildJavaInfo struct {
// separates dependencies into dynamic dependencies and static dependencies.
- DepLabels *javaDependencyLabels
- hasKotlin bool
+ DepLabels *javaDependencyLabels
+ hasKotlin bool
+ onlyProtoInSrcs bool
}
func javaXsdTargetName(xsd android.XsdConfigBp2buildTargets) string {
@@ -2904,8 +2906,13 @@
var staticDeps bazel.LabelListAttribute
if proptools.String(m.deviceProperties.Sdk_version) == "" && m.DeviceSupported() {
+ // TODO(b/297356704): handle platform apis in bp2build
ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_PROPERTY_UNSUPPORTED, "sdk_version unset")
return &javaCommonAttributes{}, &bp2BuildJavaInfo{}, false
+ } else if proptools.String(m.deviceProperties.Sdk_version) == "core_platform" {
+ // TODO(b/297356582): handle core_platform in bp2build
+ ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_PROPERTY_UNSUPPORTED, "sdk_version core_platform")
+ return &javaCommonAttributes{}, &bp2BuildJavaInfo{}, false
}
archVariantProps := m.GetArchVariantProperties(ctx, &CommonProperties{})
@@ -2944,6 +2951,9 @@
staticDeps.Append(srcPartitions[xsdSrcPartition])
+ _, protoInSrcs := srcPartitions[protoSrcPartition]
+ onlyProtoInSrcs := protoInSrcs && len(srcPartitions) == 1
+
if !srcPartitions[logtagSrcPartition].IsEmpty() {
logtagsLibName := m.Name() + "_logtags"
ctx.CreateBazelTargetModule(
@@ -3081,8 +3091,9 @@
}
bp2BuildInfo := &bp2BuildJavaInfo{
- DepLabels: depLabels,
- hasKotlin: hasKotlin,
+ DepLabels: depLabels,
+ hasKotlin: hasKotlin,
+ onlyProtoInSrcs: onlyProtoInSrcs,
}
return commonAttrs, bp2BuildInfo, true
@@ -3122,16 +3133,29 @@
depLabels := bp2BuildInfo.DepLabels
deps := depLabels.Deps
+ exports := depLabels.StaticDeps
if !commonAttrs.Srcs.IsEmpty() {
- deps.Append(depLabels.StaticDeps) // we should only append these if there are sources to use them
+ deps.Append(exports) // we should only append these if there are sources to use them
} else if !deps.IsEmpty() {
- ctx.ModuleErrorf("Module has direct dependencies but no sources. Bazel will not allow this.")
+ if bp2BuildInfo.onlyProtoInSrcs {
+ // java_library does not accept deps when there are no srcs because
+ // there is no compilation happening, but it accepts exports.
+ // bp2build converts this module to 2 java_libraries + java_xx_proto_library + proto_library
+ // the non-empty deps here are not necessary for compiling the protos, in which case
+ // they're unnecessary as deps on the java_library as well since they aren't
+ // being propagated to any dependencies.
+ // so we can put the deps to exports and drop deps here.
+ exports.Append(deps)
+ deps = bazel.LabelListAttribute{}
+ } else {
+ ctx.ModuleErrorf("Module has direct dependencies but no sources. Bazel will not allow this.")
+ }
}
var props bazel.BazelTargetModuleProperties
attrs := &javaLibraryAttributes{
javaCommonAttributes: commonAttrs,
Deps: deps,
- Exports: depLabels.StaticDeps,
+ Exports: exports,
}
name := m.Name()
diff --git a/java/sdk_library.go b/java/sdk_library.go
index b1ddde0..d1620af 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -1633,7 +1633,7 @@
}{}
props.Name = proptools.StringPtr(module.sourceStubLibraryModuleName(apiScope))
- props.Visibility = childModuleVisibility(module.sdkLibraryProperties.Stubs_library_visibility)
+ props.Visibility = []string{"//visibility:override", "//visibility:private"}
// sources are generated from the droiddoc
props.Srcs = []string{":" + module.stubsSourceModuleName(apiScope)}
sdkVersion := module.sdkVersionForStubsLibrary(mctx, apiScope)
@@ -1829,7 +1829,7 @@
}{}
props.Name = proptools.StringPtr(module.apiLibraryModuleName(apiScope))
- props.Visibility = childModuleVisibility(module.sdkLibraryProperties.Stubs_library_visibility)
+ props.Visibility = []string{"//visibility:override", "//visibility:private"}
apiContributions := []string{}
diff --git a/java/sdk_library_test.go b/java/sdk_library_test.go
index 118f8b6..868d697 100644
--- a/java/sdk_library_test.go
+++ b/java/sdk_library_test.go
@@ -1474,3 +1474,32 @@
android.AssertStringEquals(t, "Module expected to contain full api surface api library", c.fullApiSurfaceStub, *m.properties.Full_api_surface_stub)
}
}
+
+func TestStaticDepStubLibrariesVisibility(t *testing.T) {
+ android.GroupFixturePreparers(
+ prepareForJavaTest,
+ PrepareForTestWithJavaSdkLibraryFiles,
+ FixtureWithLastReleaseApis("foo"),
+ android.FixtureMergeMockFs(
+ map[string][]byte{
+ "A.java": nil,
+ "dir/Android.bp": []byte(
+ `
+ java_library {
+ name: "bar",
+ srcs: ["A.java"],
+ libs: ["foo.stubs.from-source"],
+ }
+ `),
+ "dir/A.java": nil,
+ },
+ ).ExtendWithErrorHandler(
+ android.FixtureExpectsAtLeastOneErrorMatchingPattern(
+ `module "bar" variant "android_common": depends on //.:foo.stubs.from-source which is not visible to this module`)),
+ ).RunTestWithBp(t, `
+ java_sdk_library {
+ name: "foo",
+ srcs: ["A.java"],
+ }
+ `)
+}
diff --git a/rust/bindgen.go b/rust/bindgen.go
index 407f275..a80a587 100644
--- a/rust/bindgen.go
+++ b/rust/bindgen.go
@@ -29,7 +29,7 @@
defaultBindgenFlags = []string{""}
// bindgen should specify its own Clang revision so updating Clang isn't potentially blocked on bindgen failures.
- bindgenClangVersion = "clang-r498229"
+ bindgenClangVersion = "clang-r498229b"
_ = pctx.VariableFunc("bindgenClangVersion", func(ctx android.PackageVarContext) string {
if override := ctx.Config().Getenv("LLVM_BINDGEN_PREBUILTS_VERSION"); override != "" {
diff --git a/rust/config/arm64_device.go b/rust/config/arm64_device.go
index 08ac2ef..564168b 100644
--- a/rust/config/arm64_device.go
+++ b/rust/config/arm64_device.go
@@ -21,7 +21,9 @@
)
var (
- Arm64RustFlags = []string{}
+ Arm64RustFlags = []string{
+ "-C force-frame-pointers=y",
+ }
Arm64ArchFeatureRustFlags = map[string][]string{}
Arm64LinkFlags = []string{}
diff --git a/rust/config/riscv64_device.go b/rust/config/riscv64_device.go
index d014dbf..e9aa8ef 100644
--- a/rust/config/riscv64_device.go
+++ b/rust/config/riscv64_device.go
@@ -21,7 +21,9 @@
)
var (
- Riscv64RustFlags = []string{}
+ Riscv64RustFlags = []string{
+ "-C force-frame-pointers=y",
+ }
Riscv64ArchFeatureRustFlags = map[string][]string{"": {}}
Riscv64LinkFlags = []string{}
diff --git a/rust/config/x86_64_device.go b/rust/config/x86_64_device.go
index 3458ec9..45d1fd0 100644
--- a/rust/config/x86_64_device.go
+++ b/rust/config/x86_64_device.go
@@ -21,7 +21,9 @@
)
var (
- x86_64RustFlags = []string{}
+ x86_64RustFlags = []string{
+ "-C force-frame-pointers=y",
+ }
x86_64ArchFeatureRustFlags = map[string][]string{}
x86_64LinkFlags = []string{}
diff --git a/scripts/conv_linker_config.py b/scripts/conv_linker_config.py
index 3ac1b7e..c6aa3d0 100644
--- a/scripts/conv_linker_config.py
+++ b/scripts/conv_linker_config.py
@@ -120,6 +120,37 @@
f.write(pb.SerializeToString())
+def Validate(args):
+ if os.path.isdir(args.input):
+ config_file = os.path.join(args.input, 'etc/linker.config.pb')
+ if os.path.exists(config_file):
+ args.input = config_file
+ Validate(args)
+ # OK if there's no linker config file.
+ return
+
+ if not os.path.isfile(args.input):
+ sys.exit(f"{args.input} is not a file")
+
+ pb = linker_config_pb2.LinkerConfig()
+ with open(args.input, 'rb') as f:
+ pb.ParseFromString(f.read())
+
+ if args.type == 'apex':
+ # Shouldn't use provideLibs/requireLibs in APEX linker.config.pb
+ if getattr(pb, 'provideLibs'):
+ sys.exit(f'{args.input}: provideLibs is set. Use provideSharedLibs in apex_manifest')
+ if getattr(pb, 'requireLibs'):
+ sys.exit(f'{args.input}: requireLibs is set. Use requireSharedLibs in apex_manifest')
+ elif args.type == 'system':
+ if getattr(pb, 'visible'):
+ sys.exit(f'{args.input}: do not use visible, which is for APEX')
+ if getattr(pb, 'permittedPaths'):
+ sys.exit(f'{args.input}: do not use permittedPaths, which is for APEX')
+ else:
+ sys.exit(f'Unknown type: {args.type}')
+
+
def GetArgParser():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
@@ -227,6 +258,18 @@
help='Linker configuration files to merge.')
append.set_defaults(func=Merge)
+ validate = subparsers.add_parser('validate', help='Validate configuration')
+ validate.add_argument(
+ '--type',
+ required=True,
+ choices=['apex', 'system'],
+ help='Type of linker configuration')
+ validate.add_argument(
+ 'input',
+ help='Input can be a directory which has etc/linker.config.pb or a path'
+ ' to the linker config file')
+ validate.set_defaults(func=Validate)
+
return parser
diff --git a/tests/sbom_test.sh b/tests/sbom_test.sh
index 9de9b97..73fbeab 100755
--- a/tests/sbom_test.sh
+++ b/tests/sbom_test.sh
@@ -47,13 +47,10 @@
}
function diff_files {
- file_list_file="$1"; shift
- files_in_spdx_file="$1"; shift
- partition_name="$1"; shift
- exclude=
- if [ -v 'diff_excludes[$partition_name]' ]; then
- exclude=${diff_excludes[$partition_name]}
- fi
+ local file_list_file="$1"; shift
+ local files_in_spdx_file="$1"; shift
+ local partition_name="$1"; shift
+ local exclude="$1"; shift
diff "$file_list_file" "$files_in_spdx_file" $exclude
if [ $? != "0" ]; then
@@ -84,9 +81,6 @@
dump_erofs=$out_dir/host/linux-x86/bin/dump.erofs
lz4=$out_dir/host/linux-x86/bin/lz4
- declare -A diff_excludes
- diff_excludes[system]="-I /system/bin/hwservicemanager"
-
# Example output of dump.erofs is as below, and the data used in the test start
# at line 11. Column 1 is inode id, column 2 is inode type and column 3 is name.
# Each line is captured in variable "entry", awk is used to get type and name.
@@ -158,7 +152,7 @@
sort -n -o "$files_in_spdx_file" "$files_in_spdx_file"
echo ============ Diffing files in $f and SBOM
- diff_files "$file_list_file" "$files_in_spdx_file" "$partition_name"
+ diff_files "$file_list_file" "$files_in_spdx_file" "$partition_name" ""
done
RAMDISK_IMAGES="$product_out/ramdisk.img"
@@ -176,7 +170,7 @@
grep "FileName: /${partition_name}/" $product_out/sbom.spdx | sed 's/^FileName: //' | sort -n > "$files_in_spdx_file"
echo ============ Diffing files in $f and SBOM
- diff_files "$file_list_file" "$files_in_spdx_file" "$partition_name"
+ diff_files "$file_list_file" "$files_in_spdx_file" "$partition_name" ""
done
verify_package_verification_code "$product_out/sbom.spdx"
diff --git a/ui/build/ninja.go b/ui/build/ninja.go
index 61aaad8..b69e938 100644
--- a/ui/build/ninja.go
+++ b/ui/build/ninja.go
@@ -194,6 +194,10 @@
// LLVM compiler wrapper options
"TOOLCHAIN_RUSAGE_OUTPUT",
+
+ // We don't want this build broken flag to cause reanalysis, so allow it through to the
+ // actions.
+ "BUILD_BROKEN_INCORRECT_PARTITION_IMAGES",
}, config.BuildBrokenNinjaUsesEnvVars()...)...)
}
diff --git a/xml/xml.go b/xml/xml.go
index 8c0c072..20a26f5 100644
--- a/xml/xml.go
+++ b/xml/xml.go
@@ -146,7 +146,11 @@
}
func (p *prebuiltEtcXml) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
- baseAttrs := p.PrebuiltEtc.Bp2buildHelper(ctx)
+ baseAttrs, convertible := p.PrebuiltEtc.Bp2buildHelper(ctx)
+
+ if !convertible {
+ return
+ }
var schema *string
if p.properties.Schema != nil {
diff --git a/zip/cmd/main.go b/zip/cmd/main.go
index 5231fae..37537ab 100644
--- a/zip/cmd/main.go
+++ b/zip/cmd/main.go
@@ -174,6 +174,7 @@
traceFile := flags.String("trace", "", "write trace to file")
sha256Checksum := flags.Bool("sha256", false, "add a zip header to each file containing its SHA256 digest")
doNotWrite := flags.Bool("n", false, "Nothing is written to disk -- all other work happens")
+ quiet := flags.Bool("quiet", false, "do not print warnings to console")
flags.Var(&rootPrefix{}, "P", "path prefix within the zip at which to place files")
flags.Var(&listFiles{}, "l", "file containing list of files to zip")
@@ -238,6 +239,7 @@
IgnoreMissingFiles: *ignoreMissingFiles,
Sha256Checksum: *sha256Checksum,
DoNotWrite: *doNotWrite,
+ Quiet: *quiet,
})
if err != nil {
fmt.Fprintln(os.Stderr, "error:", err.Error())
diff --git a/zip/zip.go b/zip/zip.go
index 30a2ee7..f91a5f2 100644
--- a/zip/zip.go
+++ b/zip/zip.go
@@ -283,6 +283,7 @@
IgnoreMissingFiles bool
Sha256Checksum bool
DoNotWrite bool
+ Quiet bool
Stderr io.Writer
Filesystem pathtools.FileSystem
@@ -340,7 +341,9 @@
Err: os.ErrNotExist,
}
if args.IgnoreMissingFiles {
- fmt.Fprintln(z.stderr, "warning:", err)
+ if !args.Quiet {
+ fmt.Fprintln(z.stderr, "warning:", err)
+ }
} else {
return err
}
@@ -357,7 +360,9 @@
Err: os.ErrNotExist,
}
if args.IgnoreMissingFiles {
- fmt.Fprintln(z.stderr, "warning:", err)
+ if !args.Quiet {
+ fmt.Fprintln(z.stderr, "warning:", err)
+ }
} else {
return err
}
@@ -368,7 +373,9 @@
Err: syscall.ENOTDIR,
}
if args.IgnoreMissingFiles {
- fmt.Fprintln(z.stderr, "warning:", err)
+ if !args.Quiet {
+ fmt.Fprintln(z.stderr, "warning:", err)
+ }
} else {
return err
}