Static variant of a stubs lib is correctly tracked

cc.Module.staticVariant is used to track the corresponding static
variant of a shared variant. This change fixes a problem that the
staticVariant field is not correctly set when the lib is with stubs:
{...}. This was happening because the staticVariant was set by adding
dependency from shared variant to static variant to reuse object files.
However, for a lib with stubs, the dependency was not created because it
does not make sense to share object files for stubs lib where source
code is auto-generated.

Fixing the issue by adding dependency to the static variant with a
different dependency tag whose only purpose is to set staticVariant
field.

Bug: 122885634
Test: m (cc_test amended)
Change-Id: I7f97cbb4c4a28bf9a93839d3b91ee140835aa6af
diff --git a/cc/cc.go b/cc/cc.go
index c09a2f3..01577bc 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -348,6 +348,7 @@
 	linkerFlagsDepTag     = dependencyTag{name: "linker flags file"}
 	dynamicLinkerDepTag   = dependencyTag{name: "dynamic linker"}
 	reuseObjTag           = dependencyTag{name: "reuse objects"}
+	staticVariantTag      = dependencyTag{name: "static variant"}
 	ndkStubDepTag         = dependencyTag{name: "ndk stub", library: true}
 	ndkLateStubDepTag     = dependencyTag{name: "ndk late stub", library: true}
 	vndkExtDepTag         = dependencyTag{name: "vndk extends", library: true}
@@ -1536,6 +1537,13 @@
 			}
 		}
 
+		if depTag == staticVariantTag {
+			if _, ok := ccDep.compiler.(libraryInterface); ok {
+				c.staticVariant = ccDep
+				return
+			}
+		}
+
 		// Extract explicitlyVersioned field from the depTag and reset it inside the struct.
 		// Otherwise, sharedDepTag and lateSharedDepTag with explicitlyVersioned set to true
 		// won't be matched to sharedDepTag and lateSharedDepTag.