Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73cf0e87 authored by Yu Liu's avatar Yu Liu Committed by Gerrit Code Review
Browse files

Merge "Support rust in aconfig mode validation." into main

parents c36d579c c888460e
Loading
Loading
Loading
Loading
+151 −0
Original line number Diff line number Diff line
@@ -193,6 +193,70 @@ func TestValidationAcrossContainersExportedPass(t *testing.T) {
					mode: "exported",
				}`,
		},
		{
			name: "Rust lib passes for exported containers cross",
			bp: apex_default_bp + `
			apex {
				name: "myapex",
				manifest: ":myapex.manifest",
				androidManifest: ":myapex.androidmanifest",
				key: "myapex.key",
				native_shared_libs: ["libmy_rust_library"],
				binaries: ["my_rust_binary"],
				updatable: false,
			}
			rust_library {
				name: "libflags_rust", // test mock
				crate_name: "flags_rust",
				srcs: ["lib.rs"],
				apex_available: ["myapex"],
			}
			rust_library {
				name: "liblazy_static", // test mock
				crate_name: "lazy_static",
				srcs: ["src/lib.rs"],
				apex_available: ["myapex"],
			}
			rust_ffi_shared {
				name: "libmy_rust_library",
				srcs: ["src/lib.rs"],
				rustlibs: ["libmy_rust_aconfig_library_foo"],
				crate_name: "my_rust_library",
				apex_available: ["myapex"],
			}
			rust_binary {
				name: "my_rust_binary",
				srcs: ["foo/bar/MyClass.rs"],
				rustlibs: ["libmy_rust_aconfig_library_bar"],
				apex_available: ["myapex"],
			}
			aconfig_declarations {
				name: "my_aconfig_declarations_foo",
				package: "com.example.package",
				container: "otherapex",
				srcs: ["foo.aconfig"],
			}
			aconfig_declarations {
				name: "my_aconfig_declarations_bar",
				package: "com.example.package",
				container: "otherapex",
				srcs: ["bar.aconfig"],
			}
			rust_aconfig_library {
				name: "libmy_rust_aconfig_library_foo",
				aconfig_declarations: "my_aconfig_declarations_foo",
				crate_name: "my_rust_aconfig_library_foo",
				apex_available: ["myapex"],
				mode: "exported",
			}
			rust_aconfig_library {
				name: "libmy_rust_aconfig_library_bar",
				aconfig_declarations: "my_aconfig_declarations_bar",
				crate_name: "my_rust_aconfig_library_bar",
				apex_available: ["myapex"],
				mode: "exported",
			}`,
		},
	}
	for _, test := range testCases {
		t.Run(test.name, func(t *testing.T) {
@@ -393,6 +457,93 @@ func TestValidationAcrossContainersNotExportedFail(t *testing.T) {
				}`,
			expectedError: `.*my_cc_binary_foo/myapex depends on my_cc_aconfig_library_foo/otherapex/production across containers`,
		},
		{
			name: "Rust lib fails for non-exported containers cross",
			bp: apex_default_bp + `
			apex {
				name: "myapex",
				manifest: ":myapex.manifest",
				androidManifest: ":myapex.androidmanifest",
				key: "myapex.key",
				native_shared_libs: ["libmy_rust_library"],
				updatable: false,
			}
			rust_library {
				name: "libflags_rust", // test mock
				crate_name: "flags_rust",
				srcs: ["lib.rs"],
				apex_available: ["myapex"],
			}
			rust_library {
				name: "liblazy_static", // test mock
				crate_name: "lazy_static",
				srcs: ["src/lib.rs"],
				apex_available: ["myapex"],
			}
			rust_ffi_shared {
				name: "libmy_rust_library",
				srcs: ["src/lib.rs"],
				rustlibs: ["libmy_rust_aconfig_library_foo"],
				crate_name: "my_rust_library",
				apex_available: ["myapex"],
			}
			aconfig_declarations {
				name: "my_aconfig_declarations_foo",
				package: "com.example.package",
				container: "otherapex",
				srcs: ["foo.aconfig"],
			}
			rust_aconfig_library {
				name: "libmy_rust_aconfig_library_foo",
				aconfig_declarations: "my_aconfig_declarations_foo",
				crate_name: "my_rust_aconfig_library_foo",
				apex_available: ["myapex"],
			}`,
			expectedError: `.*libmy_rust_aconfig_library_foo/myapex depends on libmy_rust_aconfig_library_foo/otherapex/production across containers`,
		},
		{
			name: "Rust binary fails for non-exported containers cross",
			bp: apex_default_bp + `
			apex {
				name: "myapex",
				manifest: ":myapex.manifest",
				androidManifest: ":myapex.androidmanifest",
				key: "myapex.key",
				binaries: ["my_rust_binary"],
				updatable: false,
			}
			rust_library {
				name: "libflags_rust", // test mock
				crate_name: "flags_rust",
				srcs: ["lib.rs"],
				apex_available: ["myapex"],
			}
			rust_library {
				name: "liblazy_static", // test mock
				crate_name: "lazy_static",
				srcs: ["src/lib.rs"],
				apex_available: ["myapex"],
			}
			rust_binary {
				name: "my_rust_binary",
				srcs: ["foo/bar/MyClass.rs"],
				rustlibs: ["libmy_rust_aconfig_library_bar"],
				apex_available: ["myapex"],
			}
			aconfig_declarations {
				name: "my_aconfig_declarations_bar",
				package: "com.example.package",
				container: "otherapex",
				srcs: ["bar.aconfig"],
			}
			rust_aconfig_library {
				name: "libmy_rust_aconfig_library_bar",
				aconfig_declarations: "my_aconfig_declarations_bar",
				crate_name: "my_rust_aconfig_library_bar",
				apex_available: ["myapex"],
			}`,
			expectedError: `.*libmy_rust_aconfig_library_bar/myapex depends on libmy_rust_aconfig_library_bar/otherapex/production across containers`,
		},
		{
			name: "Aconfig validation propagate along sourceOrOutputDependencyTag",
			bp: apex_default_bp + `
+6 −0
Original line number Diff line number Diff line
@@ -1063,6 +1063,12 @@ func (d dependencyTag) LicenseAnnotations() []android.LicenseAnnotation {
	return nil
}

func (d dependencyTag) PropagateAconfigValidation() bool {
	return d == rlibDepTag || d == sourceDepTag
}

var _ android.PropagateAconfigValidationDependencyTag = dependencyTag{}

var _ android.LicenseAnnotationsDependencyTag = dependencyTag{}

var (