• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2022 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Testing support for dexpreopt config.
16//
17// The bootImageConfig/bootImageVariant structs returned by genBootImageConfigs are used in many
18// places in the build and are currently mutated in a number of those locations. This provides
19// comprehensive tests of the fields in those structs to ensure that they have been initialized
20// correctly and where relevant, mutated correctly.
21//
22// This is used in TestBootImageConfig to verify that the
23
24package java
25
26import (
27	"fmt"
28	"strings"
29	"testing"
30
31	"android/soong/android"
32)
33
34// PrepareForBootImageConfigTest is the minimal set of preparers that are needed to be able to use
35// the Check*BootImageConfig methods define here.
36var PrepareForBootImageConfigTest = android.GroupFixturePreparers(
37	android.PrepareForTestWithArchMutator,
38	android.PrepareForTestAccessingMakeVars,
39	FixtureConfigureBootJars("com.android.art:core1", "com.android.art:core2", "platform:framework"),
40)
41
42var PrepareApexBootJarConfigs = FixtureConfigureApexBootJars(
43	"com.android.foo:framework-foo", "com.android.bar:framework-bar")
44
45var PrepareApexBootJarConfigsAndModules = android.GroupFixturePreparers(
46	PrepareApexBootJarConfigs,
47	prepareApexBootJarModule("com.android.foo", "framework-foo"),
48	prepareApexBootJarModule("com.android.bar", "framework-bar"),
49)
50
51var ApexBootJarFragmentsForPlatformBootclasspath = fmt.Sprintf(`
52	{
53		apex: "%[1]s",
54		module: "%[1]s-bootclasspathfragment",
55	},
56	{
57		apex: "%[2]s",
58		module: "%[2]s-bootclasspathfragment",
59	},
60`, "com.android.foo", "com.android.bar")
61
62var ApexBootJarDexJarPaths = []string{
63	"out/soong/.intermediates/packages/modules/com.android.bar/framework-bar/android_common_apex10000/aligned/framework-bar.jar",
64	"out/soong/.intermediates/packages/modules/com.android.foo/framework-foo/android_common_apex10000/aligned/framework-foo.jar",
65}
66
67func prepareApexBootJarModule(apexName string, moduleName string) android.FixturePreparer {
68	moduleSourceDir := fmt.Sprintf("packages/modules/%s", apexName)
69	return android.GroupFixturePreparers(
70		android.FixtureAddTextFile(moduleSourceDir+"/Android.bp", fmt.Sprintf(`
71			apex {
72				name: "%[1]s",
73				key: "%[1]s.key",
74				bootclasspath_fragments: [
75					"%[1]s-bootclasspathfragment",
76				],
77				updatable: false,
78			}
79
80			apex_key {
81				name: "%[1]s.key",
82				public_key: "%[1]s.avbpubkey",
83				private_key: "%[1]s.pem",
84			}
85
86			bootclasspath_fragment {
87				name: "%[1]s-bootclasspathfragment",
88				contents: ["%[2]s"],
89				apex_available: ["%[1]s"],
90				hidden_api: {
91					split_packages: ["*"],
92				},
93			}
94
95			java_library {
96				name: "%[2]s",
97				srcs: ["%[2]s.java"],
98				system_modules: "none",
99				sdk_version: "none",
100				compile_dex: true,
101				apex_available: ["%[1]s"],
102			}
103		`, apexName, moduleName)),
104		android.FixtureMergeMockFs(android.MockFS{
105			fmt.Sprintf("%s/apex_manifest.json", moduleSourceDir):          nil,
106			fmt.Sprintf("%s/%s.avbpubkey", moduleSourceDir, apexName):      nil,
107			fmt.Sprintf("%s/%s.pem", moduleSourceDir, apexName):            nil,
108			fmt.Sprintf("system/sepolicy/apex/%s-file_contexts", apexName): nil,
109			fmt.Sprintf("%s/%s.java", moduleSourceDir, moduleName):         nil,
110		}),
111	)
112}
113
114// normalizedInstall represents a android.RuleBuilderInstall that has been normalized to remove
115// test specific parts of the From path.
116type normalizedInstall struct {
117	from string
118	to   string
119}
120
121// normalizeInstalls converts a slice of android.RuleBuilderInstall into a slice of
122// normalizedInstall to allow them to be compared using android.AssertDeepEquals.
123func normalizeInstalls(installs android.RuleBuilderInstalls) []normalizedInstall {
124	var normalized []normalizedInstall
125	for _, install := range installs {
126		normalized = append(normalized, normalizedInstall{
127			from: install.From.RelativeToTop().String(),
128			to:   install.To,
129		})
130	}
131	return normalized
132}
133
134// assertInstallsEqual normalized the android.RuleBuilderInstalls and compares against the expected
135// normalizedInstalls.
136func assertInstallsEqual(t *testing.T, message string, expected []normalizedInstall, actual android.RuleBuilderInstalls) {
137	t.Helper()
138	normalizedActual := normalizeInstalls(actual)
139	android.AssertDeepEquals(t, message, expected, normalizedActual)
140}
141
142// expectedConfig encapsulates the expected properties that will be set in a bootImageConfig
143//
144// Each field <x> in here is compared against the corresponding field <x> in bootImageConfig.
145type expectedConfig struct {
146	name                     string
147	stem                     string
148	dir                      string
149	symbolsDir               string
150	installDir               string
151	profileInstallPathInApex string
152	modules                  android.ConfiguredJarList
153	dexPaths                 []string
154	dexPathsDeps             []string
155	zip                      string
156	variants                 []*expectedVariant
157
158	// Mutated fields
159	profileInstalls            []normalizedInstall
160	profileLicenseMetadataFile string
161}
162
163// expectedVariant encapsulates the expected properties that will be set in a bootImageVariant
164//
165// Each field <x> in here is compared against the corresponding field <x> in bootImageVariant
166// except for archType which is compared against the target.Arch.ArchType field in bootImageVariant.
167type expectedVariant struct {
168	archType          android.ArchType
169	dexLocations      []string
170	dexLocationsDeps  []string
171	imagePathOnHost   string
172	imagePathOnDevice string
173	imagesDeps        []string
174	baseImages        []string
175	baseImagesDeps    []string
176
177	// Mutated fields
178	installs            []normalizedInstall
179	vdexInstalls        []normalizedInstall
180	unstrippedInstalls  []normalizedInstall
181	licenseMetadataFile string
182}
183
184// CheckArtBootImageConfig checks the status of the fields of the bootImageConfig and
185// bootImageVariant structures that are returned from artBootImageConfig.
186//
187// This is before any fields are mutated.
188func CheckArtBootImageConfig(t *testing.T, result *android.TestResult) {
189	checkArtBootImageConfig(t, result, false, "")
190}
191
192// getArtImageConfig gets the ART bootImageConfig that was created during the test.
193func getArtImageConfig(result *android.TestResult) *bootImageConfig {
194	pathCtx := &android.TestPathContext{TestResult: result}
195	imageConfig := artBootImageConfig(pathCtx)
196	return imageConfig
197}
198
199// checkArtBootImageConfig checks the ART boot image.
200//
201// mutated is true if this is called after fields in the image have been mutated by the ART
202// bootclasspath_fragment and false otherwise.
203func checkArtBootImageConfig(t *testing.T, result *android.TestResult, mutated bool, expectedLicenseMetadataFile string) {
204	imageConfig := getArtImageConfig(result)
205
206	expected := &expectedConfig{
207		name:                     "art",
208		stem:                     "boot",
209		dir:                      "out/soong/dexpreopt_arm64/dex_artjars",
210		symbolsDir:               "out/soong/dexpreopt_arm64/dex_artjars_unstripped",
211		installDir:               "apex/art_boot_images/javalib",
212		profileInstallPathInApex: "etc/boot-image.prof",
213		modules:                  android.CreateTestConfiguredJarList([]string{"com.android.art:core1", "com.android.art:core2"}),
214		dexPaths:                 []string{"out/soong/dexpreopt_arm64/dex_artjars_input/core1.jar", "out/soong/dexpreopt_arm64/dex_artjars_input/core2.jar"},
215		dexPathsDeps:             []string{"out/soong/dexpreopt_arm64/dex_artjars_input/core1.jar", "out/soong/dexpreopt_arm64/dex_artjars_input/core2.jar"},
216		zip:                      "out/soong/dexpreopt_arm64/dex_artjars/art.zip",
217		variants: []*expectedVariant{
218			{
219				archType:          android.Arm64,
220				dexLocations:      []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"},
221				dexLocationsDeps:  []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"},
222				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art",
223				imagePathOnDevice: "/apex/art_boot_images/javalib/arm64/boot.art",
224				imagesDeps: []string{
225					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art",
226					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat",
227					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex",
228					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art",
229					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat",
230					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex",
231				},
232				installs: []normalizedInstall{
233					{
234						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art",
235						to:   "/apex/art_boot_images/javalib/arm64/boot.art",
236					},
237					{
238						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat",
239						to:   "/apex/art_boot_images/javalib/arm64/boot.oat",
240					},
241					{
242						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art",
243						to:   "/apex/art_boot_images/javalib/arm64/boot-core2.art",
244					},
245					{
246						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat",
247						to:   "/apex/art_boot_images/javalib/arm64/boot-core2.oat",
248					},
249				},
250				vdexInstalls: []normalizedInstall{
251					{
252						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex",
253						to:   "/apex/art_boot_images/javalib/arm64/boot.vdex",
254					},
255					{
256						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex",
257						to:   "/apex/art_boot_images/javalib/arm64/boot-core2.vdex",
258					},
259				},
260				unstrippedInstalls: []normalizedInstall{
261					{
262						from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat",
263						to:   "/apex/art_boot_images/javalib/arm64/boot.oat",
264					},
265					{
266						from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat",
267						to:   "/apex/art_boot_images/javalib/arm64/boot-core2.oat",
268					},
269				},
270				licenseMetadataFile: expectedLicenseMetadataFile,
271			},
272			{
273				archType:          android.Arm,
274				dexLocations:      []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"},
275				dexLocationsDeps:  []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"},
276				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art",
277				imagePathOnDevice: "/apex/art_boot_images/javalib/arm/boot.art",
278				imagesDeps: []string{
279					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art",
280					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat",
281					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex",
282					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art",
283					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat",
284					"out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex",
285				},
286				installs: []normalizedInstall{
287					{
288						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art",
289						to:   "/apex/art_boot_images/javalib/arm/boot.art",
290					},
291					{
292						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat",
293						to:   "/apex/art_boot_images/javalib/arm/boot.oat",
294					},
295					{
296						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art",
297						to:   "/apex/art_boot_images/javalib/arm/boot-core2.art",
298					},
299					{
300						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat",
301						to:   "/apex/art_boot_images/javalib/arm/boot-core2.oat",
302					},
303				},
304				vdexInstalls: []normalizedInstall{
305					{
306						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex",
307						to:   "/apex/art_boot_images/javalib/arm/boot.vdex",
308					},
309					{
310						from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex",
311						to:   "/apex/art_boot_images/javalib/arm/boot-core2.vdex",
312					},
313				},
314				unstrippedInstalls: []normalizedInstall{
315					{
316						from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat",
317						to:   "/apex/art_boot_images/javalib/arm/boot.oat",
318					},
319					{
320						from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat",
321						to:   "/apex/art_boot_images/javalib/arm/boot-core2.oat",
322					},
323				},
324				licenseMetadataFile: expectedLicenseMetadataFile,
325			},
326			{
327				archType:          android.X86_64,
328				dexLocations:      []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"},
329				dexLocationsDeps:  []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"},
330				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art",
331				imagePathOnDevice: "/apex/art_boot_images/javalib/x86_64/boot.art",
332				imagesDeps: []string{
333					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art",
334					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat",
335					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex",
336					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art",
337					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
338					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex",
339				},
340				installs: []normalizedInstall{
341					{
342						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art",
343						to:   "/apex/art_boot_images/javalib/x86_64/boot.art",
344					}, {
345						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat",
346						to:   "/apex/art_boot_images/javalib/x86_64/boot.oat",
347					},
348					{
349						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art",
350						to:   "/apex/art_boot_images/javalib/x86_64/boot-core2.art",
351					}, {
352						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
353						to:   "/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
354					},
355				},
356				vdexInstalls: []normalizedInstall{
357					{
358						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex",
359						to:   "/apex/art_boot_images/javalib/x86_64/boot.vdex",
360					},
361					{
362						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex",
363						to:   "/apex/art_boot_images/javalib/x86_64/boot-core2.vdex",
364					},
365				},
366				unstrippedInstalls: []normalizedInstall{
367					{
368						from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat",
369						to:   "/apex/art_boot_images/javalib/x86_64/boot.oat",
370					},
371					{
372						from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
373						to:   "/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
374					},
375				},
376				licenseMetadataFile: expectedLicenseMetadataFile,
377			},
378			{
379				archType:          android.X86,
380				dexLocations:      []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"},
381				dexLocationsDeps:  []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"},
382				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art",
383				imagePathOnDevice: "/apex/art_boot_images/javalib/x86/boot.art",
384				imagesDeps: []string{
385					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art",
386					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat",
387					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex",
388					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art",
389					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat",
390					"out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex",
391				},
392				installs: []normalizedInstall{
393					{
394						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art",
395						to:   "/apex/art_boot_images/javalib/x86/boot.art",
396					}, {
397						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat",
398						to:   "/apex/art_boot_images/javalib/x86/boot.oat",
399					},
400					{
401						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art",
402						to:   "/apex/art_boot_images/javalib/x86/boot-core2.art",
403					}, {
404						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat",
405						to:   "/apex/art_boot_images/javalib/x86/boot-core2.oat",
406					},
407				},
408				vdexInstalls: []normalizedInstall{
409					{
410						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex",
411						to:   "/apex/art_boot_images/javalib/x86/boot.vdex",
412					},
413					{
414						from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex",
415						to:   "/apex/art_boot_images/javalib/x86/boot-core2.vdex",
416					},
417				},
418				unstrippedInstalls: []normalizedInstall{
419					{
420						from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat",
421						to:   "/apex/art_boot_images/javalib/x86/boot.oat",
422					},
423					{
424						from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat",
425						to:   "/apex/art_boot_images/javalib/x86/boot-core2.oat",
426					},
427				},
428				licenseMetadataFile: expectedLicenseMetadataFile,
429			},
430		},
431	}
432
433	checkBootImageConfig(t, imageConfig, mutated, expected)
434}
435
436// getFrameworkImageConfig gets the framework bootImageConfig that was created during the test.
437func getFrameworkImageConfig(result *android.TestResult) *bootImageConfig {
438	pathCtx := &android.TestPathContext{TestResult: result}
439	imageConfig := defaultBootImageConfig(pathCtx)
440	return imageConfig
441}
442
443// CheckFrameworkBootImageConfig checks the status of the fields of the bootImageConfig and
444// bootImageVariant structures that are returned from defaultBootImageConfig.
445//
446// This is before any fields are mutated.
447func CheckFrameworkBootImageConfig(t *testing.T, result *android.TestResult) {
448	checkFrameworkBootImageConfig(t, result, false, "")
449}
450
451// checkFrameworkBootImageConfig checks the framework boot image.
452//
453// mutated is true if this is called after fields in the image have been mutated by the
454// platform_bootclasspath and false otherwise.
455func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mutated bool, expectedLicenseMetadataFile string) {
456	imageConfig := getFrameworkImageConfig(result)
457
458	expected := &expectedConfig{
459		name:                     "boot",
460		stem:                     "boot",
461		dir:                      "out/soong/dexpreopt_arm64/dex_bootjars",
462		symbolsDir:               "out/soong/dexpreopt_arm64/dex_bootjars_unstripped",
463		installDir:               "system/framework",
464		profileInstallPathInApex: "",
465		modules: android.CreateTestConfiguredJarList([]string{
466			"com.android.art:core1",
467			"com.android.art:core2",
468			"platform:framework",
469		}),
470		dexPaths: []string{
471			"out/soong/dexpreopt_arm64/dex_bootjars_input/core1.jar",
472			"out/soong/dexpreopt_arm64/dex_bootjars_input/core2.jar",
473			"out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar",
474		},
475		dexPathsDeps: []string{
476			"out/soong/dexpreopt_arm64/dex_bootjars_input/core1.jar",
477			"out/soong/dexpreopt_arm64/dex_bootjars_input/core2.jar",
478			"out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar",
479		},
480		zip: "out/soong/dexpreopt_arm64/dex_bootjars/boot.zip",
481		variants: []*expectedVariant{
482			{
483				archType: android.Arm64,
484				dexLocations: []string{
485					"/apex/com.android.art/javalib/core1.jar",
486					"/apex/com.android.art/javalib/core2.jar",
487					"/system/framework/framework.jar",
488				},
489				dexLocationsDeps: []string{
490					"/apex/com.android.art/javalib/core1.jar",
491					"/apex/com.android.art/javalib/core2.jar",
492					"/system/framework/framework.jar",
493				},
494				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art",
495				imagePathOnDevice: "/system/framework/arm64/boot.art",
496				imagesDeps: []string{
497					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art",
498					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat",
499					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex",
500					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art",
501					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat",
502					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex",
503					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art",
504					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat",
505					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex",
506				},
507				installs: []normalizedInstall{
508					{
509						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art",
510						to:   "/system/framework/arm64/boot.art",
511					},
512					{
513						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat",
514						to:   "/system/framework/arm64/boot.oat",
515					},
516					{
517						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art",
518						to:   "/system/framework/arm64/boot-core2.art",
519					},
520					{
521						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat",
522						to:   "/system/framework/arm64/boot-core2.oat",
523					},
524					{
525						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art",
526						to:   "/system/framework/arm64/boot-framework.art",
527					},
528					{
529						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat",
530						to:   "/system/framework/arm64/boot-framework.oat",
531					},
532				},
533				vdexInstalls: []normalizedInstall{
534					{
535						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex",
536						to:   "/system/framework/arm64/boot.vdex",
537					},
538					{
539						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex",
540						to:   "/system/framework/arm64/boot-core2.vdex",
541					},
542					{
543						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex",
544						to:   "/system/framework/arm64/boot-framework.vdex",
545					},
546				},
547				unstrippedInstalls: []normalizedInstall{
548					{
549						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot.oat",
550						to:   "/system/framework/arm64/boot.oat",
551					},
552					{
553						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-core2.oat",
554						to:   "/system/framework/arm64/boot-core2.oat",
555					},
556					{
557						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat",
558						to:   "/system/framework/arm64/boot-framework.oat",
559					},
560				},
561				licenseMetadataFile: expectedLicenseMetadataFile,
562			},
563			{
564				archType: android.Arm,
565				dexLocations: []string{
566					"/apex/com.android.art/javalib/core1.jar",
567					"/apex/com.android.art/javalib/core2.jar",
568					"/system/framework/framework.jar",
569				},
570				dexLocationsDeps: []string{
571					"/apex/com.android.art/javalib/core1.jar",
572					"/apex/com.android.art/javalib/core2.jar",
573					"/system/framework/framework.jar",
574				},
575				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art",
576				imagePathOnDevice: "/system/framework/arm/boot.art",
577				imagesDeps: []string{
578					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art",
579					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat",
580					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex",
581					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art",
582					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat",
583					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex",
584					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art",
585					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat",
586					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex",
587				},
588				installs: []normalizedInstall{
589					{
590						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art",
591						to:   "/system/framework/arm/boot.art",
592					},
593					{
594						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat",
595						to:   "/system/framework/arm/boot.oat",
596					},
597					{
598						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art",
599						to:   "/system/framework/arm/boot-core2.art",
600					},
601					{
602						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat",
603						to:   "/system/framework/arm/boot-core2.oat",
604					},
605					{
606						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art",
607						to:   "/system/framework/arm/boot-framework.art",
608					},
609					{
610						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat",
611						to:   "/system/framework/arm/boot-framework.oat",
612					},
613				},
614				vdexInstalls: []normalizedInstall{
615					{
616						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex",
617						to:   "/system/framework/arm/boot.vdex",
618					},
619					{
620						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex",
621						to:   "/system/framework/arm/boot-core2.vdex",
622					},
623					{
624						from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex",
625						to:   "/system/framework/arm/boot-framework.vdex",
626					},
627				},
628				unstrippedInstalls: []normalizedInstall{
629					{
630						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot.oat",
631						to:   "/system/framework/arm/boot.oat",
632					},
633					{
634						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-core2.oat",
635						to:   "/system/framework/arm/boot-core2.oat",
636					},
637					{
638						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat",
639						to:   "/system/framework/arm/boot-framework.oat",
640					},
641				},
642				licenseMetadataFile: expectedLicenseMetadataFile,
643			},
644			{
645				archType: android.X86_64,
646				dexLocations: []string{
647					"host/linux-x86/apex/com.android.art/javalib/core1.jar",
648					"host/linux-x86/apex/com.android.art/javalib/core2.jar",
649					"host/linux-x86/system/framework/framework.jar",
650				},
651				dexLocationsDeps: []string{
652					"host/linux-x86/apex/com.android.art/javalib/core1.jar",
653					"host/linux-x86/apex/com.android.art/javalib/core2.jar",
654					"host/linux-x86/system/framework/framework.jar",
655				},
656				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art",
657				imagePathOnDevice: "/system/framework/x86_64/boot.art",
658				imagesDeps: []string{
659					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art",
660					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat",
661					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex",
662					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art",
663					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat",
664					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex",
665					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art",
666					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat",
667					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex",
668				},
669				installs: []normalizedInstall{
670					{
671						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art",
672						to:   "/system/framework/x86_64/boot.art",
673					},
674					{
675						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat",
676						to:   "/system/framework/x86_64/boot.oat",
677					},
678					{
679						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art",
680						to:   "/system/framework/x86_64/boot-core2.art",
681					},
682					{
683						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat",
684						to:   "/system/framework/x86_64/boot-core2.oat",
685					},
686					{
687						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art",
688						to:   "/system/framework/x86_64/boot-framework.art",
689					},
690					{
691						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat",
692						to:   "/system/framework/x86_64/boot-framework.oat",
693					},
694				},
695				vdexInstalls: []normalizedInstall{
696					{
697						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex",
698						to:   "/system/framework/x86_64/boot.vdex",
699					},
700					{
701						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex",
702						to:   "/system/framework/x86_64/boot-core2.vdex",
703					},
704					{
705						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex",
706						to:   "/system/framework/x86_64/boot-framework.vdex",
707					},
708				},
709				unstrippedInstalls: []normalizedInstall{
710					{
711						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot.oat",
712						to:   "/system/framework/x86_64/boot.oat",
713					},
714					{
715						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-core2.oat",
716						to:   "/system/framework/x86_64/boot-core2.oat",
717					},
718					{
719						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat",
720						to:   "/system/framework/x86_64/boot-framework.oat",
721					},
722				},
723				licenseMetadataFile: expectedLicenseMetadataFile,
724			},
725			{
726				archType: android.X86,
727				dexLocations: []string{
728					"host/linux-x86/apex/com.android.art/javalib/core1.jar",
729					"host/linux-x86/apex/com.android.art/javalib/core2.jar",
730					"host/linux-x86/system/framework/framework.jar",
731				},
732				dexLocationsDeps: []string{
733					"host/linux-x86/apex/com.android.art/javalib/core1.jar",
734					"host/linux-x86/apex/com.android.art/javalib/core2.jar",
735					"host/linux-x86/system/framework/framework.jar",
736				},
737				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art",
738				imagePathOnDevice: "/system/framework/x86/boot.art",
739				imagesDeps: []string{
740					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art",
741					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat",
742					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex",
743					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art",
744					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat",
745					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex",
746					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art",
747					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat",
748					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex",
749				},
750				installs: []normalizedInstall{
751					{
752						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art",
753						to:   "/system/framework/x86/boot.art",
754					},
755					{
756						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat",
757						to:   "/system/framework/x86/boot.oat",
758					},
759					{
760						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art",
761						to:   "/system/framework/x86/boot-core2.art",
762					},
763					{
764						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat",
765						to:   "/system/framework/x86/boot-core2.oat",
766					},
767					{
768						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art",
769						to:   "/system/framework/x86/boot-framework.art",
770					},
771					{
772						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat",
773						to:   "/system/framework/x86/boot-framework.oat",
774					},
775				},
776				vdexInstalls: []normalizedInstall{
777					{
778						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex",
779						to:   "/system/framework/x86/boot.vdex",
780					},
781					{
782						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex",
783						to:   "/system/framework/x86/boot-core2.vdex",
784					},
785					{
786						from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex",
787						to:   "/system/framework/x86/boot-framework.vdex",
788					},
789				},
790				unstrippedInstalls: []normalizedInstall{
791					{
792						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot.oat",
793						to:   "/system/framework/x86/boot.oat",
794					},
795					{
796						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-core2.oat",
797						to:   "/system/framework/x86/boot-core2.oat",
798					},
799					{
800						from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat",
801						to:   "/system/framework/x86/boot-framework.oat",
802					},
803				},
804				licenseMetadataFile: expectedLicenseMetadataFile,
805			},
806		},
807		profileInstalls: []normalizedInstall{
808			{from: "out/soong/dexpreopt_arm64/dex_bootjars/boot.bprof", to: "/system/etc/boot-image.bprof"},
809			{from: "out/soong/dexpreopt_arm64/dex_bootjars/boot.prof", to: "/system/etc/boot-image.prof"},
810		},
811		profileLicenseMetadataFile: expectedLicenseMetadataFile,
812	}
813
814	checkBootImageConfig(t, imageConfig, mutated, expected)
815}
816
817// getMainlineImageConfig gets the framework bootImageConfig that was created during the test.
818func getMainlineImageConfig(result *android.TestResult) *bootImageConfig {
819	pathCtx := &android.TestPathContext{TestResult: result}
820	imageConfig := mainlineBootImageConfig(pathCtx)
821	return imageConfig
822}
823
824// CheckMainlineBootImageConfig checks the status of the fields of the bootImageConfig and
825// bootImageVariant structures that are returned from mainlineBootImageConfig.
826//
827// This is before any fields are mutated.
828func CheckMainlineBootImageConfig(t *testing.T, result *android.TestResult) {
829	expectedLicenseMetadataFile := ""
830	imageConfig := getMainlineImageConfig(result)
831
832	expected := &expectedConfig{
833		name:                     "mainline",
834		stem:                     "boot",
835		dir:                      "out/soong/dexpreopt_arm64/dex_mainlinejars",
836		symbolsDir:               "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped",
837		installDir:               "system/framework",
838		profileInstallPathInApex: "",
839		modules: android.CreateTestConfiguredJarList([]string{
840			"com.android.foo:framework-foo",
841			"com.android.bar:framework-bar",
842		}),
843		dexPaths: []string{
844			"out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-foo.jar",
845			"out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-bar.jar",
846		},
847		dexPathsDeps: []string{
848			"out/soong/dexpreopt_arm64/dex_bootjars_input/core1.jar",
849			"out/soong/dexpreopt_arm64/dex_bootjars_input/core2.jar",
850			"out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar",
851			"out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-foo.jar",
852			"out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-bar.jar",
853		},
854		zip: "out/soong/dexpreopt_arm64/dex_mainlinejars/mainline.zip",
855		variants: []*expectedVariant{
856			{
857				archType: android.Arm64,
858				dexLocations: []string{
859					"/apex/com.android.foo/javalib/framework-foo.jar",
860					"/apex/com.android.bar/javalib/framework-bar.jar",
861				},
862				dexLocationsDeps: []string{
863					"/apex/com.android.art/javalib/core1.jar",
864					"/apex/com.android.art/javalib/core2.jar",
865					"/system/framework/framework.jar",
866					"/apex/com.android.foo/javalib/framework-foo.jar",
867					"/apex/com.android.bar/javalib/framework-bar.jar",
868				},
869				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art",
870				imagePathOnDevice: "/system/framework/arm64/boot-framework-foo.art",
871				imagesDeps: []string{
872					"out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art",
873					"out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat",
874					"out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex",
875				},
876				baseImages: []string{
877					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art",
878				},
879				baseImagesDeps: []string{
880					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art",
881					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat",
882					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex",
883					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art",
884					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat",
885					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex",
886					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art",
887					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat",
888					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex",
889				},
890				installs: []normalizedInstall{
891					{
892						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art",
893						to:   "/system/framework/arm64/boot-framework-foo.art",
894					},
895					{
896						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat",
897						to:   "/system/framework/arm64/boot-framework-foo.oat",
898					},
899				},
900				vdexInstalls: []normalizedInstall{
901					{
902						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex",
903						to:   "/system/framework/arm64/boot-framework-foo.vdex",
904					},
905				},
906				unstrippedInstalls: []normalizedInstall{
907					{
908						from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat",
909						to:   "/system/framework/arm64/boot-framework-foo.oat",
910					},
911				},
912				licenseMetadataFile: expectedLicenseMetadataFile,
913			},
914			{
915				archType: android.Arm,
916				dexLocations: []string{
917					"/apex/com.android.foo/javalib/framework-foo.jar",
918					"/apex/com.android.bar/javalib/framework-bar.jar",
919				},
920				dexLocationsDeps: []string{
921					"/apex/com.android.art/javalib/core1.jar",
922					"/apex/com.android.art/javalib/core2.jar",
923					"/system/framework/framework.jar",
924					"/apex/com.android.foo/javalib/framework-foo.jar",
925					"/apex/com.android.bar/javalib/framework-bar.jar",
926				},
927				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art",
928				imagePathOnDevice: "/system/framework/arm/boot-framework-foo.art",
929				imagesDeps: []string{
930					"out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art",
931					"out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat",
932					"out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex",
933				},
934				baseImages: []string{
935					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art",
936				},
937				baseImagesDeps: []string{
938					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art",
939					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat",
940					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex",
941					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art",
942					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat",
943					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex",
944					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art",
945					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat",
946					"out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex",
947				},
948				installs: []normalizedInstall{
949					{
950						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art",
951						to:   "/system/framework/arm/boot-framework-foo.art",
952					},
953					{
954						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat",
955						to:   "/system/framework/arm/boot-framework-foo.oat",
956					},
957				},
958				vdexInstalls: []normalizedInstall{
959					{
960						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex",
961						to:   "/system/framework/arm/boot-framework-foo.vdex",
962					},
963				},
964				unstrippedInstalls: []normalizedInstall{
965					{
966						from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat",
967						to:   "/system/framework/arm/boot-framework-foo.oat",
968					},
969				},
970				licenseMetadataFile: expectedLicenseMetadataFile,
971			},
972			{
973				archType: android.X86_64,
974				dexLocations: []string{
975					"host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar",
976					"host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar",
977				},
978				dexLocationsDeps: []string{
979					"host/linux-x86/apex/com.android.art/javalib/core1.jar",
980					"host/linux-x86/apex/com.android.art/javalib/core2.jar",
981					"host/linux-x86/system/framework/framework.jar",
982					"host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar",
983					"host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar",
984				},
985				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art",
986				imagePathOnDevice: "/system/framework/x86_64/boot-framework-foo.art",
987				imagesDeps: []string{
988					"out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art",
989					"out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat",
990					"out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex",
991				},
992				baseImages: []string{
993					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art",
994				},
995				baseImagesDeps: []string{
996					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art",
997					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat",
998					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex",
999					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art",
1000					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat",
1001					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex",
1002					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art",
1003					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat",
1004					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex",
1005				},
1006				installs: []normalizedInstall{
1007					{
1008						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art",
1009						to:   "/system/framework/x86_64/boot-framework-foo.art",
1010					},
1011					{
1012						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat",
1013						to:   "/system/framework/x86_64/boot-framework-foo.oat",
1014					},
1015				},
1016				vdexInstalls: []normalizedInstall{
1017					{
1018						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex",
1019						to:   "/system/framework/x86_64/boot-framework-foo.vdex",
1020					},
1021				},
1022				unstrippedInstalls: []normalizedInstall{
1023					{
1024						from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat",
1025						to:   "/system/framework/x86_64/boot-framework-foo.oat",
1026					},
1027				},
1028				licenseMetadataFile: expectedLicenseMetadataFile,
1029			},
1030			{
1031				archType: android.X86,
1032				dexLocations: []string{
1033					"host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar",
1034					"host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar",
1035				},
1036				dexLocationsDeps: []string{
1037					"host/linux-x86/apex/com.android.art/javalib/core1.jar",
1038					"host/linux-x86/apex/com.android.art/javalib/core2.jar",
1039					"host/linux-x86/system/framework/framework.jar",
1040					"host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar",
1041					"host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar",
1042				},
1043				imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art",
1044				imagePathOnDevice: "/system/framework/x86/boot-framework-foo.art",
1045				imagesDeps: []string{
1046					"out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art",
1047					"out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat",
1048					"out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex",
1049				},
1050				baseImages: []string{
1051					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art",
1052				},
1053				baseImagesDeps: []string{
1054					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art",
1055					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat",
1056					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex",
1057					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art",
1058					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat",
1059					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex",
1060					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art",
1061					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat",
1062					"out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex",
1063				},
1064				installs: []normalizedInstall{
1065					{
1066						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art",
1067						to:   "/system/framework/x86/boot-framework-foo.art",
1068					},
1069					{
1070						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat",
1071						to:   "/system/framework/x86/boot-framework-foo.oat",
1072					},
1073				},
1074				vdexInstalls: []normalizedInstall{
1075					{
1076						from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex",
1077						to:   "/system/framework/x86/boot-framework-foo.vdex",
1078					},
1079				},
1080				unstrippedInstalls: []normalizedInstall{
1081					{
1082						from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat",
1083						to:   "/system/framework/x86/boot-framework-foo.oat",
1084					},
1085				},
1086				licenseMetadataFile: expectedLicenseMetadataFile,
1087			},
1088		},
1089		profileInstalls:            []normalizedInstall{},
1090		profileLicenseMetadataFile: expectedLicenseMetadataFile,
1091	}
1092
1093	checkBootImageConfig(t, imageConfig, false, expected)
1094}
1095
1096// clearMutatedFields clears fields in the expectedConfig that correspond to fields in the
1097// bootImageConfig/bootImageVariant structs which are mutated outside the call to
1098// genBootImageConfigs.
1099//
1100// This allows the resulting expectedConfig struct to be compared against the values of those boot
1101// image structs immediately the call to genBootImageConfigs. If this is not called then the
1102// expectedConfig struct will expect the boot image structs to have been mutated by the ART
1103// bootclasspath_fragment and the platform_bootclasspath.
1104func clearMutatedFields(expected *expectedConfig) {
1105	expected.profileInstalls = nil
1106	expected.profileLicenseMetadataFile = ""
1107	for _, variant := range expected.variants {
1108		variant.installs = nil
1109		variant.vdexInstalls = nil
1110		variant.unstrippedInstalls = nil
1111		variant.licenseMetadataFile = ""
1112	}
1113}
1114
1115// checkBootImageConfig checks a boot image against the expected contents.
1116//
1117// If mutated is false then this will clear any mutated fields in the expected contents back to the
1118// zero value so that they will match the unmodified values in the boot image.
1119//
1120// It runs the checks in an image specific subtest of the current test.
1121func checkBootImageConfig(t *testing.T, imageConfig *bootImageConfig, mutated bool, expected *expectedConfig) {
1122	if !mutated {
1123		clearMutatedFields(expected)
1124	}
1125
1126	t.Run(imageConfig.name, func(t *testing.T) {
1127		nestedCheckBootImageConfig(t, imageConfig, expected)
1128	})
1129}
1130
1131// nestedCheckBootImageConfig does the work of comparing the image against the expected values and
1132// is run in an image specific subtest.
1133func nestedCheckBootImageConfig(t *testing.T, imageConfig *bootImageConfig, expected *expectedConfig) {
1134	android.AssertStringEquals(t, "name", expected.name, imageConfig.name)
1135	android.AssertStringEquals(t, "stem", expected.stem, imageConfig.stem)
1136	android.AssertPathRelativeToTopEquals(t, "dir", expected.dir, imageConfig.dir)
1137	android.AssertPathRelativeToTopEquals(t, "symbolsDir", expected.symbolsDir, imageConfig.symbolsDir)
1138	android.AssertStringEquals(t, "installDir", expected.installDir, imageConfig.installDir)
1139	android.AssertStringEquals(t, "profileInstallPathInApex", expected.profileInstallPathInApex, imageConfig.profileInstallPathInApex)
1140	android.AssertDeepEquals(t, "modules", expected.modules, imageConfig.modules)
1141	android.AssertPathsRelativeToTopEquals(t, "dexPaths", expected.dexPaths, imageConfig.dexPaths.Paths())
1142	android.AssertPathsRelativeToTopEquals(t, "dexPathsDeps", expected.dexPathsDeps, imageConfig.dexPathsDeps.Paths())
1143	// dexPathsByModule is just a different representation of the other information in the config.
1144	android.AssertPathRelativeToTopEquals(t, "zip", expected.zip, imageConfig.zip)
1145	assertInstallsEqual(t, "profileInstalls", expected.profileInstalls, imageConfig.profileInstalls)
1146	android.AssertStringEquals(t, "profileLicenseMetadataFile", expected.profileLicenseMetadataFile, imageConfig.profileLicenseMetadataFile.RelativeToTop().String())
1147
1148	android.AssertIntEquals(t, "variant count", 4, len(imageConfig.variants))
1149	for i, variant := range imageConfig.variants {
1150		expectedVariant := expected.variants[i]
1151		t.Run(variant.target.Arch.ArchType.String(), func(t *testing.T) {
1152			android.AssertDeepEquals(t, "archType", expectedVariant.archType, variant.target.Arch.ArchType)
1153			android.AssertDeepEquals(t, "dexLocations", expectedVariant.dexLocations, variant.dexLocations)
1154			android.AssertDeepEquals(t, "dexLocationsDeps", expectedVariant.dexLocationsDeps, variant.dexLocationsDeps)
1155			android.AssertPathRelativeToTopEquals(t, "imagePathOnHost", expectedVariant.imagePathOnHost, variant.imagePathOnHost)
1156			android.AssertStringEquals(t, "imagePathOnDevice", expectedVariant.imagePathOnDevice, variant.imagePathOnDevice)
1157			android.AssertPathsRelativeToTopEquals(t, "imagesDeps", expectedVariant.imagesDeps, variant.imagesDeps.Paths())
1158			android.AssertPathsRelativeToTopEquals(t, "baseImages", expectedVariant.baseImages, variant.baseImages.Paths())
1159			android.AssertPathsRelativeToTopEquals(t, "baseImagesDeps", expectedVariant.baseImagesDeps, variant.baseImagesDeps)
1160			assertInstallsEqual(t, "installs", expectedVariant.installs, variant.installs)
1161			assertInstallsEqual(t, "vdexInstalls", expectedVariant.vdexInstalls, variant.vdexInstalls)
1162			assertInstallsEqual(t, "unstrippedInstalls", expectedVariant.unstrippedInstalls, variant.unstrippedInstalls)
1163			android.AssertStringEquals(t, "licenseMetadataFile", expectedVariant.licenseMetadataFile, variant.licenseMetadataFile.RelativeToTop().String())
1164		})
1165	}
1166}
1167
1168// CheckMutatedArtBootImageConfig checks the mutated fields in the bootImageConfig/Variant for ART.
1169func CheckMutatedArtBootImageConfig(t *testing.T, result *android.TestResult, expectedLicenseMetadataFile string) {
1170	checkArtBootImageConfig(t, result, true, expectedLicenseMetadataFile)
1171
1172	// Check the dexpreopt make vars. Do it in here as it depends on the expected license metadata
1173	// file at the moment and it
1174	checkDexpreoptMakeVars(t, result, expectedLicenseMetadataFile)
1175}
1176
1177// CheckMutatedFrameworkBootImageConfig checks the mutated fields in the bootImageConfig/Variant for framework.
1178func CheckMutatedFrameworkBootImageConfig(t *testing.T, result *android.TestResult, expectedLicenseMetadataFile string) {
1179	checkFrameworkBootImageConfig(t, result, true, expectedLicenseMetadataFile)
1180}
1181
1182// checkDexpreoptMakeVars checks the DEXPREOPT_ prefixed make vars produced by dexpreoptBootJars
1183// singleton.
1184func checkDexpreoptMakeVars(t *testing.T, result *android.TestResult, expectedLicenseMetadataFile string) {
1185	vars := result.MakeVarsForTesting(func(variable android.MakeVarVariable) bool {
1186		return strings.HasPrefix(variable.Name(), "DEXPREOPT_")
1187	})
1188
1189	out := &strings.Builder{}
1190	for _, v := range vars {
1191		fmt.Fprintf(out, "%s=%s\n", v.Name(), android.StringRelativeToTop(result.Config, v.Value()))
1192	}
1193	format := `
1194DEXPREOPT_BOOTCLASSPATH_DEX_FILES=out/soong/dexpreopt_arm64/dex_bootjars_input/core1.jar out/soong/dexpreopt_arm64/dex_bootjars_input/core2.jar out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar
1195DEXPREOPT_BOOTCLASSPATH_DEX_LOCATIONS=/apex/com.android.art/javalib/core1.jar /apex/com.android.art/javalib/core2.jar /system/framework/framework.jar
1196DEXPREOPT_BOOT_JARS_MODULES=com.android.art:core1:com.android.art:core2:platform:framework
1197DEXPREOPT_GEN=out/host/linux-x86/bin/dexpreopt_gen
1198DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art:/apex/art_boot_images/javalib/arm/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art:/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat
1199DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art:/apex/art_boot_images/javalib/arm64/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art:/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat
1200DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art:/apex/art_boot_images/javalib/x86/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art:/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat
1201DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art:/apex/art_boot_images/javalib/x86_64/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art:/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat
1202DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art:/system/framework/arm/boot.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat:/system/framework/arm/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art:/system/framework/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat:/system/framework/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art:/system/framework/arm/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat
1203DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art:/system/framework/arm64/boot.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat:/system/framework/arm64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art:/system/framework/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat:/system/framework/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art:/system/framework/arm64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat
1204DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art:/system/framework/x86/boot.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat:/system/framework/x86/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art:/system/framework/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat:/system/framework/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art:/system/framework/x86/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat
1205DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art:/system/framework/x86_64/boot.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat:/system/framework/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art:/system/framework/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat:/system/framework/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art:/system/framework/x86_64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat
1206DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art:/system/framework/arm/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat
1207DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art:/system/framework/arm64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat
1208DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art:/system/framework/x86/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat
1209DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art:/system/framework/x86_64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat
1210DEXPREOPT_IMAGE_DEPS_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex
1211DEXPREOPT_IMAGE_DEPS_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex
1212DEXPREOPT_IMAGE_DEPS_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex
1213DEXPREOPT_IMAGE_DEPS_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex
1214DEXPREOPT_IMAGE_DEPS_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex
1215DEXPREOPT_IMAGE_DEPS_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex
1216DEXPREOPT_IMAGE_DEPS_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex
1217DEXPREOPT_IMAGE_DEPS_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex
1218DEXPREOPT_IMAGE_DEPS_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex
1219DEXPREOPT_IMAGE_DEPS_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex
1220DEXPREOPT_IMAGE_DEPS_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex
1221DEXPREOPT_IMAGE_DEPS_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex
1222DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm=%[1]s
1223DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm64=%[1]s
1224DEXPREOPT_IMAGE_LICENSE_METADATA_art_host_x86=%[1]s
1225DEXPREOPT_IMAGE_LICENSE_METADATA_art_host_x86_64=%[1]s
1226DEXPREOPT_IMAGE_LICENSE_METADATA_boot_arm=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
1227DEXPREOPT_IMAGE_LICENSE_METADATA_boot_arm64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
1228DEXPREOPT_IMAGE_LICENSE_METADATA_boot_host_x86=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
1229DEXPREOPT_IMAGE_LICENSE_METADATA_boot_host_x86_64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
1230DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_arm=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
1231DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_arm64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
1232DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_host_x86=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
1233DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_host_x86_64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
1234DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEart=/apex/art_boot_images/javalib/boot.art
1235DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEboot=/system/framework/boot.art
1236DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEmainline=/system/framework/boot.art:/system/framework/boot-framework-foo.art
1237DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTart=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/boot.art
1238DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTboot=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/boot.art
1239DEXPREOPT_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
1240DEXPREOPT_IMAGE_NAMES=art boot mainline
1241DEXPREOPT_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
1242DEXPREOPT_IMAGE_PROFILE_LICENSE_METADATA=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
1243DEXPREOPT_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
1244DEXPREOPT_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
1245DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat
1246DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat
1247DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot.oat:/system/framework/arm/boot.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-core2.oat:/system/framework/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat
1248DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot.oat:/system/framework/arm64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-core2.oat:/system/framework/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat
1249DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot.oat:/system/framework/x86/boot.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-core2.oat:/system/framework/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat
1250DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot.oat:/system/framework/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-core2.oat:/system/framework/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat
1251DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat
1252DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat
1253DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat
1254DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat
1255DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex:/apex/art_boot_images/javalib/arm/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex:/apex/art_boot_images/javalib/arm/boot-core2.vdex
1256DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex:/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex:/apex/art_boot_images/javalib/arm64/boot-core2.vdex
1257DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex:/apex/art_boot_images/javalib/x86/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex:/apex/art_boot_images/javalib/x86/boot-core2.vdex
1258DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex:/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex:/apex/art_boot_images/javalib/x86_64/boot-core2.vdex
1259DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex:/system/framework/arm/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex:/system/framework/arm/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex:/system/framework/arm/boot-framework.vdex
1260DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex:/system/framework/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex:/system/framework/arm64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex:/system/framework/arm64/boot-framework.vdex
1261DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex:/system/framework/x86/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex:/system/framework/x86/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex:/system/framework/x86/boot-framework.vdex
1262DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex:/system/framework/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex:/system/framework/x86_64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex:/system/framework/x86_64/boot-framework.vdex
1263DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex:/system/framework/arm/boot-framework-foo.vdex
1264DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex:/system/framework/arm64/boot-framework-foo.vdex
1265DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex:/system/framework/x86/boot-framework-foo.vdex
1266DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex:/system/framework/x86_64/boot-framework-foo.vdex
1267DEXPREOPT_IMAGE_ZIP_art=out/soong/dexpreopt_arm64/dex_artjars/art.zip
1268DEXPREOPT_IMAGE_ZIP_boot=out/soong/dexpreopt_arm64/dex_bootjars/boot.zip
1269DEXPREOPT_IMAGE_ZIP_mainline=out/soong/dexpreopt_arm64/dex_mainlinejars/mainline.zip
1270DEXPREOPT_IMAGE_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art
1271DEXPREOPT_IMAGE_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art
1272DEXPREOPT_IMAGE_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art
1273DEXPREOPT_IMAGE_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art
1274DEXPREOPT_IMAGE_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art
1275DEXPREOPT_IMAGE_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art
1276DEXPREOPT_IMAGE_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art
1277DEXPREOPT_IMAGE_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art
1278DEXPREOPT_IMAGE_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art
1279DEXPREOPT_IMAGE_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art
1280DEXPREOPT_IMAGE_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art
1281DEXPREOPT_IMAGE_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art
1282`
1283	expected := strings.TrimSpace(fmt.Sprintf(format, expectedLicenseMetadataFile))
1284	actual := strings.TrimSpace(out.String())
1285	android.AssertStringEquals(t, "vars", expected, actual)
1286}
1287