Support relative_install_path for cc modules

Support specifying an install path relative to the default install
path for cc libraries and binaries.

Change-Id: I47a97de9beaedde27d99c498c3f26c9d36358d94
diff --git a/androidmk/cmd/androidmk/android.go b/androidmk/cmd/androidmk/android.go
index 934ea0c..8038473 100644
--- a/androidmk/cmd/androidmk/android.go
+++ b/androidmk/cmd/androidmk/android.go
@@ -11,19 +11,20 @@
 )
 
 var stringProperties = map[string]string{
-	"LOCAL_MODULE":          "name",
-	"LOCAL_MODULE_STEM":     "stem",
-	"LOCAL_MODULE_CLASS":    "class",
-	"LOCAL_CXX_STL":         "stl",
-	"LOCAL_STRIP_MODULE":    "strip",
-	"LOCAL_MULTILIB":        "compile_multilib",
-	"LOCAL_ARM_MODE_HACK":   "instruction_set",
-	"LOCAL_SDK_VERSION":     "sdk_version",
-	"LOCAL_NDK_STL_VARIANT": "stl",
-	"LOCAL_JAR_MANIFEST":    "manifest",
-	"LOCAL_JARJAR_RULES":    "jarjar_rules",
-	"LOCAL_CERTIFICATE":     "certificate",
-	"LOCAL_PACKAGE_NAME":    "name",
+	"LOCAL_MODULE":               "name",
+	"LOCAL_MODULE_STEM":          "stem",
+	"LOCAL_MODULE_CLASS":         "class",
+	"LOCAL_CXX_STL":              "stl",
+	"LOCAL_STRIP_MODULE":         "strip",
+	"LOCAL_MULTILIB":             "compile_multilib",
+	"LOCAL_ARM_MODE_HACK":        "instruction_set",
+	"LOCAL_SDK_VERSION":          "sdk_version",
+	"LOCAL_NDK_STL_VARIANT":      "stl",
+	"LOCAL_JAR_MANIFEST":         "manifest",
+	"LOCAL_JARJAR_RULES":         "jarjar_rules",
+	"LOCAL_CERTIFICATE":          "certificate",
+	"LOCAL_PACKAGE_NAME":         "name",
+	"LOCAL_MODULE_RELATIVE_PATH": "relative_install_path",
 }
 
 var listProperties = map[string]string{
diff --git a/cc/cc.go b/cc/cc.go
index f634697..18e499d 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -211,6 +211,9 @@
 
 	// Minimum sdk version supported when compiling against the ndk
 	Sdk_version string
+
+	// relative_install_path: install to a subdirectory of the default install path for the module
+	Relative_install_path string
 }
 
 type unusedProperties struct {
@@ -1079,7 +1082,7 @@
 		installDir = "lib64"
 	}
 
-	ctx.InstallFile(installDir, c.out)
+	ctx.InstallFile(filepath.Join(installDir, c.properties.Relative_install_path), c.out)
 }
 
 func (c *CCLibrary) installModule(ctx common.AndroidModuleContext, flags CCFlags) {
@@ -1280,7 +1283,7 @@
 }
 
 func (c *CCBinary) installModule(ctx common.AndroidModuleContext, flags CCFlags) {
-	ctx.InstallFile("bin", c.out)
+	ctx.InstallFile(filepath.Join("bin", c.properties.Relative_install_path), c.out)
 }
 
 type ccTest struct {