Stop using GCC in toolchain_library

Instead, hardcode the ~dozen paths into build/soong/Android.bp, which
will unblock removing more GCC support.

Bug: 114286031
Test: m
Change-Id: I2508432e00b1469141f01e667f3c6a2fe30cd805
diff --git a/cc/builder.go b/cc/builder.go
index 58196f4..d1bc23f 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -127,17 +127,6 @@
 			Command: "rm -f $out && touch $out",
 		})
 
-	_ = pctx.SourcePathVariable("copyGccLibPath", "build/soong/scripts/copygcclib.sh")
-
-	copyGccLib = pctx.AndroidStaticRule("copyGccLib",
-		blueprint.RuleParams{
-			Depfile:     "${out}.d",
-			Deps:        blueprint.DepsGCC,
-			Command:     "$copyGccLibPath $out $ccCmd $cFlags -print-file-name=${libName}",
-			CommandDeps: []string{"$copyGccLibPath", "$ccCmd"},
-		},
-		"ccCmd", "cFlags", "libName")
-
 	_ = pctx.SourcePathVariable("tocPath", "build/soong/scripts/toc.sh")
 
 	toc = pctx.AndroidStaticRule("toc",
@@ -880,21 +869,6 @@
 	return android.OptionalPath{}
 }
 
-func CopyGccLib(ctx android.ModuleContext, libName string,
-	flags builderFlags, outputFile android.WritablePath) {
-
-	ctx.Build(pctx, android.BuildParams{
-		Rule:        copyGccLib,
-		Description: "copy gcc library " + libName,
-		Output:      outputFile,
-		Args: map[string]string{
-			"ccCmd":   gccCmd(flags.toolchain, "gcc"),
-			"cFlags":  flags.globalFlags,
-			"libName": libName,
-		},
-	})
-}
-
 func gccCmd(toolchain config.Toolchain, cmd string) string {
 	return filepath.Join(toolchain.GccRoot(), "bin", toolchain.GccTriple()+"-"+cmd)
 }
diff --git a/cc/cc_test.go b/cc/cc_test.go
index 3d5dfb1..01beb66 100644
--- a/cc/cc_test.go
+++ b/cc/cc_test.go
@@ -76,18 +76,21 @@
 			name: "libatomic",
 			vendor_available: true,
 			recovery_available: true,
+			src: "",
 		}
 
 		toolchain_library {
 			name: "libcompiler_rt-extras",
 			vendor_available: true,
 			recovery_available: true,
+			src: "",
 		}
 
 		toolchain_library {
 			name: "libgcc",
 			vendor_available: true,
 			recovery_available: true,
+			src: "",
 		}
 
 		cc_library {
diff --git a/cc/toolchain_library.go b/cc/toolchain_library.go
index 2b117b3..20b0f85 100644
--- a/cc/toolchain_library.go
+++ b/cc/toolchain_library.go
@@ -26,8 +26,15 @@
 	android.RegisterModuleType("toolchain_library", toolchainLibraryFactory)
 }
 
+type toolchainLibraryProperties struct {
+	// the prebuilt toolchain library, as a path from the top of the source tree
+	Src *string `android:"arch_variant"`
+}
+
 type toolchainLibraryDecorator struct {
 	*libraryDecorator
+
+	Properties toolchainLibraryProperties
 }
 
 func (*toolchainLibraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
@@ -35,6 +42,12 @@
 	return deps
 }
 
+func (library *toolchainLibraryDecorator) linkerProps() []interface{} {
+	var props []interface{}
+	props = append(props, library.libraryDecorator.linkerProps()...)
+	return append(props, &library.Properties)
+}
+
 func toolchainLibraryFactory() android.Module {
 	module, library := NewLibrary(android.HostAndDeviceSupported)
 	library.BuildOnlyStatic()
@@ -58,16 +71,10 @@
 func (library *toolchainLibraryDecorator) link(ctx ModuleContext,
 	flags Flags, deps PathDeps, objs Objects) android.Path {
 
-	libName := ctx.ModuleName() + staticLibraryExtension
-	outputFile := android.PathForModuleOut(ctx, libName)
-
-	if flags.Clang {
-		ctx.ModuleErrorf("toolchain_library must use GCC, not Clang")
+	if library.Properties.Src == nil {
+		ctx.PropertyErrorf("src", "No library source specified")
+		return android.PathForSource(ctx, "")
 	}
 
-	CopyGccLib(ctx, libName, flagsToBuilderFlags(flags), outputFile)
-
-	ctx.CheckbuildFile(outputFile)
-
-	return outputFile
+	return android.PathForSource(ctx, *library.Properties.Src)
 }