Add cc_benchmark module type

Change-Id: I83bed375fa77518baaab4260e714a9368761f0bc
diff --git a/androidbp/cmd/soong.go b/androidbp/cmd/soong.go
index 488390f..db27071 100644
--- a/androidbp/cmd/soong.go
+++ b/androidbp/cmd/soong.go
@@ -71,6 +71,8 @@
 	"cc_binary_host":           "BUILD_HOST_EXECUTABLE",
 	"cc_test":                  "BUILD_NATIVE_TEST",
 	"cc_test_host":             "BUILD_HOST_NATIVE_TEST",
+	"cc_benchmark":             "BUILD_NATIVE_BENCHMARK",
+	"cc_benchmark_host":        "BUILD_HOST_NATIVE_BENCHMARK",
 	"java_library":             "BUILD_JAVA_LIBRARY",
 	"java_library_static":      "BUILD_STATIC_JAVA_LIBRARY",
 	"java_library_host":        "BUILD_HOST_JAVA_LIBRARY",
diff --git a/androidmk/cmd/androidmk/android.go b/androidmk/cmd/androidmk/android.go
index 8038473..4d928b1 100644
--- a/androidmk/cmd/androidmk/android.go
+++ b/androidmk/cmd/androidmk/android.go
@@ -138,6 +138,8 @@
 	"BUILD_HOST_EXECUTABLE":     "cc_binary_host",
 	"BUILD_NATIVE_TEST":         "cc_test",
 	"BUILD_HOST_NATIVE_TEST":    "cc_test_host",
+	"BUILD_NATIVE_BENCHMARK":         "cc_benchmark",
+	"BUILD_HOST_NATIVE_BENCHMARK":    "cc_benchmark_host",
 
 	"BUILD_JAVA_LIBRARY":             "java_library",
 	"BUILD_STATIC_JAVA_LIBRARY":      "java_library_static",
diff --git a/cc/cc.go b/cc/cc.go
index 8032fe3..5d72097 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1481,6 +1481,36 @@
 	}
 }
 
+type CCBenchmark struct {
+	CCBinary
+}
+
+func (c *CCBenchmark) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps {
+	depNames = c.CCBinary.depNames(ctx, depNames)
+	depNames.StaticLibs = append(depNames.StaticLibs, "libbenchmark")
+	return depNames
+}
+
+func (c *CCBenchmark) installModule(ctx common.AndroidModuleContext, flags CCFlags) {
+	if ctx.Device() {
+		ctx.InstallFile("../data/nativetest"+ctx.Arch().ArchType.Multilib[3:]+"/"+ctx.ModuleName(), c.out)
+	} else {
+		c.CCBinary.installModule(ctx, flags)
+	}
+}
+
+func NewCCBenchmark(test *CCBenchmark, module CCModuleType,
+	hod common.HostOrDeviceSupported, props ...interface{}) (blueprint.Module, []interface{}) {
+
+	return NewCCBinary(&test.CCBinary, module, hod, props...)
+}
+
+func CCBenchmarkFactory() (blueprint.Module, []interface{}) {
+	module := &CCBenchmark{}
+
+	return NewCCBenchmark(module, module, common.HostAndDeviceSupported)
+}
+
 //
 // Static library
 //
@@ -1546,6 +1576,15 @@
 }
 
 //
+// Host Benchmarks
+//
+
+func CCBenchmarkHostFactory() (blueprint.Module, []interface{}) {
+	module := &CCBenchmark{}
+	return NewCCBinary(&module.CCBinary, module, common.HostSupported)
+}
+
+//
 // Device libraries shipped with gcc
 //
 
diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go
index 8f5fae7..f8c32cb 100644
--- a/cmd/soong_build/main.go
+++ b/cmd/soong_build/main.go
@@ -45,6 +45,7 @@
 	ctx.RegisterModuleType("cc_object", cc.CCObjectFactory)
 	ctx.RegisterModuleType("cc_binary", cc.CCBinaryFactory)
 	ctx.RegisterModuleType("cc_test", cc.CCTestFactory)
+	ctx.RegisterModuleType("cc_benchmark", cc.CCBenchmarkFactory)
 
 	ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
 	ctx.RegisterModuleType("ndk_prebuilt_library", cc.NdkPrebuiltLibraryFactory)
@@ -56,6 +57,7 @@
 	ctx.RegisterModuleType("cc_library_host_shared", cc.CCLibraryHostSharedFactory)
 	ctx.RegisterModuleType("cc_binary_host", cc.CCBinaryHostFactory)
 	ctx.RegisterModuleType("cc_test_host", cc.CCTestHostFactory)
+	ctx.RegisterModuleType("cc_benchmark_host", cc.CCBenchmarkHostFactory)
 
 	ctx.RegisterModuleType("gensrcs", genrule.GenSrcsFactory)
 	ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)