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

Commit acb7aeb9 authored by Jiyong Park's avatar Jiyong Park Committed by Gerrit Code Review
Browse files

Merge "sysprop_library correctly supports apex_available and min_sdk_version"

parents 062d9338 5e914b28
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -165,6 +165,12 @@ type syspropLibraryProperties struct {
		// Forwarded to cc_library.min_sdk_version
		Min_sdk_version *string
	}

	Java struct {
		// Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
		// Forwarded to java_library.min_sdk_version
		Min_sdk_version *string
	}
}

var (
@@ -403,6 +409,8 @@ type javaLibraryProperties struct {
	Libs              []string
	Stem              *string
	SyspropPublicStub string
	Apex_available    []string
	Min_sdk_version   *string
}

func syspropLibraryHook(ctx android.LoadHookContext, m *syspropLibrary) {
@@ -508,6 +516,8 @@ func syspropLibraryHook(ctx android.LoadHookContext, m *syspropLibrary) {
		Sdk_version:       proptools.StringPtr("core_current"),
		Libs:              []string{javaSyspropStub},
		SyspropPublicStub: publicStub,
		Apex_available:    m.ApexProperties.Apex_available,
		Min_sdk_version:   m.properties.Java.Min_sdk_version,
	})

	if publicStub != "" {
+105 −44
Original line number Diff line number Diff line
@@ -81,6 +81,51 @@ func run(t *testing.T, ctx *android.TestContext, config android.Config) {
}

func testConfig(env map[string]string, bp string, fs map[string][]byte) android.Config {
	bp += `
		cc_library {
			name: "libbase",
			host_supported: true,
		}

		cc_library_headers {
			name: "libbase_headers",
			vendor_available: true,
			recovery_available: true,
		}

		cc_library {
			name: "liblog",
			no_libcrt: true,
			nocrt: true,
			system_shared_libs: [],
			recovery_available: true,
			host_supported: true,
			llndk_stubs: "liblog.llndk",
		}

		llndk_library {
			name: "liblog.llndk",
			symbol_file: "",
		}

		java_library {
			name: "sysprop-library-stub-platform",
			sdk_version: "core_current",
		}

		java_library {
			name: "sysprop-library-stub-vendor",
			soc_specific: true,
			sdk_version: "core_current",
		}

		java_library {
			name: "sysprop-library-stub-product",
			product_specific: true,
			sdk_version: "core_current",
		}
	`

	bp += cc.GatherRequiredDepsForTest(android.Android)

	mockFS := map[string][]byte{
@@ -250,53 +295,10 @@ func TestSyspropLibrary(t *testing.T) {
			static_libs: ["sysprop-platform", "sysprop-vendor"],
		}

		cc_library {
			name: "libbase",
			host_supported: true,
		}

		cc_library_headers {
			name: "libbase_headers",
			vendor_available: true,
			recovery_available: true,
		}

		cc_library {
			name: "liblog",
			no_libcrt: true,
			nocrt: true,
			system_shared_libs: [],
			recovery_available: true,
			host_supported: true,
			llndk_stubs: "liblog.llndk",
		}

		cc_binary_host {
			name: "hostbin",
			static_libs: ["sysprop-platform"],
		}

		llndk_library {
			name: "liblog.llndk",
			symbol_file: "",
		}

		java_library {
			name: "sysprop-library-stub-platform",
			sdk_version: "core_current",
		}

		java_library {
			name: "sysprop-library-stub-vendor",
			soc_specific: true,
			sdk_version: "core_current",
		}

		java_library {
			name: "sysprop-library-stub-product",
			product_specific: true,
			sdk_version: "core_current",
		}
	`)

	// Check for generated cc_library
@@ -391,3 +393,62 @@ func TestSyspropLibrary(t *testing.T) {
		t.Errorf("system api client should use public stub %q, got %q", w, g)
	}
}

func TestApexAvailabilityIsForwarded(t *testing.T) {
	ctx := test(t, `
		sysprop_library {
			name: "sysprop-platform",
			apex_available: ["//apex_available:platform"],
			srcs: ["android/sysprop/PlatformProperties.sysprop"],
			api_packages: ["android.sysprop"],
			property_owner: "Platform",
		}
	`)

	expected := []string{"//apex_available:platform"}

	ccModule := ctx.ModuleForTests("libsysprop-platform", "android_arm64_armv8-a_shared").Module().(*cc.Module)
	propFromCc := ccModule.ApexProperties.Apex_available
	if !reflect.DeepEqual(propFromCc, expected) {
		t.Errorf("apex_available not forwarded to cc module. expected %#v, got %#v",
			expected, propFromCc)
	}

	javaModule := ctx.ModuleForTests("sysprop-platform", "android_common").Module().(*java.Library)
	propFromJava := javaModule.ApexProperties.Apex_available
	if !reflect.DeepEqual(propFromJava, expected) {
		t.Errorf("apex_available not forwarded to java module. expected %#v, got %#v",
			expected, propFromJava)
	}
}

func TestMinSdkVersionIsForwarded(t *testing.T) {
	ctx := test(t, `
		sysprop_library {
			name: "sysprop-platform",
			srcs: ["android/sysprop/PlatformProperties.sysprop"],
			api_packages: ["android.sysprop"],
			property_owner: "Platform",
			cpp: {
				min_sdk_version: "29",
			},
			java: {
				min_sdk_version: "30",
			},
		}
	`)

	ccModule := ctx.ModuleForTests("libsysprop-platform", "android_arm64_armv8-a_shared").Module().(*cc.Module)
	propFromCc := proptools.String(ccModule.Properties.Min_sdk_version)
	if propFromCc != "29" {
		t.Errorf("min_sdk_version not forwarded to cc module. expected %#v, got %#v",
			"29", propFromCc)
	}

	javaModule := ctx.ModuleForTests("sysprop-platform", "android_common").Module().(*java.Library)
	propFromJava := javaModule.MinSdkVersion()
	if propFromJava != "30" {
		t.Errorf("min_sdk_version not forwarded to java module. expected %#v, got %#v",
			"30", propFromJava)
	}
}