Build vendor/odm sepolicies with Android.bp

The following files are built with Android.bp:
- vendor_sepolicy.cil
- odm_sepolicy.cil
- prebuilt_sepolicy

Also, prebuilt_policy.mk is removed as it's now redundant.

Bug: 33691272
Test: build and compare artifacts
Test: build with rvc-dev sepolicy
Change-Id: I7bf79c9c85c63cd942b36f7cf5ddda1860626c0b
diff --git a/build/soong/build_files.go b/build/soong/build_files.go
index 8f77e4f..865dbb4 100644
--- a/build/soong/build_files.go
+++ b/build/soong/build_files.go
@@ -95,8 +95,33 @@
 	b.srcs[".reqd_mask"] = b.findSrcsInDirs(ctx, filepath.Join(ctx.ModuleDir(), "reqd_mask"))
 	b.srcs[".plat_public"] = b.findSrcsInDirs(ctx, filepath.Join(ctx.ModuleDir(), "public"))
 	b.srcs[".plat_private"] = b.findSrcsInDirs(ctx, filepath.Join(ctx.ModuleDir(), "private"))
+	b.srcs[".plat_vendor"] = b.findSrcsInDirs(ctx, filepath.Join(ctx.ModuleDir(), "vendor"))
 	b.srcs[".system_ext_public"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().SystemExtPublicSepolicyDirs()...)
 	b.srcs[".system_ext_private"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().SystemExtPrivateSepolicyDirs()...)
 	b.srcs[".product_public"] = b.findSrcsInDirs(ctx, ctx.Config().ProductPublicSepolicyDirs()...)
 	b.srcs[".product_private"] = b.findSrcsInDirs(ctx, ctx.Config().ProductPrivateSepolicyDirs()...)
+	b.srcs[".vendor"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().VendorSepolicyDirs()...)
+	b.srcs[".odm"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().OdmSepolicyDirs()...)
+
+	if ctx.DeviceConfig().PlatformSepolicyVersion() == ctx.DeviceConfig().BoardSepolicyVers() {
+		// vendor uses the same source with plat policy
+		b.srcs[".reqd_mask_for_vendor"] = b.srcs[".reqd_mask"]
+		b.srcs[".plat_vendor_for_vendor"] = b.srcs[".plat_vendor"]
+		b.srcs[".plat_public_for_vendor"] = b.srcs[".plat_public"]
+		b.srcs[".plat_private_for_vendor"] = b.srcs[".plat_private"]
+		b.srcs[".system_ext_public_for_vendor"] = b.srcs[".system_ext_public"]
+		b.srcs[".system_ext_private_for_vendor"] = b.srcs[".system_ext_private"]
+		b.srcs[".product_public_for_vendor"] = b.srcs[".product_public"]
+		b.srcs[".product_private_for_vendor"] = b.srcs[".product_private"]
+	} else {
+		// use vendor-supplied plat prebuilts
+		b.srcs[".reqd_mask_for_vendor"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().BoardReqdMaskPolicy()...)
+		b.srcs[".plat_vendor_for_vendor"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().BoardPlatVendorPolicy()...)
+		b.srcs[".plat_public_for_vendor"] = b.findSrcsInDirs(ctx, filepath.Join(ctx.ModuleDir(), "prebuilts", "api", ctx.DeviceConfig().BoardSepolicyVers(), "public"))
+		b.srcs[".plat_private_for_vendor"] = b.findSrcsInDirs(ctx, filepath.Join(ctx.ModuleDir(), "prebuilts", "api", ctx.DeviceConfig().BoardSepolicyVers(), "private"))
+		b.srcs[".system_ext_public_for_vendor"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().BoardSystemExtPublicPrebuiltDirs()...)
+		b.srcs[".system_ext_private_for_vendor"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().BoardSystemExtPrivatePrebuiltDirs()...)
+		b.srcs[".product_public_for_vendor"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().BoardProductPublicPrebuiltDirs()...)
+		b.srcs[".product_private_for_vendor"] = b.findSrcsInDirs(ctx, ctx.DeviceConfig().BoardProductPrivatePrebuiltDirs()...)
+	}
 }
diff --git a/build/soong/cil_compat_map.go b/build/soong/cil_compat_map.go
index 47fd14c..59d1172 100644
--- a/build/soong/cil_compat_map.go
+++ b/build/soong/cil_compat_map.go
@@ -181,7 +181,15 @@
 }
 
 var _ CilCompatMapGenerator = (*cilCompatMap)(nil)
+var _ android.OutputFileProducer = (*cilCompatMap)(nil)
 
 func (c *cilCompatMap) GeneratedMapFile() android.Path {
 	return c.installSource
 }
+
+func (c *cilCompatMap) OutputFiles(tag string) (android.Paths, error) {
+	if tag == "" {
+		return android.Paths{c.installSource}, nil
+	}
+	return nil, fmt.Errorf("Unknown tag %q", tag)
+}
diff --git a/build/soong/versioned_policy.go b/build/soong/versioned_policy.go
index d4bdd74..dc07910 100644
--- a/build/soong/versioned_policy.go
+++ b/build/soong/versioned_policy.go
@@ -35,8 +35,8 @@
 	// Output file name. Defaults to {name} if target_policy is set, {version}.cil if mapping is set
 	Stem *string
 
-	// Target sepolicy version. Can be a specific version number (e.g. "30.0" for R) or "current"
-	// (PLATFORM_SEPOLICY_VERSION). Defaults to "current"
+	// Target sepolicy version. Can be a specific version number (e.g. "30.0" for R), "current"
+	// (PLATFORM_SEPOLICY_VERSION), or "vendor" (BOARD_SEPOLICY_VERS). Defaults to "current"
 	Version *string
 
 	// If true, generate mapping file from given base cil file. Cannot be set with target_policy.
@@ -90,6 +90,8 @@
 	version := proptools.StringDefault(m.properties.Version, "current")
 	if version == "current" {
 		version = ctx.DeviceConfig().PlatformSepolicyVersion()
+	} else if version == "vendor" {
+		version = ctx.DeviceConfig().BoardSepolicyVers()
 	}
 
 	var stem string