xref: /aosp_15_r20/build/soong/sdk/cc_sdk_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2019 The Android Open Source Project
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage sdk
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"fmt"
19*333d2b36SAndroid Build Coastguard Worker	"testing"
20*333d2b36SAndroid Build Coastguard Worker
21*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
22*333d2b36SAndroid Build Coastguard Worker	"android/soong/cc"
23*333d2b36SAndroid Build Coastguard Worker)
24*333d2b36SAndroid Build Coastguard Worker
25*333d2b36SAndroid Build Coastguard Workervar ccTestFs = android.MockFS{
26*333d2b36SAndroid Build Coastguard Worker	"Test.cpp":                        nil,
27*333d2b36SAndroid Build Coastguard Worker	"myinclude/Test.h":                nil,
28*333d2b36SAndroid Build Coastguard Worker	"myinclude-android/AndroidTest.h": nil,
29*333d2b36SAndroid Build Coastguard Worker	"myinclude-host/HostTest.h":       nil,
30*333d2b36SAndroid Build Coastguard Worker	"arm64/include/Arm64Test.h":       nil,
31*333d2b36SAndroid Build Coastguard Worker	"libfoo.so":                       nil,
32*333d2b36SAndroid Build Coastguard Worker	"aidl/foo/bar/Test.aidl":          nil,
33*333d2b36SAndroid Build Coastguard Worker	"some/where/stubslib.map.txt":     nil,
34*333d2b36SAndroid Build Coastguard Worker}
35*333d2b36SAndroid Build Coastguard Worker
36*333d2b36SAndroid Build Coastguard Worker// Adds a native bridge target to the configured list of targets.
37*333d2b36SAndroid Build Coastguard Workervar prepareForTestWithNativeBridgeTarget = android.FixtureModifyConfig(func(config android.Config) {
38*333d2b36SAndroid Build Coastguard Worker	config.Targets[android.Android] = append(config.Targets[android.Android], android.Target{
39*333d2b36SAndroid Build Coastguard Worker		Os: android.Android,
40*333d2b36SAndroid Build Coastguard Worker		Arch: android.Arch{
41*333d2b36SAndroid Build Coastguard Worker			ArchType:     android.Arm64,
42*333d2b36SAndroid Build Coastguard Worker			ArchVariant:  "armv8-a",
43*333d2b36SAndroid Build Coastguard Worker			CpuVariant:   "cpu",
44*333d2b36SAndroid Build Coastguard Worker			Abi:          nil,
45*333d2b36SAndroid Build Coastguard Worker			ArchFeatures: nil,
46*333d2b36SAndroid Build Coastguard Worker		},
47*333d2b36SAndroid Build Coastguard Worker		NativeBridge:             android.NativeBridgeEnabled,
48*333d2b36SAndroid Build Coastguard Worker		NativeBridgeHostArchName: "x86_64",
49*333d2b36SAndroid Build Coastguard Worker		NativeBridgeRelativePath: "native_bridge",
50*333d2b36SAndroid Build Coastguard Worker	})
51*333d2b36SAndroid Build Coastguard Worker})
52*333d2b36SAndroid Build Coastguard Worker
53*333d2b36SAndroid Build Coastguard Workerfunc testSdkWithCc(t *testing.T, bp string) *android.TestResult {
54*333d2b36SAndroid Build Coastguard Worker	t.Helper()
55*333d2b36SAndroid Build Coastguard Worker	return testSdkWithFs(t, bp, ccTestFs)
56*333d2b36SAndroid Build Coastguard Worker}
57*333d2b36SAndroid Build Coastguard Worker
58*333d2b36SAndroid Build Coastguard Worker// Contains tests for SDK members provided by the cc package.
59*333d2b36SAndroid Build Coastguard Worker
60*333d2b36SAndroid Build Coastguard Workerfunc TestSingleDeviceOsAssumption(t *testing.T) {
61*333d2b36SAndroid Build Coastguard Worker	// Mock a module with DeviceSupported() == true.
62*333d2b36SAndroid Build Coastguard Worker	s := &sdk{}
63*333d2b36SAndroid Build Coastguard Worker	android.InitAndroidArchModule(s, android.DeviceSupported, android.MultilibCommon)
64*333d2b36SAndroid Build Coastguard Worker
65*333d2b36SAndroid Build Coastguard Worker	osTypes := s.getPossibleOsTypes()
66*333d2b36SAndroid Build Coastguard Worker	if len(osTypes) != 1 {
67*333d2b36SAndroid Build Coastguard Worker		// The snapshot generation assumes there is a single device OS. If more are
68*333d2b36SAndroid Build Coastguard Worker		// added it might need to disable them by default, like it does for host
69*333d2b36SAndroid Build Coastguard Worker		// OS'es.
70*333d2b36SAndroid Build Coastguard Worker		t.Errorf("expected a single device OS, got %v", osTypes)
71*333d2b36SAndroid Build Coastguard Worker	}
72*333d2b36SAndroid Build Coastguard Worker}
73*333d2b36SAndroid Build Coastguard Worker
74*333d2b36SAndroid Build Coastguard Workerfunc TestSdkIsCompileMultilibBoth(t *testing.T) {
75*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
76*333d2b36SAndroid Build Coastguard Worker		sdk {
77*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
78*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["sdkmember"],
79*333d2b36SAndroid Build Coastguard Worker		}
80*333d2b36SAndroid Build Coastguard Worker
81*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
82*333d2b36SAndroid Build Coastguard Worker			name: "sdkmember",
83*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.cpp"],
84*333d2b36SAndroid Build Coastguard Worker			stl: "none",
85*333d2b36SAndroid Build Coastguard Worker		}
86*333d2b36SAndroid Build Coastguard Worker	`)
87*333d2b36SAndroid Build Coastguard Worker
88*333d2b36SAndroid Build Coastguard Worker	armOutput := result.Module("sdkmember", "android_arm_armv7-a-neon_shared").(*cc.Module).OutputFile()
89*333d2b36SAndroid Build Coastguard Worker	arm64Output := result.Module("sdkmember", "android_arm64_armv8-a_shared").(*cc.Module).OutputFile()
90*333d2b36SAndroid Build Coastguard Worker
91*333d2b36SAndroid Build Coastguard Worker	var inputs []string
92*333d2b36SAndroid Build Coastguard Worker	buildParams := result.Module("mysdk", android.CommonOS.Name).BuildParamsForTests()
93*333d2b36SAndroid Build Coastguard Worker	for _, bp := range buildParams {
94*333d2b36SAndroid Build Coastguard Worker		if bp.Input != nil {
95*333d2b36SAndroid Build Coastguard Worker			inputs = append(inputs, bp.Input.String())
96*333d2b36SAndroid Build Coastguard Worker		}
97*333d2b36SAndroid Build Coastguard Worker	}
98*333d2b36SAndroid Build Coastguard Worker
99*333d2b36SAndroid Build Coastguard Worker	// ensure that both 32/64 outputs are inputs of the sdk snapshot
100*333d2b36SAndroid Build Coastguard Worker	ensureListContains(t, inputs, armOutput.String())
101*333d2b36SAndroid Build Coastguard Worker	ensureListContains(t, inputs, arm64Output.String())
102*333d2b36SAndroid Build Coastguard Worker}
103*333d2b36SAndroid Build Coastguard Worker
104*333d2b36SAndroid Build Coastguard Workerfunc TestSdkCompileMultilibOverride(t *testing.T) {
105*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
106*333d2b36SAndroid Build Coastguard Worker		sdk {
107*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
108*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
109*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["sdkmember"],
110*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "64",
111*333d2b36SAndroid Build Coastguard Worker		}
112*333d2b36SAndroid Build Coastguard Worker
113*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
114*333d2b36SAndroid Build Coastguard Worker			name: "sdkmember",
115*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
116*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.cpp"],
117*333d2b36SAndroid Build Coastguard Worker			stl: "none",
118*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "64",
119*333d2b36SAndroid Build Coastguard Worker		}
120*333d2b36SAndroid Build Coastguard Worker	`)
121*333d2b36SAndroid Build Coastguard Worker
122*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
123*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
124*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
125*333d2b36SAndroid Build Coastguard Worker
126*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
127*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
128*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_sdkmember"],
129*333d2b36SAndroid Build Coastguard Worker}
130*333d2b36SAndroid Build Coastguard Worker
131*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
132*333d2b36SAndroid Build Coastguard Worker    name: "sdkmember",
133*333d2b36SAndroid Build Coastguard Worker    prefer: false,
134*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
135*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
136*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
137*333d2b36SAndroid Build Coastguard Worker    stl: "none",
138*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "64",
139*333d2b36SAndroid Build Coastguard Worker    target: {
140*333d2b36SAndroid Build Coastguard Worker        host: {
141*333d2b36SAndroid Build Coastguard Worker            enabled: false,
142*333d2b36SAndroid Build Coastguard Worker        },
143*333d2b36SAndroid Build Coastguard Worker        android_arm64: {
144*333d2b36SAndroid Build Coastguard Worker            srcs: ["android/arm64/lib/sdkmember.so"],
145*333d2b36SAndroid Build Coastguard Worker        },
146*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
147*333d2b36SAndroid Build Coastguard Worker            enabled: true,
148*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86_64/lib/sdkmember.so"],
149*333d2b36SAndroid Build Coastguard Worker        },
150*333d2b36SAndroid Build Coastguard Worker    },
151*333d2b36SAndroid Build Coastguard Worker    strip: {
152*333d2b36SAndroid Build Coastguard Worker        none: true,
153*333d2b36SAndroid Build Coastguard Worker    },
154*333d2b36SAndroid Build Coastguard Worker}
155*333d2b36SAndroid Build Coastguard Worker`),
156*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
157*333d2b36SAndroid Build Coastguard Worker.intermediates/sdkmember/android_arm64_armv8-a_shared/sdkmember.so -> android/arm64/lib/sdkmember.so
158*333d2b36SAndroid Build Coastguard Worker.intermediates/sdkmember/linux_glibc_x86_64_shared/sdkmember.so -> linux_glibc/x86_64/lib/sdkmember.so
159*333d2b36SAndroid Build Coastguard Worker`))
160*333d2b36SAndroid Build Coastguard Worker}
161*333d2b36SAndroid Build Coastguard Worker
162*333d2b36SAndroid Build Coastguard Worker// Make sure the sdk can use host specific cc libraries static/shared and both.
163*333d2b36SAndroid Build Coastguard Workerfunc TestHostSdkWithCc(t *testing.T) {
164*333d2b36SAndroid Build Coastguard Worker	testSdkWithCc(t, `
165*333d2b36SAndroid Build Coastguard Worker		sdk {
166*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
167*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
168*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
169*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["sdkshared"],
170*333d2b36SAndroid Build Coastguard Worker			native_static_libs: ["sdkstatic"],
171*333d2b36SAndroid Build Coastguard Worker		}
172*333d2b36SAndroid Build Coastguard Worker
173*333d2b36SAndroid Build Coastguard Worker		cc_library_host_shared {
174*333d2b36SAndroid Build Coastguard Worker			name: "sdkshared",
175*333d2b36SAndroid Build Coastguard Worker			stl: "none",
176*333d2b36SAndroid Build Coastguard Worker		}
177*333d2b36SAndroid Build Coastguard Worker
178*333d2b36SAndroid Build Coastguard Worker		cc_library_host_static {
179*333d2b36SAndroid Build Coastguard Worker			name: "sdkstatic",
180*333d2b36SAndroid Build Coastguard Worker			stl: "none",
181*333d2b36SAndroid Build Coastguard Worker		}
182*333d2b36SAndroid Build Coastguard Worker	`)
183*333d2b36SAndroid Build Coastguard Worker}
184*333d2b36SAndroid Build Coastguard Worker
185*333d2b36SAndroid Build Coastguard Worker// Make sure the sdk can use cc libraries static/shared and both.
186*333d2b36SAndroid Build Coastguard Workerfunc TestSdkWithCc(t *testing.T) {
187*333d2b36SAndroid Build Coastguard Worker	testSdkWithCc(t, `
188*333d2b36SAndroid Build Coastguard Worker		sdk {
189*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
190*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["sdkshared", "sdkboth1"],
191*333d2b36SAndroid Build Coastguard Worker			native_static_libs: ["sdkstatic", "sdkboth2"],
192*333d2b36SAndroid Build Coastguard Worker		}
193*333d2b36SAndroid Build Coastguard Worker
194*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
195*333d2b36SAndroid Build Coastguard Worker			name: "sdkshared",
196*333d2b36SAndroid Build Coastguard Worker			stl: "none",
197*333d2b36SAndroid Build Coastguard Worker		}
198*333d2b36SAndroid Build Coastguard Worker
199*333d2b36SAndroid Build Coastguard Worker		cc_library_static {
200*333d2b36SAndroid Build Coastguard Worker			name: "sdkstatic",
201*333d2b36SAndroid Build Coastguard Worker			stl: "none",
202*333d2b36SAndroid Build Coastguard Worker		}
203*333d2b36SAndroid Build Coastguard Worker
204*333d2b36SAndroid Build Coastguard Worker		cc_library {
205*333d2b36SAndroid Build Coastguard Worker			name: "sdkboth1",
206*333d2b36SAndroid Build Coastguard Worker			stl: "none",
207*333d2b36SAndroid Build Coastguard Worker		}
208*333d2b36SAndroid Build Coastguard Worker
209*333d2b36SAndroid Build Coastguard Worker		cc_library {
210*333d2b36SAndroid Build Coastguard Worker			name: "sdkboth2",
211*333d2b36SAndroid Build Coastguard Worker			stl: "none",
212*333d2b36SAndroid Build Coastguard Worker		}
213*333d2b36SAndroid Build Coastguard Worker	`)
214*333d2b36SAndroid Build Coastguard Worker}
215*333d2b36SAndroid Build Coastguard Worker
216*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithObject(t *testing.T) {
217*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
218*333d2b36SAndroid Build Coastguard Worker		sdk {
219*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
220*333d2b36SAndroid Build Coastguard Worker			native_objects: ["crtobj"],
221*333d2b36SAndroid Build Coastguard Worker		}
222*333d2b36SAndroid Build Coastguard Worker
223*333d2b36SAndroid Build Coastguard Worker		cc_object {
224*333d2b36SAndroid Build Coastguard Worker			name: "crtobj",
225*333d2b36SAndroid Build Coastguard Worker			stl: "none",
226*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
227*333d2b36SAndroid Build Coastguard Worker			sanitize: {
228*333d2b36SAndroid Build Coastguard Worker				never: true,
229*333d2b36SAndroid Build Coastguard Worker			},
230*333d2b36SAndroid Build Coastguard Worker		}
231*333d2b36SAndroid Build Coastguard Worker	`)
232*333d2b36SAndroid Build Coastguard Worker
233*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
234*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
235*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
236*333d2b36SAndroid Build Coastguard Worker
237*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
238*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
239*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_crtobj"],
240*333d2b36SAndroid Build Coastguard Worker}
241*333d2b36SAndroid Build Coastguard Worker
242*333d2b36SAndroid Build Coastguard Workercc_prebuilt_object {
243*333d2b36SAndroid Build Coastguard Worker    name: "crtobj",
244*333d2b36SAndroid Build Coastguard Worker    prefer: false,
245*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
246*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
247*333d2b36SAndroid Build Coastguard Worker    stl: "none",
248*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
249*333d2b36SAndroid Build Coastguard Worker    system_shared_libs: [],
250*333d2b36SAndroid Build Coastguard Worker    sanitize: {
251*333d2b36SAndroid Build Coastguard Worker        never: true,
252*333d2b36SAndroid Build Coastguard Worker    },
253*333d2b36SAndroid Build Coastguard Worker    arch: {
254*333d2b36SAndroid Build Coastguard Worker        arm64: {
255*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/crtobj.o"],
256*333d2b36SAndroid Build Coastguard Worker        },
257*333d2b36SAndroid Build Coastguard Worker        arm: {
258*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/crtobj.o"],
259*333d2b36SAndroid Build Coastguard Worker        },
260*333d2b36SAndroid Build Coastguard Worker    },
261*333d2b36SAndroid Build Coastguard Worker}
262*333d2b36SAndroid Build Coastguard Worker`),
263*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
264*333d2b36SAndroid Build Coastguard Worker.intermediates/crtobj/android_arm64_armv8-a/crtobj.o -> arm64/lib/crtobj.o
265*333d2b36SAndroid Build Coastguard Worker.intermediates/crtobj/android_arm_armv7-a-neon/crtobj.o -> arm/lib/crtobj.o
266*333d2b36SAndroid Build Coastguard Worker`),
267*333d2b36SAndroid Build Coastguard Worker	)
268*333d2b36SAndroid Build Coastguard Worker}
269*333d2b36SAndroid Build Coastguard Worker
270*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcDuplicateHeaders(t *testing.T) {
271*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
272*333d2b36SAndroid Build Coastguard Worker		sdk {
273*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
274*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["mynativelib1", "mynativelib2"],
275*333d2b36SAndroid Build Coastguard Worker		}
276*333d2b36SAndroid Build Coastguard Worker
277*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
278*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib1",
279*333d2b36SAndroid Build Coastguard Worker			srcs: [
280*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
281*333d2b36SAndroid Build Coastguard Worker			],
282*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
283*333d2b36SAndroid Build Coastguard Worker			stl: "none",
284*333d2b36SAndroid Build Coastguard Worker		}
285*333d2b36SAndroid Build Coastguard Worker
286*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
287*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib2",
288*333d2b36SAndroid Build Coastguard Worker			srcs: [
289*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
290*333d2b36SAndroid Build Coastguard Worker			],
291*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
292*333d2b36SAndroid Build Coastguard Worker			stl: "none",
293*333d2b36SAndroid Build Coastguard Worker		}
294*333d2b36SAndroid Build Coastguard Worker	`)
295*333d2b36SAndroid Build Coastguard Worker
296*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
297*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
298*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
299*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib1/android_arm64_armv8-a_shared/mynativelib1.so -> arm64/lib/mynativelib1.so
300*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib1/android_arm_armv7-a-neon_shared/mynativelib1.so -> arm/lib/mynativelib1.so
301*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib2/android_arm64_armv8-a_shared/mynativelib2.so -> arm64/lib/mynativelib2.so
302*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib2/android_arm_armv7-a-neon_shared/mynativelib2.so -> arm/lib/mynativelib2.so
303*333d2b36SAndroid Build Coastguard Worker`),
304*333d2b36SAndroid Build Coastguard Worker	)
305*333d2b36SAndroid Build Coastguard Worker}
306*333d2b36SAndroid Build Coastguard Worker
307*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcExportGeneratedHeaders(t *testing.T) {
308*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
309*333d2b36SAndroid Build Coastguard Worker		sdk {
310*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
311*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["mynativelib"],
312*333d2b36SAndroid Build Coastguard Worker		}
313*333d2b36SAndroid Build Coastguard Worker
314*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
315*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
316*333d2b36SAndroid Build Coastguard Worker			srcs: [
317*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
318*333d2b36SAndroid Build Coastguard Worker			],
319*333d2b36SAndroid Build Coastguard Worker			generated_headers: [
320*333d2b36SAndroid Build Coastguard Worker				"generated_foo",
321*333d2b36SAndroid Build Coastguard Worker			],
322*333d2b36SAndroid Build Coastguard Worker			export_generated_headers: [
323*333d2b36SAndroid Build Coastguard Worker				"generated_foo",
324*333d2b36SAndroid Build Coastguard Worker			],
325*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
326*333d2b36SAndroid Build Coastguard Worker			stl: "none",
327*333d2b36SAndroid Build Coastguard Worker		}
328*333d2b36SAndroid Build Coastguard Worker
329*333d2b36SAndroid Build Coastguard Worker		genrule {
330*333d2b36SAndroid Build Coastguard Worker			name: "generated_foo",
331*333d2b36SAndroid Build Coastguard Worker			cmd: "generate-foo",
332*333d2b36SAndroid Build Coastguard Worker			out: [
333*333d2b36SAndroid Build Coastguard Worker				"generated_foo/protos/foo/bar.h",
334*333d2b36SAndroid Build Coastguard Worker			],
335*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: [
336*333d2b36SAndroid Build Coastguard Worker				".",
337*333d2b36SAndroid Build Coastguard Worker				"protos",
338*333d2b36SAndroid Build Coastguard Worker			],
339*333d2b36SAndroid Build Coastguard Worker		}
340*333d2b36SAndroid Build Coastguard Worker	`)
341*333d2b36SAndroid Build Coastguard Worker
342*333d2b36SAndroid Build Coastguard Worker	// TODO(b/183322862): Remove this and fix the issue.
343*333d2b36SAndroid Build Coastguard Worker	errorHandler := android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module source path "snapshot/include_gen/generated_foo/gen/protos" does not exist`)
344*333d2b36SAndroid Build Coastguard Worker
345*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
346*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
347*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
348*333d2b36SAndroid Build Coastguard Worker
349*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
350*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
351*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
352*333d2b36SAndroid Build Coastguard Worker}
353*333d2b36SAndroid Build Coastguard Worker
354*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
355*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
356*333d2b36SAndroid Build Coastguard Worker    prefer: false,
357*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
358*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
359*333d2b36SAndroid Build Coastguard Worker    stl: "none",
360*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
361*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: [
362*333d2b36SAndroid Build Coastguard Worker        "include/myinclude",
363*333d2b36SAndroid Build Coastguard Worker        "include_gen/generated_foo/gen",
364*333d2b36SAndroid Build Coastguard Worker        "include_gen/generated_foo/gen/protos",
365*333d2b36SAndroid Build Coastguard Worker    ],
366*333d2b36SAndroid Build Coastguard Worker    arch: {
367*333d2b36SAndroid Build Coastguard Worker        arm64: {
368*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/mynativelib.so"],
369*333d2b36SAndroid Build Coastguard Worker        },
370*333d2b36SAndroid Build Coastguard Worker        arm: {
371*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/mynativelib.so"],
372*333d2b36SAndroid Build Coastguard Worker        },
373*333d2b36SAndroid Build Coastguard Worker    },
374*333d2b36SAndroid Build Coastguard Worker    strip: {
375*333d2b36SAndroid Build Coastguard Worker        none: true,
376*333d2b36SAndroid Build Coastguard Worker    },
377*333d2b36SAndroid Build Coastguard Worker}
378*333d2b36SAndroid Build Coastguard Worker`),
379*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
380*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
381*333d2b36SAndroid Build Coastguard Worker.intermediates/generated_foo/gen/generated_foo/protos/foo/bar.h -> include_gen/generated_foo/gen/generated_foo/protos/foo/bar.h
382*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
383*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
384*333d2b36SAndroid Build Coastguard Worker`),
385*333d2b36SAndroid Build Coastguard Worker		snapshotTestErrorHandler(checkSnapshotWithoutSource, errorHandler),
386*333d2b36SAndroid Build Coastguard Worker		snapshotTestErrorHandler(checkSnapshotWithSourcePreferred, errorHandler),
387*333d2b36SAndroid Build Coastguard Worker		snapshotTestErrorHandler(checkSnapshotPreferredWithSource, errorHandler),
388*333d2b36SAndroid Build Coastguard Worker	)
389*333d2b36SAndroid Build Coastguard Worker}
390*333d2b36SAndroid Build Coastguard Worker
391*333d2b36SAndroid Build Coastguard Worker// Verify that when the shared library has some common and some arch specific
392*333d2b36SAndroid Build Coastguard Worker// properties that the generated snapshot is optimized properly. Substruct
393*333d2b36SAndroid Build Coastguard Worker// handling is tested with the sanitize clauses (but note there's a lot of
394*333d2b36SAndroid Build Coastguard Worker// built-in logic in sanitize.go that can affect those flags).
395*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcSharedLibraryCommonProperties(t *testing.T) {
396*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
397*333d2b36SAndroid Build Coastguard Worker		sdk {
398*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
399*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["mynativelib"],
400*333d2b36SAndroid Build Coastguard Worker		}
401*333d2b36SAndroid Build Coastguard Worker
402*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
403*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
404*333d2b36SAndroid Build Coastguard Worker			srcs: [
405*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
406*333d2b36SAndroid Build Coastguard Worker				"aidl/foo/bar/Test.aidl",
407*333d2b36SAndroid Build Coastguard Worker			],
408*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
409*333d2b36SAndroid Build Coastguard Worker			sanitize: {
410*333d2b36SAndroid Build Coastguard Worker				fuzzer: false,
411*333d2b36SAndroid Build Coastguard Worker				integer_overflow: true,
412*333d2b36SAndroid Build Coastguard Worker				diag: { undefined: false },
413*333d2b36SAndroid Build Coastguard Worker			},
414*333d2b36SAndroid Build Coastguard Worker			arch: {
415*333d2b36SAndroid Build Coastguard Worker				arm64: {
416*333d2b36SAndroid Build Coastguard Worker					export_system_include_dirs: ["arm64/include"],
417*333d2b36SAndroid Build Coastguard Worker					sanitize: {
418*333d2b36SAndroid Build Coastguard Worker						integer_overflow: false,
419*333d2b36SAndroid Build Coastguard Worker					},
420*333d2b36SAndroid Build Coastguard Worker				},
421*333d2b36SAndroid Build Coastguard Worker			},
422*333d2b36SAndroid Build Coastguard Worker			stl: "none",
423*333d2b36SAndroid Build Coastguard Worker		}
424*333d2b36SAndroid Build Coastguard Worker	`)
425*333d2b36SAndroid Build Coastguard Worker
426*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
427*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
428*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
429*333d2b36SAndroid Build Coastguard Worker
430*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
431*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
432*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
433*333d2b36SAndroid Build Coastguard Worker}
434*333d2b36SAndroid Build Coastguard Worker
435*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
436*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
437*333d2b36SAndroid Build Coastguard Worker    prefer: false,
438*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
439*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
440*333d2b36SAndroid Build Coastguard Worker    stl: "none",
441*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
442*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
443*333d2b36SAndroid Build Coastguard Worker    sanitize: {
444*333d2b36SAndroid Build Coastguard Worker        fuzzer: false,
445*333d2b36SAndroid Build Coastguard Worker        diag: {
446*333d2b36SAndroid Build Coastguard Worker            undefined: false,
447*333d2b36SAndroid Build Coastguard Worker        },
448*333d2b36SAndroid Build Coastguard Worker    },
449*333d2b36SAndroid Build Coastguard Worker    arch: {
450*333d2b36SAndroid Build Coastguard Worker        arm64: {
451*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/mynativelib.so"],
452*333d2b36SAndroid Build Coastguard Worker            export_system_include_dirs: ["arm64/include/arm64/include"],
453*333d2b36SAndroid Build Coastguard Worker            sanitize: {
454*333d2b36SAndroid Build Coastguard Worker                integer_overflow: false,
455*333d2b36SAndroid Build Coastguard Worker            },
456*333d2b36SAndroid Build Coastguard Worker        },
457*333d2b36SAndroid Build Coastguard Worker        arm: {
458*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/mynativelib.so"],
459*333d2b36SAndroid Build Coastguard Worker            sanitize: {
460*333d2b36SAndroid Build Coastguard Worker                integer_overflow: true,
461*333d2b36SAndroid Build Coastguard Worker            },
462*333d2b36SAndroid Build Coastguard Worker        },
463*333d2b36SAndroid Build Coastguard Worker    },
464*333d2b36SAndroid Build Coastguard Worker    strip: {
465*333d2b36SAndroid Build Coastguard Worker        none: true,
466*333d2b36SAndroid Build Coastguard Worker    },
467*333d2b36SAndroid Build Coastguard Worker}
468*333d2b36SAndroid Build Coastguard Worker`),
469*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
470*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
471*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
472*333d2b36SAndroid Build Coastguard Workerarm64/include/Arm64Test.h -> arm64/include/arm64/include/Arm64Test.h
473*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so`),
474*333d2b36SAndroid Build Coastguard Worker	)
475*333d2b36SAndroid Build Coastguard Worker}
476*333d2b36SAndroid Build Coastguard Worker
477*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcBinary(t *testing.T) {
478*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
479*333d2b36SAndroid Build Coastguard Worker		module_exports {
480*333d2b36SAndroid Build Coastguard Worker			name: "mymodule_exports",
481*333d2b36SAndroid Build Coastguard Worker			native_binaries: ["mynativebinary"],
482*333d2b36SAndroid Build Coastguard Worker		}
483*333d2b36SAndroid Build Coastguard Worker
484*333d2b36SAndroid Build Coastguard Worker		cc_binary {
485*333d2b36SAndroid Build Coastguard Worker			name: "mynativebinary",
486*333d2b36SAndroid Build Coastguard Worker			srcs: [
487*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
488*333d2b36SAndroid Build Coastguard Worker			],
489*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
490*333d2b36SAndroid Build Coastguard Worker		}
491*333d2b36SAndroid Build Coastguard Worker	`)
492*333d2b36SAndroid Build Coastguard Worker
493*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mymodule_exports", "",
494*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
495*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
496*333d2b36SAndroid Build Coastguard Worker
497*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
498*333d2b36SAndroid Build Coastguard Worker    name: "mymodule_exports.contributions",
499*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativebinary"],
500*333d2b36SAndroid Build Coastguard Worker}
501*333d2b36SAndroid Build Coastguard Worker
502*333d2b36SAndroid Build Coastguard Workercc_prebuilt_binary {
503*333d2b36SAndroid Build Coastguard Worker    name: "mynativebinary",
504*333d2b36SAndroid Build Coastguard Worker    prefer: false,
505*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
506*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
507*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
508*333d2b36SAndroid Build Coastguard Worker    arch: {
509*333d2b36SAndroid Build Coastguard Worker        arm64: {
510*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/bin/mynativebinary"],
511*333d2b36SAndroid Build Coastguard Worker        },
512*333d2b36SAndroid Build Coastguard Worker        arm: {
513*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/bin/mynativebinary"],
514*333d2b36SAndroid Build Coastguard Worker        },
515*333d2b36SAndroid Build Coastguard Worker    },
516*333d2b36SAndroid Build Coastguard Worker}
517*333d2b36SAndroid Build Coastguard Worker`),
518*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
519*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativebinary/android_arm64_armv8-a/mynativebinary -> arm64/bin/mynativebinary
520*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativebinary/android_arm_armv7-a-neon/mynativebinary -> arm/bin/mynativebinary
521*333d2b36SAndroid Build Coastguard Worker`),
522*333d2b36SAndroid Build Coastguard Worker	)
523*333d2b36SAndroid Build Coastguard Worker}
524*333d2b36SAndroid Build Coastguard Worker
525*333d2b36SAndroid Build Coastguard Workerfunc TestMultipleHostOsTypesSnapshotWithCcBinary(t *testing.T) {
526*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
527*333d2b36SAndroid Build Coastguard Worker		module_exports {
528*333d2b36SAndroid Build Coastguard Worker			name: "myexports",
529*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
530*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
531*333d2b36SAndroid Build Coastguard Worker			native_binaries: ["mynativebinary"],
532*333d2b36SAndroid Build Coastguard Worker			target: {
533*333d2b36SAndroid Build Coastguard Worker				windows: {
534*333d2b36SAndroid Build Coastguard Worker					enabled: true,
535*333d2b36SAndroid Build Coastguard Worker				},
536*333d2b36SAndroid Build Coastguard Worker			},
537*333d2b36SAndroid Build Coastguard Worker		}
538*333d2b36SAndroid Build Coastguard Worker
539*333d2b36SAndroid Build Coastguard Worker		cc_binary {
540*333d2b36SAndroid Build Coastguard Worker			name: "mynativebinary",
541*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
542*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
543*333d2b36SAndroid Build Coastguard Worker			srcs: [
544*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
545*333d2b36SAndroid Build Coastguard Worker			],
546*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
547*333d2b36SAndroid Build Coastguard Worker			stl: "none",
548*333d2b36SAndroid Build Coastguard Worker			target: {
549*333d2b36SAndroid Build Coastguard Worker				windows: {
550*333d2b36SAndroid Build Coastguard Worker					enabled: true,
551*333d2b36SAndroid Build Coastguard Worker				},
552*333d2b36SAndroid Build Coastguard Worker			},
553*333d2b36SAndroid Build Coastguard Worker		}
554*333d2b36SAndroid Build Coastguard Worker	`)
555*333d2b36SAndroid Build Coastguard Worker
556*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "myexports", "",
557*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
558*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
559*333d2b36SAndroid Build Coastguard Worker
560*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
561*333d2b36SAndroid Build Coastguard Worker    name: "myexports.contributions",
562*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativebinary"],
563*333d2b36SAndroid Build Coastguard Worker}
564*333d2b36SAndroid Build Coastguard Worker
565*333d2b36SAndroid Build Coastguard Workercc_prebuilt_binary {
566*333d2b36SAndroid Build Coastguard Worker    name: "mynativebinary",
567*333d2b36SAndroid Build Coastguard Worker    prefer: false,
568*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
569*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
570*333d2b36SAndroid Build Coastguard Worker    device_supported: false,
571*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
572*333d2b36SAndroid Build Coastguard Worker    stl: "none",
573*333d2b36SAndroid Build Coastguard Worker    target: {
574*333d2b36SAndroid Build Coastguard Worker        host: {
575*333d2b36SAndroid Build Coastguard Worker            enabled: false,
576*333d2b36SAndroid Build Coastguard Worker        },
577*333d2b36SAndroid Build Coastguard Worker        linux_glibc: {
578*333d2b36SAndroid Build Coastguard Worker            compile_multilib: "both",
579*333d2b36SAndroid Build Coastguard Worker        },
580*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
581*333d2b36SAndroid Build Coastguard Worker            enabled: true,
582*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86_64/bin/mynativebinary"],
583*333d2b36SAndroid Build Coastguard Worker        },
584*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
585*333d2b36SAndroid Build Coastguard Worker            enabled: true,
586*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86/bin/mynativebinary"],
587*333d2b36SAndroid Build Coastguard Worker        },
588*333d2b36SAndroid Build Coastguard Worker        windows: {
589*333d2b36SAndroid Build Coastguard Worker            compile_multilib: "64",
590*333d2b36SAndroid Build Coastguard Worker        },
591*333d2b36SAndroid Build Coastguard Worker        windows_x86_64: {
592*333d2b36SAndroid Build Coastguard Worker            enabled: true,
593*333d2b36SAndroid Build Coastguard Worker            srcs: ["windows/x86_64/bin/mynativebinary.exe"],
594*333d2b36SAndroid Build Coastguard Worker        },
595*333d2b36SAndroid Build Coastguard Worker    },
596*333d2b36SAndroid Build Coastguard Worker}
597*333d2b36SAndroid Build Coastguard Worker`),
598*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
599*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativebinary/linux_glibc_x86_64/mynativebinary -> linux_glibc/x86_64/bin/mynativebinary
600*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativebinary/linux_glibc_x86/mynativebinary -> linux_glibc/x86/bin/mynativebinary
601*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativebinary/windows_x86_64/mynativebinary.exe -> windows/x86_64/bin/mynativebinary.exe
602*333d2b36SAndroid Build Coastguard Worker`),
603*333d2b36SAndroid Build Coastguard Worker	)
604*333d2b36SAndroid Build Coastguard Worker}
605*333d2b36SAndroid Build Coastguard Worker
606*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithSingleHostOsType(t *testing.T) {
607*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
608*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTest,
609*333d2b36SAndroid Build Coastguard Worker		ccTestFs.AddToFixture(),
610*333d2b36SAndroid Build Coastguard Worker		cc.PrepareForTestOnLinuxBionic,
611*333d2b36SAndroid Build Coastguard Worker		android.FixtureModifyConfig(func(config android.Config) {
612*333d2b36SAndroid Build Coastguard Worker			config.Targets[android.LinuxBionic] = []android.Target{
613*333d2b36SAndroid Build Coastguard Worker				{android.LinuxBionic, android.Arch{ArchType: android.X86_64}, android.NativeBridgeDisabled, "", "", false},
614*333d2b36SAndroid Build Coastguard Worker			}
615*333d2b36SAndroid Build Coastguard Worker		}),
616*333d2b36SAndroid Build Coastguard Worker	).RunTestWithBp(t, `
617*333d2b36SAndroid Build Coastguard Worker		cc_defaults {
618*333d2b36SAndroid Build Coastguard Worker			name: "mydefaults",
619*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
620*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
621*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "64",
622*333d2b36SAndroid Build Coastguard Worker			target: {
623*333d2b36SAndroid Build Coastguard Worker				host: {
624*333d2b36SAndroid Build Coastguard Worker					enabled: false,
625*333d2b36SAndroid Build Coastguard Worker				},
626*333d2b36SAndroid Build Coastguard Worker				linux_bionic: {
627*333d2b36SAndroid Build Coastguard Worker					enabled: true,
628*333d2b36SAndroid Build Coastguard Worker				},
629*333d2b36SAndroid Build Coastguard Worker			},
630*333d2b36SAndroid Build Coastguard Worker		}
631*333d2b36SAndroid Build Coastguard Worker
632*333d2b36SAndroid Build Coastguard Worker		module_exports {
633*333d2b36SAndroid Build Coastguard Worker			name: "myexports",
634*333d2b36SAndroid Build Coastguard Worker			defaults: ["mydefaults"],
635*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["mynativelib"],
636*333d2b36SAndroid Build Coastguard Worker			native_binaries: ["mynativebinary"],
637*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "64",  // The built-in default in sdk.go overrides mydefaults.
638*333d2b36SAndroid Build Coastguard Worker		}
639*333d2b36SAndroid Build Coastguard Worker
640*333d2b36SAndroid Build Coastguard Worker		cc_library {
641*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
642*333d2b36SAndroid Build Coastguard Worker			defaults: ["mydefaults"],
643*333d2b36SAndroid Build Coastguard Worker			srcs: [
644*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
645*333d2b36SAndroid Build Coastguard Worker			],
646*333d2b36SAndroid Build Coastguard Worker			stl: "none",
647*333d2b36SAndroid Build Coastguard Worker		}
648*333d2b36SAndroid Build Coastguard Worker
649*333d2b36SAndroid Build Coastguard Worker		cc_binary {
650*333d2b36SAndroid Build Coastguard Worker			name: "mynativebinary",
651*333d2b36SAndroid Build Coastguard Worker			defaults: ["mydefaults"],
652*333d2b36SAndroid Build Coastguard Worker			srcs: [
653*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
654*333d2b36SAndroid Build Coastguard Worker			],
655*333d2b36SAndroid Build Coastguard Worker			stl: "none",
656*333d2b36SAndroid Build Coastguard Worker		}
657*333d2b36SAndroid Build Coastguard Worker	`)
658*333d2b36SAndroid Build Coastguard Worker
659*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "myexports", "",
660*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
661*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
662*333d2b36SAndroid Build Coastguard Worker
663*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
664*333d2b36SAndroid Build Coastguard Worker    name: "myexports.contributions",
665*333d2b36SAndroid Build Coastguard Worker    contents: [
666*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mynativebinary",
667*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mynativelib",
668*333d2b36SAndroid Build Coastguard Worker    ],
669*333d2b36SAndroid Build Coastguard Worker}
670*333d2b36SAndroid Build Coastguard Worker
671*333d2b36SAndroid Build Coastguard Workercc_prebuilt_binary {
672*333d2b36SAndroid Build Coastguard Worker    name: "mynativebinary",
673*333d2b36SAndroid Build Coastguard Worker    prefer: false,
674*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
675*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
676*333d2b36SAndroid Build Coastguard Worker    device_supported: false,
677*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
678*333d2b36SAndroid Build Coastguard Worker    stl: "none",
679*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "64",
680*333d2b36SAndroid Build Coastguard Worker    target: {
681*333d2b36SAndroid Build Coastguard Worker        host: {
682*333d2b36SAndroid Build Coastguard Worker            enabled: false,
683*333d2b36SAndroid Build Coastguard Worker        },
684*333d2b36SAndroid Build Coastguard Worker        linux_bionic_x86_64: {
685*333d2b36SAndroid Build Coastguard Worker            enabled: true,
686*333d2b36SAndroid Build Coastguard Worker            srcs: ["x86_64/bin/mynativebinary"],
687*333d2b36SAndroid Build Coastguard Worker        },
688*333d2b36SAndroid Build Coastguard Worker    },
689*333d2b36SAndroid Build Coastguard Worker}
690*333d2b36SAndroid Build Coastguard Worker
691*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
692*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
693*333d2b36SAndroid Build Coastguard Worker    prefer: false,
694*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
695*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
696*333d2b36SAndroid Build Coastguard Worker    device_supported: false,
697*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
698*333d2b36SAndroid Build Coastguard Worker    stl: "none",
699*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "64",
700*333d2b36SAndroid Build Coastguard Worker    target: {
701*333d2b36SAndroid Build Coastguard Worker        host: {
702*333d2b36SAndroid Build Coastguard Worker            enabled: false,
703*333d2b36SAndroid Build Coastguard Worker        },
704*333d2b36SAndroid Build Coastguard Worker        linux_bionic_x86_64: {
705*333d2b36SAndroid Build Coastguard Worker            enabled: true,
706*333d2b36SAndroid Build Coastguard Worker            srcs: ["x86_64/lib/mynativelib.so"],
707*333d2b36SAndroid Build Coastguard Worker        },
708*333d2b36SAndroid Build Coastguard Worker    },
709*333d2b36SAndroid Build Coastguard Worker    strip: {
710*333d2b36SAndroid Build Coastguard Worker        none: true,
711*333d2b36SAndroid Build Coastguard Worker    },
712*333d2b36SAndroid Build Coastguard Worker}
713*333d2b36SAndroid Build Coastguard Worker`),
714*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
715*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativebinary/linux_bionic_x86_64/mynativebinary -> x86_64/bin/mynativebinary
716*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_bionic_x86_64_shared/mynativelib.so -> x86_64/lib/mynativelib.so
717*333d2b36SAndroid Build Coastguard Worker`),
718*333d2b36SAndroid Build Coastguard Worker	)
719*333d2b36SAndroid Build Coastguard Worker}
720*333d2b36SAndroid Build Coastguard Worker
721*333d2b36SAndroid Build Coastguard Worker// Test that we support the necessary flags for the linker binary, which is
722*333d2b36SAndroid Build Coastguard Worker// special in several ways.
723*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcStaticNocrtBinary(t *testing.T) {
724*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
725*333d2b36SAndroid Build Coastguard Worker		module_exports {
726*333d2b36SAndroid Build Coastguard Worker			name: "mymodule_exports",
727*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
728*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
729*333d2b36SAndroid Build Coastguard Worker			native_binaries: ["linker"],
730*333d2b36SAndroid Build Coastguard Worker		}
731*333d2b36SAndroid Build Coastguard Worker
732*333d2b36SAndroid Build Coastguard Worker		cc_binary {
733*333d2b36SAndroid Build Coastguard Worker			name: "linker",
734*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
735*333d2b36SAndroid Build Coastguard Worker			static_executable: true,
736*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
737*333d2b36SAndroid Build Coastguard Worker			stl: "none",
738*333d2b36SAndroid Build Coastguard Worker			srcs: [
739*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
740*333d2b36SAndroid Build Coastguard Worker			],
741*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
742*333d2b36SAndroid Build Coastguard Worker		}
743*333d2b36SAndroid Build Coastguard Worker	`)
744*333d2b36SAndroid Build Coastguard Worker
745*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mymodule_exports", "",
746*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
747*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
748*333d2b36SAndroid Build Coastguard Worker
749*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
750*333d2b36SAndroid Build Coastguard Worker    name: "mymodule_exports.contributions",
751*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_linker"],
752*333d2b36SAndroid Build Coastguard Worker}
753*333d2b36SAndroid Build Coastguard Worker
754*333d2b36SAndroid Build Coastguard Workercc_prebuilt_binary {
755*333d2b36SAndroid Build Coastguard Worker    name: "linker",
756*333d2b36SAndroid Build Coastguard Worker    prefer: false,
757*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
758*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
759*333d2b36SAndroid Build Coastguard Worker    device_supported: false,
760*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
761*333d2b36SAndroid Build Coastguard Worker    stl: "none",
762*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
763*333d2b36SAndroid Build Coastguard Worker    static_executable: true,
764*333d2b36SAndroid Build Coastguard Worker    nocrt: true,
765*333d2b36SAndroid Build Coastguard Worker    target: {
766*333d2b36SAndroid Build Coastguard Worker        host: {
767*333d2b36SAndroid Build Coastguard Worker            enabled: false,
768*333d2b36SAndroid Build Coastguard Worker        },
769*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
770*333d2b36SAndroid Build Coastguard Worker            enabled: true,
771*333d2b36SAndroid Build Coastguard Worker            srcs: ["x86_64/bin/linker"],
772*333d2b36SAndroid Build Coastguard Worker        },
773*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
774*333d2b36SAndroid Build Coastguard Worker            enabled: true,
775*333d2b36SAndroid Build Coastguard Worker            srcs: ["x86/bin/linker"],
776*333d2b36SAndroid Build Coastguard Worker        },
777*333d2b36SAndroid Build Coastguard Worker    },
778*333d2b36SAndroid Build Coastguard Worker}
779*333d2b36SAndroid Build Coastguard Worker`),
780*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
781*333d2b36SAndroid Build Coastguard Worker.intermediates/linker/linux_glibc_x86_64/linker -> x86_64/bin/linker
782*333d2b36SAndroid Build Coastguard Worker.intermediates/linker/linux_glibc_x86/linker -> x86/bin/linker
783*333d2b36SAndroid Build Coastguard Worker`),
784*333d2b36SAndroid Build Coastguard Worker	)
785*333d2b36SAndroid Build Coastguard Worker}
786*333d2b36SAndroid Build Coastguard Worker
787*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcSharedLibrary(t *testing.T) {
788*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
789*333d2b36SAndroid Build Coastguard Worker		sdk {
790*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
791*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["mynativelib"],
792*333d2b36SAndroid Build Coastguard Worker		}
793*333d2b36SAndroid Build Coastguard Worker
794*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
795*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
796*333d2b36SAndroid Build Coastguard Worker			srcs: [
797*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
798*333d2b36SAndroid Build Coastguard Worker				"aidl/foo/bar/Test.aidl",
799*333d2b36SAndroid Build Coastguard Worker			],
800*333d2b36SAndroid Build Coastguard Worker			apex_available: ["apex1", "apex2"],
801*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
802*333d2b36SAndroid Build Coastguard Worker			aidl: {
803*333d2b36SAndroid Build Coastguard Worker				export_aidl_headers: true,
804*333d2b36SAndroid Build Coastguard Worker			},
805*333d2b36SAndroid Build Coastguard Worker			stl: "none",
806*333d2b36SAndroid Build Coastguard Worker		}
807*333d2b36SAndroid Build Coastguard Worker	`)
808*333d2b36SAndroid Build Coastguard Worker
809*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
810*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
811*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
812*333d2b36SAndroid Build Coastguard Worker
813*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
814*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
815*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
816*333d2b36SAndroid Build Coastguard Worker}
817*333d2b36SAndroid Build Coastguard Worker
818*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
819*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
820*333d2b36SAndroid Build Coastguard Worker    prefer: false,
821*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
822*333d2b36SAndroid Build Coastguard Worker    apex_available: [
823*333d2b36SAndroid Build Coastguard Worker        "apex1",
824*333d2b36SAndroid Build Coastguard Worker        "apex2",
825*333d2b36SAndroid Build Coastguard Worker    ],
826*333d2b36SAndroid Build Coastguard Worker    stl: "none",
827*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
828*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
829*333d2b36SAndroid Build Coastguard Worker    arch: {
830*333d2b36SAndroid Build Coastguard Worker        arm64: {
831*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/mynativelib.so"],
832*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["arm64/include_gen/mynativelib/android_arm64_armv8-a_shared/gen/aidl"],
833*333d2b36SAndroid Build Coastguard Worker        },
834*333d2b36SAndroid Build Coastguard Worker        arm: {
835*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/mynativelib.so"],
836*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["arm/include_gen/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl"],
837*333d2b36SAndroid Build Coastguard Worker        },
838*333d2b36SAndroid Build Coastguard Worker    },
839*333d2b36SAndroid Build Coastguard Worker    strip: {
840*333d2b36SAndroid Build Coastguard Worker        none: true,
841*333d2b36SAndroid Build Coastguard Worker    },
842*333d2b36SAndroid Build Coastguard Worker}
843*333d2b36SAndroid Build Coastguard Worker`),
844*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
845*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
846*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
847*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/gen/aidl/aidl/foo/bar/Test.h -> arm64/include_gen/mynativelib/android_arm64_armv8-a_shared/gen/aidl/aidl/foo/bar/Test.h
848*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/gen/aidl/aidl/foo/bar/BnTest.h -> arm64/include_gen/mynativelib/android_arm64_armv8-a_shared/gen/aidl/aidl/foo/bar/BnTest.h
849*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/gen/aidl/aidl/foo/bar/BpTest.h -> arm64/include_gen/mynativelib/android_arm64_armv8-a_shared/gen/aidl/aidl/foo/bar/BpTest.h
850*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
851*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl/aidl/foo/bar/Test.h -> arm/include_gen/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl/aidl/foo/bar/Test.h
852*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl/aidl/foo/bar/BnTest.h -> arm/include_gen/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl/aidl/foo/bar/BnTest.h
853*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl/aidl/foo/bar/BpTest.h -> arm/include_gen/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl/aidl/foo/bar/BpTest.h
854*333d2b36SAndroid Build Coastguard Worker`),
855*333d2b36SAndroid Build Coastguard Worker	)
856*333d2b36SAndroid Build Coastguard Worker}
857*333d2b36SAndroid Build Coastguard Worker
858*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcSharedLibrarySharedLibs(t *testing.T) {
859*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
860*333d2b36SAndroid Build Coastguard Worker		sdk {
861*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
862*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: [
863*333d2b36SAndroid Build Coastguard Worker				"mynativelib",
864*333d2b36SAndroid Build Coastguard Worker				"myothernativelib",
865*333d2b36SAndroid Build Coastguard Worker				"mysystemnativelib",
866*333d2b36SAndroid Build Coastguard Worker			],
867*333d2b36SAndroid Build Coastguard Worker		}
868*333d2b36SAndroid Build Coastguard Worker
869*333d2b36SAndroid Build Coastguard Worker		cc_library {
870*333d2b36SAndroid Build Coastguard Worker			name: "mysystemnativelib",
871*333d2b36SAndroid Build Coastguard Worker			srcs: [
872*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
873*333d2b36SAndroid Build Coastguard Worker			],
874*333d2b36SAndroid Build Coastguard Worker			stl: "none",
875*333d2b36SAndroid Build Coastguard Worker		}
876*333d2b36SAndroid Build Coastguard Worker
877*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
878*333d2b36SAndroid Build Coastguard Worker			name: "myothernativelib",
879*333d2b36SAndroid Build Coastguard Worker			srcs: [
880*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
881*333d2b36SAndroid Build Coastguard Worker			],
882*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [
883*333d2b36SAndroid Build Coastguard Worker				// A reference to a library that is not an sdk member. Uses libm as that
884*333d2b36SAndroid Build Coastguard Worker				// is in the default set of modules available to this test and so is available
885*333d2b36SAndroid Build Coastguard Worker				// both here and also when the generated Android.bp file is tested in
886*333d2b36SAndroid Build Coastguard Worker				// CheckSnapshot(). This ensures that the system_shared_libs property correctly
887*333d2b36SAndroid Build Coastguard Worker				// handles references to modules that are not sdk members.
888*333d2b36SAndroid Build Coastguard Worker				"libm",
889*333d2b36SAndroid Build Coastguard Worker			],
890*333d2b36SAndroid Build Coastguard Worker			stl: "none",
891*333d2b36SAndroid Build Coastguard Worker		}
892*333d2b36SAndroid Build Coastguard Worker
893*333d2b36SAndroid Build Coastguard Worker		cc_library {
894*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
895*333d2b36SAndroid Build Coastguard Worker			srcs: [
896*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
897*333d2b36SAndroid Build Coastguard Worker			],
898*333d2b36SAndroid Build Coastguard Worker			shared_libs: [
899*333d2b36SAndroid Build Coastguard Worker				// A reference to another sdk member.
900*333d2b36SAndroid Build Coastguard Worker				"myothernativelib",
901*333d2b36SAndroid Build Coastguard Worker			],
902*333d2b36SAndroid Build Coastguard Worker			target: {
903*333d2b36SAndroid Build Coastguard Worker				android: {
904*333d2b36SAndroid Build Coastguard Worker					shared: {
905*333d2b36SAndroid Build Coastguard Worker						shared_libs: [
906*333d2b36SAndroid Build Coastguard Worker							// A reference to a library that is not an sdk member. The libc library
907*333d2b36SAndroid Build Coastguard Worker							// is used here to check that the shared_libs property is handled correctly
908*333d2b36SAndroid Build Coastguard Worker							// in a similar way to how libm is used to check system_shared_libs above.
909*333d2b36SAndroid Build Coastguard Worker							"libc",
910*333d2b36SAndroid Build Coastguard Worker						],
911*333d2b36SAndroid Build Coastguard Worker					},
912*333d2b36SAndroid Build Coastguard Worker				},
913*333d2b36SAndroid Build Coastguard Worker			},
914*333d2b36SAndroid Build Coastguard Worker			stl: "none",
915*333d2b36SAndroid Build Coastguard Worker		}
916*333d2b36SAndroid Build Coastguard Worker	`)
917*333d2b36SAndroid Build Coastguard Worker
918*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
919*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
920*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
921*333d2b36SAndroid Build Coastguard Worker
922*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
923*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
924*333d2b36SAndroid Build Coastguard Worker    contents: [
925*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mynativelib",
926*333d2b36SAndroid Build Coastguard Worker        "prebuilt_myothernativelib",
927*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mysystemnativelib",
928*333d2b36SAndroid Build Coastguard Worker    ],
929*333d2b36SAndroid Build Coastguard Worker}
930*333d2b36SAndroid Build Coastguard Worker
931*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
932*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
933*333d2b36SAndroid Build Coastguard Worker    prefer: false,
934*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
935*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
936*333d2b36SAndroid Build Coastguard Worker    stl: "none",
937*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
938*333d2b36SAndroid Build Coastguard Worker    shared_libs: [
939*333d2b36SAndroid Build Coastguard Worker        "myothernativelib",
940*333d2b36SAndroid Build Coastguard Worker        "libc",
941*333d2b36SAndroid Build Coastguard Worker    ],
942*333d2b36SAndroid Build Coastguard Worker    arch: {
943*333d2b36SAndroid Build Coastguard Worker        arm64: {
944*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/mynativelib.so"],
945*333d2b36SAndroid Build Coastguard Worker        },
946*333d2b36SAndroid Build Coastguard Worker        arm: {
947*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/mynativelib.so"],
948*333d2b36SAndroid Build Coastguard Worker        },
949*333d2b36SAndroid Build Coastguard Worker    },
950*333d2b36SAndroid Build Coastguard Worker    strip: {
951*333d2b36SAndroid Build Coastguard Worker        none: true,
952*333d2b36SAndroid Build Coastguard Worker    },
953*333d2b36SAndroid Build Coastguard Worker}
954*333d2b36SAndroid Build Coastguard Worker
955*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
956*333d2b36SAndroid Build Coastguard Worker    name: "myothernativelib",
957*333d2b36SAndroid Build Coastguard Worker    prefer: false,
958*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
959*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
960*333d2b36SAndroid Build Coastguard Worker    stl: "none",
961*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
962*333d2b36SAndroid Build Coastguard Worker    system_shared_libs: ["libm"],
963*333d2b36SAndroid Build Coastguard Worker    arch: {
964*333d2b36SAndroid Build Coastguard Worker        arm64: {
965*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/myothernativelib.so"],
966*333d2b36SAndroid Build Coastguard Worker        },
967*333d2b36SAndroid Build Coastguard Worker        arm: {
968*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/myothernativelib.so"],
969*333d2b36SAndroid Build Coastguard Worker        },
970*333d2b36SAndroid Build Coastguard Worker    },
971*333d2b36SAndroid Build Coastguard Worker    strip: {
972*333d2b36SAndroid Build Coastguard Worker        none: true,
973*333d2b36SAndroid Build Coastguard Worker    },
974*333d2b36SAndroid Build Coastguard Worker}
975*333d2b36SAndroid Build Coastguard Worker
976*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
977*333d2b36SAndroid Build Coastguard Worker    name: "mysystemnativelib",
978*333d2b36SAndroid Build Coastguard Worker    prefer: false,
979*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
980*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
981*333d2b36SAndroid Build Coastguard Worker    stl: "none",
982*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
983*333d2b36SAndroid Build Coastguard Worker    arch: {
984*333d2b36SAndroid Build Coastguard Worker        arm64: {
985*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/mysystemnativelib.so"],
986*333d2b36SAndroid Build Coastguard Worker        },
987*333d2b36SAndroid Build Coastguard Worker        arm: {
988*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/mysystemnativelib.so"],
989*333d2b36SAndroid Build Coastguard Worker        },
990*333d2b36SAndroid Build Coastguard Worker    },
991*333d2b36SAndroid Build Coastguard Worker    strip: {
992*333d2b36SAndroid Build Coastguard Worker        none: true,
993*333d2b36SAndroid Build Coastguard Worker    },
994*333d2b36SAndroid Build Coastguard Worker}
995*333d2b36SAndroid Build Coastguard Worker`),
996*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
997*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
998*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
999*333d2b36SAndroid Build Coastguard Worker.intermediates/myothernativelib/android_arm64_armv8-a_shared/myothernativelib.so -> arm64/lib/myothernativelib.so
1000*333d2b36SAndroid Build Coastguard Worker.intermediates/myothernativelib/android_arm_armv7-a-neon_shared/myothernativelib.so -> arm/lib/myothernativelib.so
1001*333d2b36SAndroid Build Coastguard Worker.intermediates/mysystemnativelib/android_arm64_armv8-a_shared/mysystemnativelib.so -> arm64/lib/mysystemnativelib.so
1002*333d2b36SAndroid Build Coastguard Worker.intermediates/mysystemnativelib/android_arm_armv7-a-neon_shared/mysystemnativelib.so -> arm/lib/mysystemnativelib.so
1003*333d2b36SAndroid Build Coastguard Worker`),
1004*333d2b36SAndroid Build Coastguard Worker	)
1005*333d2b36SAndroid Build Coastguard Worker}
1006*333d2b36SAndroid Build Coastguard Worker
1007*333d2b36SAndroid Build Coastguard Workerfunc TestHostSnapshotWithCcSharedLibrary(t *testing.T) {
1008*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1009*333d2b36SAndroid Build Coastguard Worker		sdk {
1010*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
1011*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1012*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1013*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["mynativelib"],
1014*333d2b36SAndroid Build Coastguard Worker		}
1015*333d2b36SAndroid Build Coastguard Worker
1016*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
1017*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
1018*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1019*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1020*333d2b36SAndroid Build Coastguard Worker			srcs: [
1021*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
1022*333d2b36SAndroid Build Coastguard Worker				"aidl/foo/bar/Test.aidl",
1023*333d2b36SAndroid Build Coastguard Worker			],
1024*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1025*333d2b36SAndroid Build Coastguard Worker			aidl: {
1026*333d2b36SAndroid Build Coastguard Worker				export_aidl_headers: true,
1027*333d2b36SAndroid Build Coastguard Worker			},
1028*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1029*333d2b36SAndroid Build Coastguard Worker			sdk_version: "minimum",
1030*333d2b36SAndroid Build Coastguard Worker		}
1031*333d2b36SAndroid Build Coastguard Worker	`)
1032*333d2b36SAndroid Build Coastguard Worker
1033*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
1034*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1035*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1036*333d2b36SAndroid Build Coastguard Worker
1037*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1038*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
1039*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
1040*333d2b36SAndroid Build Coastguard Worker}
1041*333d2b36SAndroid Build Coastguard Worker
1042*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
1043*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
1044*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1045*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1046*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1047*333d2b36SAndroid Build Coastguard Worker    device_supported: false,
1048*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
1049*333d2b36SAndroid Build Coastguard Worker    sdk_version: "minimum",
1050*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1051*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1052*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
1053*333d2b36SAndroid Build Coastguard Worker    target: {
1054*333d2b36SAndroid Build Coastguard Worker        host: {
1055*333d2b36SAndroid Build Coastguard Worker            enabled: false,
1056*333d2b36SAndroid Build Coastguard Worker        },
1057*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
1058*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1059*333d2b36SAndroid Build Coastguard Worker            srcs: ["x86_64/lib/mynativelib.so"],
1060*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["x86_64/include_gen/mynativelib/linux_glibc_x86_64_shared/gen/aidl"],
1061*333d2b36SAndroid Build Coastguard Worker        },
1062*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
1063*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1064*333d2b36SAndroid Build Coastguard Worker            srcs: ["x86/lib/mynativelib.so"],
1065*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["x86/include_gen/mynativelib/linux_glibc_x86_shared/gen/aidl"],
1066*333d2b36SAndroid Build Coastguard Worker        },
1067*333d2b36SAndroid Build Coastguard Worker    },
1068*333d2b36SAndroid Build Coastguard Worker    strip: {
1069*333d2b36SAndroid Build Coastguard Worker        none: true,
1070*333d2b36SAndroid Build Coastguard Worker    },
1071*333d2b36SAndroid Build Coastguard Worker}
1072*333d2b36SAndroid Build Coastguard Worker`),
1073*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1074*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
1075*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> x86_64/lib/mynativelib.so
1076*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/Test.h -> x86_64/include_gen/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/Test.h
1077*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/BnTest.h -> x86_64/include_gen/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/BnTest.h
1078*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/BpTest.h -> x86_64/include_gen/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/BpTest.h
1079*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> x86/lib/mynativelib.so
1080*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_shared/gen/aidl/aidl/foo/bar/Test.h -> x86/include_gen/mynativelib/linux_glibc_x86_shared/gen/aidl/aidl/foo/bar/Test.h
1081*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_shared/gen/aidl/aidl/foo/bar/BnTest.h -> x86/include_gen/mynativelib/linux_glibc_x86_shared/gen/aidl/aidl/foo/bar/BnTest.h
1082*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_shared/gen/aidl/aidl/foo/bar/BpTest.h -> x86/include_gen/mynativelib/linux_glibc_x86_shared/gen/aidl/aidl/foo/bar/BpTest.h
1083*333d2b36SAndroid Build Coastguard Worker`),
1084*333d2b36SAndroid Build Coastguard Worker	)
1085*333d2b36SAndroid Build Coastguard Worker}
1086*333d2b36SAndroid Build Coastguard Worker
1087*333d2b36SAndroid Build Coastguard Workerfunc TestMultipleHostOsTypesSnapshotWithCcSharedLibrary(t *testing.T) {
1088*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1089*333d2b36SAndroid Build Coastguard Worker		sdk {
1090*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
1091*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1092*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1093*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["mynativelib"],
1094*333d2b36SAndroid Build Coastguard Worker			target: {
1095*333d2b36SAndroid Build Coastguard Worker				windows: {
1096*333d2b36SAndroid Build Coastguard Worker					enabled: true,
1097*333d2b36SAndroid Build Coastguard Worker				},
1098*333d2b36SAndroid Build Coastguard Worker			},
1099*333d2b36SAndroid Build Coastguard Worker		}
1100*333d2b36SAndroid Build Coastguard Worker
1101*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
1102*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
1103*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1104*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1105*333d2b36SAndroid Build Coastguard Worker			srcs: [
1106*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
1107*333d2b36SAndroid Build Coastguard Worker			],
1108*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1109*333d2b36SAndroid Build Coastguard Worker			target: {
1110*333d2b36SAndroid Build Coastguard Worker				windows: {
1111*333d2b36SAndroid Build Coastguard Worker					enabled: true,
1112*333d2b36SAndroid Build Coastguard Worker				},
1113*333d2b36SAndroid Build Coastguard Worker			},
1114*333d2b36SAndroid Build Coastguard Worker		}
1115*333d2b36SAndroid Build Coastguard Worker	`)
1116*333d2b36SAndroid Build Coastguard Worker
1117*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
1118*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1119*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1120*333d2b36SAndroid Build Coastguard Worker
1121*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1122*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
1123*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
1124*333d2b36SAndroid Build Coastguard Worker}
1125*333d2b36SAndroid Build Coastguard Worker
1126*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
1127*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
1128*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1129*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1130*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1131*333d2b36SAndroid Build Coastguard Worker    device_supported: false,
1132*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
1133*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1134*333d2b36SAndroid Build Coastguard Worker    target: {
1135*333d2b36SAndroid Build Coastguard Worker        host: {
1136*333d2b36SAndroid Build Coastguard Worker            enabled: false,
1137*333d2b36SAndroid Build Coastguard Worker        },
1138*333d2b36SAndroid Build Coastguard Worker        linux_glibc: {
1139*333d2b36SAndroid Build Coastguard Worker            compile_multilib: "both",
1140*333d2b36SAndroid Build Coastguard Worker        },
1141*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
1142*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1143*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1144*333d2b36SAndroid Build Coastguard Worker        },
1145*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
1146*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1147*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1148*333d2b36SAndroid Build Coastguard Worker        },
1149*333d2b36SAndroid Build Coastguard Worker        windows: {
1150*333d2b36SAndroid Build Coastguard Worker            compile_multilib: "64",
1151*333d2b36SAndroid Build Coastguard Worker        },
1152*333d2b36SAndroid Build Coastguard Worker        windows_x86_64: {
1153*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1154*333d2b36SAndroid Build Coastguard Worker            srcs: ["windows/x86_64/lib/mynativelib.dll"],
1155*333d2b36SAndroid Build Coastguard Worker        },
1156*333d2b36SAndroid Build Coastguard Worker    },
1157*333d2b36SAndroid Build Coastguard Worker    strip: {
1158*333d2b36SAndroid Build Coastguard Worker        none: true,
1159*333d2b36SAndroid Build Coastguard Worker    },
1160*333d2b36SAndroid Build Coastguard Worker}
1161*333d2b36SAndroid Build Coastguard Worker`),
1162*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1163*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1164*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1165*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/windows_x86_64_shared/mynativelib.dll -> windows/x86_64/lib/mynativelib.dll
1166*333d2b36SAndroid Build Coastguard Worker`),
1167*333d2b36SAndroid Build Coastguard Worker	)
1168*333d2b36SAndroid Build Coastguard Worker}
1169*333d2b36SAndroid Build Coastguard Worker
1170*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcStaticLibrary(t *testing.T) {
1171*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1172*333d2b36SAndroid Build Coastguard Worker		module_exports {
1173*333d2b36SAndroid Build Coastguard Worker			name: "myexports",
1174*333d2b36SAndroid Build Coastguard Worker			native_static_libs: ["mynativelib"],
1175*333d2b36SAndroid Build Coastguard Worker		}
1176*333d2b36SAndroid Build Coastguard Worker
1177*333d2b36SAndroid Build Coastguard Worker		cc_library_static {
1178*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
1179*333d2b36SAndroid Build Coastguard Worker			srcs: [
1180*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
1181*333d2b36SAndroid Build Coastguard Worker				"aidl/foo/bar/Test.aidl",
1182*333d2b36SAndroid Build Coastguard Worker			],
1183*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1184*333d2b36SAndroid Build Coastguard Worker			aidl: {
1185*333d2b36SAndroid Build Coastguard Worker				export_aidl_headers: true,
1186*333d2b36SAndroid Build Coastguard Worker			},
1187*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1188*333d2b36SAndroid Build Coastguard Worker		}
1189*333d2b36SAndroid Build Coastguard Worker	`)
1190*333d2b36SAndroid Build Coastguard Worker
1191*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "myexports", "",
1192*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1193*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1194*333d2b36SAndroid Build Coastguard Worker
1195*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1196*333d2b36SAndroid Build Coastguard Worker    name: "myexports.contributions",
1197*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
1198*333d2b36SAndroid Build Coastguard Worker}
1199*333d2b36SAndroid Build Coastguard Worker
1200*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_static {
1201*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
1202*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1203*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1204*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1205*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1206*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1207*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
1208*333d2b36SAndroid Build Coastguard Worker    arch: {
1209*333d2b36SAndroid Build Coastguard Worker        arm64: {
1210*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/mynativelib.a"],
1211*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["arm64/include_gen/mynativelib/android_arm64_armv8-a_static/gen/aidl"],
1212*333d2b36SAndroid Build Coastguard Worker        },
1213*333d2b36SAndroid Build Coastguard Worker        arm: {
1214*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/mynativelib.a"],
1215*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["arm/include_gen/mynativelib/android_arm_armv7-a-neon_static/gen/aidl"],
1216*333d2b36SAndroid Build Coastguard Worker        },
1217*333d2b36SAndroid Build Coastguard Worker    },
1218*333d2b36SAndroid Build Coastguard Worker}
1219*333d2b36SAndroid Build Coastguard Worker`),
1220*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1221*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
1222*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a
1223*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_static/gen/aidl/aidl/foo/bar/Test.h -> arm64/include_gen/mynativelib/android_arm64_armv8-a_static/gen/aidl/aidl/foo/bar/Test.h
1224*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_static/gen/aidl/aidl/foo/bar/BnTest.h -> arm64/include_gen/mynativelib/android_arm64_armv8-a_static/gen/aidl/aidl/foo/bar/BnTest.h
1225*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_static/gen/aidl/aidl/foo/bar/BpTest.h -> arm64/include_gen/mynativelib/android_arm64_armv8-a_static/gen/aidl/aidl/foo/bar/BpTest.h
1226*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a
1227*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_static/gen/aidl/aidl/foo/bar/Test.h -> arm/include_gen/mynativelib/android_arm_armv7-a-neon_static/gen/aidl/aidl/foo/bar/Test.h
1228*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_static/gen/aidl/aidl/foo/bar/BnTest.h -> arm/include_gen/mynativelib/android_arm_armv7-a-neon_static/gen/aidl/aidl/foo/bar/BnTest.h
1229*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_static/gen/aidl/aidl/foo/bar/BpTest.h -> arm/include_gen/mynativelib/android_arm_armv7-a-neon_static/gen/aidl/aidl/foo/bar/BpTest.h
1230*333d2b36SAndroid Build Coastguard Worker`),
1231*333d2b36SAndroid Build Coastguard Worker	)
1232*333d2b36SAndroid Build Coastguard Worker}
1233*333d2b36SAndroid Build Coastguard Worker
1234*333d2b36SAndroid Build Coastguard Workerfunc TestHostSnapshotWithCcStaticLibrary(t *testing.T) {
1235*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1236*333d2b36SAndroid Build Coastguard Worker		module_exports {
1237*333d2b36SAndroid Build Coastguard Worker			name: "myexports",
1238*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1239*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1240*333d2b36SAndroid Build Coastguard Worker			native_static_libs: ["mynativelib"],
1241*333d2b36SAndroid Build Coastguard Worker		}
1242*333d2b36SAndroid Build Coastguard Worker
1243*333d2b36SAndroid Build Coastguard Worker		cc_library_static {
1244*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
1245*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1246*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1247*333d2b36SAndroid Build Coastguard Worker			srcs: [
1248*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
1249*333d2b36SAndroid Build Coastguard Worker				"aidl/foo/bar/Test.aidl",
1250*333d2b36SAndroid Build Coastguard Worker			],
1251*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1252*333d2b36SAndroid Build Coastguard Worker			aidl: {
1253*333d2b36SAndroid Build Coastguard Worker				export_aidl_headers: true,
1254*333d2b36SAndroid Build Coastguard Worker			},
1255*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1256*333d2b36SAndroid Build Coastguard Worker		}
1257*333d2b36SAndroid Build Coastguard Worker	`)
1258*333d2b36SAndroid Build Coastguard Worker
1259*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "myexports", "",
1260*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1261*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1262*333d2b36SAndroid Build Coastguard Worker
1263*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1264*333d2b36SAndroid Build Coastguard Worker    name: "myexports.contributions",
1265*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
1266*333d2b36SAndroid Build Coastguard Worker}
1267*333d2b36SAndroid Build Coastguard Worker
1268*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_static {
1269*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
1270*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1271*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1272*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1273*333d2b36SAndroid Build Coastguard Worker    device_supported: false,
1274*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
1275*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1276*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1277*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
1278*333d2b36SAndroid Build Coastguard Worker    target: {
1279*333d2b36SAndroid Build Coastguard Worker        host: {
1280*333d2b36SAndroid Build Coastguard Worker            enabled: false,
1281*333d2b36SAndroid Build Coastguard Worker        },
1282*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
1283*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1284*333d2b36SAndroid Build Coastguard Worker            srcs: ["x86_64/lib/mynativelib.a"],
1285*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["x86_64/include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl"],
1286*333d2b36SAndroid Build Coastguard Worker        },
1287*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
1288*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1289*333d2b36SAndroid Build Coastguard Worker            srcs: ["x86/lib/mynativelib.a"],
1290*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["x86/include_gen/mynativelib/linux_glibc_x86_static/gen/aidl"],
1291*333d2b36SAndroid Build Coastguard Worker        },
1292*333d2b36SAndroid Build Coastguard Worker    },
1293*333d2b36SAndroid Build Coastguard Worker}
1294*333d2b36SAndroid Build Coastguard Worker`),
1295*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1296*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
1297*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a
1298*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/Test.h -> x86_64/include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/Test.h
1299*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BnTest.h -> x86_64/include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BnTest.h
1300*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BpTest.h -> x86_64/include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BpTest.h
1301*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> x86/lib/mynativelib.a
1302*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_static/gen/aidl/aidl/foo/bar/Test.h -> x86/include_gen/mynativelib/linux_glibc_x86_static/gen/aidl/aidl/foo/bar/Test.h
1303*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_static/gen/aidl/aidl/foo/bar/BnTest.h -> x86/include_gen/mynativelib/linux_glibc_x86_static/gen/aidl/aidl/foo/bar/BnTest.h
1304*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_static/gen/aidl/aidl/foo/bar/BpTest.h -> x86/include_gen/mynativelib/linux_glibc_x86_static/gen/aidl/aidl/foo/bar/BpTest.h
1305*333d2b36SAndroid Build Coastguard Worker`),
1306*333d2b36SAndroid Build Coastguard Worker	)
1307*333d2b36SAndroid Build Coastguard Worker}
1308*333d2b36SAndroid Build Coastguard Worker
1309*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcLibrary(t *testing.T) {
1310*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1311*333d2b36SAndroid Build Coastguard Worker		module_exports {
1312*333d2b36SAndroid Build Coastguard Worker			name: "myexports",
1313*333d2b36SAndroid Build Coastguard Worker			native_libs: ["mynativelib"],
1314*333d2b36SAndroid Build Coastguard Worker		}
1315*333d2b36SAndroid Build Coastguard Worker
1316*333d2b36SAndroid Build Coastguard Worker		cc_library {
1317*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
1318*333d2b36SAndroid Build Coastguard Worker			srcs: [
1319*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
1320*333d2b36SAndroid Build Coastguard Worker			],
1321*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1322*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1323*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
1324*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
1325*333d2b36SAndroid Build Coastguard Worker		}
1326*333d2b36SAndroid Build Coastguard Worker	`)
1327*333d2b36SAndroid Build Coastguard Worker
1328*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "myexports", "",
1329*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1330*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1331*333d2b36SAndroid Build Coastguard Worker
1332*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1333*333d2b36SAndroid Build Coastguard Worker    name: "myexports.contributions",
1334*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
1335*333d2b36SAndroid Build Coastguard Worker}
1336*333d2b36SAndroid Build Coastguard Worker
1337*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library {
1338*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
1339*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1340*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1341*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1342*333d2b36SAndroid Build Coastguard Worker    vendor_available: true,
1343*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1344*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1345*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
1346*333d2b36SAndroid Build Coastguard Worker    arch: {
1347*333d2b36SAndroid Build Coastguard Worker        arm64: {
1348*333d2b36SAndroid Build Coastguard Worker            static: {
1349*333d2b36SAndroid Build Coastguard Worker                srcs: ["arm64/lib/mynativelib.a"],
1350*333d2b36SAndroid Build Coastguard Worker            },
1351*333d2b36SAndroid Build Coastguard Worker            shared: {
1352*333d2b36SAndroid Build Coastguard Worker                srcs: ["arm64/lib/mynativelib.so"],
1353*333d2b36SAndroid Build Coastguard Worker            },
1354*333d2b36SAndroid Build Coastguard Worker        },
1355*333d2b36SAndroid Build Coastguard Worker        arm: {
1356*333d2b36SAndroid Build Coastguard Worker            static: {
1357*333d2b36SAndroid Build Coastguard Worker                srcs: ["arm/lib/mynativelib.a"],
1358*333d2b36SAndroid Build Coastguard Worker            },
1359*333d2b36SAndroid Build Coastguard Worker            shared: {
1360*333d2b36SAndroid Build Coastguard Worker                srcs: ["arm/lib/mynativelib.so"],
1361*333d2b36SAndroid Build Coastguard Worker            },
1362*333d2b36SAndroid Build Coastguard Worker        },
1363*333d2b36SAndroid Build Coastguard Worker    },
1364*333d2b36SAndroid Build Coastguard Worker}
1365*333d2b36SAndroid Build Coastguard Worker`),
1366*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1367*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
1368*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a
1369*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
1370*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a
1371*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
1372*333d2b36SAndroid Build Coastguard Worker`),
1373*333d2b36SAndroid Build Coastguard Worker		// TODO(b/183315522): Remove this and fix the issue.
1374*333d2b36SAndroid Build Coastguard Worker		snapshotTestErrorHandler(checkSnapshotPreferredWithSource, android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\Qunrecognized property "arch.arm.shared.export_include_dirs"\E`)),
1375*333d2b36SAndroid Build Coastguard Worker	)
1376*333d2b36SAndroid Build Coastguard Worker}
1377*333d2b36SAndroid Build Coastguard Worker
1378*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotSameLibraryWithNativeLibsAndNativeSharedLib(t *testing.T) {
1379*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1380*333d2b36SAndroid Build Coastguard Worker		module_exports {
1381*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1382*333d2b36SAndroid Build Coastguard Worker			name: "myexports",
1383*333d2b36SAndroid Build Coastguard Worker			target: {
1384*333d2b36SAndroid Build Coastguard Worker				android: {
1385*333d2b36SAndroid Build Coastguard Worker						native_shared_libs: [
1386*333d2b36SAndroid Build Coastguard Worker								"mynativelib",
1387*333d2b36SAndroid Build Coastguard Worker						],
1388*333d2b36SAndroid Build Coastguard Worker				},
1389*333d2b36SAndroid Build Coastguard Worker				not_windows: {
1390*333d2b36SAndroid Build Coastguard Worker						native_libs: [
1391*333d2b36SAndroid Build Coastguard Worker								"mynativelib",
1392*333d2b36SAndroid Build Coastguard Worker						],
1393*333d2b36SAndroid Build Coastguard Worker				},
1394*333d2b36SAndroid Build Coastguard Worker			},
1395*333d2b36SAndroid Build Coastguard Worker		}
1396*333d2b36SAndroid Build Coastguard Worker
1397*333d2b36SAndroid Build Coastguard Worker		cc_library {
1398*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
1399*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1400*333d2b36SAndroid Build Coastguard Worker			srcs: [
1401*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
1402*333d2b36SAndroid Build Coastguard Worker			],
1403*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1404*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
1405*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
1406*333d2b36SAndroid Build Coastguard Worker		}
1407*333d2b36SAndroid Build Coastguard Worker	`)
1408*333d2b36SAndroid Build Coastguard Worker
1409*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "myexports", "",
1410*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1411*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1412*333d2b36SAndroid Build Coastguard Worker
1413*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1414*333d2b36SAndroid Build Coastguard Worker    name: "myexports.contributions",
1415*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
1416*333d2b36SAndroid Build Coastguard Worker}
1417*333d2b36SAndroid Build Coastguard Worker
1418*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library {
1419*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
1420*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1421*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1422*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1423*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
1424*333d2b36SAndroid Build Coastguard Worker    vendor_available: true,
1425*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1426*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1427*333d2b36SAndroid Build Coastguard Worker    target: {
1428*333d2b36SAndroid Build Coastguard Worker        host: {
1429*333d2b36SAndroid Build Coastguard Worker            enabled: false,
1430*333d2b36SAndroid Build Coastguard Worker        },
1431*333d2b36SAndroid Build Coastguard Worker        android_arm64: {
1432*333d2b36SAndroid Build Coastguard Worker            shared: {
1433*333d2b36SAndroid Build Coastguard Worker                srcs: ["android/arm64/lib/mynativelib.so"],
1434*333d2b36SAndroid Build Coastguard Worker            },
1435*333d2b36SAndroid Build Coastguard Worker            static: {
1436*333d2b36SAndroid Build Coastguard Worker                enabled: false,
1437*333d2b36SAndroid Build Coastguard Worker            },
1438*333d2b36SAndroid Build Coastguard Worker        },
1439*333d2b36SAndroid Build Coastguard Worker        android_arm: {
1440*333d2b36SAndroid Build Coastguard Worker            shared: {
1441*333d2b36SAndroid Build Coastguard Worker                srcs: ["android/arm/lib/mynativelib.so"],
1442*333d2b36SAndroid Build Coastguard Worker            },
1443*333d2b36SAndroid Build Coastguard Worker            static: {
1444*333d2b36SAndroid Build Coastguard Worker                enabled: false,
1445*333d2b36SAndroid Build Coastguard Worker            },
1446*333d2b36SAndroid Build Coastguard Worker        },
1447*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
1448*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1449*333d2b36SAndroid Build Coastguard Worker            static: {
1450*333d2b36SAndroid Build Coastguard Worker                srcs: ["linux_glibc/x86_64/lib/mynativelib.a"],
1451*333d2b36SAndroid Build Coastguard Worker            },
1452*333d2b36SAndroid Build Coastguard Worker            shared: {
1453*333d2b36SAndroid Build Coastguard Worker                srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1454*333d2b36SAndroid Build Coastguard Worker            },
1455*333d2b36SAndroid Build Coastguard Worker        },
1456*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
1457*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1458*333d2b36SAndroid Build Coastguard Worker            static: {
1459*333d2b36SAndroid Build Coastguard Worker                srcs: ["linux_glibc/x86/lib/mynativelib.a"],
1460*333d2b36SAndroid Build Coastguard Worker            },
1461*333d2b36SAndroid Build Coastguard Worker            shared: {
1462*333d2b36SAndroid Build Coastguard Worker                srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1463*333d2b36SAndroid Build Coastguard Worker            },
1464*333d2b36SAndroid Build Coastguard Worker        },
1465*333d2b36SAndroid Build Coastguard Worker    },
1466*333d2b36SAndroid Build Coastguard Worker}
1467*333d2b36SAndroid Build Coastguard Worker`),
1468*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1469*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so
1470*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so
1471*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> linux_glibc/x86_64/lib/mynativelib.a
1472*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1473*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> linux_glibc/x86/lib/mynativelib.a
1474*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1475*333d2b36SAndroid Build Coastguard Worker`),
1476*333d2b36SAndroid Build Coastguard Worker	)
1477*333d2b36SAndroid Build Coastguard Worker}
1478*333d2b36SAndroid Build Coastguard Worker
1479*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotSameLibraryWithAndroidNativeLibsAndHostNativeSharedLib(t *testing.T) {
1480*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1481*333d2b36SAndroid Build Coastguard Worker		module_exports {
1482*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1483*333d2b36SAndroid Build Coastguard Worker			name: "myexports",
1484*333d2b36SAndroid Build Coastguard Worker			target: {
1485*333d2b36SAndroid Build Coastguard Worker				android: {
1486*333d2b36SAndroid Build Coastguard Worker						native_libs: [
1487*333d2b36SAndroid Build Coastguard Worker								"mynativelib",
1488*333d2b36SAndroid Build Coastguard Worker						],
1489*333d2b36SAndroid Build Coastguard Worker				},
1490*333d2b36SAndroid Build Coastguard Worker				not_windows: {
1491*333d2b36SAndroid Build Coastguard Worker						native_shared_libs: [
1492*333d2b36SAndroid Build Coastguard Worker								"mynativelib",
1493*333d2b36SAndroid Build Coastguard Worker						],
1494*333d2b36SAndroid Build Coastguard Worker				},
1495*333d2b36SAndroid Build Coastguard Worker			},
1496*333d2b36SAndroid Build Coastguard Worker		}
1497*333d2b36SAndroid Build Coastguard Worker
1498*333d2b36SAndroid Build Coastguard Worker		cc_library {
1499*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
1500*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1501*333d2b36SAndroid Build Coastguard Worker			srcs: [
1502*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
1503*333d2b36SAndroid Build Coastguard Worker			],
1504*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1505*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
1506*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
1507*333d2b36SAndroid Build Coastguard Worker		}
1508*333d2b36SAndroid Build Coastguard Worker	`)
1509*333d2b36SAndroid Build Coastguard Worker
1510*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "myexports", "",
1511*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1512*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1513*333d2b36SAndroid Build Coastguard Worker
1514*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1515*333d2b36SAndroid Build Coastguard Worker    name: "myexports.contributions",
1516*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
1517*333d2b36SAndroid Build Coastguard Worker}
1518*333d2b36SAndroid Build Coastguard Worker
1519*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library {
1520*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
1521*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1522*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1523*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1524*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
1525*333d2b36SAndroid Build Coastguard Worker    vendor_available: true,
1526*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1527*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1528*333d2b36SAndroid Build Coastguard Worker    target: {
1529*333d2b36SAndroid Build Coastguard Worker        host: {
1530*333d2b36SAndroid Build Coastguard Worker            enabled: false,
1531*333d2b36SAndroid Build Coastguard Worker        },
1532*333d2b36SAndroid Build Coastguard Worker        android_arm64: {
1533*333d2b36SAndroid Build Coastguard Worker            static: {
1534*333d2b36SAndroid Build Coastguard Worker                srcs: ["android/arm64/lib/mynativelib.a"],
1535*333d2b36SAndroid Build Coastguard Worker            },
1536*333d2b36SAndroid Build Coastguard Worker            shared: {
1537*333d2b36SAndroid Build Coastguard Worker                srcs: ["android/arm64/lib/mynativelib.so"],
1538*333d2b36SAndroid Build Coastguard Worker            },
1539*333d2b36SAndroid Build Coastguard Worker        },
1540*333d2b36SAndroid Build Coastguard Worker        android_arm: {
1541*333d2b36SAndroid Build Coastguard Worker            static: {
1542*333d2b36SAndroid Build Coastguard Worker                srcs: ["android/arm/lib/mynativelib.a"],
1543*333d2b36SAndroid Build Coastguard Worker            },
1544*333d2b36SAndroid Build Coastguard Worker            shared: {
1545*333d2b36SAndroid Build Coastguard Worker                srcs: ["android/arm/lib/mynativelib.so"],
1546*333d2b36SAndroid Build Coastguard Worker            },
1547*333d2b36SAndroid Build Coastguard Worker        },
1548*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
1549*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1550*333d2b36SAndroid Build Coastguard Worker            shared: {
1551*333d2b36SAndroid Build Coastguard Worker                srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1552*333d2b36SAndroid Build Coastguard Worker            },
1553*333d2b36SAndroid Build Coastguard Worker            static: {
1554*333d2b36SAndroid Build Coastguard Worker                enabled: false,
1555*333d2b36SAndroid Build Coastguard Worker            },
1556*333d2b36SAndroid Build Coastguard Worker        },
1557*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
1558*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1559*333d2b36SAndroid Build Coastguard Worker            shared: {
1560*333d2b36SAndroid Build Coastguard Worker                srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1561*333d2b36SAndroid Build Coastguard Worker            },
1562*333d2b36SAndroid Build Coastguard Worker            static: {
1563*333d2b36SAndroid Build Coastguard Worker                enabled: false,
1564*333d2b36SAndroid Build Coastguard Worker            },
1565*333d2b36SAndroid Build Coastguard Worker        },
1566*333d2b36SAndroid Build Coastguard Worker    },
1567*333d2b36SAndroid Build Coastguard Worker}
1568*333d2b36SAndroid Build Coastguard Worker`),
1569*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1570*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> android/arm64/lib/mynativelib.a
1571*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so
1572*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> android/arm/lib/mynativelib.a
1573*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so
1574*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1575*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1576*333d2b36SAndroid Build Coastguard Worker`),
1577*333d2b36SAndroid Build Coastguard Worker	)
1578*333d2b36SAndroid Build Coastguard Worker}
1579*333d2b36SAndroid Build Coastguard Worker
1580*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotSameLibraryWithNativeStaticLibsAndNativeSharedLib(t *testing.T) {
1581*333d2b36SAndroid Build Coastguard Worker	testSdkError(t, "Incompatible member types", `
1582*333d2b36SAndroid Build Coastguard Worker		module_exports {
1583*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1584*333d2b36SAndroid Build Coastguard Worker			name: "myexports",
1585*333d2b36SAndroid Build Coastguard Worker			target: {
1586*333d2b36SAndroid Build Coastguard Worker				android: {
1587*333d2b36SAndroid Build Coastguard Worker						native_shared_libs: [
1588*333d2b36SAndroid Build Coastguard Worker								"mynativelib",
1589*333d2b36SAndroid Build Coastguard Worker						],
1590*333d2b36SAndroid Build Coastguard Worker				},
1591*333d2b36SAndroid Build Coastguard Worker				not_windows: {
1592*333d2b36SAndroid Build Coastguard Worker						native_static_libs: [
1593*333d2b36SAndroid Build Coastguard Worker								"mynativelib",
1594*333d2b36SAndroid Build Coastguard Worker						],
1595*333d2b36SAndroid Build Coastguard Worker				},
1596*333d2b36SAndroid Build Coastguard Worker			},
1597*333d2b36SAndroid Build Coastguard Worker		}
1598*333d2b36SAndroid Build Coastguard Worker
1599*333d2b36SAndroid Build Coastguard Worker		cc_library {
1600*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
1601*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1602*333d2b36SAndroid Build Coastguard Worker			srcs: [
1603*333d2b36SAndroid Build Coastguard Worker			],
1604*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1605*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
1606*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
1607*333d2b36SAndroid Build Coastguard Worker		}
1608*333d2b36SAndroid Build Coastguard Worker	`)
1609*333d2b36SAndroid Build Coastguard Worker}
1610*333d2b36SAndroid Build Coastguard Worker
1611*333d2b36SAndroid Build Coastguard Workerfunc TestHostSnapshotWithMultiLib64(t *testing.T) {
1612*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1613*333d2b36SAndroid Build Coastguard Worker		module_exports {
1614*333d2b36SAndroid Build Coastguard Worker			name: "myexports",
1615*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1616*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1617*333d2b36SAndroid Build Coastguard Worker			target: {
1618*333d2b36SAndroid Build Coastguard Worker				host: {
1619*333d2b36SAndroid Build Coastguard Worker					compile_multilib: "64",
1620*333d2b36SAndroid Build Coastguard Worker				},
1621*333d2b36SAndroid Build Coastguard Worker			},
1622*333d2b36SAndroid Build Coastguard Worker			native_static_libs: ["mynativelib"],
1623*333d2b36SAndroid Build Coastguard Worker		}
1624*333d2b36SAndroid Build Coastguard Worker
1625*333d2b36SAndroid Build Coastguard Worker		cc_library_static {
1626*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
1627*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1628*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1629*333d2b36SAndroid Build Coastguard Worker			srcs: [
1630*333d2b36SAndroid Build Coastguard Worker				"Test.cpp",
1631*333d2b36SAndroid Build Coastguard Worker				"aidl/foo/bar/Test.aidl",
1632*333d2b36SAndroid Build Coastguard Worker			],
1633*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1634*333d2b36SAndroid Build Coastguard Worker			aidl: {
1635*333d2b36SAndroid Build Coastguard Worker				export_aidl_headers: true,
1636*333d2b36SAndroid Build Coastguard Worker			},
1637*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1638*333d2b36SAndroid Build Coastguard Worker		}
1639*333d2b36SAndroid Build Coastguard Worker	`)
1640*333d2b36SAndroid Build Coastguard Worker
1641*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "myexports", "",
1642*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1643*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1644*333d2b36SAndroid Build Coastguard Worker
1645*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1646*333d2b36SAndroid Build Coastguard Worker    name: "myexports.contributions",
1647*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
1648*333d2b36SAndroid Build Coastguard Worker}
1649*333d2b36SAndroid Build Coastguard Worker
1650*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_static {
1651*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
1652*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1653*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1654*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1655*333d2b36SAndroid Build Coastguard Worker    device_supported: false,
1656*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
1657*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1658*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "64",
1659*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: [
1660*333d2b36SAndroid Build Coastguard Worker        "include/myinclude",
1661*333d2b36SAndroid Build Coastguard Worker        "include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl",
1662*333d2b36SAndroid Build Coastguard Worker    ],
1663*333d2b36SAndroid Build Coastguard Worker    target: {
1664*333d2b36SAndroid Build Coastguard Worker        host: {
1665*333d2b36SAndroid Build Coastguard Worker            enabled: false,
1666*333d2b36SAndroid Build Coastguard Worker        },
1667*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
1668*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1669*333d2b36SAndroid Build Coastguard Worker            srcs: ["x86_64/lib/mynativelib.a"],
1670*333d2b36SAndroid Build Coastguard Worker        },
1671*333d2b36SAndroid Build Coastguard Worker    },
1672*333d2b36SAndroid Build Coastguard Worker}
1673*333d2b36SAndroid Build Coastguard Worker`),
1674*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1675*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
1676*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/Test.h -> include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/Test.h
1677*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BnTest.h -> include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BnTest.h
1678*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BpTest.h -> include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl/aidl/foo/bar/BpTest.h
1679*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a
1680*333d2b36SAndroid Build Coastguard Worker`),
1681*333d2b36SAndroid Build Coastguard Worker	)
1682*333d2b36SAndroid Build Coastguard Worker}
1683*333d2b36SAndroid Build Coastguard Worker
1684*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcHeadersLibrary(t *testing.T) {
1685*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1686*333d2b36SAndroid Build Coastguard Worker		sdk {
1687*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
1688*333d2b36SAndroid Build Coastguard Worker			native_header_libs: ["mynativeheaders"],
1689*333d2b36SAndroid Build Coastguard Worker		}
1690*333d2b36SAndroid Build Coastguard Worker
1691*333d2b36SAndroid Build Coastguard Worker		cc_library_headers {
1692*333d2b36SAndroid Build Coastguard Worker			name: "mynativeheaders",
1693*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1694*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1695*333d2b36SAndroid Build Coastguard Worker		}
1696*333d2b36SAndroid Build Coastguard Worker	`)
1697*333d2b36SAndroid Build Coastguard Worker
1698*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
1699*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1700*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1701*333d2b36SAndroid Build Coastguard Worker
1702*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1703*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
1704*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativeheaders"],
1705*333d2b36SAndroid Build Coastguard Worker}
1706*333d2b36SAndroid Build Coastguard Worker
1707*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_headers {
1708*333d2b36SAndroid Build Coastguard Worker    name: "mynativeheaders",
1709*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1710*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1711*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1712*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1713*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1714*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
1715*333d2b36SAndroid Build Coastguard Worker}
1716*333d2b36SAndroid Build Coastguard Worker`),
1717*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1718*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
1719*333d2b36SAndroid Build Coastguard Worker`),
1720*333d2b36SAndroid Build Coastguard Worker	)
1721*333d2b36SAndroid Build Coastguard Worker}
1722*333d2b36SAndroid Build Coastguard Worker
1723*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcHeadersLibraryAndNativeBridgeSupport(t *testing.T) {
1724*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
1725*333d2b36SAndroid Build Coastguard Worker		cc.PrepareForTestWithCcDefaultModules,
1726*333d2b36SAndroid Build Coastguard Worker		PrepareForTestWithSdkBuildComponents,
1727*333d2b36SAndroid Build Coastguard Worker		ccTestFs.AddToFixture(),
1728*333d2b36SAndroid Build Coastguard Worker		prepareForTestWithNativeBridgeTarget,
1729*333d2b36SAndroid Build Coastguard Worker		android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
1730*333d2b36SAndroid Build Coastguard Worker			android.RegisterApexContributionsBuildComponents(ctx)
1731*333d2b36SAndroid Build Coastguard Worker		}),
1732*333d2b36SAndroid Build Coastguard Worker	).RunTestWithBp(t, `
1733*333d2b36SAndroid Build Coastguard Worker		sdk {
1734*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
1735*333d2b36SAndroid Build Coastguard Worker			native_header_libs: ["mynativeheaders"],
1736*333d2b36SAndroid Build Coastguard Worker			traits: {
1737*333d2b36SAndroid Build Coastguard Worker				native_bridge_support: ["mynativeheaders"],
1738*333d2b36SAndroid Build Coastguard Worker			},
1739*333d2b36SAndroid Build Coastguard Worker		}
1740*333d2b36SAndroid Build Coastguard Worker
1741*333d2b36SAndroid Build Coastguard Worker		cc_library_headers {
1742*333d2b36SAndroid Build Coastguard Worker			name: "mynativeheaders",
1743*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1744*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1745*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
1746*333d2b36SAndroid Build Coastguard Worker			native_bridge_supported: true,
1747*333d2b36SAndroid Build Coastguard Worker		}
1748*333d2b36SAndroid Build Coastguard Worker	`)
1749*333d2b36SAndroid Build Coastguard Worker
1750*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
1751*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1752*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1753*333d2b36SAndroid Build Coastguard Worker
1754*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1755*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
1756*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativeheaders"],
1757*333d2b36SAndroid Build Coastguard Worker}
1758*333d2b36SAndroid Build Coastguard Worker
1759*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_headers {
1760*333d2b36SAndroid Build Coastguard Worker    name: "mynativeheaders",
1761*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1762*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1763*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1764*333d2b36SAndroid Build Coastguard Worker    native_bridge_supported: true,
1765*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1766*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1767*333d2b36SAndroid Build Coastguard Worker    system_shared_libs: [],
1768*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
1769*333d2b36SAndroid Build Coastguard Worker}
1770*333d2b36SAndroid Build Coastguard Worker`),
1771*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1772*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
1773*333d2b36SAndroid Build Coastguard Worker`),
1774*333d2b36SAndroid Build Coastguard Worker	)
1775*333d2b36SAndroid Build Coastguard Worker}
1776*333d2b36SAndroid Build Coastguard Worker
1777*333d2b36SAndroid Build Coastguard Worker// TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties verifies that when a
1778*333d2b36SAndroid Build Coastguard Worker// module that has different output files for a native bridge target requests the native bridge
1779*333d2b36SAndroid Build Coastguard Worker// variants are copied into the sdk snapshot that it reports an error.
1780*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties(t *testing.T) {
1781*333d2b36SAndroid Build Coastguard Worker	android.GroupFixturePreparers(
1782*333d2b36SAndroid Build Coastguard Worker		cc.PrepareForTestWithCcDefaultModules,
1783*333d2b36SAndroid Build Coastguard Worker		PrepareForTestWithSdkBuildComponents,
1784*333d2b36SAndroid Build Coastguard Worker		ccTestFs.AddToFixture(),
1785*333d2b36SAndroid Build Coastguard Worker		prepareForTestWithNativeBridgeTarget,
1786*333d2b36SAndroid Build Coastguard Worker	).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
1787*333d2b36SAndroid Build Coastguard Worker		`\QArchitecture variant "arm64_native_bridge" of sdk member "mynativeheaders" has properties distinct from other variants; this is not yet supported. The properties are:
1788*333d2b36SAndroid Build Coastguard Worker        export_include_dirs: [
1789*333d2b36SAndroid Build Coastguard Worker            "arm64_native_bridge/include/myinclude_nativebridge",
1790*333d2b36SAndroid Build Coastguard Worker            "arm64_native_bridge/include/myinclude",
1791*333d2b36SAndroid Build Coastguard Worker        ],\E`)).
1792*333d2b36SAndroid Build Coastguard Worker		RunTestWithBp(t, `
1793*333d2b36SAndroid Build Coastguard Worker		sdk {
1794*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
1795*333d2b36SAndroid Build Coastguard Worker			native_header_libs: ["mynativeheaders"],
1796*333d2b36SAndroid Build Coastguard Worker			traits: {
1797*333d2b36SAndroid Build Coastguard Worker				native_bridge_support: ["mynativeheaders"],
1798*333d2b36SAndroid Build Coastguard Worker			},
1799*333d2b36SAndroid Build Coastguard Worker		}
1800*333d2b36SAndroid Build Coastguard Worker
1801*333d2b36SAndroid Build Coastguard Worker		cc_library_headers {
1802*333d2b36SAndroid Build Coastguard Worker			name: "mynativeheaders",
1803*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1804*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1805*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
1806*333d2b36SAndroid Build Coastguard Worker			native_bridge_supported: true,
1807*333d2b36SAndroid Build Coastguard Worker			target: {
1808*333d2b36SAndroid Build Coastguard Worker				native_bridge: {
1809*333d2b36SAndroid Build Coastguard Worker					export_include_dirs: ["myinclude_nativebridge"],
1810*333d2b36SAndroid Build Coastguard Worker				},
1811*333d2b36SAndroid Build Coastguard Worker			},
1812*333d2b36SAndroid Build Coastguard Worker		}
1813*333d2b36SAndroid Build Coastguard Worker	`)
1814*333d2b36SAndroid Build Coastguard Worker}
1815*333d2b36SAndroid Build Coastguard Worker
1816*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotWithCcHeadersLibraryAndImageVariants(t *testing.T) {
1817*333d2b36SAndroid Build Coastguard Worker	testImageVariant := func(t *testing.T, property, trait string) {
1818*333d2b36SAndroid Build Coastguard Worker		result := android.GroupFixturePreparers(
1819*333d2b36SAndroid Build Coastguard Worker			cc.PrepareForTestWithCcDefaultModules,
1820*333d2b36SAndroid Build Coastguard Worker			PrepareForTestWithSdkBuildComponents,
1821*333d2b36SAndroid Build Coastguard Worker			ccTestFs.AddToFixture(),
1822*333d2b36SAndroid Build Coastguard Worker			android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
1823*333d2b36SAndroid Build Coastguard Worker				android.RegisterApexContributionsBuildComponents(ctx)
1824*333d2b36SAndroid Build Coastguard Worker			}),
1825*333d2b36SAndroid Build Coastguard Worker		).RunTestWithBp(t, fmt.Sprintf(`
1826*333d2b36SAndroid Build Coastguard Worker		sdk {
1827*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
1828*333d2b36SAndroid Build Coastguard Worker			native_header_libs: ["mynativeheaders"],
1829*333d2b36SAndroid Build Coastguard Worker			traits: {
1830*333d2b36SAndroid Build Coastguard Worker				%s: ["mynativeheaders"],
1831*333d2b36SAndroid Build Coastguard Worker			},
1832*333d2b36SAndroid Build Coastguard Worker		}
1833*333d2b36SAndroid Build Coastguard Worker
1834*333d2b36SAndroid Build Coastguard Worker		cc_library_headers {
1835*333d2b36SAndroid Build Coastguard Worker			name: "mynativeheaders",
1836*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1837*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1838*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
1839*333d2b36SAndroid Build Coastguard Worker			%s: true,
1840*333d2b36SAndroid Build Coastguard Worker		}
1841*333d2b36SAndroid Build Coastguard Worker	`, trait, property))
1842*333d2b36SAndroid Build Coastguard Worker
1843*333d2b36SAndroid Build Coastguard Worker		CheckSnapshot(t, result, "mysdk", "",
1844*333d2b36SAndroid Build Coastguard Worker			checkAndroidBpContents(fmt.Sprintf(`
1845*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1846*333d2b36SAndroid Build Coastguard Worker
1847*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1848*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
1849*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativeheaders"],
1850*333d2b36SAndroid Build Coastguard Worker}
1851*333d2b36SAndroid Build Coastguard Worker
1852*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_headers {
1853*333d2b36SAndroid Build Coastguard Worker    name: "mynativeheaders",
1854*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1855*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1856*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1857*333d2b36SAndroid Build Coastguard Worker    %s: true,
1858*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1859*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1860*333d2b36SAndroid Build Coastguard Worker    system_shared_libs: [],
1861*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
1862*333d2b36SAndroid Build Coastguard Worker}
1863*333d2b36SAndroid Build Coastguard Worker`, property)),
1864*333d2b36SAndroid Build Coastguard Worker			checkAllCopyRules(`
1865*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
1866*333d2b36SAndroid Build Coastguard Worker`),
1867*333d2b36SAndroid Build Coastguard Worker		)
1868*333d2b36SAndroid Build Coastguard Worker	}
1869*333d2b36SAndroid Build Coastguard Worker
1870*333d2b36SAndroid Build Coastguard Worker	t.Run("ramdisk", func(t *testing.T) {
1871*333d2b36SAndroid Build Coastguard Worker		testImageVariant(t, "ramdisk_available", "ramdisk_image_required")
1872*333d2b36SAndroid Build Coastguard Worker	})
1873*333d2b36SAndroid Build Coastguard Worker
1874*333d2b36SAndroid Build Coastguard Worker	t.Run("recovery", func(t *testing.T) {
1875*333d2b36SAndroid Build Coastguard Worker		testImageVariant(t, "recovery_available", "recovery_image_required")
1876*333d2b36SAndroid Build Coastguard Worker	})
1877*333d2b36SAndroid Build Coastguard Worker}
1878*333d2b36SAndroid Build Coastguard Worker
1879*333d2b36SAndroid Build Coastguard Workerfunc TestHostSnapshotWithCcHeadersLibrary(t *testing.T) {
1880*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1881*333d2b36SAndroid Build Coastguard Worker		sdk {
1882*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
1883*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1884*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1885*333d2b36SAndroid Build Coastguard Worker			native_header_libs: ["mynativeheaders"],
1886*333d2b36SAndroid Build Coastguard Worker		}
1887*333d2b36SAndroid Build Coastguard Worker
1888*333d2b36SAndroid Build Coastguard Worker		cc_library_headers {
1889*333d2b36SAndroid Build Coastguard Worker			name: "mynativeheaders",
1890*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
1891*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1892*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
1893*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1894*333d2b36SAndroid Build Coastguard Worker		}
1895*333d2b36SAndroid Build Coastguard Worker	`)
1896*333d2b36SAndroid Build Coastguard Worker
1897*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
1898*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1899*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1900*333d2b36SAndroid Build Coastguard Worker
1901*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1902*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
1903*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativeheaders"],
1904*333d2b36SAndroid Build Coastguard Worker}
1905*333d2b36SAndroid Build Coastguard Worker
1906*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_headers {
1907*333d2b36SAndroid Build Coastguard Worker    name: "mynativeheaders",
1908*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1909*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1910*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1911*333d2b36SAndroid Build Coastguard Worker    device_supported: false,
1912*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
1913*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1914*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1915*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
1916*333d2b36SAndroid Build Coastguard Worker    target: {
1917*333d2b36SAndroid Build Coastguard Worker        host: {
1918*333d2b36SAndroid Build Coastguard Worker            enabled: false,
1919*333d2b36SAndroid Build Coastguard Worker        },
1920*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
1921*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1922*333d2b36SAndroid Build Coastguard Worker        },
1923*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
1924*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1925*333d2b36SAndroid Build Coastguard Worker        },
1926*333d2b36SAndroid Build Coastguard Worker    },
1927*333d2b36SAndroid Build Coastguard Worker}
1928*333d2b36SAndroid Build Coastguard Worker`),
1929*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1930*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
1931*333d2b36SAndroid Build Coastguard Worker`),
1932*333d2b36SAndroid Build Coastguard Worker	)
1933*333d2b36SAndroid Build Coastguard Worker}
1934*333d2b36SAndroid Build Coastguard Worker
1935*333d2b36SAndroid Build Coastguard Workerfunc TestDeviceAndHostSnapshotWithCcHeadersLibrary(t *testing.T) {
1936*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
1937*333d2b36SAndroid Build Coastguard Worker		sdk {
1938*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
1939*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1940*333d2b36SAndroid Build Coastguard Worker			native_header_libs: ["mynativeheaders"],
1941*333d2b36SAndroid Build Coastguard Worker		}
1942*333d2b36SAndroid Build Coastguard Worker
1943*333d2b36SAndroid Build Coastguard Worker		cc_library_headers {
1944*333d2b36SAndroid Build Coastguard Worker			name: "mynativeheaders",
1945*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
1946*333d2b36SAndroid Build Coastguard Worker			stl: "none",
1947*333d2b36SAndroid Build Coastguard Worker			export_system_include_dirs: ["myinclude"],
1948*333d2b36SAndroid Build Coastguard Worker			target: {
1949*333d2b36SAndroid Build Coastguard Worker				android: {
1950*333d2b36SAndroid Build Coastguard Worker					export_include_dirs: ["myinclude-android"],
1951*333d2b36SAndroid Build Coastguard Worker				},
1952*333d2b36SAndroid Build Coastguard Worker				host: {
1953*333d2b36SAndroid Build Coastguard Worker					export_include_dirs: ["myinclude-host"],
1954*333d2b36SAndroid Build Coastguard Worker				},
1955*333d2b36SAndroid Build Coastguard Worker			},
1956*333d2b36SAndroid Build Coastguard Worker		}
1957*333d2b36SAndroid Build Coastguard Worker	`)
1958*333d2b36SAndroid Build Coastguard Worker
1959*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
1960*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
1961*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
1962*333d2b36SAndroid Build Coastguard Worker
1963*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
1964*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
1965*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativeheaders"],
1966*333d2b36SAndroid Build Coastguard Worker}
1967*333d2b36SAndroid Build Coastguard Worker
1968*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_headers {
1969*333d2b36SAndroid Build Coastguard Worker    name: "mynativeheaders",
1970*333d2b36SAndroid Build Coastguard Worker    prefer: false,
1971*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
1972*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
1973*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
1974*333d2b36SAndroid Build Coastguard Worker    stl: "none",
1975*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
1976*333d2b36SAndroid Build Coastguard Worker    export_system_include_dirs: ["common_os/include/myinclude"],
1977*333d2b36SAndroid Build Coastguard Worker    target: {
1978*333d2b36SAndroid Build Coastguard Worker        host: {
1979*333d2b36SAndroid Build Coastguard Worker            enabled: false,
1980*333d2b36SAndroid Build Coastguard Worker        },
1981*333d2b36SAndroid Build Coastguard Worker        android: {
1982*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["android/include/myinclude-android"],
1983*333d2b36SAndroid Build Coastguard Worker        },
1984*333d2b36SAndroid Build Coastguard Worker        linux_glibc: {
1985*333d2b36SAndroid Build Coastguard Worker            export_include_dirs: ["linux_glibc/include/myinclude-host"],
1986*333d2b36SAndroid Build Coastguard Worker        },
1987*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
1988*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1989*333d2b36SAndroid Build Coastguard Worker        },
1990*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
1991*333d2b36SAndroid Build Coastguard Worker            enabled: true,
1992*333d2b36SAndroid Build Coastguard Worker        },
1993*333d2b36SAndroid Build Coastguard Worker    },
1994*333d2b36SAndroid Build Coastguard Worker}
1995*333d2b36SAndroid Build Coastguard Worker`),
1996*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
1997*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> common_os/include/myinclude/Test.h
1998*333d2b36SAndroid Build Coastguard Workermyinclude-android/AndroidTest.h -> android/include/myinclude-android/AndroidTest.h
1999*333d2b36SAndroid Build Coastguard Workermyinclude-host/HostTest.h -> linux_glibc/include/myinclude-host/HostTest.h
2000*333d2b36SAndroid Build Coastguard Worker`),
2001*333d2b36SAndroid Build Coastguard Worker	)
2002*333d2b36SAndroid Build Coastguard Worker}
2003*333d2b36SAndroid Build Coastguard Worker
2004*333d2b36SAndroid Build Coastguard Workerfunc TestSystemSharedLibPropagation(t *testing.T) {
2005*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
2006*333d2b36SAndroid Build Coastguard Worker		sdk {
2007*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
2008*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["sslnil", "sslempty", "sslnonempty"],
2009*333d2b36SAndroid Build Coastguard Worker		}
2010*333d2b36SAndroid Build Coastguard Worker
2011*333d2b36SAndroid Build Coastguard Worker		cc_library {
2012*333d2b36SAndroid Build Coastguard Worker			name: "sslnil",
2013*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
2014*333d2b36SAndroid Build Coastguard Worker		}
2015*333d2b36SAndroid Build Coastguard Worker
2016*333d2b36SAndroid Build Coastguard Worker		cc_library {
2017*333d2b36SAndroid Build Coastguard Worker			name: "sslempty",
2018*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
2019*333d2b36SAndroid Build Coastguard Worker		}
2020*333d2b36SAndroid Build Coastguard Worker
2021*333d2b36SAndroid Build Coastguard Worker		cc_library {
2022*333d2b36SAndroid Build Coastguard Worker			name: "sslnonempty",
2023*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: ["sslnil"],
2024*333d2b36SAndroid Build Coastguard Worker		}
2025*333d2b36SAndroid Build Coastguard Worker	`)
2026*333d2b36SAndroid Build Coastguard Worker
2027*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
2028*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
2029*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
2030*333d2b36SAndroid Build Coastguard Worker
2031*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
2032*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
2033*333d2b36SAndroid Build Coastguard Worker    contents: [
2034*333d2b36SAndroid Build Coastguard Worker        "prebuilt_sslnil",
2035*333d2b36SAndroid Build Coastguard Worker        "prebuilt_sslempty",
2036*333d2b36SAndroid Build Coastguard Worker        "prebuilt_sslnonempty",
2037*333d2b36SAndroid Build Coastguard Worker    ],
2038*333d2b36SAndroid Build Coastguard Worker}
2039*333d2b36SAndroid Build Coastguard Worker
2040*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
2041*333d2b36SAndroid Build Coastguard Worker    name: "sslnil",
2042*333d2b36SAndroid Build Coastguard Worker    prefer: false,
2043*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
2044*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
2045*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
2046*333d2b36SAndroid Build Coastguard Worker    arch: {
2047*333d2b36SAndroid Build Coastguard Worker        arm64: {
2048*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/sslnil.so"],
2049*333d2b36SAndroid Build Coastguard Worker        },
2050*333d2b36SAndroid Build Coastguard Worker        arm: {
2051*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/sslnil.so"],
2052*333d2b36SAndroid Build Coastguard Worker        },
2053*333d2b36SAndroid Build Coastguard Worker    },
2054*333d2b36SAndroid Build Coastguard Worker    strip: {
2055*333d2b36SAndroid Build Coastguard Worker        none: true,
2056*333d2b36SAndroid Build Coastguard Worker    },
2057*333d2b36SAndroid Build Coastguard Worker}
2058*333d2b36SAndroid Build Coastguard Worker
2059*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
2060*333d2b36SAndroid Build Coastguard Worker    name: "sslempty",
2061*333d2b36SAndroid Build Coastguard Worker    prefer: false,
2062*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
2063*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
2064*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
2065*333d2b36SAndroid Build Coastguard Worker    system_shared_libs: [],
2066*333d2b36SAndroid Build Coastguard Worker    arch: {
2067*333d2b36SAndroid Build Coastguard Worker        arm64: {
2068*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/sslempty.so"],
2069*333d2b36SAndroid Build Coastguard Worker        },
2070*333d2b36SAndroid Build Coastguard Worker        arm: {
2071*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/sslempty.so"],
2072*333d2b36SAndroid Build Coastguard Worker        },
2073*333d2b36SAndroid Build Coastguard Worker    },
2074*333d2b36SAndroid Build Coastguard Worker    strip: {
2075*333d2b36SAndroid Build Coastguard Worker        none: true,
2076*333d2b36SAndroid Build Coastguard Worker    },
2077*333d2b36SAndroid Build Coastguard Worker}
2078*333d2b36SAndroid Build Coastguard Worker
2079*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
2080*333d2b36SAndroid Build Coastguard Worker    name: "sslnonempty",
2081*333d2b36SAndroid Build Coastguard Worker    prefer: false,
2082*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
2083*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
2084*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
2085*333d2b36SAndroid Build Coastguard Worker    system_shared_libs: ["sslnil"],
2086*333d2b36SAndroid Build Coastguard Worker    arch: {
2087*333d2b36SAndroid Build Coastguard Worker        arm64: {
2088*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/sslnonempty.so"],
2089*333d2b36SAndroid Build Coastguard Worker        },
2090*333d2b36SAndroid Build Coastguard Worker        arm: {
2091*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/sslnonempty.so"],
2092*333d2b36SAndroid Build Coastguard Worker        },
2093*333d2b36SAndroid Build Coastguard Worker    },
2094*333d2b36SAndroid Build Coastguard Worker    strip: {
2095*333d2b36SAndroid Build Coastguard Worker        none: true,
2096*333d2b36SAndroid Build Coastguard Worker    },
2097*333d2b36SAndroid Build Coastguard Worker}
2098*333d2b36SAndroid Build Coastguard Worker`))
2099*333d2b36SAndroid Build Coastguard Worker
2100*333d2b36SAndroid Build Coastguard Worker	result = testSdkWithCc(t, `
2101*333d2b36SAndroid Build Coastguard Worker		sdk {
2102*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
2103*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
2104*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["sslvariants"],
2105*333d2b36SAndroid Build Coastguard Worker		}
2106*333d2b36SAndroid Build Coastguard Worker
2107*333d2b36SAndroid Build Coastguard Worker		cc_library {
2108*333d2b36SAndroid Build Coastguard Worker			name: "sslvariants",
2109*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
2110*333d2b36SAndroid Build Coastguard Worker			target: {
2111*333d2b36SAndroid Build Coastguard Worker				android: {
2112*333d2b36SAndroid Build Coastguard Worker					system_shared_libs: [],
2113*333d2b36SAndroid Build Coastguard Worker				},
2114*333d2b36SAndroid Build Coastguard Worker			},
2115*333d2b36SAndroid Build Coastguard Worker		}
2116*333d2b36SAndroid Build Coastguard Worker	`)
2117*333d2b36SAndroid Build Coastguard Worker
2118*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
2119*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
2120*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
2121*333d2b36SAndroid Build Coastguard Worker
2122*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
2123*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
2124*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_sslvariants"],
2125*333d2b36SAndroid Build Coastguard Worker}
2126*333d2b36SAndroid Build Coastguard Worker
2127*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
2128*333d2b36SAndroid Build Coastguard Worker    name: "sslvariants",
2129*333d2b36SAndroid Build Coastguard Worker    prefer: false,
2130*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
2131*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
2132*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
2133*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
2134*333d2b36SAndroid Build Coastguard Worker    target: {
2135*333d2b36SAndroid Build Coastguard Worker        host: {
2136*333d2b36SAndroid Build Coastguard Worker            enabled: false,
2137*333d2b36SAndroid Build Coastguard Worker        },
2138*333d2b36SAndroid Build Coastguard Worker        android: {
2139*333d2b36SAndroid Build Coastguard Worker            system_shared_libs: [],
2140*333d2b36SAndroid Build Coastguard Worker        },
2141*333d2b36SAndroid Build Coastguard Worker        android_arm64: {
2142*333d2b36SAndroid Build Coastguard Worker            srcs: ["android/arm64/lib/sslvariants.so"],
2143*333d2b36SAndroid Build Coastguard Worker        },
2144*333d2b36SAndroid Build Coastguard Worker        android_arm: {
2145*333d2b36SAndroid Build Coastguard Worker            srcs: ["android/arm/lib/sslvariants.so"],
2146*333d2b36SAndroid Build Coastguard Worker        },
2147*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
2148*333d2b36SAndroid Build Coastguard Worker            enabled: true,
2149*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86_64/lib/sslvariants.so"],
2150*333d2b36SAndroid Build Coastguard Worker        },
2151*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
2152*333d2b36SAndroid Build Coastguard Worker            enabled: true,
2153*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86/lib/sslvariants.so"],
2154*333d2b36SAndroid Build Coastguard Worker        },
2155*333d2b36SAndroid Build Coastguard Worker    },
2156*333d2b36SAndroid Build Coastguard Worker    strip: {
2157*333d2b36SAndroid Build Coastguard Worker        none: true,
2158*333d2b36SAndroid Build Coastguard Worker    },
2159*333d2b36SAndroid Build Coastguard Worker}
2160*333d2b36SAndroid Build Coastguard Worker`),
2161*333d2b36SAndroid Build Coastguard Worker	)
2162*333d2b36SAndroid Build Coastguard Worker}
2163*333d2b36SAndroid Build Coastguard Worker
2164*333d2b36SAndroid Build Coastguard Workerfunc TestStubsLibrary(t *testing.T) {
2165*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
2166*333d2b36SAndroid Build Coastguard Worker		sdk {
2167*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
2168*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["stubslib"],
2169*333d2b36SAndroid Build Coastguard Worker		}
2170*333d2b36SAndroid Build Coastguard Worker
2171*333d2b36SAndroid Build Coastguard Worker		cc_library {
2172*333d2b36SAndroid Build Coastguard Worker			name: "internaldep",
2173*333d2b36SAndroid Build Coastguard Worker		}
2174*333d2b36SAndroid Build Coastguard Worker
2175*333d2b36SAndroid Build Coastguard Worker		cc_library {
2176*333d2b36SAndroid Build Coastguard Worker			name: "stubslib",
2177*333d2b36SAndroid Build Coastguard Worker			shared_libs: ["internaldep"],
2178*333d2b36SAndroid Build Coastguard Worker			stubs: {
2179*333d2b36SAndroid Build Coastguard Worker				symbol_file: "some/where/stubslib.map.txt",
2180*333d2b36SAndroid Build Coastguard Worker				versions: ["1", "2", "3"],
2181*333d2b36SAndroid Build Coastguard Worker			},
2182*333d2b36SAndroid Build Coastguard Worker		}
2183*333d2b36SAndroid Build Coastguard Worker	`)
2184*333d2b36SAndroid Build Coastguard Worker
2185*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
2186*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
2187*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
2188*333d2b36SAndroid Build Coastguard Worker
2189*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
2190*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
2191*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_stubslib"],
2192*333d2b36SAndroid Build Coastguard Worker}
2193*333d2b36SAndroid Build Coastguard Worker
2194*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
2195*333d2b36SAndroid Build Coastguard Worker    name: "stubslib",
2196*333d2b36SAndroid Build Coastguard Worker    prefer: false,
2197*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
2198*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
2199*333d2b36SAndroid Build Coastguard Worker    stl: "none",
2200*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
2201*333d2b36SAndroid Build Coastguard Worker    stubs: {
2202*333d2b36SAndroid Build Coastguard Worker        versions: [
2203*333d2b36SAndroid Build Coastguard Worker            "1",
2204*333d2b36SAndroid Build Coastguard Worker            "2",
2205*333d2b36SAndroid Build Coastguard Worker            "3",
2206*333d2b36SAndroid Build Coastguard Worker            "current",
2207*333d2b36SAndroid Build Coastguard Worker        ],
2208*333d2b36SAndroid Build Coastguard Worker        symbol_file: "stubslib.map.txt",
2209*333d2b36SAndroid Build Coastguard Worker    },
2210*333d2b36SAndroid Build Coastguard Worker    arch: {
2211*333d2b36SAndroid Build Coastguard Worker        arm64: {
2212*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm64/lib/stubslib.so"],
2213*333d2b36SAndroid Build Coastguard Worker        },
2214*333d2b36SAndroid Build Coastguard Worker        arm: {
2215*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/stubslib.so"],
2216*333d2b36SAndroid Build Coastguard Worker        },
2217*333d2b36SAndroid Build Coastguard Worker    },
2218*333d2b36SAndroid Build Coastguard Worker    strip: {
2219*333d2b36SAndroid Build Coastguard Worker        none: true,
2220*333d2b36SAndroid Build Coastguard Worker    },
2221*333d2b36SAndroid Build Coastguard Worker}
2222*333d2b36SAndroid Build Coastguard Worker`))
2223*333d2b36SAndroid Build Coastguard Worker}
2224*333d2b36SAndroid Build Coastguard Worker
2225*333d2b36SAndroid Build Coastguard Workerfunc TestDeviceAndHostSnapshotWithStubsLibrary(t *testing.T) {
2226*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
2227*333d2b36SAndroid Build Coastguard Worker		sdk {
2228*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
2229*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
2230*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["stubslib"],
2231*333d2b36SAndroid Build Coastguard Worker		}
2232*333d2b36SAndroid Build Coastguard Worker
2233*333d2b36SAndroid Build Coastguard Worker		cc_library {
2234*333d2b36SAndroid Build Coastguard Worker			name: "internaldep",
2235*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
2236*333d2b36SAndroid Build Coastguard Worker		}
2237*333d2b36SAndroid Build Coastguard Worker
2238*333d2b36SAndroid Build Coastguard Worker		cc_library {
2239*333d2b36SAndroid Build Coastguard Worker			name: "stubslib",
2240*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
2241*333d2b36SAndroid Build Coastguard Worker			shared_libs: ["internaldep"],
2242*333d2b36SAndroid Build Coastguard Worker			stubs: {
2243*333d2b36SAndroid Build Coastguard Worker				symbol_file: "some/where/stubslib.map.txt",
2244*333d2b36SAndroid Build Coastguard Worker				versions: ["1", "2", "3"],
2245*333d2b36SAndroid Build Coastguard Worker			},
2246*333d2b36SAndroid Build Coastguard Worker		}
2247*333d2b36SAndroid Build Coastguard Worker	`)
2248*333d2b36SAndroid Build Coastguard Worker
2249*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
2250*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
2251*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
2252*333d2b36SAndroid Build Coastguard Worker
2253*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
2254*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
2255*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_stubslib"],
2256*333d2b36SAndroid Build Coastguard Worker}
2257*333d2b36SAndroid Build Coastguard Worker
2258*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
2259*333d2b36SAndroid Build Coastguard Worker    name: "stubslib",
2260*333d2b36SAndroid Build Coastguard Worker    prefer: false,
2261*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
2262*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
2263*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
2264*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
2265*333d2b36SAndroid Build Coastguard Worker    stubs: {
2266*333d2b36SAndroid Build Coastguard Worker        versions: [
2267*333d2b36SAndroid Build Coastguard Worker            "1",
2268*333d2b36SAndroid Build Coastguard Worker            "2",
2269*333d2b36SAndroid Build Coastguard Worker            "3",
2270*333d2b36SAndroid Build Coastguard Worker            "current",
2271*333d2b36SAndroid Build Coastguard Worker        ],
2272*333d2b36SAndroid Build Coastguard Worker        symbol_file: "stubslib.map.txt",
2273*333d2b36SAndroid Build Coastguard Worker    },
2274*333d2b36SAndroid Build Coastguard Worker    target: {
2275*333d2b36SAndroid Build Coastguard Worker        host: {
2276*333d2b36SAndroid Build Coastguard Worker            enabled: false,
2277*333d2b36SAndroid Build Coastguard Worker        },
2278*333d2b36SAndroid Build Coastguard Worker        android_arm64: {
2279*333d2b36SAndroid Build Coastguard Worker            srcs: ["android/arm64/lib/stubslib.so"],
2280*333d2b36SAndroid Build Coastguard Worker        },
2281*333d2b36SAndroid Build Coastguard Worker        android_arm: {
2282*333d2b36SAndroid Build Coastguard Worker            srcs: ["android/arm/lib/stubslib.so"],
2283*333d2b36SAndroid Build Coastguard Worker        },
2284*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
2285*333d2b36SAndroid Build Coastguard Worker            enabled: true,
2286*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86_64/lib/stubslib.so"],
2287*333d2b36SAndroid Build Coastguard Worker        },
2288*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
2289*333d2b36SAndroid Build Coastguard Worker            enabled: true,
2290*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86/lib/stubslib.so"],
2291*333d2b36SAndroid Build Coastguard Worker        },
2292*333d2b36SAndroid Build Coastguard Worker    },
2293*333d2b36SAndroid Build Coastguard Worker    strip: {
2294*333d2b36SAndroid Build Coastguard Worker        none: true,
2295*333d2b36SAndroid Build Coastguard Worker    },
2296*333d2b36SAndroid Build Coastguard Worker}
2297*333d2b36SAndroid Build Coastguard Worker`),
2298*333d2b36SAndroid Build Coastguard Worker	)
2299*333d2b36SAndroid Build Coastguard Worker}
2300*333d2b36SAndroid Build Coastguard Worker
2301*333d2b36SAndroid Build Coastguard Workerfunc TestUniqueHostSoname(t *testing.T) {
2302*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
2303*333d2b36SAndroid Build Coastguard Worker		sdk {
2304*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
2305*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
2306*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["mylib"],
2307*333d2b36SAndroid Build Coastguard Worker		}
2308*333d2b36SAndroid Build Coastguard Worker
2309*333d2b36SAndroid Build Coastguard Worker		cc_library {
2310*333d2b36SAndroid Build Coastguard Worker			name: "mylib",
2311*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
2312*333d2b36SAndroid Build Coastguard Worker			unique_host_soname: true,
2313*333d2b36SAndroid Build Coastguard Worker		}
2314*333d2b36SAndroid Build Coastguard Worker	`)
2315*333d2b36SAndroid Build Coastguard Worker
2316*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
2317*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
2318*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
2319*333d2b36SAndroid Build Coastguard Worker
2320*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
2321*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
2322*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mylib"],
2323*333d2b36SAndroid Build Coastguard Worker}
2324*333d2b36SAndroid Build Coastguard Worker
2325*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
2326*333d2b36SAndroid Build Coastguard Worker    name: "mylib",
2327*333d2b36SAndroid Build Coastguard Worker    prefer: false,
2328*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
2329*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
2330*333d2b36SAndroid Build Coastguard Worker    host_supported: true,
2331*333d2b36SAndroid Build Coastguard Worker    unique_host_soname: true,
2332*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
2333*333d2b36SAndroid Build Coastguard Worker    target: {
2334*333d2b36SAndroid Build Coastguard Worker        host: {
2335*333d2b36SAndroid Build Coastguard Worker            enabled: false,
2336*333d2b36SAndroid Build Coastguard Worker        },
2337*333d2b36SAndroid Build Coastguard Worker        android_arm64: {
2338*333d2b36SAndroid Build Coastguard Worker            srcs: ["android/arm64/lib/mylib.so"],
2339*333d2b36SAndroid Build Coastguard Worker        },
2340*333d2b36SAndroid Build Coastguard Worker        android_arm: {
2341*333d2b36SAndroid Build Coastguard Worker            srcs: ["android/arm/lib/mylib.so"],
2342*333d2b36SAndroid Build Coastguard Worker        },
2343*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86_64: {
2344*333d2b36SAndroid Build Coastguard Worker            enabled: true,
2345*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86_64/lib/mylib-host.so"],
2346*333d2b36SAndroid Build Coastguard Worker        },
2347*333d2b36SAndroid Build Coastguard Worker        linux_glibc_x86: {
2348*333d2b36SAndroid Build Coastguard Worker            enabled: true,
2349*333d2b36SAndroid Build Coastguard Worker            srcs: ["linux_glibc/x86/lib/mylib-host.so"],
2350*333d2b36SAndroid Build Coastguard Worker        },
2351*333d2b36SAndroid Build Coastguard Worker    },
2352*333d2b36SAndroid Build Coastguard Worker    strip: {
2353*333d2b36SAndroid Build Coastguard Worker        none: true,
2354*333d2b36SAndroid Build Coastguard Worker    },
2355*333d2b36SAndroid Build Coastguard Worker}
2356*333d2b36SAndroid Build Coastguard Worker`),
2357*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
2358*333d2b36SAndroid Build Coastguard Worker.intermediates/mylib/android_arm64_armv8-a_shared/mylib.so -> android/arm64/lib/mylib.so
2359*333d2b36SAndroid Build Coastguard Worker.intermediates/mylib/android_arm_armv7-a-neon_shared/mylib.so -> android/arm/lib/mylib.so
2360*333d2b36SAndroid Build Coastguard Worker.intermediates/mylib/linux_glibc_x86_64_shared/mylib-host.so -> linux_glibc/x86_64/lib/mylib-host.so
2361*333d2b36SAndroid Build Coastguard Worker.intermediates/mylib/linux_glibc_x86_shared/mylib-host.so -> linux_glibc/x86/lib/mylib-host.so
2362*333d2b36SAndroid Build Coastguard Worker`),
2363*333d2b36SAndroid Build Coastguard Worker	)
2364*333d2b36SAndroid Build Coastguard Worker}
2365*333d2b36SAndroid Build Coastguard Worker
2366*333d2b36SAndroid Build Coastguard Workerfunc TestNoSanitizerMembers(t *testing.T) {
2367*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithCc(t, `
2368*333d2b36SAndroid Build Coastguard Worker		sdk {
2369*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
2370*333d2b36SAndroid Build Coastguard Worker			native_shared_libs: ["mynativelib"],
2371*333d2b36SAndroid Build Coastguard Worker		}
2372*333d2b36SAndroid Build Coastguard Worker
2373*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
2374*333d2b36SAndroid Build Coastguard Worker			name: "mynativelib",
2375*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.cpp"],
2376*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["myinclude"],
2377*333d2b36SAndroid Build Coastguard Worker			arch: {
2378*333d2b36SAndroid Build Coastguard Worker				arm64: {
2379*333d2b36SAndroid Build Coastguard Worker					export_system_include_dirs: ["arm64/include"],
2380*333d2b36SAndroid Build Coastguard Worker					sanitize: {
2381*333d2b36SAndroid Build Coastguard Worker						hwaddress: true,
2382*333d2b36SAndroid Build Coastguard Worker					},
2383*333d2b36SAndroid Build Coastguard Worker				},
2384*333d2b36SAndroid Build Coastguard Worker			},
2385*333d2b36SAndroid Build Coastguard Worker		}
2386*333d2b36SAndroid Build Coastguard Worker	`)
2387*333d2b36SAndroid Build Coastguard Worker
2388*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
2389*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
2390*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
2391*333d2b36SAndroid Build Coastguard Worker
2392*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
2393*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
2394*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mynativelib"],
2395*333d2b36SAndroid Build Coastguard Worker}
2396*333d2b36SAndroid Build Coastguard Worker
2397*333d2b36SAndroid Build Coastguard Workercc_prebuilt_library_shared {
2398*333d2b36SAndroid Build Coastguard Worker    name: "mynativelib",
2399*333d2b36SAndroid Build Coastguard Worker    prefer: false,
2400*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
2401*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
2402*333d2b36SAndroid Build Coastguard Worker    compile_multilib: "both",
2403*333d2b36SAndroid Build Coastguard Worker    export_include_dirs: ["include/myinclude"],
2404*333d2b36SAndroid Build Coastguard Worker    arch: {
2405*333d2b36SAndroid Build Coastguard Worker        arm64: {
2406*333d2b36SAndroid Build Coastguard Worker            export_system_include_dirs: ["arm64/include/arm64/include"],
2407*333d2b36SAndroid Build Coastguard Worker        },
2408*333d2b36SAndroid Build Coastguard Worker        arm: {
2409*333d2b36SAndroid Build Coastguard Worker            srcs: ["arm/lib/mynativelib.so"],
2410*333d2b36SAndroid Build Coastguard Worker        },
2411*333d2b36SAndroid Build Coastguard Worker    },
2412*333d2b36SAndroid Build Coastguard Worker    strip: {
2413*333d2b36SAndroid Build Coastguard Worker        none: true,
2414*333d2b36SAndroid Build Coastguard Worker    },
2415*333d2b36SAndroid Build Coastguard Worker}
2416*333d2b36SAndroid Build Coastguard Worker`),
2417*333d2b36SAndroid Build Coastguard Worker		checkAllCopyRules(`
2418*333d2b36SAndroid Build Coastguard Workermyinclude/Test.h -> include/myinclude/Test.h
2419*333d2b36SAndroid Build Coastguard Workerarm64/include/Arm64Test.h -> arm64/include/arm64/include/Arm64Test.h
2420*333d2b36SAndroid Build Coastguard Worker.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
2421*333d2b36SAndroid Build Coastguard Worker`),
2422*333d2b36SAndroid Build Coastguard Worker	)
2423*333d2b36SAndroid Build Coastguard Worker}
2424