Add support for host sdk

Adds HostSupported() method to ModuleBase for use by sdk. Adds
host_supported/device_supported to all prebuilt modules and the
sdk snapshot (where necessary).

Adds TestHostSnapshot to verify the behavior is correct.

Bug: 143678475
Test: m nothing
Change-Id: I8b4d097e46d5804f62cb8f651a83069299a3e639
diff --git a/sdk/update.go b/sdk/update.go
index 3bd6336..8159d3b 100644
--- a/sdk/update.go
+++ b/sdk/update.go
@@ -250,6 +250,7 @@
 
 	builder := &snapshotBuilder{
 		ctx:             ctx,
+		sdk:             s,
 		version:         "current",
 		snapshotDir:     snapshotDir.OutputPath,
 		filesToZip:      []android.Path{bp.path},
@@ -293,6 +294,7 @@
 	snapshotName := ctx.ModuleName() + string(android.SdkVersionSeparator) + builder.version
 	snapshotModule := bpFile.newModule("sdk_snapshot")
 	snapshotModule.AddProperty("name", snapshotName)
+	addHostDeviceSupportedProperties(&s.ModuleBase, snapshotModule)
 	if len(s.properties.Java_libs) > 0 {
 		snapshotModule.AddProperty("java_libs", builder.versionedSdkMemberNames(s.properties.Java_libs))
 	}
@@ -505,6 +507,7 @@
 
 type snapshotBuilder struct {
 	ctx         android.ModuleContext
+	sdk         *sdk
 	version     string
 	snapshotDir android.OutputPath
 	bpFile      *bpFile
@@ -551,12 +554,22 @@
 
 	m := s.bpFile.newModule(moduleType)
 	m.AddProperty("name", name)
+	addHostDeviceSupportedProperties(&s.sdk.ModuleBase, m)
 
 	s.prebuiltModules[name] = m
 	s.prebuiltOrder = append(s.prebuiltOrder, m)
 	return m
 }
 
+func addHostDeviceSupportedProperties(module *android.ModuleBase, bpModule *bpModule) {
+	if !module.DeviceSupported() {
+		bpModule.AddProperty("device_supported", false)
+	}
+	if module.HostSupported() {
+		bpModule.AddProperty("host_supported", true)
+	}
+}
+
 // Get a versioned name appropriate for the SDK snapshot version being taken.
 func (s *snapshotBuilder) versionedSdkMemberName(unversionedName string) string {
 	return versionedSdkMemberName(s.ctx, unversionedName, s.version)