Merge changes I0918f2fa,I3fc6ff91,I7adc97cb,I674a5fa1,I22c45cbf into main
* changes: Change the profile path on host. Extract duplicate code to common helper functions. Fix dumpOatRules. Remove Modules() from BootclasspathFragmentApexContentInfo. Fix some tests for dexpreopt and remove unnecessary tests.
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