Add selinux contexts to autogenerated partitions

Filesystems had a selinux_contexts property that then compiled the
selinux contexts. But in make, it uses the result of the
file_contexts_bin_gen module, which already runs the compilation step.
Add a precompiled_file_contexts property to accept that compiled
file.

Also add 2 missing symlinks to the system partition.

Bug: 381120092
Test: diff'd make and soong build_image prop files
Change-Id: Ia0681fa4afe43675b730eaf0857dc6b15771534e
diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go
index b6b4cb7..35c1b94 100644
--- a/filesystem/filesystem.go
+++ b/filesystem/filesystem.go
@@ -130,9 +130,13 @@
 	// checks, and will be used in the future for API surface checks.
 	Partition_type *string
 
-	// file_contexts file to make image. Currently, only ext4 is supported.
+	// file_contexts file to make image. Currently, only ext4 is supported. These file contexts
+	// will be compiled with sefcontext_compile
 	File_contexts *string `android:"path"`
 
+	// The selinux file contexts, after having already run them through sefcontext_compile
+	Precompiled_file_contexts *string `android:"path"`
+
 	// Base directory relative to root, to which deps are installed, e.g. "system". Default is "."
 	// (root).
 	Base_dir *string
@@ -679,8 +683,15 @@
 		addStr("avb_salt", f.salt())
 	}
 
-	if proptools.String(f.properties.File_contexts) != "" {
+	if f.properties.File_contexts != nil && f.properties.Precompiled_file_contexts != nil {
+		ctx.ModuleErrorf("file_contexts and precompiled_file_contexts cannot both be set")
+	} else if f.properties.File_contexts != nil {
 		addPath("selinux_fc", f.buildFileContexts(ctx))
+	} else if f.properties.Precompiled_file_contexts != nil {
+		src := android.PathForModuleSrc(ctx, *f.properties.Precompiled_file_contexts)
+		if src != nil {
+			addPath("selinux_fc", src)
+		}
 	}
 	if timestamp := proptools.String(f.properties.Fake_timestamp); timestamp != "" {
 		addStr("timestamp", timestamp)