Merge changes I0918f2fa,I3fc6ff91,I7adc97cb,I674a5fa1,I22c45cbf into main am: b898c112a2
am: 12e3b8adcc
am: 2c4e719839
am: eb17813c98
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2652086 Change-Id: I38043bc7d27899c0185a2b649e240047032780b9 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -311,4 +311,9 @@ func EmptyConfiguredJarList() ConfiguredJarList {
|
|||||||
return ConfiguredJarList{}
|
return ConfiguredJarList{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsConfiguredJarForPlatform returns true if the given apex name is a special name for the platform.
|
||||||
|
func IsConfiguredJarForPlatform(apex string) bool {
|
||||||
|
return apex == "platform" || apex == "system_ext"
|
||||||
|
}
|
||||||
|
|
||||||
var earlyBootJarsKey = NewOnceKey("earlyBootJars")
|
var earlyBootJarsKey = NewOnceKey("earlyBootJars")
|
||||||
|
@@ -5587,6 +5587,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
||||||
my-bootclasspath-fragment/index.csv
|
my-bootclasspath-fragment/index.csv
|
||||||
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
||||||
|
out/soong/.intermediates/packages/modules/com.android.art/art-bootclasspath-fragment/android_common_apex10000/modular-hiddenapi/index.csv
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -5664,6 +5665,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
||||||
my-bootclasspath-fragment/index.csv
|
my-bootclasspath-fragment/index.csv
|
||||||
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
||||||
|
out/soong/.intermediates/packages/modules/com.android.art/art-bootclasspath-fragment/android_common_apex10000/modular-hiddenapi/index.csv
|
||||||
`)
|
`)
|
||||||
|
|
||||||
myApex := ctx.ModuleForTests("myapex", "android_common_myapex").Module()
|
myApex := ctx.ModuleForTests("myapex", "android_common_myapex").Module()
|
||||||
@@ -5758,6 +5760,28 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("prebuilt library preferred with source", func(t *testing.T) {
|
t.Run("prebuilt library preferred with source", func(t *testing.T) {
|
||||||
bp := `
|
bp := `
|
||||||
|
apex {
|
||||||
|
name: "myapex",
|
||||||
|
key: "myapex.key",
|
||||||
|
updatable: false,
|
||||||
|
bootclasspath_fragments: ["my-bootclasspath-fragment"],
|
||||||
|
}
|
||||||
|
|
||||||
|
apex_key {
|
||||||
|
name: "myapex.key",
|
||||||
|
public_key: "testkey.avbpubkey",
|
||||||
|
private_key: "testkey.pem",
|
||||||
|
}
|
||||||
|
|
||||||
|
bootclasspath_fragment {
|
||||||
|
name: "my-bootclasspath-fragment",
|
||||||
|
contents: ["libfoo", "libbar"],
|
||||||
|
apex_available: ["myapex"],
|
||||||
|
hidden_api: {
|
||||||
|
split_packages: ["*"],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
prebuilt_apex {
|
prebuilt_apex {
|
||||||
name: "myapex",
|
name: "myapex",
|
||||||
arch: {
|
arch: {
|
||||||
@@ -5773,6 +5797,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
|
|
||||||
prebuilt_bootclasspath_fragment {
|
prebuilt_bootclasspath_fragment {
|
||||||
name: "my-bootclasspath-fragment",
|
name: "my-bootclasspath-fragment",
|
||||||
|
prefer: true,
|
||||||
contents: ["libfoo", "libbar"],
|
contents: ["libfoo", "libbar"],
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
hidden_api: {
|
hidden_api: {
|
||||||
@@ -5797,6 +5822,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
name: "libfoo",
|
name: "libfoo",
|
||||||
srcs: ["foo/bar/MyClass.java"],
|
srcs: ["foo/bar/MyClass.java"],
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
|
installable: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
java_sdk_library_import {
|
java_sdk_library_import {
|
||||||
@@ -5815,6 +5841,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
srcs: ["foo/bar/MyClass.java"],
|
srcs: ["foo/bar/MyClass.java"],
|
||||||
unsafe_ignore_missing_latest_api: true,
|
unsafe_ignore_missing_latest_api: true,
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
|
compile_dex: true,
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
@@ -5827,6 +5854,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
||||||
my-bootclasspath-fragment/index.csv
|
my-bootclasspath-fragment/index.csv
|
||||||
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
||||||
|
out/soong/.intermediates/packages/modules/com.android.art/art-bootclasspath-fragment/android_common_apex10000/modular-hiddenapi/index.csv
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -5835,8 +5863,8 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
apex {
|
apex {
|
||||||
name: "myapex",
|
name: "myapex",
|
||||||
key: "myapex.key",
|
key: "myapex.key",
|
||||||
java_libs: ["libfoo", "libbar"],
|
|
||||||
updatable: false,
|
updatable: false,
|
||||||
|
bootclasspath_fragments: ["my-bootclasspath-fragment"],
|
||||||
}
|
}
|
||||||
|
|
||||||
apex_key {
|
apex_key {
|
||||||
@@ -5845,6 +5873,15 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
private_key: "testkey.pem",
|
private_key: "testkey.pem",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bootclasspath_fragment {
|
||||||
|
name: "my-bootclasspath-fragment",
|
||||||
|
contents: ["libfoo", "libbar"],
|
||||||
|
apex_available: ["myapex"],
|
||||||
|
hidden_api: {
|
||||||
|
split_packages: ["*"],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
prebuilt_apex {
|
prebuilt_apex {
|
||||||
name: "myapex",
|
name: "myapex",
|
||||||
arch: {
|
arch: {
|
||||||
@@ -5883,6 +5920,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
srcs: ["foo/bar/MyClass.java"],
|
srcs: ["foo/bar/MyClass.java"],
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
permitted_packages: ["foo"],
|
permitted_packages: ["foo"],
|
||||||
|
installable: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
java_sdk_library_import {
|
java_sdk_library_import {
|
||||||
@@ -5900,6 +5938,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
unsafe_ignore_missing_latest_api: true,
|
unsafe_ignore_missing_latest_api: true,
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
permitted_packages: ["bar"],
|
permitted_packages: ["bar"],
|
||||||
|
compile_dex: true,
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
@@ -5910,8 +5949,9 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
// Verify the correct module jars contribute to the hiddenapi index file.
|
// Verify the correct module jars contribute to the hiddenapi index file.
|
||||||
checkHiddenAPIIndexFromClassesInputs(t, ctx, ``)
|
checkHiddenAPIIndexFromClassesInputs(t, ctx, ``)
|
||||||
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
||||||
my-bootclasspath-fragment/index.csv
|
|
||||||
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
||||||
|
out/soong/.intermediates/my-bootclasspath-fragment/android_common_myapex/modular-hiddenapi/index.csv
|
||||||
|
out/soong/.intermediates/packages/modules/com.android.art/art-bootclasspath-fragment/android_common_apex10000/modular-hiddenapi/index.csv
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -5921,7 +5961,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
name: "myapex",
|
name: "myapex",
|
||||||
enabled: false,
|
enabled: false,
|
||||||
key: "myapex.key",
|
key: "myapex.key",
|
||||||
java_libs: ["libfoo", "libbar"],
|
bootclasspath_fragments: ["my-bootclasspath-fragment"],
|
||||||
}
|
}
|
||||||
|
|
||||||
apex_key {
|
apex_key {
|
||||||
@@ -5930,6 +5970,16 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
private_key: "testkey.pem",
|
private_key: "testkey.pem",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bootclasspath_fragment {
|
||||||
|
name: "my-bootclasspath-fragment",
|
||||||
|
enabled: false,
|
||||||
|
contents: ["libfoo", "libbar"],
|
||||||
|
apex_available: ["myapex"],
|
||||||
|
hidden_api: {
|
||||||
|
split_packages: ["*"],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
prebuilt_apex {
|
prebuilt_apex {
|
||||||
name: "myapex",
|
name: "myapex",
|
||||||
arch: {
|
arch: {
|
||||||
@@ -5959,7 +6009,6 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
|
|
||||||
java_import {
|
java_import {
|
||||||
name: "libfoo",
|
name: "libfoo",
|
||||||
prefer: true,
|
|
||||||
jars: ["libfoo.jar"],
|
jars: ["libfoo.jar"],
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
permitted_packages: ["foo"],
|
permitted_packages: ["foo"],
|
||||||
@@ -5967,13 +6016,14 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
|
|
||||||
java_library {
|
java_library {
|
||||||
name: "libfoo",
|
name: "libfoo",
|
||||||
|
enabled: false,
|
||||||
srcs: ["foo/bar/MyClass.java"],
|
srcs: ["foo/bar/MyClass.java"],
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
|
installable: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
java_sdk_library_import {
|
java_sdk_library_import {
|
||||||
name: "libbar",
|
name: "libbar",
|
||||||
prefer: true,
|
|
||||||
public: {
|
public: {
|
||||||
jars: ["libbar.jar"],
|
jars: ["libbar.jar"],
|
||||||
},
|
},
|
||||||
@@ -5984,9 +6034,11 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
|
|
||||||
java_sdk_library {
|
java_sdk_library {
|
||||||
name: "libbar",
|
name: "libbar",
|
||||||
|
enabled: false,
|
||||||
srcs: ["foo/bar/MyClass.java"],
|
srcs: ["foo/bar/MyClass.java"],
|
||||||
unsafe_ignore_missing_latest_api: true,
|
unsafe_ignore_missing_latest_api: true,
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
|
compile_dex: true,
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
@@ -5999,6 +6051,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
checkHiddenAPIIndexFromFlagsInputs(t, ctx, `
|
||||||
my-bootclasspath-fragment/index.csv
|
my-bootclasspath-fragment/index.csv
|
||||||
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
|
||||||
|
out/soong/.intermediates/packages/modules/com.android.art/art-bootclasspath-fragment/android_common_apex10000/modular-hiddenapi/index.csv
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -8163,126 +8216,6 @@ func TestApexSetApksModuleAssignment(t *testing.T) {
|
|||||||
android.AssertArrayString(t, "extractor input", []string{"myapex.apks"}, extractedApex.Inputs.Strings())
|
android.AssertArrayString(t, "extractor input", []string{"myapex.apks"}, extractedApex.Inputs.Strings())
|
||||||
}
|
}
|
||||||
|
|
||||||
func testNoUpdatableJarsInBootImage(t *testing.T, errmsg string, preparer android.FixturePreparer, fragments ...java.ApexVariantReference) {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
bp := `
|
|
||||||
java_library {
|
|
||||||
name: "some-updatable-apex-lib",
|
|
||||||
srcs: ["a.java"],
|
|
||||||
sdk_version: "current",
|
|
||||||
apex_available: [
|
|
||||||
"some-updatable-apex",
|
|
||||||
],
|
|
||||||
permitted_packages: ["some.updatable.apex.lib"],
|
|
||||||
min_sdk_version: "33",
|
|
||||||
}
|
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "some-non-updatable-apex-lib",
|
|
||||||
srcs: ["a.java"],
|
|
||||||
apex_available: [
|
|
||||||
"some-non-updatable-apex",
|
|
||||||
],
|
|
||||||
compile_dex: true,
|
|
||||||
permitted_packages: ["some.non.updatable.apex.lib"],
|
|
||||||
}
|
|
||||||
|
|
||||||
bootclasspath_fragment {
|
|
||||||
name: "some-non-updatable-fragment",
|
|
||||||
contents: ["some-non-updatable-apex-lib"],
|
|
||||||
apex_available: [
|
|
||||||
"some-non-updatable-apex",
|
|
||||||
],
|
|
||||||
hidden_api: {
|
|
||||||
split_packages: ["*"],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "some-platform-lib",
|
|
||||||
srcs: ["a.java"],
|
|
||||||
sdk_version: "current",
|
|
||||||
installable: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "some-art-lib",
|
|
||||||
srcs: ["a.java"],
|
|
||||||
sdk_version: "current",
|
|
||||||
apex_available: [
|
|
||||||
"com.android.art.debug",
|
|
||||||
],
|
|
||||||
hostdex: true,
|
|
||||||
compile_dex: true,
|
|
||||||
min_sdk_version: "33",
|
|
||||||
}
|
|
||||||
|
|
||||||
apex {
|
|
||||||
name: "some-updatable-apex",
|
|
||||||
key: "some-updatable-apex.key",
|
|
||||||
java_libs: ["some-updatable-apex-lib"],
|
|
||||||
updatable: true,
|
|
||||||
min_sdk_version: "33",
|
|
||||||
}
|
|
||||||
|
|
||||||
apex {
|
|
||||||
name: "some-non-updatable-apex",
|
|
||||||
key: "some-non-updatable-apex.key",
|
|
||||||
bootclasspath_fragments: ["some-non-updatable-fragment"],
|
|
||||||
updatable: false,
|
|
||||||
}
|
|
||||||
|
|
||||||
apex_key {
|
|
||||||
name: "some-updatable-apex.key",
|
|
||||||
}
|
|
||||||
|
|
||||||
apex_key {
|
|
||||||
name: "some-non-updatable-apex.key",
|
|
||||||
}
|
|
||||||
|
|
||||||
apex {
|
|
||||||
name: "com.android.art.debug",
|
|
||||||
key: "com.android.art.debug.key",
|
|
||||||
bootclasspath_fragments: ["art-bootclasspath-fragment"],
|
|
||||||
updatable: true,
|
|
||||||
min_sdk_version: "33",
|
|
||||||
}
|
|
||||||
|
|
||||||
bootclasspath_fragment {
|
|
||||||
name: "art-bootclasspath-fragment",
|
|
||||||
image_name: "art",
|
|
||||||
contents: ["some-art-lib"],
|
|
||||||
apex_available: [
|
|
||||||
"com.android.art.debug",
|
|
||||||
],
|
|
||||||
hidden_api: {
|
|
||||||
split_packages: ["*"],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
apex_key {
|
|
||||||
name: "com.android.art.debug.key",
|
|
||||||
}
|
|
||||||
|
|
||||||
filegroup {
|
|
||||||
name: "some-updatable-apex-file_contexts",
|
|
||||||
srcs: [
|
|
||||||
"system/sepolicy/apex/some-updatable-apex-file_contexts",
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
filegroup {
|
|
||||||
name: "some-non-updatable-apex-file_contexts",
|
|
||||||
srcs: [
|
|
||||||
"system/sepolicy/apex/some-non-updatable-apex-file_contexts",
|
|
||||||
],
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
testDexpreoptWithApexes(t, bp, errmsg, preparer, fragments...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, preparer android.FixturePreparer, fragments ...java.ApexVariantReference) *android.TestContext {
|
func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, preparer android.FixturePreparer, fragments ...java.ApexVariantReference) *android.TestContext {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
@@ -8306,7 +8239,7 @@ func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, preparer android.F
|
|||||||
result := android.GroupFixturePreparers(
|
result := android.GroupFixturePreparers(
|
||||||
cc.PrepareForTestWithCcDefaultModules,
|
cc.PrepareForTestWithCcDefaultModules,
|
||||||
java.PrepareForTestWithHiddenApiBuildComponents,
|
java.PrepareForTestWithHiddenApiBuildComponents,
|
||||||
java.PrepareForTestWithJavaDefaultModules,
|
java.PrepareForTestWithDexpreopt,
|
||||||
java.PrepareForTestWithJavaSdkLibraryFiles,
|
java.PrepareForTestWithJavaSdkLibraryFiles,
|
||||||
PrepareForTestWithApexBuildComponents,
|
PrepareForTestWithApexBuildComponents,
|
||||||
preparer,
|
preparer,
|
||||||
@@ -8321,12 +8254,16 @@ func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, preparer android.F
|
|||||||
platform_bootclasspath {
|
platform_bootclasspath {
|
||||||
name: "platform-bootclasspath",
|
name: "platform-bootclasspath",
|
||||||
fragments: [
|
fragments: [
|
||||||
|
{apex: "com.android.art", module: "art-bootclasspath-fragment"},
|
||||||
%s
|
%s
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
`, insert))
|
`, insert))
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
// Dexpreopt for boot jars requires the ART boot image profile.
|
||||||
|
java.PrepareApexBootJarModule("com.android.art", "core-oj"),
|
||||||
|
dexpreopt.FixtureSetArtBootJars("com.android.art:core-oj"),
|
||||||
dexpreopt.FixtureSetBootImageProfiles("art/build/boot/boot-image-profile.txt"),
|
dexpreopt.FixtureSetBootImageProfiles("art/build/boot/boot-image-profile.txt"),
|
||||||
).
|
).
|
||||||
ExtendWithErrorHandler(errorHandler).
|
ExtendWithErrorHandler(errorHandler).
|
||||||
@@ -8633,126 +8570,6 @@ func TestUpdatable_should_not_set_generate_classpaths_proto(t *testing.T) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNoUpdatableJarsInBootImage(t *testing.T) {
|
|
||||||
// Set the BootJars in dexpreopt.GlobalConfig and productVariables to the same value. This can
|
|
||||||
// result in an invalid configuration as it does not set the ArtApexJars and allows art apex
|
|
||||||
// modules to be included in the BootJars.
|
|
||||||
prepareSetBootJars := func(bootJars ...string) android.FixturePreparer {
|
|
||||||
return android.GroupFixturePreparers(
|
|
||||||
dexpreopt.FixtureSetBootJars(bootJars...),
|
|
||||||
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
|
|
||||||
variables.BootJars = android.CreateTestConfiguredJarList(bootJars)
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the ArtApexJars and BootJars in dexpreopt.GlobalConfig and productVariables all to the
|
|
||||||
// same value. This can result in an invalid configuration as it allows non art apex jars to be
|
|
||||||
// specified in the ArtApexJars configuration.
|
|
||||||
prepareSetArtJars := func(bootJars ...string) android.FixturePreparer {
|
|
||||||
return android.GroupFixturePreparers(
|
|
||||||
dexpreopt.FixtureSetArtBootJars(bootJars...),
|
|
||||||
dexpreopt.FixtureSetBootJars(bootJars...),
|
|
||||||
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
|
|
||||||
variables.BootJars = android.CreateTestConfiguredJarList(bootJars)
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Run("updatable jar from ART apex in the ART boot image => ok", func(t *testing.T) {
|
|
||||||
preparer := android.GroupFixturePreparers(
|
|
||||||
java.FixtureConfigureBootJars("com.android.art.debug:some-art-lib"),
|
|
||||||
java.FixtureConfigureApexBootJars("some-non-updatable-apex:some-non-updatable-apex-lib"),
|
|
||||||
)
|
|
||||||
fragments := []java.ApexVariantReference{
|
|
||||||
{
|
|
||||||
Apex: proptools.StringPtr("com.android.art.debug"),
|
|
||||||
Module: proptools.StringPtr("art-bootclasspath-fragment"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Apex: proptools.StringPtr("some-non-updatable-apex"),
|
|
||||||
Module: proptools.StringPtr("some-non-updatable-fragment"),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
testNoUpdatableJarsInBootImage(t, "", preparer, fragments...)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("updatable jar from ART apex in the platform bootclasspath => error", func(t *testing.T) {
|
|
||||||
err := `module "some-art-lib" from updatable apexes \["com.android.art.debug"\] is not allowed in the platform bootclasspath`
|
|
||||||
// Update the dexpreopt BootJars directly.
|
|
||||||
preparer := android.GroupFixturePreparers(
|
|
||||||
prepareSetBootJars("com.android.art.debug:some-art-lib"),
|
|
||||||
java.FixtureConfigureApexBootJars("some-non-updatable-apex:some-non-updatable-apex-lib"),
|
|
||||||
)
|
|
||||||
testNoUpdatableJarsInBootImage(t, err, preparer)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("updatable jar from some other apex in the ART boot image => error", func(t *testing.T) {
|
|
||||||
err := `ArtApexJars expects this to be in apex "some-updatable-apex" but this is only in apexes.*"com.android.art.debug"`
|
|
||||||
// Update the dexpreopt ArtApexJars directly.
|
|
||||||
preparer := prepareSetArtJars("some-updatable-apex:some-updatable-apex-lib")
|
|
||||||
testNoUpdatableJarsInBootImage(t, err, preparer)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("non-updatable jar from some other apex in the ART boot image => error", func(t *testing.T) {
|
|
||||||
err := `ArtApexJars expects this to be in apex "some-non-updatable-apex" but this is only in apexes.*"com.android.art.debug"`
|
|
||||||
// Update the dexpreopt ArtApexJars directly.
|
|
||||||
preparer := prepareSetArtJars("some-non-updatable-apex:some-non-updatable-apex-lib")
|
|
||||||
testNoUpdatableJarsInBootImage(t, err, preparer)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("updatable jar from some other apex in the platform bootclasspath => error", func(t *testing.T) {
|
|
||||||
err := `module "some-updatable-apex-lib" from updatable apexes \["some-updatable-apex"\] is not allowed in the platform bootclasspath`
|
|
||||||
preparer := android.GroupFixturePreparers(
|
|
||||||
java.FixtureConfigureBootJars("some-updatable-apex:some-updatable-apex-lib"),
|
|
||||||
java.FixtureConfigureApexBootJars("some-non-updatable-apex:some-non-updatable-apex-lib"),
|
|
||||||
)
|
|
||||||
testNoUpdatableJarsInBootImage(t, err, preparer)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("non-updatable jar from some other apex in the platform bootclasspath => ok", func(t *testing.T) {
|
|
||||||
preparer := java.FixtureConfigureApexBootJars("some-non-updatable-apex:some-non-updatable-apex-lib")
|
|
||||||
fragment := java.ApexVariantReference{
|
|
||||||
Apex: proptools.StringPtr("some-non-updatable-apex"),
|
|
||||||
Module: proptools.StringPtr("some-non-updatable-fragment"),
|
|
||||||
}
|
|
||||||
testNoUpdatableJarsInBootImage(t, "", preparer, fragment)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("nonexistent jar in the ART boot image => error", func(t *testing.T) {
|
|
||||||
err := `"platform-bootclasspath" depends on undefined module "nonexistent"`
|
|
||||||
preparer := java.FixtureConfigureBootJars("platform:nonexistent")
|
|
||||||
testNoUpdatableJarsInBootImage(t, err, preparer)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("nonexistent jar in the platform bootclasspath => error", func(t *testing.T) {
|
|
||||||
err := `"platform-bootclasspath" depends on undefined module "nonexistent"`
|
|
||||||
preparer := java.FixtureConfigureBootJars("platform:nonexistent")
|
|
||||||
testNoUpdatableJarsInBootImage(t, err, preparer)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("platform jar in the ART boot image => error", func(t *testing.T) {
|
|
||||||
err := `ArtApexJars is invalid as it requests a platform variant of "some-platform-lib"`
|
|
||||||
// Update the dexpreopt ArtApexJars directly.
|
|
||||||
preparer := prepareSetArtJars("platform:some-platform-lib")
|
|
||||||
testNoUpdatableJarsInBootImage(t, err, preparer)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("platform jar in the platform bootclasspath => ok", func(t *testing.T) {
|
|
||||||
preparer := android.GroupFixturePreparers(
|
|
||||||
java.FixtureConfigureBootJars("platform:some-platform-lib"),
|
|
||||||
java.FixtureConfigureApexBootJars("some-non-updatable-apex:some-non-updatable-apex-lib"),
|
|
||||||
)
|
|
||||||
fragments := []java.ApexVariantReference{
|
|
||||||
{
|
|
||||||
Apex: proptools.StringPtr("some-non-updatable-apex"),
|
|
||||||
Module: proptools.StringPtr("some-non-updatable-fragment"),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
testNoUpdatableJarsInBootImage(t, "", preparer, fragments...)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestDexpreoptAccessDexFilesFromPrebuiltApex(t *testing.T) {
|
func TestDexpreoptAccessDexFilesFromPrebuiltApex(t *testing.T) {
|
||||||
preparer := java.FixtureConfigureApexBootJars("myapex:libfoo")
|
preparer := java.FixtureConfigureApexBootJars("myapex:libfoo")
|
||||||
t.Run("prebuilt no source", func(t *testing.T) {
|
t.Run("prebuilt no source", func(t *testing.T) {
|
||||||
|
@@ -46,78 +46,6 @@ var prepareForTestWithArtApex = android.GroupFixturePreparers(
|
|||||||
dexpreopt.FixtureSetBootImageProfiles("art/build/boot/boot-image-profile.txt"),
|
dexpreopt.FixtureSetBootImageProfiles("art/build/boot/boot-image-profile.txt"),
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestBootclasspathFragments(t *testing.T) {
|
|
||||||
result := android.GroupFixturePreparers(
|
|
||||||
prepareForTestWithBootclasspathFragment,
|
|
||||||
// Configure some libraries in the art bootclasspath_fragment and platform_bootclasspath.
|
|
||||||
java.FixtureConfigureBootJars("com.android.art:baz", "com.android.art:quuz", "platform:foo", "platform:bar"),
|
|
||||||
prepareForTestWithArtApex,
|
|
||||||
|
|
||||||
java.PrepareForTestWithJavaSdkLibraryFiles,
|
|
||||||
java.FixtureWithLastReleaseApis("foo"),
|
|
||||||
).RunTestWithBp(t, `
|
|
||||||
java_sdk_library {
|
|
||||||
name: "foo",
|
|
||||||
srcs: ["b.java"],
|
|
||||||
}
|
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "bar",
|
|
||||||
srcs: ["b.java"],
|
|
||||||
installable: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
apex {
|
|
||||||
name: "com.android.art",
|
|
||||||
key: "com.android.art.key",
|
|
||||||
bootclasspath_fragments: ["art-bootclasspath-fragment"],
|
|
||||||
updatable: false,
|
|
||||||
}
|
|
||||||
|
|
||||||
apex_key {
|
|
||||||
name: "com.android.art.key",
|
|
||||||
public_key: "com.android.art.avbpubkey",
|
|
||||||
private_key: "com.android.art.pem",
|
|
||||||
}
|
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "baz",
|
|
||||||
apex_available: [
|
|
||||||
"com.android.art",
|
|
||||||
],
|
|
||||||
srcs: ["b.java"],
|
|
||||||
compile_dex: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "quuz",
|
|
||||||
apex_available: [
|
|
||||||
"com.android.art",
|
|
||||||
],
|
|
||||||
srcs: ["b.java"],
|
|
||||||
compile_dex: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
bootclasspath_fragment {
|
|
||||||
name: "art-bootclasspath-fragment",
|
|
||||||
image_name: "art",
|
|
||||||
// Must match the "com.android.art:" entries passed to FixtureConfigureBootJars above.
|
|
||||||
contents: ["baz", "quuz"],
|
|
||||||
apex_available: [
|
|
||||||
"com.android.art",
|
|
||||||
],
|
|
||||||
hidden_api: {
|
|
||||||
split_packages: ["*"],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
)
|
|
||||||
|
|
||||||
// Make sure that the art-bootclasspath-fragment is using the correct configuration.
|
|
||||||
checkBootclasspathFragment(t, result, "art-bootclasspath-fragment", "android_common_apex10000",
|
|
||||||
"com.android.art:baz,com.android.art:quuz")
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBootclasspathFragments_FragmentDependency(t *testing.T) {
|
func TestBootclasspathFragments_FragmentDependency(t *testing.T) {
|
||||||
result := android.GroupFixturePreparers(
|
result := android.GroupFixturePreparers(
|
||||||
prepareForTestWithBootclasspathFragment,
|
prepareForTestWithBootclasspathFragment,
|
||||||
@@ -248,16 +176,6 @@ func TestBootclasspathFragments_FragmentDependency(t *testing.T) {
|
|||||||
checkAPIScopeStubs("other", otherInfo, java.CorePlatformHiddenAPIScope)
|
checkAPIScopeStubs("other", otherInfo, java.CorePlatformHiddenAPIScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkBootclasspathFragment(t *testing.T, result *android.TestResult, moduleName, variantName string, expectedConfiguredModules string) {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
bootclasspathFragment := result.ModuleForTests(moduleName, variantName).Module().(*java.BootclasspathFragmentModule)
|
|
||||||
|
|
||||||
bootclasspathFragmentInfo := result.ModuleProvider(bootclasspathFragment, java.BootclasspathFragmentApexContentInfoProvider).(java.BootclasspathFragmentApexContentInfo)
|
|
||||||
modules := bootclasspathFragmentInfo.Modules()
|
|
||||||
android.AssertStringEquals(t, "invalid modules for "+moduleName, expectedConfiguredModules, modules.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
||||||
commonPreparer := android.GroupFixturePreparers(
|
commonPreparer := android.GroupFixturePreparers(
|
||||||
prepareForTestWithBootclasspathFragment,
|
prepareForTestWithBootclasspathFragment,
|
||||||
@@ -268,10 +186,10 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
|||||||
name: "com.android.art",
|
name: "com.android.art",
|
||||||
key: "com.android.art.key",
|
key: "com.android.art.key",
|
||||||
bootclasspath_fragments: [
|
bootclasspath_fragments: [
|
||||||
"mybootclasspathfragment",
|
"art-bootclasspath-fragment",
|
||||||
],
|
],
|
||||||
// bar (like foo) should be transitively included in this apex because it is part of the
|
// bar (like foo) should be transitively included in this apex because it is part of the
|
||||||
// mybootclasspathfragment bootclasspath_fragment.
|
// art-bootclasspath-fragment bootclasspath_fragment.
|
||||||
updatable: false,
|
updatable: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,42 +198,6 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
|||||||
public_key: "testkey.avbpubkey",
|
public_key: "testkey.avbpubkey",
|
||||||
private_key: "testkey.pem",
|
private_key: "testkey.pem",
|
||||||
}
|
}
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "foo",
|
|
||||||
srcs: ["b.java"],
|
|
||||||
installable: true,
|
|
||||||
apex_available: [
|
|
||||||
"com.android.art",
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
java_library {
|
|
||||||
name: "bar",
|
|
||||||
srcs: ["b.java"],
|
|
||||||
installable: true,
|
|
||||||
apex_available: [
|
|
||||||
"com.android.art",
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
java_import {
|
|
||||||
name: "foo",
|
|
||||||
jars: ["foo.jar"],
|
|
||||||
apex_available: [
|
|
||||||
"com.android.art",
|
|
||||||
],
|
|
||||||
compile_dex: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
java_import {
|
|
||||||
name: "bar",
|
|
||||||
jars: ["bar.jar"],
|
|
||||||
apex_available: [
|
|
||||||
"com.android.art",
|
|
||||||
],
|
|
||||||
compile_dex: true,
|
|
||||||
}
|
|
||||||
`),
|
`),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -330,7 +212,7 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
|||||||
addSource := func(contents ...string) android.FixturePreparer {
|
addSource := func(contents ...string) android.FixturePreparer {
|
||||||
text := fmt.Sprintf(`
|
text := fmt.Sprintf(`
|
||||||
bootclasspath_fragment {
|
bootclasspath_fragment {
|
||||||
name: "mybootclasspathfragment",
|
name: "art-bootclasspath-fragment",
|
||||||
image_name: "art",
|
image_name: "art",
|
||||||
%s
|
%s
|
||||||
apex_available: [
|
apex_available: [
|
||||||
@@ -342,6 +224,19 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
|||||||
}
|
}
|
||||||
`, contentsInsert(contents))
|
`, contentsInsert(contents))
|
||||||
|
|
||||||
|
for _, content := range contents {
|
||||||
|
text += fmt.Sprintf(`
|
||||||
|
java_library {
|
||||||
|
name: "%[1]s",
|
||||||
|
srcs: ["%[1]s.java"],
|
||||||
|
installable: true,
|
||||||
|
apex_available: [
|
||||||
|
"com.android.art",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
`, content)
|
||||||
|
}
|
||||||
|
|
||||||
return android.FixtureAddTextFile("art/build/boot/Android.bp", text)
|
return android.FixtureAddTextFile("art/build/boot/Android.bp", text)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,11 +252,11 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
|||||||
src: "com.android.art-arm.apex",
|
src: "com.android.art-arm.apex",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
exported_bootclasspath_fragments: ["mybootclasspathfragment"],
|
exported_bootclasspath_fragments: ["art-bootclasspath-fragment"],
|
||||||
}
|
}
|
||||||
|
|
||||||
prebuilt_bootclasspath_fragment {
|
prebuilt_bootclasspath_fragment {
|
||||||
name: "mybootclasspathfragment",
|
name: "art-bootclasspath-fragment",
|
||||||
image_name: "art",
|
image_name: "art",
|
||||||
%s
|
%s
|
||||||
prefer: %t,
|
prefer: %t,
|
||||||
@@ -369,14 +264,29 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
|||||||
"com.android.art",
|
"com.android.art",
|
||||||
],
|
],
|
||||||
hidden_api: {
|
hidden_api: {
|
||||||
annotation_flags: "mybootclasspathfragment/annotation-flags.csv",
|
annotation_flags: "hiddenapi/annotation-flags.csv",
|
||||||
metadata: "mybootclasspathfragment/metadata.csv",
|
metadata: "hiddenapi/metadata.csv",
|
||||||
index: "mybootclasspathfragment/index.csv",
|
index: "hiddenapi/index.csv",
|
||||||
stub_flags: "mybootclasspathfragment/stub-flags.csv",
|
stub_flags: "hiddenapi/stub-flags.csv",
|
||||||
all_flags: "mybootclasspathfragment/all-flags.csv",
|
all_flags: "hiddenapi/all-flags.csv",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
`, contentsInsert(contents), prefer)
|
`, contentsInsert(contents), prefer)
|
||||||
|
|
||||||
|
for _, content := range contents {
|
||||||
|
text += fmt.Sprintf(`
|
||||||
|
java_import {
|
||||||
|
name: "%[1]s",
|
||||||
|
prefer: %[2]t,
|
||||||
|
jars: ["%[1]s.jar"],
|
||||||
|
apex_available: [
|
||||||
|
"com.android.art",
|
||||||
|
],
|
||||||
|
compile_dex: true,
|
||||||
|
}
|
||||||
|
`, content, prefer)
|
||||||
|
}
|
||||||
|
|
||||||
return android.FixtureAddTextFile("prebuilts/module_sdk/art/Android.bp", text)
|
return android.FixtureAddTextFile("prebuilts/module_sdk/art/Android.bp", text)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,13 +309,13 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{
|
java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{
|
||||||
|
`art-bootclasspath-fragment`,
|
||||||
`com.android.art.key`,
|
`com.android.art.key`,
|
||||||
`mybootclasspathfragment`,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// Make sure that the source bootclasspath_fragment copies its dex files to the predefined
|
// Make sure that the source bootclasspath_fragment copies its dex files to the predefined
|
||||||
// locations for the art image.
|
// locations for the art image.
|
||||||
module := result.ModuleForTests("mybootclasspathfragment", "android_common_apex10000")
|
module := result.ModuleForTests("art-bootclasspath-fragment", "android_common_apex10000")
|
||||||
checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo")
|
checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo")
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -469,14 +379,14 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{
|
java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{
|
||||||
|
`art-bootclasspath-fragment`,
|
||||||
`com.android.art.key`,
|
`com.android.art.key`,
|
||||||
`mybootclasspathfragment`,
|
|
||||||
`prebuilt_com.android.art`,
|
`prebuilt_com.android.art`,
|
||||||
})
|
})
|
||||||
|
|
||||||
// Make sure that the prebuilt bootclasspath_fragment copies its dex files to the predefined
|
// Make sure that the prebuilt bootclasspath_fragment copies its dex files to the predefined
|
||||||
// locations for the art image.
|
// locations for the art image.
|
||||||
module := result.ModuleForTests("prebuilt_mybootclasspathfragment", "android_common_com.android.art")
|
module := result.ModuleForTests("prebuilt_art-bootclasspath-fragment", "android_common_com.android.art")
|
||||||
checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo")
|
checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo")
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -566,7 +476,7 @@ func TestBootclasspathFragmentInPrebuiltArtApex(t *testing.T) {
|
|||||||
src: "com.android.art-arm.apex",
|
src: "com.android.art-arm.apex",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
exported_bootclasspath_fragments: ["mybootclasspathfragment"],
|
exported_bootclasspath_fragments: ["art-bootclasspath-fragment"],
|
||||||
}
|
}
|
||||||
|
|
||||||
java_import {
|
java_import {
|
||||||
@@ -586,7 +496,7 @@ func TestBootclasspathFragmentInPrebuiltArtApex(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
prebuilt_bootclasspath_fragment {
|
prebuilt_bootclasspath_fragment {
|
||||||
name: "mybootclasspathfragment",
|
name: "art-bootclasspath-fragment",
|
||||||
image_name: "art",
|
image_name: "art",
|
||||||
// Must match the "com.android.art:" entries passed to FixtureConfigureBootJars above.
|
// Must match the "com.android.art:" entries passed to FixtureConfigureBootJars above.
|
||||||
contents: ["foo", "bar"],
|
contents: ["foo", "bar"],
|
||||||
@@ -594,11 +504,11 @@ func TestBootclasspathFragmentInPrebuiltArtApex(t *testing.T) {
|
|||||||
"com.android.art",
|
"com.android.art",
|
||||||
],
|
],
|
||||||
hidden_api: {
|
hidden_api: {
|
||||||
annotation_flags: "mybootclasspathfragment/annotation-flags.csv",
|
annotation_flags: "hiddenapi/annotation-flags.csv",
|
||||||
metadata: "mybootclasspathfragment/metadata.csv",
|
metadata: "hiddenapi/metadata.csv",
|
||||||
index: "mybootclasspathfragment/index.csv",
|
index: "hiddenapi/index.csv",
|
||||||
stub_flags: "mybootclasspathfragment/stub-flags.csv",
|
stub_flags: "hiddenapi/stub-flags.csv",
|
||||||
all_flags: "mybootclasspathfragment/all-flags.csv",
|
all_flags: "hiddenapi/all-flags.csv",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -608,7 +518,7 @@ func TestBootclasspathFragmentInPrebuiltArtApex(t *testing.T) {
|
|||||||
apex_name: "com.android.art",
|
apex_name: "com.android.art",
|
||||||
%s
|
%s
|
||||||
src: "com.mycompany.android.art.apex",
|
src: "com.mycompany.android.art.apex",
|
||||||
exported_bootclasspath_fragments: ["mybootclasspathfragment"],
|
exported_bootclasspath_fragments: ["art-bootclasspath-fragment"],
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
@@ -617,17 +527,17 @@ func TestBootclasspathFragmentInPrebuiltArtApex(t *testing.T) {
|
|||||||
|
|
||||||
java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art", []string{
|
java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art", []string{
|
||||||
`com.android.art.apex.selector`,
|
`com.android.art.apex.selector`,
|
||||||
`prebuilt_mybootclasspathfragment`,
|
`prebuilt_art-bootclasspath-fragment`,
|
||||||
})
|
})
|
||||||
|
|
||||||
java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_com.android.art", []string{
|
java.CheckModuleDependencies(t, result.TestContext, "art-bootclasspath-fragment", "android_common_com.android.art", []string{
|
||||||
`com.android.art.deapexer`,
|
`com.android.art.deapexer`,
|
||||||
`dex2oatd`,
|
`dex2oatd`,
|
||||||
`prebuilt_bar`,
|
`prebuilt_bar`,
|
||||||
`prebuilt_foo`,
|
`prebuilt_foo`,
|
||||||
})
|
})
|
||||||
|
|
||||||
module := result.ModuleForTests("mybootclasspathfragment", "android_common_com.android.art")
|
module := result.ModuleForTests("art-bootclasspath-fragment", "android_common_com.android.art")
|
||||||
checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo")
|
checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@@ -155,15 +155,15 @@ func testDexpreoptBoot(t *testing.T, ruleFile string, expectedInputs, expectedOu
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDexpreoptBootJarsWithSourceArtApex(t *testing.T) {
|
func TestDexpreoptBootJarsWithSourceArtApex(t *testing.T) {
|
||||||
ruleFile := "boot.art"
|
ruleFile := "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art"
|
||||||
|
|
||||||
expectedInputs := []string{
|
expectedInputs := []string{
|
||||||
"out/soong/dexpreopt_arm64/dex_bootjars_input/core-oj.jar",
|
"out/soong/dexpreopt_arm64/dex_bootjars_input/core-oj.jar",
|
||||||
"out/soong/dexpreopt_arm64/dex_bootjars_input/foo.jar",
|
"out/soong/dexpreopt_arm64/dex_bootjars_input/foo.jar",
|
||||||
"out/soong/dexpreopt_arm64/dex_bootjars_input/bar.jar",
|
"out/soong/dexpreopt_arm64/dex_bootjars_input/bar.jar",
|
||||||
"out/soong/dexpreopt_arm64/dex_bootjars_input/baz.jar",
|
"out/soong/dexpreopt_arm64/dex_bootjars_input/baz.jar",
|
||||||
"out/soong/dexpreopt_arm64/dex_artjars/boot.prof",
|
"out/soong/.intermediates/art-bootclasspath-fragment/android_common_apex10000/art/boot.prof",
|
||||||
"out/soong/dexpreopt_arm64/dex_bootjars/boot.prof",
|
"out/soong/.intermediates/platform-bootclasspath/android_common/boot/boot.prof",
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedOutputs := []string{
|
expectedOutputs := []string{
|
||||||
@@ -192,7 +192,7 @@ func TestDexpreoptBootJarsWithSourceArtApex(t *testing.T) {
|
|||||||
// The only difference is that the ART profile should be deapexed from the prebuilt APEX. Other
|
// The only difference is that the ART profile should be deapexed from the prebuilt APEX. Other
|
||||||
// inputs and outputs should be the same as above.
|
// inputs and outputs should be the same as above.
|
||||||
func TestDexpreoptBootJarsWithPrebuiltArtApex(t *testing.T) {
|
func TestDexpreoptBootJarsWithPrebuiltArtApex(t *testing.T) {
|
||||||
ruleFile := "boot.art"
|
ruleFile := "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art"
|
||||||
|
|
||||||
expectedInputs := []string{
|
expectedInputs := []string{
|
||||||
"out/soong/dexpreopt_arm64/dex_bootjars_input/core-oj.jar",
|
"out/soong/dexpreopt_arm64/dex_bootjars_input/core-oj.jar",
|
||||||
@@ -200,7 +200,7 @@ func TestDexpreoptBootJarsWithPrebuiltArtApex(t *testing.T) {
|
|||||||
"out/soong/dexpreopt_arm64/dex_bootjars_input/bar.jar",
|
"out/soong/dexpreopt_arm64/dex_bootjars_input/bar.jar",
|
||||||
"out/soong/dexpreopt_arm64/dex_bootjars_input/baz.jar",
|
"out/soong/dexpreopt_arm64/dex_bootjars_input/baz.jar",
|
||||||
"out/soong/.intermediates/com.android.art.deapexer/android_common/deapexer/etc/boot-image.prof",
|
"out/soong/.intermediates/com.android.art.deapexer/android_common/deapexer/etc/boot-image.prof",
|
||||||
"out/soong/dexpreopt_arm64/dex_bootjars/boot.prof",
|
"out/soong/.intermediates/platform-bootclasspath/android_common/boot/boot.prof",
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedOutputs := []string{
|
expectedOutputs := []string{
|
||||||
|
@@ -77,7 +77,7 @@ func addDependencyOntoApexVariants(ctx android.BottomUpMutatorContext, propertyN
|
|||||||
// Use gatherApexModulePairDepsWithTag to retrieve the dependencies.
|
// Use gatherApexModulePairDepsWithTag to retrieve the dependencies.
|
||||||
func addDependencyOntoApexModulePair(ctx android.BottomUpMutatorContext, apex string, name string, tag blueprint.DependencyTag) {
|
func addDependencyOntoApexModulePair(ctx android.BottomUpMutatorContext, apex string, name string, tag blueprint.DependencyTag) {
|
||||||
var variations []blueprint.Variation
|
var variations []blueprint.Variation
|
||||||
if apex != "platform" && apex != "system_ext" {
|
if !android.IsConfiguredJarForPlatform(apex) {
|
||||||
// Pick the correct apex variant.
|
// Pick the correct apex variant.
|
||||||
variations = []blueprint.Variation{
|
variations = []blueprint.Variation{
|
||||||
{Mutator: "apex", Variation: apex},
|
{Mutator: "apex", Variation: apex},
|
||||||
|
@@ -389,10 +389,6 @@ var BootclasspathFragmentApexContentInfoProvider = blueprint.NewProvider(Bootcla
|
|||||||
// BootclasspathFragmentApexContentInfo contains the bootclasspath_fragments contributions to the
|
// BootclasspathFragmentApexContentInfo contains the bootclasspath_fragments contributions to the
|
||||||
// apex contents.
|
// apex contents.
|
||||||
type BootclasspathFragmentApexContentInfo struct {
|
type BootclasspathFragmentApexContentInfo struct {
|
||||||
// The configured modules, will be empty if this is from a bootclasspath_fragment that does not
|
|
||||||
// set image_name: "art".
|
|
||||||
modules android.ConfiguredJarList
|
|
||||||
|
|
||||||
// Map from the base module name (without prebuilt_ prefix) of a fragment's contents module to the
|
// Map from the base module name (without prebuilt_ prefix) of a fragment's contents module to the
|
||||||
// hidden API encoded dex jar path.
|
// hidden API encoded dex jar path.
|
||||||
contentModuleDexJarPaths bootDexJarByModule
|
contentModuleDexJarPaths bootDexJarByModule
|
||||||
@@ -405,10 +401,6 @@ type BootclasspathFragmentApexContentInfo struct {
|
|||||||
profileInstallPathInApex string
|
profileInstallPathInApex string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i BootclasspathFragmentApexContentInfo) Modules() android.ConfiguredJarList {
|
|
||||||
return i.modules
|
|
||||||
}
|
|
||||||
|
|
||||||
// DexBootJarPathForContentModule returns the path to the dex boot jar for specified module.
|
// DexBootJarPathForContentModule returns the path to the dex boot jar for specified module.
|
||||||
//
|
//
|
||||||
// The dex boot jar is one which has had hidden API encoding performed on it.
|
// The dex boot jar is one which has had hidden API encoding performed on it.
|
||||||
@@ -597,7 +589,6 @@ func (b *BootclasspathFragmentModule) provideApexContentInfo(ctx android.ModuleC
|
|||||||
}
|
}
|
||||||
|
|
||||||
if imageConfig != nil {
|
if imageConfig != nil {
|
||||||
info.modules = imageConfig.modules
|
|
||||||
global := dexpreopt.GetGlobalConfig(ctx)
|
global := dexpreopt.GetGlobalConfig(ctx)
|
||||||
if !global.DisableGenerateProfile {
|
if !global.DisableGenerateProfile {
|
||||||
info.profilePathOnHost = bootImageFiles.profile
|
info.profilePathOnHost = bootImageFiles.profile
|
||||||
|
@@ -40,6 +40,12 @@ func TestBootclasspathFragment_UnknownImageName(t *testing.T) {
|
|||||||
image_name: "unknown",
|
image_name: "unknown",
|
||||||
contents: ["foo"],
|
contents: ["foo"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "foo",
|
||||||
|
srcs: ["foo.java"],
|
||||||
|
installable: true,
|
||||||
|
}
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,6 +59,11 @@ func TestPrebuiltBootclasspathFragment_UnknownImageName(t *testing.T) {
|
|||||||
image_name: "unknown",
|
image_name: "unknown",
|
||||||
contents: ["foo"],
|
contents: ["foo"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java_import {
|
||||||
|
name: "foo",
|
||||||
|
jars: ["foo.jar"],
|
||||||
|
}
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,6 +83,18 @@ func TestBootclasspathFragmentInconsistentArtConfiguration_Platform(t *testing.T
|
|||||||
"apex",
|
"apex",
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "foo",
|
||||||
|
srcs: ["foo.java"],
|
||||||
|
installable: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "bar",
|
||||||
|
srcs: ["bar.java"],
|
||||||
|
installable: true,
|
||||||
|
}
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,6 +115,18 @@ func TestBootclasspathFragmentInconsistentArtConfiguration_ApexMixture(t *testin
|
|||||||
"apex2",
|
"apex2",
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "foo",
|
||||||
|
srcs: ["foo.java"],
|
||||||
|
installable: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "bar",
|
||||||
|
srcs: ["bar.java"],
|
||||||
|
installable: true,
|
||||||
|
}
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -505,8 +505,7 @@ func (d *dexpreoptBootJars) GenerateSingletonBuildActions(ctx android.SingletonC
|
|||||||
// No module has enabled dexpreopting, so we assume there will be no boot image to make.
|
// No module has enabled dexpreopting, so we assume there will be no boot image to make.
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
archType := ctx.Config().Targets[android.Android][0].Arch.ArchType
|
d.dexpreoptConfigForMake = android.PathForOutput(ctx, getDexpreoptDirName(ctx), "dexpreopt.config")
|
||||||
d.dexpreoptConfigForMake = android.PathForOutput(ctx, toDexpreoptDirName(archType), "dexpreopt.config")
|
|
||||||
writeGlobalConfigForMake(ctx, d.dexpreoptConfigForMake)
|
writeGlobalConfigForMake(ctx, d.dexpreoptConfigForMake)
|
||||||
|
|
||||||
global := dexpreopt.GetGlobalConfig(ctx)
|
global := dexpreopt.GetGlobalConfig(ctx)
|
||||||
@@ -885,11 +884,7 @@ const failureMessage = `ERROR: Dex2oat failed to compile a boot image.
|
|||||||
It is likely that the boot classpath is inconsistent.
|
It is likely that the boot classpath is inconsistent.
|
||||||
Rebuild with ART_BOOT_IMAGE_EXTRA_ARGS="--runtime-arg -verbose:verifier" to see verification errors.`
|
Rebuild with ART_BOOT_IMAGE_EXTRA_ARGS="--runtime-arg -verbose:verifier" to see verification errors.`
|
||||||
|
|
||||||
func bootImageProfileRule(ctx android.ModuleContext, image *bootImageConfig) android.WritablePath {
|
func bootImageProfileRuleCommon(ctx android.ModuleContext, name string, dexFiles android.Paths, dexLocations []string) android.WritablePath {
|
||||||
if !image.isProfileGuided() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
globalSoong := dexpreopt.GetGlobalSoongConfig(ctx)
|
globalSoong := dexpreopt.GetGlobalSoongConfig(ctx)
|
||||||
global := dexpreopt.GetGlobalConfig(ctx)
|
global := dexpreopt.GetGlobalConfig(ctx)
|
||||||
|
|
||||||
@@ -916,28 +911,39 @@ func bootImageProfileRule(ctx android.ModuleContext, image *bootImageConfig) and
|
|||||||
if path := android.ExistentPathForSource(ctx, extraProfile); path.Valid() {
|
if path := android.ExistentPathForSource(ctx, extraProfile); path.Valid() {
|
||||||
profiles = append(profiles, path.Path())
|
profiles = append(profiles, path.Path())
|
||||||
}
|
}
|
||||||
bootImageProfile := image.dir.Join(ctx, "boot-image-profile.txt")
|
bootImageProfile := android.PathForModuleOut(ctx, name, "boot-image-profile.txt")
|
||||||
rule.Command().Text("cat").Inputs(profiles).Text(">").Output(bootImageProfile)
|
rule.Command().Text("cat").Inputs(profiles).Text(">").Output(bootImageProfile)
|
||||||
|
|
||||||
profile := image.dir.Join(ctx, "boot.prof")
|
profile := android.PathForModuleOut(ctx, name, "boot.prof")
|
||||||
|
|
||||||
rule.Command().
|
rule.Command().
|
||||||
Text(`ANDROID_LOG_TAGS="*:e"`).
|
Text(`ANDROID_LOG_TAGS="*:e"`).
|
||||||
Tool(globalSoong.Profman).
|
Tool(globalSoong.Profman).
|
||||||
Flag("--output-profile-type=boot").
|
Flag("--output-profile-type=boot").
|
||||||
FlagWithInput("--create-profile-from=", bootImageProfile).
|
FlagWithInput("--create-profile-from=", bootImageProfile).
|
||||||
FlagForEachInput("--apk=", image.dexPathsDeps.Paths()).
|
FlagForEachInput("--apk=", dexFiles).
|
||||||
FlagForEachArg("--dex-location=", image.getAnyAndroidVariant().dexLocationsDeps).
|
FlagForEachArg("--dex-location=", dexLocations).
|
||||||
FlagWithOutput("--reference-profile-file=", profile)
|
FlagWithOutput("--reference-profile-file=", profile)
|
||||||
|
|
||||||
|
rule.Build("bootJarsProfile_"+name, "profile boot jars "+name)
|
||||||
|
|
||||||
|
return profile
|
||||||
|
}
|
||||||
|
|
||||||
|
func bootImageProfileRule(ctx android.ModuleContext, image *bootImageConfig) android.WritablePath {
|
||||||
|
if !image.isProfileGuided() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
profile := bootImageProfileRuleCommon(ctx, image.name, image.dexPathsDeps.Paths(), image.getAnyAndroidVariant().dexLocationsDeps)
|
||||||
|
|
||||||
if image == defaultBootImageConfig(ctx) {
|
if image == defaultBootImageConfig(ctx) {
|
||||||
|
rule := android.NewRuleBuilder(pctx, ctx)
|
||||||
rule.Install(profile, "/system/etc/boot-image.prof")
|
rule.Install(profile, "/system/etc/boot-image.prof")
|
||||||
image.profileInstalls = append(image.profileInstalls, rule.Installs()...)
|
image.profileInstalls = append(image.profileInstalls, rule.Installs()...)
|
||||||
image.profileLicenseMetadataFile = android.OptionalPathForPath(ctx.LicenseMetadataFile())
|
image.profileLicenseMetadataFile = android.OptionalPathForPath(ctx.LicenseMetadataFile())
|
||||||
}
|
}
|
||||||
|
|
||||||
rule.Build("bootJarsProfile", "profile boot jars")
|
|
||||||
|
|
||||||
return profile
|
return profile
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -976,6 +982,8 @@ func bootFrameworkProfileRule(ctx android.ModuleContext, image *bootImageConfig)
|
|||||||
|
|
||||||
func dumpOatRules(ctx android.ModuleContext, image *bootImageConfig) {
|
func dumpOatRules(ctx android.ModuleContext, image *bootImageConfig) {
|
||||||
var allPhonies android.Paths
|
var allPhonies android.Paths
|
||||||
|
name := image.name
|
||||||
|
global := dexpreopt.GetGlobalConfig(ctx)
|
||||||
for _, image := range image.variants {
|
for _, image := range image.variants {
|
||||||
arch := image.target.Arch.ArchType
|
arch := image.target.Arch.ArchType
|
||||||
suffix := arch.String()
|
suffix := arch.String()
|
||||||
@@ -984,36 +992,39 @@ func dumpOatRules(ctx android.ModuleContext, image *bootImageConfig) {
|
|||||||
suffix = "host-" + suffix
|
suffix = "host-" + suffix
|
||||||
}
|
}
|
||||||
// Create a rule to call oatdump.
|
// Create a rule to call oatdump.
|
||||||
output := android.PathForOutput(ctx, "boot."+suffix+".oatdump.txt")
|
output := android.PathForOutput(ctx, name+"."+suffix+".oatdump.txt")
|
||||||
rule := android.NewRuleBuilder(pctx, ctx)
|
rule := android.NewRuleBuilder(pctx, ctx)
|
||||||
imageLocationsOnHost, _ := image.imageLocations()
|
imageLocationsOnHost, _ := image.imageLocations()
|
||||||
rule.Command().
|
cmd := rule.Command().
|
||||||
BuiltTool("oatdump").
|
BuiltTool("oatdump").
|
||||||
FlagWithInputList("--runtime-arg -Xbootclasspath:", image.dexPathsDeps.Paths(), ":").
|
FlagWithInputList("--runtime-arg -Xbootclasspath:", image.dexPathsDeps.Paths(), ":").
|
||||||
FlagWithList("--runtime-arg -Xbootclasspath-locations:", image.dexLocationsDeps, ":").
|
FlagWithList("--runtime-arg -Xbootclasspath-locations:", image.dexLocationsDeps, ":").
|
||||||
FlagWithArg("--image=", strings.Join(imageLocationsOnHost, ":")).Implicits(image.imagesDeps.Paths()).
|
FlagWithArg("--image=", strings.Join(imageLocationsOnHost, ":")).Implicits(image.imagesDeps.Paths()).
|
||||||
FlagWithOutput("--output=", output).
|
FlagWithOutput("--output=", output).
|
||||||
FlagWithArg("--instruction-set=", arch.String())
|
FlagWithArg("--instruction-set=", arch.String())
|
||||||
rule.Build("dump-oat-boot-"+suffix, "dump oat boot "+arch.String())
|
if global.EnableUffdGc && image.target.Os == android.Android {
|
||||||
|
cmd.Flag("--runtime-arg").Flag("-Xgc:CMC")
|
||||||
|
}
|
||||||
|
rule.Build("dump-oat-"+name+"-"+suffix, "dump oat "+name+" "+arch.String())
|
||||||
|
|
||||||
// Create a phony rule that depends on the output file and prints the path.
|
// Create a phony rule that depends on the output file and prints the path.
|
||||||
phony := android.PathForPhony(ctx, "dump-oat-boot-"+suffix)
|
phony := android.PathForPhony(ctx, "dump-oat-"+name+"-"+suffix)
|
||||||
rule = android.NewRuleBuilder(pctx, ctx)
|
rule = android.NewRuleBuilder(pctx, ctx)
|
||||||
rule.Command().
|
rule.Command().
|
||||||
Implicit(output).
|
Implicit(output).
|
||||||
ImplicitOutput(phony).
|
ImplicitOutput(phony).
|
||||||
Text("echo").FlagWithArg("Output in ", output.String())
|
Text("echo").FlagWithArg("Output in ", output.String())
|
||||||
rule.Build("phony-dump-oat-boot-"+suffix, "dump oat boot "+arch.String())
|
rule.Build("phony-dump-oat-"+name+"-"+suffix, "dump oat "+name+" "+arch.String())
|
||||||
|
|
||||||
allPhonies = append(allPhonies, phony)
|
allPhonies = append(allPhonies, phony)
|
||||||
}
|
}
|
||||||
|
|
||||||
phony := android.PathForPhony(ctx, "dump-oat-boot")
|
phony := android.PathForPhony(ctx, "dump-oat-"+name)
|
||||||
ctx.Build(pctx, android.BuildParams{
|
ctx.Build(pctx, android.BuildParams{
|
||||||
Rule: android.Phony,
|
Rule: android.Phony,
|
||||||
Output: phony,
|
Output: phony,
|
||||||
Inputs: allPhonies,
|
Inputs: allPhonies,
|
||||||
Description: "dump-oat-boot",
|
Description: "dump-oat-"+name,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -105,8 +105,7 @@ func genBootImageConfigRaw(ctx android.PathContext) map[string]*bootImageConfig
|
|||||||
func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig {
|
func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig {
|
||||||
return ctx.Config().Once(bootImageConfigKey, func() interface{} {
|
return ctx.Config().Once(bootImageConfigKey, func() interface{} {
|
||||||
targets := dexpreoptTargets(ctx)
|
targets := dexpreoptTargets(ctx)
|
||||||
archType := ctx.Config().Targets[android.Android][0].Arch.ArchType
|
deviceDir := android.PathForOutput(ctx, getDexpreoptDirName(ctx))
|
||||||
deviceDir := android.PathForOutput(ctx, toDexpreoptDirName(archType))
|
|
||||||
|
|
||||||
configs := genBootImageConfigRaw(ctx)
|
configs := genBootImageConfigRaw(ctx)
|
||||||
|
|
||||||
@@ -218,8 +217,7 @@ var updatableBootConfigKey = android.NewOnceKey("apexBootConfig")
|
|||||||
func GetApexBootConfig(ctx android.PathContext) apexBootConfig {
|
func GetApexBootConfig(ctx android.PathContext) apexBootConfig {
|
||||||
return ctx.Config().Once(updatableBootConfigKey, func() interface{} {
|
return ctx.Config().Once(updatableBootConfigKey, func() interface{} {
|
||||||
apexBootJars := dexpreopt.GetGlobalConfig(ctx).ApexBootJars
|
apexBootJars := dexpreopt.GetGlobalConfig(ctx).ApexBootJars
|
||||||
archType := ctx.Config().Targets[android.Android][0].Arch.ArchType
|
dir := android.PathForOutput(ctx, getDexpreoptDirName(ctx), "apex_bootjars")
|
||||||
dir := android.PathForOutput(ctx, toDexpreoptDirName(archType), "apex_bootjars")
|
|
||||||
dexPaths := apexBootJars.BuildPaths(ctx, dir)
|
dexPaths := apexBootJars.BuildPaths(ctx, dir)
|
||||||
dexPathsByModuleName := apexBootJars.BuildPathsByModule(ctx, dir)
|
dexPathsByModuleName := apexBootJars.BuildPathsByModule(ctx, dir)
|
||||||
|
|
||||||
@@ -258,6 +256,11 @@ func dexpreoptConfigMakevars(ctx android.MakeVarsContext) {
|
|||||||
ctx.Strict("DEXPREOPT_BOOT_JARS_MODULES", strings.Join(defaultBootImageConfig(ctx).modules.CopyOfApexJarPairs(), ":"))
|
ctx.Strict("DEXPREOPT_BOOT_JARS_MODULES", strings.Join(defaultBootImageConfig(ctx).modules.CopyOfApexJarPairs(), ":"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func toDexpreoptDirName(arch android.ArchType) string {
|
func getDexpreoptDirName(ctx android.PathContext) string {
|
||||||
return "dexpreopt_" + arch.String()
|
prefix := "dexpreopt_"
|
||||||
|
targets := ctx.Config().Targets[android.Android]
|
||||||
|
if len(targets) > 0 {
|
||||||
|
return prefix+targets[0].Arch.ArchType.String()
|
||||||
|
}
|
||||||
|
return prefix+"unknown_target"
|
||||||
}
|
}
|
||||||
|
@@ -44,18 +44,18 @@ var PrepareApexBootJarConfigs = FixtureConfigureApexBootJars(
|
|||||||
|
|
||||||
var PrepareApexBootJarConfigsAndModules = android.GroupFixturePreparers(
|
var PrepareApexBootJarConfigsAndModules = android.GroupFixturePreparers(
|
||||||
PrepareApexBootJarConfigs,
|
PrepareApexBootJarConfigs,
|
||||||
prepareApexBootJarModule("com.android.foo", "framework-foo"),
|
PrepareApexBootJarModule("com.android.foo", "framework-foo"),
|
||||||
prepareApexBootJarModule("com.android.bar", "framework-bar"),
|
PrepareApexBootJarModule("com.android.bar", "framework-bar"),
|
||||||
)
|
)
|
||||||
|
|
||||||
var ApexBootJarFragmentsForPlatformBootclasspath = fmt.Sprintf(`
|
var ApexBootJarFragmentsForPlatformBootclasspath = fmt.Sprintf(`
|
||||||
{
|
{
|
||||||
apex: "%[1]s",
|
apex: "%[1]s",
|
||||||
module: "%[1]s-bootclasspathfragment",
|
module: "%[1]s-bootclasspath-fragment",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
apex: "%[2]s",
|
apex: "%[2]s",
|
||||||
module: "%[2]s-bootclasspathfragment",
|
module: "%[2]s-bootclasspath-fragment",
|
||||||
},
|
},
|
||||||
`, "com.android.foo", "com.android.bar")
|
`, "com.android.foo", "com.android.bar")
|
||||||
|
|
||||||
@@ -64,15 +64,22 @@ var ApexBootJarDexJarPaths = []string{
|
|||||||
"out/soong/.intermediates/packages/modules/com.android.foo/framework-foo/android_common_apex10000/aligned/framework-foo.jar",
|
"out/soong/.intermediates/packages/modules/com.android.foo/framework-foo/android_common_apex10000/aligned/framework-foo.jar",
|
||||||
}
|
}
|
||||||
|
|
||||||
func prepareApexBootJarModule(apexName string, moduleName string) android.FixturePreparer {
|
func PrepareApexBootJarModule(apexName string, moduleName string) android.FixturePreparer {
|
||||||
moduleSourceDir := fmt.Sprintf("packages/modules/%s", apexName)
|
moduleSourceDir := fmt.Sprintf("packages/modules/%s", apexName)
|
||||||
|
fragmentName := apexName+"-bootclasspath-fragment"
|
||||||
|
imageNameProp := ""
|
||||||
|
if apexName == "com.android.art" {
|
||||||
|
fragmentName = "art-bootclasspath-fragment"
|
||||||
|
imageNameProp = `image_name: "art",`
|
||||||
|
}
|
||||||
|
|
||||||
return android.GroupFixturePreparers(
|
return android.GroupFixturePreparers(
|
||||||
android.FixtureAddTextFile(moduleSourceDir+"/Android.bp", fmt.Sprintf(`
|
android.FixtureAddTextFile(moduleSourceDir+"/Android.bp", fmt.Sprintf(`
|
||||||
apex {
|
apex {
|
||||||
name: "%[1]s",
|
name: "%[1]s",
|
||||||
key: "%[1]s.key",
|
key: "%[1]s.key",
|
||||||
bootclasspath_fragments: [
|
bootclasspath_fragments: [
|
||||||
"%[1]s-bootclasspathfragment",
|
"%[3]s",
|
||||||
],
|
],
|
||||||
updatable: false,
|
updatable: false,
|
||||||
}
|
}
|
||||||
@@ -84,7 +91,8 @@ func prepareApexBootJarModule(apexName string, moduleName string) android.Fixtur
|
|||||||
}
|
}
|
||||||
|
|
||||||
bootclasspath_fragment {
|
bootclasspath_fragment {
|
||||||
name: "%[1]s-bootclasspathfragment",
|
name: "%[3]s",
|
||||||
|
%[4]s
|
||||||
contents: ["%[2]s"],
|
contents: ["%[2]s"],
|
||||||
apex_available: ["%[1]s"],
|
apex_available: ["%[1]s"],
|
||||||
hidden_api: {
|
hidden_api: {
|
||||||
@@ -100,7 +108,7 @@ func prepareApexBootJarModule(apexName string, moduleName string) android.Fixtur
|
|||||||
compile_dex: true,
|
compile_dex: true,
|
||||||
apex_available: ["%[1]s"],
|
apex_available: ["%[1]s"],
|
||||||
}
|
}
|
||||||
`, apexName, moduleName)),
|
`, apexName, moduleName, fragmentName, imageNameProp)),
|
||||||
android.FixtureMergeMockFs(android.MockFS{
|
android.FixtureMergeMockFs(android.MockFS{
|
||||||
fmt.Sprintf("%s/apex_manifest.json", moduleSourceDir): nil,
|
fmt.Sprintf("%s/apex_manifest.json", moduleSourceDir): nil,
|
||||||
fmt.Sprintf("%s/%s.avbpubkey", moduleSourceDir, apexName): nil,
|
fmt.Sprintf("%s/%s.avbpubkey", moduleSourceDir, apexName): nil,
|
||||||
@@ -192,7 +200,7 @@ func CheckArtBootImageConfig(t *testing.T, result *android.TestResult) {
|
|||||||
// getArtImageConfig gets the ART bootImageConfig that was created during the test.
|
// getArtImageConfig gets the ART bootImageConfig that was created during the test.
|
||||||
func getArtImageConfig(result *android.TestResult) *bootImageConfig {
|
func getArtImageConfig(result *android.TestResult) *bootImageConfig {
|
||||||
pathCtx := &android.TestPathContext{TestResult: result}
|
pathCtx := &android.TestPathContext{TestResult: result}
|
||||||
imageConfig := artBootImageConfig(pathCtx)
|
imageConfig := genBootImageConfigs(pathCtx)["art"]
|
||||||
return imageConfig
|
return imageConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -806,7 +814,7 @@ func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mut
|
|||||||
},
|
},
|
||||||
profileInstalls: []normalizedInstall{
|
profileInstalls: []normalizedInstall{
|
||||||
{from: "out/soong/dexpreopt_arm64/dex_bootjars/boot.bprof", to: "/system/etc/boot-image.bprof"},
|
{from: "out/soong/dexpreopt_arm64/dex_bootjars/boot.bprof", to: "/system/etc/boot-image.bprof"},
|
||||||
{from: "out/soong/dexpreopt_arm64/dex_bootjars/boot.prof", to: "/system/etc/boot-image.prof"},
|
{from: "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/boot/boot.prof", to: "/system/etc/boot-image.prof"},
|
||||||
},
|
},
|
||||||
profileLicenseMetadataFile: expectedLicenseMetadataFile,
|
profileLicenseMetadataFile: expectedLicenseMetadataFile,
|
||||||
}
|
}
|
||||||
@@ -1136,7 +1144,6 @@ func nestedCheckBootImageConfig(t *testing.T, imageConfig *bootImageConfig, expe
|
|||||||
android.AssertPathRelativeToTopEquals(t, "dir", expected.dir, imageConfig.dir)
|
android.AssertPathRelativeToTopEquals(t, "dir", expected.dir, imageConfig.dir)
|
||||||
android.AssertPathRelativeToTopEquals(t, "symbolsDir", expected.symbolsDir, imageConfig.symbolsDir)
|
android.AssertPathRelativeToTopEquals(t, "symbolsDir", expected.symbolsDir, imageConfig.symbolsDir)
|
||||||
android.AssertStringEquals(t, "installDir", expected.installDir, imageConfig.installDir)
|
android.AssertStringEquals(t, "installDir", expected.installDir, imageConfig.installDir)
|
||||||
android.AssertStringEquals(t, "profileInstallPathInApex", expected.profileInstallPathInApex, imageConfig.profileInstallPathInApex)
|
|
||||||
android.AssertDeepEquals(t, "modules", expected.modules, imageConfig.modules)
|
android.AssertDeepEquals(t, "modules", expected.modules, imageConfig.modules)
|
||||||
android.AssertPathsRelativeToTopEquals(t, "dexPaths", expected.dexPaths, imageConfig.dexPaths.Paths())
|
android.AssertPathsRelativeToTopEquals(t, "dexPaths", expected.dexPaths, imageConfig.dexPaths.Paths())
|
||||||
android.AssertPathsRelativeToTopEquals(t, "dexPathsDeps", expected.dexPathsDeps, imageConfig.dexPathsDeps.Paths())
|
android.AssertPathsRelativeToTopEquals(t, "dexPathsDeps", expected.dexPathsDeps, imageConfig.dexPathsDeps.Paths())
|
||||||
@@ -1238,7 +1245,7 @@ DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTart=out/soong/dexpreopt_arm64/dex_artjars/andro
|
|||||||
DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTboot=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/boot.art
|
DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTboot=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/boot.art
|
||||||
DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTmainline=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/boot.art:out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/boot-framework-foo.art
|
DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTmainline=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/boot.art:out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/boot-framework-foo.art
|
||||||
DEXPREOPT_IMAGE_NAMES=art boot mainline
|
DEXPREOPT_IMAGE_NAMES=art boot mainline
|
||||||
DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED=out/soong/dexpreopt_arm64/dex_bootjars/boot.bprof:/system/etc/boot-image.bprof out/soong/dexpreopt_arm64/dex_bootjars/boot.prof:/system/etc/boot-image.prof
|
DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED=out/soong/dexpreopt_arm64/dex_bootjars/boot.bprof:/system/etc/boot-image.bprof out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/boot/boot.prof:/system/etc/boot-image.prof
|
||||||
DEXPREOPT_IMAGE_PROFILE_LICENSE_METADATA=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
|
DEXPREOPT_IMAGE_PROFILE_LICENSE_METADATA=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
|
||||||
DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat
|
DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat
|
||||||
DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat
|
DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat
|
||||||
|
@@ -166,7 +166,7 @@ func isModuleInConfiguredList(ctx android.BaseModuleContext, module android.Modu
|
|||||||
|
|
||||||
// Now match the apex part of the boot image configuration.
|
// Now match the apex part of the boot image configuration.
|
||||||
requiredApex := configuredBootJars.Apex(index)
|
requiredApex := configuredBootJars.Apex(index)
|
||||||
if requiredApex == "platform" || requiredApex == "system_ext" {
|
if android.IsConfiguredJarForPlatform(requiredApex) {
|
||||||
if len(apexInfo.InApexVariants) != 0 {
|
if len(apexInfo.InApexVariants) != 0 {
|
||||||
// A platform variant is required but this is for an apex so ignore it.
|
// A platform variant is required but this is for an apex so ignore it.
|
||||||
return false
|
return false
|
||||||
|
@@ -86,27 +86,27 @@ func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
|
|||||||
|
|
||||||
// Add a platform_bootclasspath that depends on the fragment.
|
// Add a platform_bootclasspath that depends on the fragment.
|
||||||
fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(
|
fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(
|
||||||
"com.android.art", "mybootclasspathfragment", java.ApexBootJarFragmentsForPlatformBootclasspath),
|
"com.android.art", "art-bootclasspath-fragment", java.ApexBootJarFragmentsForPlatformBootclasspath),
|
||||||
|
|
||||||
java.PrepareForBootImageConfigTest,
|
java.PrepareForBootImageConfigTest,
|
||||||
java.PrepareApexBootJarConfigsAndModules,
|
java.PrepareApexBootJarConfigsAndModules,
|
||||||
android.FixtureWithRootAndroidBp(`
|
android.FixtureWithRootAndroidBp(`
|
||||||
sdk {
|
sdk {
|
||||||
name: "mysdk",
|
name: "mysdk",
|
||||||
bootclasspath_fragments: ["mybootclasspathfragment"],
|
bootclasspath_fragments: ["art-bootclasspath-fragment"],
|
||||||
}
|
}
|
||||||
|
|
||||||
apex {
|
apex {
|
||||||
name: "com.android.art",
|
name: "com.android.art",
|
||||||
key: "com.android.art.key",
|
key: "com.android.art.key",
|
||||||
bootclasspath_fragments: [
|
bootclasspath_fragments: [
|
||||||
"mybootclasspathfragment",
|
"art-bootclasspath-fragment",
|
||||||
],
|
],
|
||||||
updatable: false,
|
updatable: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
bootclasspath_fragment {
|
bootclasspath_fragment {
|
||||||
name: "mybootclasspathfragment",
|
name: "art-bootclasspath-fragment",
|
||||||
image_name: "art",
|
image_name: "art",
|
||||||
contents: ["core1", "core2"],
|
contents: ["core1", "core2"],
|
||||||
apex_available: ["com.android.art"],
|
apex_available: ["com.android.art"],
|
||||||
@@ -142,10 +142,10 @@ func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
|
|||||||
).RunTest(t)
|
).RunTest(t)
|
||||||
|
|
||||||
// A preparer to update the test fixture used when processing an unpackage snapshot.
|
// A preparer to update the test fixture used when processing an unpackage snapshot.
|
||||||
preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "mybootclasspathfragment")
|
preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "art-bootclasspath-fragment")
|
||||||
|
|
||||||
// Check that source on its own configures the bootImageConfig correctly.
|
// Check that source on its own configures the bootImageConfig correctly.
|
||||||
java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/mybootclasspathfragment/android_common_apex10000/meta_lic")
|
java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/art-bootclasspath-fragment/android_common_apex10000/meta_lic")
|
||||||
java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
|
java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
|
||||||
|
|
||||||
CheckSnapshot(t, result, "mysdk", "",
|
CheckSnapshot(t, result, "mysdk", "",
|
||||||
@@ -153,7 +153,7 @@ func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
|
|||||||
// This is auto-generated. DO NOT EDIT.
|
// This is auto-generated. DO NOT EDIT.
|
||||||
|
|
||||||
prebuilt_bootclasspath_fragment {
|
prebuilt_bootclasspath_fragment {
|
||||||
name: "mybootclasspathfragment",
|
name: "art-bootclasspath-fragment",
|
||||||
prefer: false,
|
prefer: false,
|
||||||
visibility: ["//visibility:public"],
|
visibility: ["//visibility:public"],
|
||||||
apex_available: ["com.android.art"],
|
apex_available: ["com.android.art"],
|
||||||
@@ -189,12 +189,12 @@ java_import {
|
|||||||
}
|
}
|
||||||
`),
|
`),
|
||||||
checkAllCopyRules(`
|
checkAllCopyRules(`
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
|
.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
|
.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
|
.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
|
||||||
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
|
||||||
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
|
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
|
||||||
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
|
.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
|
||||||
`),
|
`),
|
||||||
@@ -213,7 +213,7 @@ java_import {
|
|||||||
java.ApexBootJarDexJarPaths...,
|
java.ApexBootJarDexJarPaths...,
|
||||||
)...,
|
)...,
|
||||||
)
|
)
|
||||||
java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/snapshot/mybootclasspathfragment/android_common_com.android.art/meta_lic")
|
java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/snapshot/art-bootclasspath-fragment/android_common_com.android.art/meta_lic")
|
||||||
java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
|
java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
|
||||||
}),
|
}),
|
||||||
|
|
||||||
@@ -221,7 +221,7 @@ java_import {
|
|||||||
|
|
||||||
// Check the behavior of the snapshot when the source is preferred.
|
// Check the behavior of the snapshot when the source is preferred.
|
||||||
snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
|
snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
|
||||||
java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/mybootclasspathfragment/android_common_apex10000/meta_lic")
|
java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/art-bootclasspath-fragment/android_common_apex10000/meta_lic")
|
||||||
java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
|
java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
|
||||||
}),
|
}),
|
||||||
|
|
||||||
@@ -229,7 +229,7 @@ java_import {
|
|||||||
|
|
||||||
// Check the behavior of the snapshot when it is preferred.
|
// Check the behavior of the snapshot when it is preferred.
|
||||||
snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
|
snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
|
||||||
java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/snapshot/prebuilt_mybootclasspathfragment/android_common_com.android.art/meta_lic")
|
java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/snapshot/prebuilt_art-bootclasspath-fragment/android_common_com.android.art/meta_lic")
|
||||||
java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
|
java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user