Copy partition image files to PRODUCT_OUT

Implementation details:
- Copy the partition image files to PRODUCT_OUT via rsync

Test: m aosp_cf_x86_64_phone_generated_device
Bug: 376727180
Change-Id: I21c9ddc22def5a48a885176b53b886326d7c9243
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index 6dfbfd1..4027b9a 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -600,6 +600,11 @@
 	builder.Command().Textf("cp -prf %s/* %s", rebasedDir, installPath)
 }
 
+func copyImageFileToProductOut(ctx android.ModuleContext, builder *android.RuleBuilder, partition string, output android.Path) {
+	copyDir := android.PathForModuleInPartitionInstall(ctx, "").Join(ctx, fmt.Sprintf("%s.img", partition))
+	builder.Command().Textf("rsync -a %s %s", output, copyDir)
+}
+
 func (f *filesystem) rootDirString() string {
 	return f.partitionName()
 }
@@ -651,6 +656,10 @@
 		Output(output).
 		Text(rootDir.String()) // directory where to find fs_config_files|dirs
 
+	if !ctx.Config().KatiEnabled() {
+		copyImageFileToProductOut(ctx, builder, f.partitionName(), output)
+	}
+
 	// rootDir is not deleted. Might be useful for quick inspection.
 	builder.Build("build_filesystem_image", fmt.Sprintf("Creating filesystem %s", f.BaseModuleName()))