Add support for building on Darwin hosts

Add toolchain and build rules for building on Darwin.

Change-Id: I78e21f4051b2941182121b28c9ddfa24396ada41
diff --git a/cc/cc_test.go b/cc/cc_test.go
index 3bf0c65..ec7da90 100644
--- a/cc/cc_test.go
+++ b/cc/cc_test.go
@@ -54,3 +54,101 @@
 		}
 	}
 }
+
+var (
+	str11 = "01234567891"
+	str10 = str11[:10]
+	str9  = str11[:9]
+	str5  = str11[:5]
+	str4  = str11[:4]
+)
+
+var splitListForSizeTestCases = []struct {
+	in   []string
+	out  [][]string
+	size int
+}{
+	{
+		in:   []string{str10},
+		out:  [][]string{{str10}},
+		size: 10,
+	},
+	{
+		in:   []string{str9},
+		out:  [][]string{{str9}},
+		size: 10,
+	},
+	{
+		in:   []string{str5},
+		out:  [][]string{{str5}},
+		size: 10,
+	},
+	{
+		in:   []string{str11},
+		out:  nil,
+		size: 10,
+	},
+	{
+		in:   []string{str10, str10},
+		out:  [][]string{{str10}, {str10}},
+		size: 10,
+	},
+	{
+		in:   []string{str9, str10},
+		out:  [][]string{{str9}, {str10}},
+		size: 10,
+	},
+	{
+		in:   []string{str10, str9},
+		out:  [][]string{{str10}, {str9}},
+		size: 10,
+	},
+	{
+		in:   []string{str5, str4},
+		out:  [][]string{{str5, str4}},
+		size: 10,
+	},
+	{
+		in:   []string{str5, str4, str5},
+		out:  [][]string{{str5, str4}, {str5}},
+		size: 10,
+	},
+	{
+		in:   []string{str5, str4, str5, str4},
+		out:  [][]string{{str5, str4}, {str5, str4}},
+		size: 10,
+	},
+	{
+		in:   []string{str5, str4, str5, str5},
+		out:  [][]string{{str5, str4}, {str5}, {str5}},
+		size: 10,
+	},
+	{
+		in:   []string{str5, str5, str5, str4},
+		out:  [][]string{{str5}, {str5}, {str5, str4}},
+		size: 10,
+	},
+	{
+		in:   []string{str9, str11},
+		out:  nil,
+		size: 10,
+	},
+	{
+		in:   []string{str11, str9},
+		out:  nil,
+		size: 10,
+	},
+}
+
+func TestSplitListForSize(t *testing.T) {
+	for _, testCase := range splitListForSizeTestCases {
+		out, _ := splitListForSize(testCase.in, testCase.size)
+		if !reflect.DeepEqual(out, testCase.out) {
+			t.Errorf("incorrect output:")
+			t.Errorf("     input: %#v", testCase.in)
+			t.Errorf("      size: %d", testCase.size)
+			t.Errorf("  expected: %#v", testCase.out)
+			t.Errorf("       got: %#v", out)
+		}
+	}
+}