Support text ABI dump file format

This commit adds an option to read ABI reference dump in text file
format directly from `prebuilts/abi-dumps`.  If both the text file and
the gzip format exist, an error will be emitted.

Bug: 78650426
Test: create libexif.lsdump.gz and it works as usual
Test: create libexif.lsdump (decompressed) and it works
Test: touch both libexif.lsdump.gz and libexif.lsdump and it errors
Change-Id: I420a5953fb80855cb5c07e5a4d347fb6709f0340
diff --git a/cc/library.go b/cc/library.go
index dcd9576..5da36dc 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -631,6 +631,27 @@
 	return ret
 }
 
+func getRefAbiDumpFile(ctx ModuleContext, vndkVersion, fileName string) android.Path {
+	isLlndk := inList(ctx.baseModuleName(), llndkLibraries)
+
+	refAbiDumpTextFile := android.PathForVndkRefAbiDump(ctx, vndkVersion, fileName, isLlndk, false)
+	refAbiDumpGzipFile := android.PathForVndkRefAbiDump(ctx, vndkVersion, fileName, isLlndk, true)
+
+	if refAbiDumpTextFile.Valid() {
+		if refAbiDumpGzipFile.Valid() {
+			ctx.ModuleErrorf(
+				"Two reference ABI dump files are found: %q and %q. Please delete the stale one.",
+				refAbiDumpTextFile, refAbiDumpGzipFile)
+			return nil
+		}
+		return refAbiDumpTextFile.Path()
+	}
+	if refAbiDumpGzipFile.Valid() {
+		return UnzipRefDump(ctx, refAbiDumpGzipFile.Path(), fileName)
+	}
+	return nil
+}
+
 func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objects, fileName string, soFile android.Path) {
 	if len(objs.sAbiDumpFiles) > 0 && ctx.shouldCreateVndkSourceAbiDump() {
 		vndkVersion := ctx.DeviceConfig().PlatformVndkVersion()
@@ -649,12 +670,10 @@
 		exportedHeaderFlags := strings.Join(SourceAbiFlags, " ")
 		library.sAbiOutputFile = TransformDumpToLinkedDump(ctx, objs.sAbiDumpFiles, soFile, fileName, exportedHeaderFlags)
 
-		isLlndk := inList(ctx.baseModuleName(), llndkLibraries)
-		refSourceDumpFile := android.PathForVndkRefAbiDump(ctx, vndkVersion, fileName, isLlndk)
-		if refSourceDumpFile.Valid() {
-			unzippedRefDump := UnzipRefDump(ctx, refSourceDumpFile.Path(), fileName)
+		refAbiDumpFile := getRefAbiDumpFile(ctx, vndkVersion, fileName)
+		if refAbiDumpFile != nil {
 			library.sAbiDiff = SourceAbiDiff(ctx, library.sAbiOutputFile.Path(),
-				unzippedRefDump, fileName, exportedHeaderFlags, ctx.isVndkExt())
+				refAbiDumpFile, fileName, exportedHeaderFlags, ctx.isVndkExt())
 		}
 	}
 }