diff --git a/cc/androidmk.go b/cc/androidmk.go
new file mode 100644
index 0000000..7554ef4
--- /dev/null
+++ b/cc/androidmk.go
@@ -0,0 +1,83 @@
+// Copyright 2015 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package cc
+
+import (
+	"io"
+	"path/filepath"
+	"strings"
+
+	"android/soong/common"
+)
+
+func (c *CCLibrary) AndroidMk() (ret common.AndroidMkData) {
+	if c.static() {
+		ret.Class = "STATIC_LIBRARIES"
+	} else {
+		ret.Class = "SHARED_LIBRARIES"
+	}
+	ret.OutputFile = c.outputFile()
+	ret.Extra = func(name, prefix, outputFile string, arch common.Arch) (ret []string) {
+		exportedIncludes := c.exportedFlags()
+		for i := range exportedIncludes {
+			exportedIncludes[i] = strings.TrimPrefix(exportedIncludes[i], "-I")
+		}
+		if len(exportedIncludes) > 0 {
+			ret = append(ret, "LOCAL_EXPORT_C_INCLUDE_DIRS := "+strings.Join(exportedIncludes, " "))
+		}
+
+		ret = append(ret, "LOCAL_MODULE_SUFFIX := "+filepath.Ext(outputFile))
+		ret = append(ret, "LOCAL_SHARED_LIBRARIES_"+arch.ArchType.String()+" := "+strings.Join(c.savedDepNames.SharedLibs, " "))
+
+		if c.Properties.Relative_install_path != "" {
+			ret = append(ret, "LOCAL_MODULE_RELATIVE_PATH := "+c.Properties.Relative_install_path)
+		}
+
+		// These are already included in LOCAL_SHARED_LIBRARIES
+		ret = append(ret, "LOCAL_CXX_STL := none")
+		ret = append(ret, "LOCAL_SYSTEM_SHARED_LIBRARIES :=")
+
+		return
+	}
+	return
+}
+
+func (c *ccObject) AndroidMk() (ret common.AndroidMkData) {
+	ret.OutputFile = c.outputFile()
+	ret.Custom = func(w io.Writer, name, prefix string) {
+		out := c.outputFile()
+
+		io.WriteString(w, "$("+prefix+"TARGET_OUT_INTERMEDIATE_LIBRARIES)/"+name+objectExtension+": "+out+" | $(ACP)\n")
+		io.WriteString(w, "\t$(copy-file-to-target)\n")
+	}
+	return
+}
+
+func (c *CCBinary) AndroidMk() (ret common.AndroidMkData) {
+	ret.Class = "EXECUTABLES"
+	ret.Extra = func(name, prefix, outputFile string, arch common.Arch) []string {
+		ret := []string{
+			"LOCAL_CXX_STL := none",
+			"LOCAL_SYSTEM_SHARED_LIBRARIES :=",
+			"LOCAL_SHARED_LIBRARIES_" + arch.ArchType.String() + " += " + strings.Join(c.savedDepNames.SharedLibs, " "),
+		}
+		if c.Properties.Relative_install_path != "" {
+			ret = append(ret, "LOCAL_MODULE_RELATIVE_PATH_"+arch.ArchType.String()+" := "+c.Properties.Relative_install_path)
+		}
+		return ret
+	}
+	ret.OutputFile = c.outputFile()
+	return
+}
diff --git a/cc/cc.go b/cc/cc.go
index 28ccc4c..e0c62d8 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1078,6 +1078,7 @@
 	objFiles      []string
 	exportFlags   []string
 	out           string
+	systemLibs    []string
 
 	LibraryProperties CCLibraryProperties
 }
@@ -1142,6 +1143,8 @@
 		depNames.SharedLibs = append(depNames.SharedLibs, c.LibraryProperties.Shared.Shared_libs...)
 	}
 
+	c.systemLibs = c.systemSharedLibs(ctx)
+
 	return depNames
 }
 
@@ -1764,8 +1767,8 @@
 		&CCUnusedProperties{},
 	}
 
-	_, propertyStructs = common.InitAndroidArchModule(module, common.HostOrDeviceSupported(0),
-		common.Multilib(""), propertyStructs...)
+	_, propertyStructs = common.InitAndroidArchModule(module, common.HostAndDeviceDefault,
+		common.MultilibDefault, propertyStructs...)
 
 	return common.InitDefaultsModule(module, module, propertyStructs...)
 }
