Add version_script property

Add version_script property to cc_library to pass a file to
the linker with --version-script.

Change-Id: Ieefb04e15c8dfa72c2eb63b4349f8860222662b2
diff --git a/cc/cc.go b/cc/cc.go
index 2cc4ffb..4b78479 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -947,6 +947,9 @@
 		Static_libs       []string `android:"arch_variant"`
 		Shared_libs       []string `android:"arch_variant"`
 	} `android:"arch_variant"`
+
+	// local file name to pass to the linker as --version_script
+	Version_script string `android:"arch_variant"`
 }
 
 type CCLibrary struct {
@@ -1128,8 +1131,16 @@
 
 	outputFile := filepath.Join(common.ModuleOutDir(ctx), ctx.ModuleName()+sharedLibraryExtension)
 
+	var linkerDeps []string
+
+	if c.LibraryProperties.Version_script != "" {
+		versionScript := filepath.Join(common.ModuleSrcDir(ctx), c.LibraryProperties.Version_script)
+		sharedFlags.LdFlags = append(sharedFlags.LdFlags, "-Wl,--version-script,"+versionScript)
+		linkerDeps = append(linkerDeps, versionScript)
+	}
+
 	TransformObjToDynamicBinary(ctx, objFiles, deps.SharedLibs, deps.StaticLibs,
-		deps.LateStaticLibs, deps.WholeStaticLibs, deps.CrtBegin, deps.CrtEnd, false,
+		deps.LateStaticLibs, deps.WholeStaticLibs, linkerDeps, deps.CrtBegin, deps.CrtEnd, false,
 		ccFlagsToBuilderFlags(flags), outputFile)
 
 	c.out = outputFile
@@ -1398,8 +1409,10 @@
 			ccFlagsToBuilderFlags(flags), afterPrefixSymbols)
 	}
 
+	var linkerDeps []string
+
 	TransformObjToDynamicBinary(ctx, objFiles, deps.SharedLibs, deps.StaticLibs,
-		deps.LateStaticLibs, deps.WholeStaticLibs, deps.CrtBegin, deps.CrtEnd, true,
+		deps.LateStaticLibs, deps.WholeStaticLibs, linkerDeps, deps.CrtBegin, deps.CrtEnd, true,
 		ccFlagsToBuilderFlags(flags), outputFile)
 }