Add support for sanitizer property

Add a new feature to cc modules that adds the cflags and libraries
necessary to implement AddressSanitizer, ThreadSanitizer, and
UndefinedBehaviorSanitizer.

Change-Id: Ibe5ffadc7ece56080a2521f2c7c00da9ef712584
diff --git a/cc/util.go b/cc/util.go
index 1d27f73..70433b1 100644
--- a/cc/util.go
+++ b/cc/util.go
@@ -40,14 +40,18 @@
 	return common.JoinWithPrefix(names, "-l")
 }
 
-func inList(s string, list []string) bool {
-	for _, l := range list {
+func indexList(s string, list []string) int {
+	for i, l := range list {
 		if l == s {
-			return true
+			return i
 		}
 	}
 
-	return false
+	return -1
+}
+
+func inList(s string, list []string) bool {
+	return indexList(s, list) != -1
 }
 
 func filterList(list []string, filter []string) (remainder []string, filtered []string) {
@@ -62,6 +66,15 @@
 	return
 }
 
+func removeFromList(s string, list []string) (bool, []string) {
+	i := indexList(s, list)
+	if i != -1 {
+		return true, append(list[:i], list[i+1:]...)
+	} else {
+		return false, list
+	}
+}
+
 var libNameRegexp = regexp.MustCompile(`^lib(.*)$`)
 
 func moduleToLibName(module string) (string, error) {
@@ -81,6 +94,7 @@
 		cppFlags:    strings.Join(in.CppFlags, " "),
 		yaccFlags:   strings.Join(in.YaccFlags, " "),
 		ldFlags:     strings.Join(in.LdFlags, " "),
+		libFlags:    strings.Join(in.libFlags, " "),
 		nocrt:       in.Nocrt,
 		toolchain:   in.Toolchain,
 		clang:       in.Clang,