support sandboxed rust rules

This commit adds support for compiling rust rules inside the sbox
sandbox. To compile a rust module with sandboxing enabled, the entry
point to the crate must be specified via the `crate_root` property, and
all input sources and compile-time data must be specified via the `srcs`
and `compile_data` properties.

Bug: 286077158
Change-Id: I8c9dc5cf7578037a583b4be2e2f73cf20ffd4408
diff --git a/rust/testing.go b/rust/testing.go
index 3fe751e..9951937 100644
--- a/rust/testing.go
+++ b/rust/testing.go
@@ -52,6 +52,22 @@
 
 func GatherRequiredDepsForTest() string {
 	bp := `
+		prebuilt_build_tool {
+			name: "rustc",
+			src: "linux-x86/1.69.0/bin/rustc",
+			deps: [
+				"linux-x86/1.69.0/lib/libstd.so",
+				"linux-x86/1.69.0/lib64/libc++.so.1",
+			],
+		}
+		prebuilt_build_tool {
+			name: "clippy-driver",
+			src: "linux-x86/1.69.0/bin/clippy-driver",
+		}
+		prebuilt_build_tool {
+			name: "rustdoc",
+			src: "linux-x86/1.69.0/bin/rustdoc",
+		}
 		rust_prebuilt_library {
 				name: "libstd",
 				crate_name: "std",
@@ -63,6 +79,25 @@
 				},
 				host_supported: true,
 				sysroot: true,
+			rlibs: [
+			    "libaddr2line",
+			    "libadler",
+			    "liballoc",
+			    "libcfg_if",
+			    "libcompiler_builtins",
+			    "libcore",
+			    "libgimli",
+			    "libhashbrown",
+			    "liblibc",
+			    "libmemchr",
+			    "libminiz_oxide",
+			    "libobject",
+			    "libpanic_unwind",
+			    "librustc_demangle",
+			    "librustc_std_workspace_alloc",
+			    "librustc_std_workspace_core",
+			    "libstd_detect",
+			],
 		}
 		//////////////////////////////
 		// Device module requirements
@@ -99,6 +134,278 @@
 			nocrt: true,
 			system_shared_libs: [],
 		}
+		rust_library_rlib {
+			name: "libaddr2line",
+			crate_name: "addr2line",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libadler",
+			crate_name: "adler",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "liballoc",
+			crate_name: "alloc",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libcfg_if",
+			crate_name: "cfg_if",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libcompiler_builtins",
+			crate_name: "compiler_builtins",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libcore",
+			crate_name: "core",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libgimli",
+			crate_name: "gimli",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libhashbrown",
+			crate_name: "hashbrown",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "liblibc",
+			crate_name: "libc",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libmemchr",
+			crate_name: "memchr",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libminiz_oxide",
+			crate_name: "miniz_oxide",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libobject",
+			crate_name: "object",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libpanic_unwind",
+			crate_name: "panic_unwind",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "librustc_demangle",
+			crate_name: "rustc_demangle",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "librustc_std_workspace_alloc",
+			crate_name: "rustc_std_workspace_alloc",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "librustc_std_workspace_core",
+			crate_name: "rustc_std_workspace_core",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
+		rust_library_rlib {
+			name: "libstd_detect",
+			crate_name: "std_detect",
+			enabled:true,
+			srcs: ["foo.rs"],
+			no_stdlibs: true,
+			product_available: true,
+			host_supported: true,
+			vendor_available: true,
+			vendor_ramdisk_available: true,
+			recovery_available: true,
+			native_coverage: false,
+			sysroot: true,
+			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+			min_sdk_version: "29",
+		}
 		rust_library {
 			name: "libstd",
 			crate_name: "std",
@@ -113,6 +420,25 @@
 			sysroot: true,
 			apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
 			min_sdk_version: "29",
+			rlibs: [
+			    "libaddr2line",
+			    "libadler",
+			    "liballoc",
+			    "libcfg_if",
+			    "libcompiler_builtins",
+			    "libcore",
+			    "libgimli",
+			    "libhashbrown",
+			    "liblibc",
+			    "libmemchr",
+			    "libminiz_oxide",
+			    "libobject",
+			    "libpanic_unwind",
+			    "librustc_demangle",
+			    "librustc_std_workspace_alloc",
+			    "librustc_std_workspace_core",
+			    "libstd_detect",
+			],
 		}
 		rust_library {
 			name: "libtest",