diff --git a/cc/fuzz.go b/cc/fuzz.go index 045384718..e81b40f54 100644 --- a/cc/fuzz.go +++ b/cc/fuzz.go @@ -167,7 +167,9 @@ func collectAllSharedDependencies(ctx android.SingletonContext, module android.M // that should be installed in the fuzz target output directories. This function // returns true, unless: // - The module is not a shared library, or -// - The module is a header, stub, or vendor-linked library. +// - The module is a header, stub, or vendor-linked library, or +// - The module is a prebuilt and its source is available, or +// - The module is a versioned member of an SDK snapshot. func isValidSharedDependency(dependency android.Module) bool { // TODO(b/144090547): We should be parsing these modules using // ModuleDependencyTag instead of the current brute-force checking. @@ -190,6 +192,20 @@ func isValidSharedDependency(dependency android.Module) bool { } } + // If the same library is present both as source and a prebuilt we must pick + // only one to avoid a conflict. Always prefer the source since the prebuilt + // probably won't be built with sanitizers enabled. + if prebuilt, ok := dependency.(android.PrebuiltInterface); ok && + prebuilt.Prebuilt() != nil && prebuilt.Prebuilt().SourceExists() { + return false + } + + // Discard versioned members of SDK snapshots, because they will conflict with + // unversioned ones. + if sdkMember, ok := dependency.(android.SdkAware); ok && !sdkMember.ContainingSdk().Unversioned() { + return false + } + return true }