Merge "Add more modules in HugeModulesMap"
diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go
index 30c2e6c..ff0d33e 100644
--- a/android/allowlists/allowlists.go
+++ b/android/allowlists/allowlists.go
@@ -182,6 +182,8 @@
"external/selinux/libselinux": Bp2BuildDefaultTrueRecursively,
"external/selinux/libsepol": Bp2BuildDefaultTrueRecursively,
"external/speex": Bp2BuildDefaultTrueRecursively,
+ "external/tinyalsa": Bp2BuildDefaultTrueRecursively,
+ "external/tinyalsa_new": Bp2BuildDefaultTrueRecursively,
"external/toybox": Bp2BuildDefaultTrueRecursively,
"external/zlib": Bp2BuildDefaultTrueRecursively,
"external/zopfli": Bp2BuildDefaultTrueRecursively,
@@ -222,6 +224,8 @@
"hardware/interfaces": Bp2BuildDefaultTrue,
"hardware/interfaces/audio/aidl": Bp2BuildDefaultTrue,
"hardware/interfaces/audio/aidl/common": Bp2BuildDefaultTrue,
+ "hardware/interfaces/audio/aidl/default": Bp2BuildDefaultTrue,
+ "hardware/interfaces/audio/aidl/sounddose": Bp2BuildDefaultTrue,
"hardware/interfaces/common/aidl": Bp2BuildDefaultTrue,
"hardware/interfaces/common/fmq/aidl": Bp2BuildDefaultTrue,
"hardware/interfaces/common/support": Bp2BuildDefaultTrue,
@@ -282,6 +286,7 @@
"packages/modules/adb/pairing_connection": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/proto": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/tls": Bp2BuildDefaultTrueRecursively,
+ "packages/modules/Gki/libkver": Bp2BuildDefaultTrue,
"packages/modules/NetworkStack/common/captiveportal": Bp2BuildDefaultTrue,
"packages/modules/NeuralNetworks/apex": Bp2BuildDefaultTrue,
"packages/providers/MediaProvider/tools/dialogs": Bp2BuildDefaultFalse, // TODO(b/242834374)
@@ -346,10 +351,12 @@
"system/libhidl/transport/token/1.0/utils": Bp2BuildDefaultTrue,
"system/libhwbinder": Bp2BuildDefaultTrueRecursively,
"system/libprocinfo": Bp2BuildDefaultTrue,
+ "system/libvintf": Bp2BuildDefaultTrue,
"system/libziparchive": Bp2BuildDefaultTrueRecursively,
"system/logging": Bp2BuildDefaultTrueRecursively,
"system/media": Bp2BuildDefaultTrue,
"system/media/audio": Bp2BuildDefaultTrueRecursively,
+ "system/media/alsa_utils": Bp2BuildDefaultTrueRecursively,
"system/media/audio_utils": Bp2BuildDefaultTrueRecursively,
"system/memory/libion": Bp2BuildDefaultTrueRecursively,
"system/memory/libmemunreachable": Bp2BuildDefaultTrueRecursively,
@@ -357,10 +364,12 @@
"system/testing/gtest_extras": Bp2BuildDefaultTrueRecursively,
"system/timezone/apex": Bp2BuildDefaultTrueRecursively,
"system/timezone/output_data": Bp2BuildDefaultTrueRecursively,
- "system/timezone/testing": Bp2BuildDefaultTrueRecursively,
"system/tools/aidl/build/tests_bp2build": Bp2BuildDefaultTrue,
+ "system/tools/aidl/metadata": Bp2BuildDefaultTrue,
+ "system/tools/hidl/metadata": Bp2BuildDefaultTrue,
"system/tools/mkbootimg": Bp2BuildDefaultTrueRecursively,
"system/tools/sysprop": Bp2BuildDefaultTrue,
+ "system/tools/xsdc/utils": Bp2BuildDefaultTrueRecursively,
"system/unwinding/libunwindstack": Bp2BuildDefaultTrueRecursively,
"tools/apksig": Bp2BuildDefaultTrue,
@@ -567,8 +576,8 @@
"car-ui-androidx-constraintlayout-solver-nodeps",
//system/libhidl
- // needed by cc_hidl_library
- "libhidlbase",
+ "libhidlbase", // needed by cc_hidl_library
+ "libhidl_gtest_helper",
//frameworks/native
"framework_native_aidl_binder",
@@ -860,6 +869,30 @@
// depends on android.hardware.health-V2.0-java
"android.hardware.health-translate-java",
+ //system/libvintf
+ // depends on apex-info-list-tinyxml, unconverted xsd_config Soong module type.
+ "libvintf",
+ "vintf",
+ "libassemblevintf",
+ "assemble_vintf",
+ "libvintffm",
+ "vintffm",
+ "checkvintf",
+
+ // depends on audio_policy_configuration_aidl_default, xsd_config module.
+ "libaudioserviceexampleimpl",
+ "android.hardware.audio.service-aidl.example",
+
+ // depends on //system/tools/aidl/build:aidl_metadata_json, which is an aidl_interfaces_metadata custom Soong type.
+ "aidl_metadata_in_cpp",
+ "libaidlmetadata",
+ "libaidlmetadata_test",
+
+ // depends on //system/tools/hidl/build:hidl_metadata_json, which is an hidl_interfaces_metadata custom Soong type.
+ "hidl_metadata_in_cpp",
+ "libhidlmetadata",
+ "hidl_metadata_test",
+
// cc_test related.
// b/274164834 "Could not open Configuration file test.cfg"
"svcenc", "svcdec",
@@ -1435,7 +1468,6 @@
// M5: tzdata launch
"com.android.tzdata",
"test1_com.android.tzdata",
- "test3_com.android.tzdata",
// M7: adbd launch
"com.android.adbd",
"test_com.android.adbd",
diff --git a/android/api_levels.go b/android/api_levels.go
index 0c0b2b4..ea2afdf 100644
--- a/android/api_levels.go
+++ b/android/api_levels.go
@@ -466,7 +466,7 @@
// https://cs.android.com/android/platform/superproject/+/master:build/bazel/rules/common/api.bzl;l=23;drc=231c7e8c8038fd478a79eb68aa5b9f5c64e0e061
return config.Once(apiLevelsMapKey, func() interface{} {
apiLevelsMap := getApiLevelsMapReleasedVersions()
- for i, codename := range config.PlatformVersionActiveCodenames() {
+ for i, codename := range config.PlatformVersionAllPreviewCodenames() {
apiLevelsMap[codename] = previewAPILevelBase + i
}
diff --git a/android/config.go b/android/config.go
index e0b661b..33deba5 100644
--- a/android/config.go
+++ b/android/config.go
@@ -100,6 +100,8 @@
BazelForceEnabledModules string
UseBazelProxy bool
+
+ BuildFromTextStub bool
}
// Build modes that soong_build can run as.
@@ -272,6 +274,10 @@
// If true, for any requests to Bazel, communicate with a Bazel proxy using
// unix sockets, instead of spawning Bazel as a subprocess.
UseBazelProxy bool
+
+ // If buildFromTextStub is true then the Java API stubs are
+ // built from the signature text files, not the source Java files.
+ buildFromTextStub bool
}
type deviceConfig struct {
@@ -466,6 +472,8 @@
MultitreeBuild: cmdArgs.MultitreeBuild,
UseBazelProxy: cmdArgs.UseBazelProxy,
+
+ buildFromTextStub: cmdArgs.BuildFromTextStub,
}
config.deviceConfig = &deviceConfig{
@@ -923,6 +931,11 @@
return c.productVariables.Platform_version_active_codenames
}
+// All unreleased codenames.
+func (c *config) PlatformVersionAllPreviewCodenames() []string {
+ return c.productVariables.Platform_version_all_preview_codenames
+}
+
func (c *config) ProductAAPTConfig() []string {
return c.productVariables.AAPTConfig
}
@@ -1179,6 +1192,10 @@
return append([]string(nil), c.productVariables.NamespacesToExport...)
}
+func (c *config) SourceRootDirs() []string {
+ return c.productVariables.SourceRootDirs
+}
+
func (c *config) IncludeTags() []string {
return c.productVariables.IncludeTags
}
@@ -1873,3 +1890,7 @@
s.String(),
version)
}
+
+func (c *config) BuildFromTextStub() bool {
+ return c.buildFromTextStub
+}
diff --git a/android/namespace.go b/android/namespace.go
index b43ffdf..f357ca7 100644
--- a/android/namespace.go
+++ b/android/namespace.go
@@ -225,6 +225,10 @@
return ns, nil
}
+func (r *NameResolver) NewSkippedModule(ctx blueprint.NamespaceContext, name string, skipInfo blueprint.SkippedModuleInfo) {
+ r.rootNamespace.moduleContainer.NewSkippedModule(ctx, name, skipInfo)
+}
+
func (r *NameResolver) AllModules() []blueprint.ModuleGroup {
childLists := [][]blueprint.ModuleGroup{}
totalCount := 0
@@ -300,7 +304,7 @@
for _, name := range namespace.importedNamespaceNames {
imp, ok := r.namespaceAt(name)
if !ok {
- return fmt.Errorf("namespace %v does not exist", name)
+ return fmt.Errorf("namespace %v does not exist; Some necessary modules may have been skipped by Soong. Check if PRODUCT_SOURCE_ROOT_DIRS is pruning necessary Android.bp files.", name)
}
namespace.visibleNamespaces = append(namespace.visibleNamespaces, imp)
}
diff --git a/android/register.go b/android/register.go
index 9a3d3aa..1a3db9d 100644
--- a/android/register.go
+++ b/android/register.go
@@ -162,6 +162,7 @@
ctx := &Context{blueprint.NewContext(), config}
ctx.SetSrcDir(absSrcDir)
ctx.AddIncludeTags(config.IncludeTags()...)
+ ctx.AddSourceRootDirs(config.SourceRootDirs()...)
return ctx
}
diff --git a/android/sdk_version.go b/android/sdk_version.go
index 1192f7d..5bb1e5a 100644
--- a/android/sdk_version.go
+++ b/android/sdk_version.go
@@ -94,8 +94,9 @@
// not check if either module exists.
// TODO: Return .txt (single-tree or multi-tree equivalents) based on config
func JavaLibraryNameFromText(c Config, name string) string {
- // This returns the default for now.
- // TODO: Implement this
+ if c.BuildFromTextStub() {
+ return name + ".from-text"
+ }
return name
}
diff --git a/android/variable.go b/android/variable.go
index 8c5c0bc..1da5974 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -199,6 +199,7 @@
Platform_sdk_extension_version *int `json:",omitempty"`
Platform_base_sdk_extension_version *int `json:",omitempty"`
Platform_version_active_codenames []string `json:",omitempty"`
+ Platform_version_all_preview_codenames []string `json:",omitempty"`
Platform_vndk_version *string `json:",omitempty"`
Platform_systemsdk_versions []string `json:",omitempty"`
Platform_security_patch *string `json:",omitempty"`
@@ -461,7 +462,8 @@
IgnorePrefer32OnDevice bool `json:",omitempty"`
- IncludeTags []string `json:",omitempty"`
+ IncludeTags []string `json:",omitempty"`
+ SourceRootDirs []string `json:",omitempty"`
}
func boolPtr(v bool) *bool {
@@ -480,13 +482,14 @@
*v = productVariables{
BuildNumberFile: stringPtr("build_number.txt"),
- Platform_version_name: stringPtr("S"),
- Platform_base_sdk_extension_version: intPtr(30),
- Platform_sdk_version: intPtr(30),
- Platform_sdk_codename: stringPtr("S"),
- Platform_sdk_final: boolPtr(false),
- Platform_version_active_codenames: []string{"S"},
- Platform_vndk_version: stringPtr("S"),
+ Platform_version_name: stringPtr("S"),
+ Platform_base_sdk_extension_version: intPtr(30),
+ Platform_sdk_version: intPtr(30),
+ Platform_sdk_codename: stringPtr("S"),
+ Platform_sdk_final: boolPtr(false),
+ Platform_version_active_codenames: []string{"S"},
+ Platform_version_all_preview_codenames: []string{"S"},
+ Platform_vndk_version: stringPtr("S"),
HostArch: stringPtr("x86_64"),
HostSecondaryArch: stringPtr("x86"),
diff --git a/cc/config/global.go b/cc/config/global.go
index 3eb4577..5b2191a 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -239,7 +239,6 @@
"-Wno-error=deprecated", // in external/googletest/googletest
// New warnings to be fixed after clang-r475365
"-Wno-error=single-bit-bitfield-constant-conversion", // http://b/243965903
- "-Wno-error=incompatible-function-pointer-types", // http://b/257101299
"-Wno-error=enum-constexpr-conversion", // http://b/243964282
}
@@ -249,6 +248,7 @@
// http://b/191699019
"-Wno-format-insufficient-args",
"-Wno-sizeof-array-div",
+ "-Wno-incompatible-function-pointer-types",
"-Wno-unused-but-set-variable",
"-Wno-unused-but-set-parameter",
"-Wno-unqualified-std-cast-call",
diff --git a/cc/config/riscv64_device.go b/cc/config/riscv64_device.go
index 70e9fe4..35c57f9 100644
--- a/cc/config/riscv64_device.go
+++ b/cc/config/riscv64_device.go
@@ -28,7 +28,6 @@
"-fno-emulated-tls",
// For -fsanitize=shadow-call-stack.
"-ffixed-x18",
- "-march=rv64gc_zbb",
}
riscv64ArchVariantCflags = map[string][]string{}
@@ -37,7 +36,6 @@
"-Wl,--hash-style=gnu",
// For -fsanitize=shadow-call-stack.
"-ffixed-x18",
- "-march=rv64gc_zbb",
}
riscv64Lldflags = append(riscv64Ldflags,
diff --git a/cc/config/toolchain.go b/cc/config/toolchain.go
index 052832d..6a10e14 100644
--- a/cc/config/toolchain.go
+++ b/cc/config/toolchain.go
@@ -212,6 +212,14 @@
return LibclangRuntimeLibrary(t, "asan")
}
+func AddressSanitizerStaticRuntimeLibrary(t Toolchain) string {
+ return LibclangRuntimeLibrary(t, "asan.static")
+}
+
+func AddressSanitizerCXXStaticRuntimeLibrary(t Toolchain) string {
+ return LibclangRuntimeLibrary(t, "asan_cxx.static")
+}
+
func HWAddressSanitizerRuntimeLibrary(t Toolchain) string {
return LibclangRuntimeLibrary(t, "hwasan")
}
diff --git a/cc/ndk_prebuilt.go b/cc/ndk_prebuilt.go
index 51ec6b8..1d15cf8 100644
--- a/cc/ndk_prebuilt.go
+++ b/cc/ndk_prebuilt.go
@@ -15,15 +15,12 @@
package cc
import (
- "fmt"
"strings"
"android/soong/android"
- "android/soong/cc/config"
)
func init() {
- android.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory)
android.RegisterModuleType("ndk_prebuilt_static_stl", NdkPrebuiltStaticStlFactory)
android.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory)
}
@@ -34,68 +31,6 @@
// either (with the exception of the shared STLs, which are installed to the app's directory rather
// than to the system image).
-func getNdkLibDir(ctx android.ModuleContext, toolchain config.Toolchain, version string) android.SourcePath {
- suffix := ""
- // Most 64-bit NDK prebuilts store libraries in "lib64", except for arm64 which is not a
- // multilib toolchain and stores the libraries in "lib".
- if toolchain.Is64Bit() && ctx.Arch().ArchType != android.Arm64 {
- suffix = "64"
- }
- return android.PathForSource(ctx, fmt.Sprintf("prebuilts/ndk/current/platforms/android-%s/arch-%s/usr/lib%s",
- version, toolchain.Name(), suffix))
-}
-
-func ndkPrebuiltModuleToPath(ctx android.ModuleContext, toolchain config.Toolchain,
- ext string, version string) android.Path {
-
- // NDK prebuilts are named like: ndk_NAME.EXT.SDK_VERSION.
- // We want to translate to just NAME.EXT
- name := strings.Split(strings.TrimPrefix(ctx.ModuleName(), "ndk_"), ".")[0]
- dir := getNdkLibDir(ctx, toolchain, version)
- return dir.Join(ctx, name+ext)
-}
-
-type ndkPrebuiltObjectLinker struct {
- objectLinker
-}
-
-func (*ndkPrebuiltObjectLinker) linkerDeps(ctx DepsContext, deps Deps) Deps {
- // NDK objects can't have any dependencies
- return deps
-}
-
-// ndk_prebuilt_object exports a precompiled ndk object file for linking
-// operations. Soong's module name format is ndk_<NAME>.o.<sdk_version> where
-// the object is located under
-// ./prebuilts/ndk/current/platforms/android-<sdk_version>/arch-$(HOST_ARCH)/usr/lib/<NAME>.o.
-func NdkPrebuiltObjectFactory() android.Module {
- module := newBaseModule(android.DeviceSupported, android.MultilibBoth)
- module.linker = &ndkPrebuiltObjectLinker{
- objectLinker: objectLinker{
- baseLinker: NewBaseLinker(nil),
- },
- }
- module.Properties.AlwaysSdk = true
- module.Properties.Sdk_version = StringPtr("current")
- module.Properties.HideFromMake = true
- return module.Init()
-}
-
-func (c *ndkPrebuiltObjectLinker) link(ctx ModuleContext, flags Flags,
- deps PathDeps, objs Objects) android.Path {
- // A null build step, but it sets up the output path.
- if !strings.HasPrefix(ctx.ModuleName(), "ndk_crt") {
- ctx.ModuleErrorf("NDK prebuilt objects must have an ndk_crt prefixed name")
- }
-
- return ndkPrebuiltModuleToPath(ctx, flags.Toolchain, objectExtension, ctx.sdkVersion())
-}
-
-func (*ndkPrebuiltObjectLinker) availableFor(what string) bool {
- // ndk prebuilt objects are available to everywhere
- return true
-}
-
type ndkPrebuiltStlLinker struct {
*libraryDecorator
}
diff --git a/cc/sanitize.go b/cc/sanitize.go
index cc81d0e..f19659c 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -1530,56 +1530,15 @@
diagSanitizers = sanitizers
}
- // Determine the runtime library required
- runtimeLibrary := ""
- alwaysStaticRuntime := false
- var extraStaticDeps []string
- toolchain := c.toolchain(mctx)
- if Bool(sanProps.Address) {
- runtimeLibrary = config.AddressSanitizerRuntimeLibrary(toolchain)
- } else if Bool(sanProps.Hwaddress) {
- if c.staticBinary() {
- runtimeLibrary = config.HWAddressSanitizerStaticLibrary(toolchain)
- extraStaticDeps = []string{"libdl"}
- } else {
- runtimeLibrary = config.HWAddressSanitizerRuntimeLibrary(toolchain)
- }
- } else if Bool(sanProps.Thread) {
- runtimeLibrary = config.ThreadSanitizerRuntimeLibrary(toolchain)
- } else if Bool(sanProps.Scudo) {
- if len(diagSanitizers) == 0 && !c.sanitize.Properties.UbsanRuntimeDep {
- runtimeLibrary = config.ScudoMinimalRuntimeLibrary(toolchain)
- } else {
- runtimeLibrary = config.ScudoRuntimeLibrary(toolchain)
- }
- } else if len(diagSanitizers) > 0 || c.sanitize.Properties.UbsanRuntimeDep ||
- Bool(sanProps.Fuzzer) ||
- Bool(sanProps.Undefined) ||
- Bool(sanProps.All_undefined) {
- runtimeLibrary = config.UndefinedBehaviorSanitizerRuntimeLibrary(toolchain)
- if c.staticBinary() || toolchain.Musl() {
- // Use a static runtime for static binaries.
- // Also use a static runtime for musl to match
- // what clang does for glibc. Otherwise dlopening
- // libraries that depend on libclang_rt.ubsan_standalone.so
- // fails with:
- // Error relocating ...: initial-exec TLS resolves to dynamic definition
- runtimeLibrary += ".static"
- alwaysStaticRuntime = true
- }
- }
-
- addStaticDeps := func(deps ...string) {
+ addStaticDeps := func(dep string, hideSymbols bool) {
// If we're using snapshots, redirect to snapshot whenever possible
snapshot := mctx.Provider(SnapshotInfoProvider).(SnapshotInfo)
- for idx, dep := range deps {
- if lib, ok := snapshot.StaticLibs[dep]; ok {
- deps[idx] = lib
- }
+ if lib, ok := snapshot.StaticLibs[dep]; ok {
+ dep = lib
}
// static executable gets static runtime libs
- depTag := libraryDependencyTag{Kind: staticLibraryDependency, unexportedSymbols: true}
+ depTag := libraryDependencyTag{Kind: staticLibraryDependency, unexportedSymbols: hideSymbols}
variations := append(mctx.Target().Variations(),
blueprint.Variation{Mutator: "link", Variation: "static"})
if c.Device() {
@@ -1589,17 +1548,60 @@
variations = append(variations,
blueprint.Variation{Mutator: "sdk", Variation: "sdk"})
}
- mctx.AddFarVariationDependencies(variations, depTag, deps...)
-
+ mctx.AddFarVariationDependencies(variations, depTag, dep)
}
+
+ // Determine the runtime library required
+ runtimeSharedLibrary := ""
+ toolchain := c.toolchain(mctx)
+ if Bool(sanProps.Address) {
+ if toolchain.Musl() || (c.staticBinary() && toolchain.Bionic()) {
+ // Use a static runtime for musl to match what clang does for glibc.
+ addStaticDeps(config.AddressSanitizerStaticRuntimeLibrary(toolchain), false)
+ addStaticDeps(config.AddressSanitizerCXXStaticRuntimeLibrary(toolchain), false)
+ } else {
+ runtimeSharedLibrary = config.AddressSanitizerRuntimeLibrary(toolchain)
+ }
+ } else if Bool(sanProps.Hwaddress) {
+ if c.staticBinary() {
+ addStaticDeps(config.HWAddressSanitizerStaticLibrary(toolchain), true)
+ addStaticDeps("libdl", false)
+ } else {
+ runtimeSharedLibrary = config.HWAddressSanitizerRuntimeLibrary(toolchain)
+ }
+ } else if Bool(sanProps.Thread) {
+ runtimeSharedLibrary = config.ThreadSanitizerRuntimeLibrary(toolchain)
+ } else if Bool(sanProps.Scudo) {
+ if len(diagSanitizers) == 0 && !c.sanitize.Properties.UbsanRuntimeDep {
+ runtimeSharedLibrary = config.ScudoMinimalRuntimeLibrary(toolchain)
+ } else {
+ runtimeSharedLibrary = config.ScudoRuntimeLibrary(toolchain)
+ }
+ } else if len(diagSanitizers) > 0 || c.sanitize.Properties.UbsanRuntimeDep ||
+ Bool(sanProps.Fuzzer) ||
+ Bool(sanProps.Undefined) ||
+ Bool(sanProps.All_undefined) {
+ if toolchain.Musl() || (c.staticBinary() && toolchain.Bionic()) {
+ // Use a static runtime for static binaries.
+ // Also use a static runtime for musl to match
+ // what clang does for glibc. Otherwise dlopening
+ // libraries that depend on libclang_rt.ubsan_standalone.so
+ // fails with:
+ // Error relocating ...: initial-exec TLS resolves to dynamic definition
+ addStaticDeps(config.UndefinedBehaviorSanitizerRuntimeLibrary(toolchain)+".static", true)
+ } else {
+ runtimeSharedLibrary = config.UndefinedBehaviorSanitizerRuntimeLibrary(toolchain)
+ }
+ }
+
if enableMinimalRuntime(c.sanitize) || c.sanitize.Properties.MinimalRuntimeDep {
- addStaticDeps(config.UndefinedBehaviorSanitizerMinimalRuntimeLibrary(toolchain))
+ addStaticDeps(config.UndefinedBehaviorSanitizerMinimalRuntimeLibrary(toolchain), true)
}
if c.sanitize.Properties.BuiltinsDep {
- addStaticDeps(config.BuiltinsRuntimeLibrary(toolchain))
+ addStaticDeps(config.BuiltinsRuntimeLibrary(toolchain), true)
}
- if runtimeLibrary != "" && (toolchain.Bionic() || toolchain.Musl() || c.sanitize.Properties.UbsanRuntimeDep) {
+ if runtimeSharedLibrary != "" && (toolchain.Bionic() || toolchain.Musl() || c.sanitize.Properties.UbsanRuntimeDep) {
// UBSan is supported on non-bionic linux host builds as well
// Adding dependency to the runtime library. We are using *FarVariation*
@@ -1609,14 +1611,17 @@
//
// Note that by adding dependency with {static|shared}DepTag, the lib is
// added to libFlags and LOCAL_SHARED_LIBRARIES by cc.Module
- if c.staticBinary() || alwaysStaticRuntime {
- addStaticDeps(runtimeLibrary)
- addStaticDeps(extraStaticDeps...)
+ if c.staticBinary() {
+ // Most sanitizers are either disabled for static binaries or have already
+ // handled the static binary case above through a direct call to addStaticDeps.
+ // If not, treat the runtime shared library as a static library and hope for
+ // the best.
+ addStaticDeps(runtimeSharedLibrary, true)
} else if !c.static() && !c.Header() {
// If we're using snapshots, redirect to snapshot whenever possible
snapshot := mctx.Provider(SnapshotInfoProvider).(SnapshotInfo)
- if lib, ok := snapshot.SharedLibs[runtimeLibrary]; ok {
- runtimeLibrary = lib
+ if lib, ok := snapshot.SharedLibs[runtimeSharedLibrary]; ok {
+ runtimeSharedLibrary = lib
}
// Skip apex dependency check for sharedLibraryDependency
@@ -1640,7 +1645,7 @@
variations = append(variations,
blueprint.Variation{Mutator: "sdk", Variation: "sdk"})
}
- AddSharedLibDependenciesWithVersions(mctx, c, variations, depTag, runtimeLibrary, "", true)
+ AddSharedLibDependenciesWithVersions(mctx, c, variations, depTag, runtimeSharedLibrary, "", true)
}
// static lib does not have dependency to the runtime library. The
// dependency will be added to the executables or shared libs using
diff --git a/cc/sanitize_test.go b/cc/sanitize_test.go
index 71c5a22..718186d 100644
--- a/cc/sanitize_test.go
+++ b/cc/sanitize_test.go
@@ -127,6 +127,7 @@
const (
RUNTIME_LINKAGE_NONE = expectedRuntimeLinkage(0)
RUNTIME_LINKAGE_SHARED = iota
+ RUNTIME_LINKAGE_STATIC
)
func TestAsan(t *testing.T) {
@@ -245,6 +246,8 @@
libStaticAsanNoAsanVariant := result.ModuleForTests("libstatic_asan", staticVariant)
libAsanSharedRuntime := result.ModuleForTests("libclang_rt.asan", sharedVariant)
+ libAsanStaticRuntime := result.ModuleForTests("libclang_rt.asan.static", staticVariant)
+ libAsanStaticCxxRuntime := result.ModuleForTests("libclang_rt.asan_cxx.static", staticVariant)
expectSharedLinkDep(t, ctx, binWithAsan, libShared)
expectSharedLinkDep(t, ctx, binWithAsan, libAsan)
@@ -289,12 +292,38 @@
expectNoSharedLinkDep(t, ctx, libShared, libAsanSharedRuntime)
expectNoSharedLinkDep(t, ctx, libTransitive, libAsanSharedRuntime)
}
+
+ if runtimeLinkage == RUNTIME_LINKAGE_STATIC {
+ expectStaticLinkDep(t, ctx, binWithAsan, libAsanStaticRuntime)
+ expectNoStaticLinkDep(t, ctx, binNoAsan, libAsanStaticRuntime)
+ expectStaticLinkDep(t, ctx, libAsan, libAsanStaticRuntime)
+ expectNoStaticLinkDep(t, ctx, libShared, libAsanStaticRuntime)
+ expectNoStaticLinkDep(t, ctx, libTransitive, libAsanStaticRuntime)
+
+ expectStaticLinkDep(t, ctx, binWithAsan, libAsanStaticCxxRuntime)
+ expectNoStaticLinkDep(t, ctx, binNoAsan, libAsanStaticCxxRuntime)
+ expectStaticLinkDep(t, ctx, libAsan, libAsanStaticCxxRuntime)
+ expectNoStaticLinkDep(t, ctx, libShared, libAsanStaticCxxRuntime)
+ expectNoStaticLinkDep(t, ctx, libTransitive, libAsanStaticCxxRuntime)
+ } else {
+ expectNoStaticLinkDep(t, ctx, binWithAsan, libAsanStaticRuntime)
+ expectNoStaticLinkDep(t, ctx, binNoAsan, libAsanStaticRuntime)
+ expectNoStaticLinkDep(t, ctx, libAsan, libAsanStaticRuntime)
+ expectNoStaticLinkDep(t, ctx, libShared, libAsanStaticRuntime)
+ expectNoStaticLinkDep(t, ctx, libTransitive, libAsanStaticRuntime)
+
+ expectNoStaticLinkDep(t, ctx, binWithAsan, libAsanStaticCxxRuntime)
+ expectNoStaticLinkDep(t, ctx, binNoAsan, libAsanStaticCxxRuntime)
+ expectNoStaticLinkDep(t, ctx, libAsan, libAsanStaticCxxRuntime)
+ expectNoStaticLinkDep(t, ctx, libShared, libAsanStaticCxxRuntime)
+ expectNoStaticLinkDep(t, ctx, libTransitive, libAsanStaticCxxRuntime)
+ }
}
t.Run("host", func(t *testing.T) { check(t, buildOS, RUNTIME_LINKAGE_NONE, preparer) })
t.Run("device", func(t *testing.T) { check(t, "android_arm64_armv8-a", RUNTIME_LINKAGE_SHARED, preparer) })
t.Run("host musl", func(t *testing.T) {
- check(t, "linux_musl_x86_64", RUNTIME_LINKAGE_SHARED,
+ check(t, "linux_musl_x86_64", RUNTIME_LINKAGE_STATIC,
android.GroupFixturePreparers(preparer, PrepareForTestWithHostMusl))
})
}
diff --git a/cc/testing.go b/cc/testing.go
index d38a57c..f78ea0f 100644
--- a/cc/testing.go
+++ b/cc/testing.go
@@ -40,7 +40,6 @@
ctx.RegisterModuleType("cc_genrule", GenRuleFactory)
ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory)
ctx.RegisterModuleType("ndk_prebuilt_static_stl", NdkPrebuiltStaticStlFactory)
- ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory)
ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
ctx.RegisterModuleType("ndk_headers", ndkHeadersFactory)
}
diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go
index 2ace746..79a5ce4 100644
--- a/cmd/soong_build/main.go
+++ b/cmd/soong_build/main.go
@@ -84,6 +84,7 @@
flag.BoolVar(&cmdlineArgs.BazelModeStaging, "bazel-mode-staging", false, "use bazel for analysis of certain near-ready modules")
flag.BoolVar(&cmdlineArgs.BazelModeDev, "bazel-mode-dev", false, "use bazel for analysis of a large number of modules (less stable)")
flag.BoolVar(&cmdlineArgs.UseBazelProxy, "use-bazel-proxy", false, "communicate with bazel using unix socket proxy instead of spawning subprocesses")
+ flag.BoolVar(&cmdlineArgs.BuildFromTextStub, "build-from-text-stub", false, "build Java stubs from API text files instead of source files")
// Flags that probably shouldn't be flags of soong_build, but we haven't found
// the time to remove them yet
@@ -105,6 +106,7 @@
ctx.SetNameInterface(newNameResolver(configuration))
ctx.SetAllowMissingDependencies(configuration.AllowMissingDependencies())
ctx.AddIncludeTags(configuration.IncludeTags()...)
+ ctx.AddSourceRootDirs(configuration.SourceRootDirs()...)
return ctx
}
diff --git a/java/androidmk.go b/java/androidmk.go
index a4dac80..148d7c2 100644
--- a/java/androidmk.go
+++ b/java/androidmk.go
@@ -733,3 +733,22 @@
},
}
}
+
+func (al *ApiLibrary) AndroidMkEntries() []android.AndroidMkEntries {
+ var entriesList []android.AndroidMkEntries
+
+ entriesList = append(entriesList, android.AndroidMkEntries{
+ Class: "JAVA_LIBRARIES",
+ OutputFile: android.OptionalPathForPath(al.stubsJar),
+ Include: "$(BUILD_SYSTEM)/soong_java_prebuilt.mk",
+ ExtraEntries: []android.AndroidMkExtraEntriesFunc{
+ func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
+ entries.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", true)
+ entries.SetPath("LOCAL_SOONG_CLASSES_JAR", al.stubsJar)
+ entries.SetPath("LOCAL_SOONG_HEADER_JAR", al.stubsJar)
+ },
+ },
+ })
+
+ return entriesList
+}
diff --git a/java/java.go b/java/java.go
index ebd9f5e..499a6b6 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1697,6 +1697,12 @@
Flag("--color").
Flag("--quiet").
Flag("--format=v2").
+ Flag("--include-annotations").
+ // The flag makes nullability issues as warnings rather than errors by replacing
+ // @Nullable/@NonNull in the listed packages APIs with @RecentlyNullable/@RecentlyNonNull,
+ // and these packages are meant to have everything annotated
+ // @RecentlyNullable/@RecentlyNonNull.
+ FlagWithArg("--force-convert-to-warning-nullability-annotations ", "+*:-android.*:+android.icu.*:-dalvik.*").
FlagWithArg("--repeat-errors-max ", "10").
FlagWithArg("--hide ", "UnresolvedImport").
FlagWithArg("--hide ", "InvalidNullabilityOverride").
@@ -1705,6 +1711,14 @@
return cmd
}
+func (al *ApiLibrary) HeaderJars() android.Paths {
+ return android.Paths{al.stubsJar}
+}
+
+func (al *ApiLibrary) OutputDirAndDeps() (android.Path, android.Paths) {
+ return nil, nil
+}
+
func (al *ApiLibrary) stubsFlags(ctx android.ModuleContext, cmd *android.RuleBuilderCommand, stubsDir android.OptionalPath) {
if stubsDir.Valid() {
cmd.FlagWithArg("--stubs ", stubsDir.String())
@@ -1816,7 +1830,10 @@
ctx.Phony(ctx.ModuleName(), al.stubsJar)
ctx.SetProvider(JavaInfoProvider, JavaInfo{
- HeaderJars: android.PathsIfNonNil(al.stubsJar),
+ HeaderJars: android.PathsIfNonNil(al.stubsJar),
+ ImplementationAndResourcesJars: android.PathsIfNonNil(al.stubsJar),
+ ImplementationJars: android.PathsIfNonNil(al.stubsJar),
+ AidlIncludeDirs: android.Paths{},
})
}
diff --git a/rust/builder.go b/rust/builder.go
index 4b20e2b..b89e7ad 100644
--- a/rust/builder.go
+++ b/rust/builder.go
@@ -218,6 +218,7 @@
var inputs android.Paths
var implicits android.Paths
+ var orderOnly android.Paths
var output buildOutput
var rustcFlags, linkFlags []string
var implicitOutputs android.WritablePaths
@@ -255,7 +256,7 @@
// Disallow experimental features
modulePath := android.PathForModuleSrc(ctx).String()
if !(android.IsThirdPartyPath(modulePath) || strings.HasPrefix(modulePath, "prebuilts")) {
- rustcFlags = append(rustcFlags, "-Zallow-features=\"default_alloc_error_handler,custom_inner_attributes,mixed_integer_ops\"")
+ rustcFlags = append(rustcFlags, "-Zallow-features=\"custom_inner_attributes,mixed_integer_ops\"")
}
// Collect linker flags
@@ -285,6 +286,8 @@
implicits = append(implicits, deps.CrtBegin...)
implicits = append(implicits, deps.CrtEnd...)
+ orderOnly = append(orderOnly, deps.SharedLibs...)
+
if len(deps.SrcDeps) > 0 {
moduleGenDir := ctx.RustModule().compiler.CargoOutDir()
var outputs android.WritablePaths
@@ -331,6 +334,7 @@
ImplicitOutputs: nil,
Inputs: inputs,
Implicits: implicits,
+ OrderOnly: orderOnly,
Args: map[string]string{
"rustcFlags": strings.Join(rustcFlags, " "),
"libFlags": strings.Join(libFlags, " "),
@@ -349,6 +353,7 @@
ImplicitOutputs: implicitOutputs,
Inputs: inputs,
Implicits: implicits,
+ OrderOnly: orderOnly,
Args: map[string]string{
"rustcFlags": strings.Join(rustcFlags, " "),
"linkFlags": strings.Join(linkFlags, " "),
@@ -367,6 +372,7 @@
Output: kytheFile,
Inputs: inputs,
Implicits: implicits,
+ OrderOnly: orderOnly,
Args: map[string]string{
"rustcFlags": strings.Join(rustcFlags, " "),
"linkFlags": strings.Join(linkFlags, " "),
diff --git a/rust/rust.go b/rust/rust.go
index 018cdab..f85babc 100644
--- a/rust/rust.go
+++ b/rust/rust.go
@@ -1413,7 +1413,7 @@
depPaths.RLibs = append(depPaths.RLibs, rlibDepFiles...)
depPaths.DyLibs = append(depPaths.DyLibs, dylibDepFiles...)
- depPaths.SharedLibs = append(depPaths.SharedLibs, sharedLibDepFiles...)
+ depPaths.SharedLibs = append(depPaths.SharedLibs, sharedLibFiles...)
depPaths.SharedLibDeps = append(depPaths.SharedLibDeps, sharedLibDepFiles...)
depPaths.StaticLibs = append(depPaths.StaticLibs, staticLibDepFiles...)
depPaths.ProcMacros = append(depPaths.ProcMacros, procMacroDepFiles...)
diff --git a/rust/rust_test.go b/rust/rust_test.go
index 3bcd58c..e8e5800 100644
--- a/rust/rust_test.go
+++ b/rust/rust_test.go
@@ -209,6 +209,10 @@
// Test to make sure dependencies are being picked up correctly.
func TestDepsTracking(t *testing.T) {
ctx := testRust(t, `
+ cc_library {
+ host_supported: true,
+ name: "cc_stubs_dep",
+ }
rust_ffi_host_static {
name: "libstatic",
srcs: ["foo.rs"],
@@ -235,6 +239,7 @@
crate_name: "rlib",
static_libs: ["libstatic"],
whole_static_libs: ["libwholestatic"],
+ shared_libs: ["cc_stubs_dep"],
}
rust_proc_macro {
name: "libpm",
@@ -279,6 +284,17 @@
t.Errorf("-lstatic flag not being passed to rustc for static library %#v", rustc.Args["rustcFlags"])
}
+ if !strings.Contains(rustc.Args["linkFlags"], "cc_stubs_dep.so") {
+ t.Errorf("shared cc_library not being passed to rustc linkFlags %#v", rustc.Args["linkFlags"])
+ }
+
+ if !android.SuffixInList(rustc.OrderOnly.Strings(), "cc_stubs_dep.so") {
+ t.Errorf("shared cc dep not being passed as order-only to rustc %#v", rustc.OrderOnly.Strings())
+ }
+
+ if !android.SuffixInList(rustc.Implicits.Strings(), "cc_stubs_dep.so.toc") {
+ t.Errorf("shared cc dep TOC not being passed as implicit to rustc %#v", rustc.Implicits.Strings())
+ }
}
func TestSourceProviderDeps(t *testing.T) {
@@ -331,7 +347,7 @@
source_stem: "bindings",
host_supported: true,
wrapper_src: "src/any.h",
- }
+ }
`)
libfoo := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_rlib_dylib-std").Rule("rustc")
@@ -371,7 +387,6 @@
if !android.InList("libbindings.rlib-std", libprocmacroMod.Properties.AndroidMkRlibs) {
t.Errorf("bindgen dependency not detected as a rlib dependency (dependency missing from AndroidMkRlibs)")
}
-
}
func TestSourceProviderTargetMismatch(t *testing.T) {
diff --git a/ui/build/config.go b/ui/build/config.go
index 9664548..a755d14 100644
--- a/ui/build/config.go
+++ b/ui/build/config.go
@@ -88,6 +88,7 @@
searchApiDir bool // Scan the Android.bp files generated in out/api_surfaces
skipMetricsUpload bool
buildStartedTime int64 // For metrics-upload-only - manually specify a build-started time
+ buildFromTextStub bool
// From the product config
katiArgs []string
@@ -117,7 +118,8 @@
bazelForceEnabledModules string
- includeTags []string
+ includeTags []string
+ sourceRootDirs []string
// Data source to write ninja weight list
ninjaWeightListSource NinjaWeightListSource
@@ -517,6 +519,11 @@
}
}
+ if ret.BuildFromTextStub() {
+ // TODO(b/271443071): support hidden api check for from-text stub build
+ ret.environ.Set("UNSAFE_DISABLE_HIDDENAPI_FLAGS", "true")
+ }
+
bpd := ret.BazelMetricsDir()
if err := os.RemoveAll(bpd); err != nil {
ctx.Fatalf("Unable to remove bazel profile directory %q: %v", bpd, err)
@@ -858,6 +865,8 @@
} else {
ctx.Fatalf("unknown option for ninja_weight_source: %s", source)
}
+ } else if arg == "--build-from-text-stub" {
+ c.buildFromTextStub = true
} else if strings.HasPrefix(arg, "--build-command=") {
buildCmd := strings.TrimPrefix(arg, "--build-command=")
// remove quotations
@@ -1199,6 +1208,10 @@
return c.skipConfig
}
+func (c *configImpl) BuildFromTextStub() bool {
+ return c.buildFromTextStub
+}
+
func (c *configImpl) TargetProduct() string {
if v, ok := c.environ.Get("TARGET_PRODUCT"); ok {
return v
@@ -1229,6 +1242,14 @@
return c.parallel
}
+func (c *configImpl) GetSourceRootDirs() []string {
+ return c.sourceRootDirs
+}
+
+func (c *configImpl) SetSourceRootDirs(i []string) {
+ c.sourceRootDirs = i
+}
+
func (c *configImpl) GetIncludeTags() []string {
return c.includeTags
}
diff --git a/ui/build/dumpvars.go b/ui/build/dumpvars.go
index a9c298f..efe7478 100644
--- a/ui/build/dumpvars.go
+++ b/ui/build/dumpvars.go
@@ -148,6 +148,7 @@
"PLATFORM_VERSION_CODENAME",
"PLATFORM_VERSION",
"PRODUCT_INCLUDE_TAGS",
+ "PRODUCT_SOURCE_ROOT_DIRS",
"TARGET_PRODUCT",
"TARGET_BUILD_VARIANT",
"TARGET_BUILD_APPS",
@@ -299,4 +300,5 @@
config.SetBuildBrokenUsesNetwork(makeVars["BUILD_BROKEN_USES_NETWORK"] == "true")
config.SetBuildBrokenNinjaUsesEnvVars(strings.Fields(makeVars["BUILD_BROKEN_NINJA_USES_ENV_VARS"]))
config.SetIncludeTags(strings.Fields(makeVars["PRODUCT_INCLUDE_TAGS"]))
+ config.SetSourceRootDirs(strings.Fields(makeVars["PRODUCT_SOURCE_ROOT_DIRS"]))
}
diff --git a/ui/build/soong.go b/ui/build/soong.go
index 871e637..9287731 100644
--- a/ui/build/soong.go
+++ b/ui/build/soong.go
@@ -171,6 +171,9 @@
if pb.config.multitreeBuild {
commonArgs = append(commonArgs, "--multitree-build")
}
+ if pb.config.buildFromTextStub {
+ commonArgs = append(commonArgs, "--build-from-text-stub")
+ }
commonArgs = append(commonArgs, "-l", filepath.Join(pb.config.FileListDir(), "Android.bp.list"))
invocationEnv := make(map[string]string)
@@ -282,6 +285,9 @@
if config.MultitreeBuild() {
mainSoongBuildExtraArgs = append(mainSoongBuildExtraArgs, "--multitree-build")
}
+ if config.buildFromTextStub {
+ mainSoongBuildExtraArgs = append(mainSoongBuildExtraArgs, "--build-from-text-stub")
+ }
queryviewDir := filepath.Join(config.SoongOutDir(), "queryview")
// The BUILD files will be generated in out/soong/.api_bp2build (no symlinks to src files)
@@ -410,6 +416,7 @@
blueprintCtx := blueprint.NewContext()
blueprintCtx.AddIncludeTags(config.GetIncludeTags()...)
+ blueprintCtx.AddSourceRootDirs(config.GetSourceRootDirs()...)
blueprintCtx.SetIgnoreUnknownModuleTypes(true)
blueprintConfig := BlueprintConfig{
soongOutDir: config.SoongOutDir(),