blob: 5bac67da63548c69b77297e07334e39b55c5ecbd [file] [log] [blame]
Paul Duffina80fdec2019-12-03 15:25:00 +00001// Copyright (C) 2019 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package sdk
16
17import (
Paul Duffin63696222021-09-06 10:28:34 +010018 "fmt"
Paul Duffina80fdec2019-12-03 15:25:00 +000019 "testing"
20
Paul Duffin1356d8c2020-02-25 19:26:33 +000021 "android/soong/android"
Paul Duffina80fdec2019-12-03 15:25:00 +000022 "android/soong/cc"
23)
24
Paul Duffin4a2a29c2021-03-09 22:27:13 +000025var ccTestFs = android.MockFS{
Paul Duffin86b02a72021-02-22 11:50:04 +000026 "Test.cpp": nil,
27 "myinclude/Test.h": nil,
28 "myinclude-android/AndroidTest.h": nil,
29 "myinclude-host/HostTest.h": nil,
30 "arm64/include/Arm64Test.h": nil,
31 "libfoo.so": nil,
32 "aidl/foo/bar/Test.aidl": nil,
33 "some/where/stubslib.map.txt": nil,
Martin Stjernholm7feceb22020-07-11 04:33:29 +010034}
35
Paul Duffin93b750e2019-11-19 19:44:10 +000036// Adds a native bridge target to the configured list of targets.
37var prepareForTestWithNativeBridgeTarget = android.FixtureModifyConfig(func(config android.Config) {
38 config.Targets[android.Android] = append(config.Targets[android.Android], android.Target{
39 Os: android.Android,
40 Arch: android.Arch{
41 ArchType: android.Arm64,
42 ArchVariant: "armv8-a",
43 CpuVariant: "cpu",
44 Abi: nil,
45 ArchFeatures: nil,
46 },
47 NativeBridge: android.NativeBridgeEnabled,
48 NativeBridgeHostArchName: "x86_64",
49 NativeBridgeRelativePath: "native_bridge",
50 })
51})
52
Paul Duffin4a2a29c2021-03-09 22:27:13 +000053func testSdkWithCc(t *testing.T, bp string) *android.TestResult {
Paul Duffind835daa2019-11-30 17:49:09 +000054 t.Helper()
Martin Stjernholm7feceb22020-07-11 04:33:29 +010055 return testSdkWithFs(t, bp, ccTestFs)
Paul Duffind835daa2019-11-30 17:49:09 +000056}
57
Paul Duffina80fdec2019-12-03 15:25:00 +000058// Contains tests for SDK members provided by the cc package.
59
Martin Stjernholmcaa47d72020-07-11 04:52:24 +010060func TestSingleDeviceOsAssumption(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -080061 t.Parallel()
Martin Stjernholmcaa47d72020-07-11 04:52:24 +010062 // Mock a module with DeviceSupported() == true.
63 s := &sdk{}
64 android.InitAndroidArchModule(s, android.DeviceSupported, android.MultilibCommon)
65
66 osTypes := s.getPossibleOsTypes()
67 if len(osTypes) != 1 {
68 // The snapshot generation assumes there is a single device OS. If more are
69 // added it might need to disable them by default, like it does for host
70 // OS'es.
71 t.Errorf("expected a single device OS, got %v", osTypes)
72 }
73}
74
Paul Duffina80fdec2019-12-03 15:25:00 +000075func TestSdkIsCompileMultilibBoth(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -080076 t.Parallel()
Paul Duffind835daa2019-11-30 17:49:09 +000077 result := testSdkWithCc(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +000078 sdk {
79 name: "mysdk",
80 native_shared_libs: ["sdkmember"],
81 }
82
83 cc_library_shared {
84 name: "sdkmember",
85 srcs: ["Test.cpp"],
Paul Duffina80fdec2019-12-03 15:25:00 +000086 stl: "none",
87 }
88 `)
89
Colin Cross7113d202019-11-20 16:39:12 -080090 armOutput := result.Module("sdkmember", "android_arm_armv7-a-neon_shared").(*cc.Module).OutputFile()
91 arm64Output := result.Module("sdkmember", "android_arm64_armv8-a_shared").(*cc.Module).OutputFile()
Paul Duffina80fdec2019-12-03 15:25:00 +000092
93 var inputs []string
Paul Duffin1356d8c2020-02-25 19:26:33 +000094 buildParams := result.Module("mysdk", android.CommonOS.Name).BuildParamsForTests()
Paul Duffina80fdec2019-12-03 15:25:00 +000095 for _, bp := range buildParams {
96 if bp.Input != nil {
97 inputs = append(inputs, bp.Input.String())
98 }
99 }
100
101 // ensure that both 32/64 outputs are inputs of the sdk snapshot
102 ensureListContains(t, inputs, armOutput.String())
103 ensureListContains(t, inputs, arm64Output.String())
104}
105
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100106func TestSdkCompileMultilibOverride(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800107 t.Parallel()
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100108 result := testSdkWithCc(t, `
109 sdk {
110 name: "mysdk",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100111 host_supported: true,
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100112 native_shared_libs: ["sdkmember"],
113 compile_multilib: "64",
114 }
115
116 cc_library_shared {
117 name: "sdkmember",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100118 host_supported: true,
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100119 srcs: ["Test.cpp"],
120 stl: "none",
121 compile_multilib: "64",
122 }
123 `)
124
Paul Duffin36474d32021-03-12 12:19:43 +0000125 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000126 checkAndroidBpContents(`
Martin Stjernholm89238f42020-07-10 00:14:03 +0100127// This is auto-generated. DO NOT EDIT.
128
Spandan Dasa5e26d32024-03-06 14:04:36 +0000129apex_contributions_defaults {
130 name: "mysdk.contributions",
131 contents: ["prebuilt_sdkmember"],
132}
133
Martin Stjernholm89238f42020-07-10 00:14:03 +0100134cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +0000135 name: "sdkmember",
136 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100137 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000138 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +0100139 host_supported: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +0100140 stl: "none",
141 compile_multilib: "64",
Martin Stjernholm4cfa2c62020-07-10 19:55:36 +0100142 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100143 host: {
144 enabled: false,
145 },
Martin Stjernholm4cfa2c62020-07-10 19:55:36 +0100146 android_arm64: {
147 srcs: ["android/arm64/lib/sdkmember.so"],
148 },
149 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900150 enabled: true,
Martin Stjernholm4cfa2c62020-07-10 19:55:36 +0100151 srcs: ["linux_glibc/x86_64/lib/sdkmember.so"],
Martin Stjernholm89238f42020-07-10 00:14:03 +0100152 },
153 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +0000154 strip: {
155 none: true,
156 },
Martin Stjernholm89238f42020-07-10 00:14:03 +0100157}
Paul Duffin75b902a2021-02-22 12:13:13 +0000158`),
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100159 checkAllCopyRules(`
Martin Stjernholm4cfa2c62020-07-10 19:55:36 +0100160.intermediates/sdkmember/android_arm64_armv8-a_shared/sdkmember.so -> android/arm64/lib/sdkmember.so
161.intermediates/sdkmember/linux_glibc_x86_64_shared/sdkmember.so -> linux_glibc/x86_64/lib/sdkmember.so
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100162`))
163}
164
Paul Duffina0843f62019-12-13 19:50:38 +0000165// Make sure the sdk can use host specific cc libraries static/shared and both.
166func TestHostSdkWithCc(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800167 t.Parallel()
Paul Duffina0843f62019-12-13 19:50:38 +0000168 testSdkWithCc(t, `
169 sdk {
170 name: "mysdk",
171 device_supported: false,
172 host_supported: true,
173 native_shared_libs: ["sdkshared"],
174 native_static_libs: ["sdkstatic"],
175 }
176
177 cc_library_host_shared {
178 name: "sdkshared",
Paul Duffina0843f62019-12-13 19:50:38 +0000179 stl: "none",
180 }
181
182 cc_library_host_static {
183 name: "sdkstatic",
Paul Duffina0843f62019-12-13 19:50:38 +0000184 stl: "none",
185 }
186 `)
187}
188
189// Make sure the sdk can use cc libraries static/shared and both.
190func TestSdkWithCc(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800191 t.Parallel()
Paul Duffina0843f62019-12-13 19:50:38 +0000192 testSdkWithCc(t, `
193 sdk {
194 name: "mysdk",
195 native_shared_libs: ["sdkshared", "sdkboth1"],
196 native_static_libs: ["sdkstatic", "sdkboth2"],
197 }
198
199 cc_library_shared {
200 name: "sdkshared",
Paul Duffina0843f62019-12-13 19:50:38 +0000201 stl: "none",
202 }
203
204 cc_library_static {
205 name: "sdkstatic",
Paul Duffina0843f62019-12-13 19:50:38 +0000206 stl: "none",
207 }
208
209 cc_library {
210 name: "sdkboth1",
Paul Duffina0843f62019-12-13 19:50:38 +0000211 stl: "none",
212 }
213
214 cc_library {
215 name: "sdkboth2",
Paul Duffina0843f62019-12-13 19:50:38 +0000216 stl: "none",
217 }
218 `)
219}
220
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000221func TestSnapshotWithObject(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800222 t.Parallel()
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000223 result := testSdkWithCc(t, `
224 sdk {
225 name: "mysdk",
226 native_objects: ["crtobj"],
227 }
228
229 cc_object {
230 name: "crtobj",
231 stl: "none",
Colin Cross6b8f4252021-07-22 11:39:44 -0700232 system_shared_libs: [],
Martin Stjernholmfbb486f2020-08-21 18:43:51 +0100233 sanitize: {
234 never: true,
235 },
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000236 }
237 `)
238
Paul Duffin36474d32021-03-12 12:19:43 +0000239 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000240 checkAndroidBpContents(`
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000241// This is auto-generated. DO NOT EDIT.
242
Spandan Dasa5e26d32024-03-06 14:04:36 +0000243apex_contributions_defaults {
244 name: "mysdk.contributions",
245 contents: ["prebuilt_crtobj"],
246}
247
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000248cc_prebuilt_object {
Paul Duffin75b902a2021-02-22 12:13:13 +0000249 name: "crtobj",
250 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100251 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000252 apex_available: ["//apex_available:platform"],
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000253 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100254 compile_multilib: "both",
Colin Cross6b8f4252021-07-22 11:39:44 -0700255 system_shared_libs: [],
Martin Stjernholmfbb486f2020-08-21 18:43:51 +0100256 sanitize: {
257 never: true,
258 },
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000259 arch: {
260 arm64: {
261 srcs: ["arm64/lib/crtobj.o"],
262 },
263 arm: {
264 srcs: ["arm/lib/crtobj.o"],
265 },
266 },
267}
Paul Duffin75b902a2021-02-22 12:13:13 +0000268`),
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000269 checkAllCopyRules(`
270.intermediates/crtobj/android_arm64_armv8-a/crtobj.o -> arm64/lib/crtobj.o
271.intermediates/crtobj/android_arm_armv7-a-neon/crtobj.o -> arm/lib/crtobj.o
272`),
273 )
274}
275
Paul Duffinc62a5102019-12-11 18:34:15 +0000276func TestSnapshotWithCcDuplicateHeaders(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800277 t.Parallel()
Paul Duffinc62a5102019-12-11 18:34:15 +0000278 result := testSdkWithCc(t, `
279 sdk {
280 name: "mysdk",
281 native_shared_libs: ["mynativelib1", "mynativelib2"],
282 }
283
284 cc_library_shared {
285 name: "mynativelib1",
286 srcs: [
287 "Test.cpp",
288 ],
Paul Duffin86b02a72021-02-22 11:50:04 +0000289 export_include_dirs: ["myinclude"],
Paul Duffinc62a5102019-12-11 18:34:15 +0000290 stl: "none",
291 }
292
293 cc_library_shared {
294 name: "mynativelib2",
295 srcs: [
296 "Test.cpp",
297 ],
Paul Duffin86b02a72021-02-22 11:50:04 +0000298 export_include_dirs: ["myinclude"],
Paul Duffinc62a5102019-12-11 18:34:15 +0000299 stl: "none",
300 }
301 `)
302
Paul Duffin36474d32021-03-12 12:19:43 +0000303 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinc62a5102019-12-11 18:34:15 +0000304 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000305myinclude/Test.h -> include/myinclude/Test.h
Colin Cross7113d202019-11-20 16:39:12 -0800306.intermediates/mynativelib1/android_arm64_armv8-a_shared/mynativelib1.so -> arm64/lib/mynativelib1.so
307.intermediates/mynativelib1/android_arm_armv7-a-neon_shared/mynativelib1.so -> arm/lib/mynativelib1.so
308.intermediates/mynativelib2/android_arm64_armv8-a_shared/mynativelib2.so -> arm64/lib/mynativelib2.so
309.intermediates/mynativelib2/android_arm_armv7-a-neon_shared/mynativelib2.so -> arm/lib/mynativelib2.so
Paul Duffinc62a5102019-12-11 18:34:15 +0000310`),
311 )
312}
313
Paul Duffina43f9272021-02-17 10:55:25 +0000314func TestSnapshotWithCcExportGeneratedHeaders(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800315 t.Parallel()
Paul Duffina43f9272021-02-17 10:55:25 +0000316 result := testSdkWithCc(t, `
317 sdk {
318 name: "mysdk",
319 native_shared_libs: ["mynativelib"],
320 }
321
322 cc_library_shared {
323 name: "mynativelib",
324 srcs: [
325 "Test.cpp",
326 ],
327 generated_headers: [
328 "generated_foo",
329 ],
330 export_generated_headers: [
331 "generated_foo",
332 ],
Paul Duffin86b02a72021-02-22 11:50:04 +0000333 export_include_dirs: ["myinclude"],
Paul Duffina43f9272021-02-17 10:55:25 +0000334 stl: "none",
335 }
336
337 genrule {
338 name: "generated_foo",
339 cmd: "generate-foo",
340 out: [
341 "generated_foo/protos/foo/bar.h",
342 ],
343 export_include_dirs: [
344 ".",
345 "protos",
346 ],
347 }
348 `)
349
Paul Duffindb462dd2021-03-21 22:01:55 +0000350 // TODO(b/183322862): Remove this and fix the issue.
351 errorHandler := android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module source path "snapshot/include_gen/generated_foo/gen/protos" does not exist`)
352
Paul Duffin36474d32021-03-12 12:19:43 +0000353 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000354 checkAndroidBpContents(`
Paul Duffina43f9272021-02-17 10:55:25 +0000355// This is auto-generated. DO NOT EDIT.
356
Spandan Dasa5e26d32024-03-06 14:04:36 +0000357apex_contributions_defaults {
358 name: "mysdk.contributions",
359 contents: ["prebuilt_mynativelib"],
360}
361
Paul Duffina43f9272021-02-17 10:55:25 +0000362cc_prebuilt_library_shared {
363 name: "mynativelib",
364 prefer: false,
365 visibility: ["//visibility:public"],
366 apex_available: ["//apex_available:platform"],
367 stl: "none",
368 compile_multilib: "both",
Paul Duffin7a7d0672021-02-17 12:17:40 +0000369 export_include_dirs: [
370 "include/myinclude",
371 "include_gen/generated_foo/gen",
372 "include_gen/generated_foo/gen/protos",
373 ],
Paul Duffina43f9272021-02-17 10:55:25 +0000374 arch: {
375 arm64: {
376 srcs: ["arm64/lib/mynativelib.so"],
Paul Duffina43f9272021-02-17 10:55:25 +0000377 },
378 arm: {
379 srcs: ["arm/lib/mynativelib.so"],
Paul Duffina43f9272021-02-17 10:55:25 +0000380 },
381 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +0000382 strip: {
383 none: true,
384 },
Paul Duffina43f9272021-02-17 10:55:25 +0000385}
386`),
387 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000388myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin7a7d0672021-02-17 12:17:40 +0000389.intermediates/generated_foo/gen/generated_foo/protos/foo/bar.h -> include_gen/generated_foo/gen/generated_foo/protos/foo/bar.h
Paul Duffina43f9272021-02-17 10:55:25 +0000390.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
Paul Duffina43f9272021-02-17 10:55:25 +0000391.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
Paul Duffina43f9272021-02-17 10:55:25 +0000392`),
Paul Duffindb462dd2021-03-21 22:01:55 +0000393 snapshotTestErrorHandler(checkSnapshotWithoutSource, errorHandler),
394 snapshotTestErrorHandler(checkSnapshotWithSourcePreferred, errorHandler),
395 snapshotTestErrorHandler(checkSnapshotPreferredWithSource, errorHandler),
Paul Duffina43f9272021-02-17 10:55:25 +0000396 )
397}
398
Martin Stjernholmb0249572020-09-15 02:32:35 +0100399// Verify that when the shared library has some common and some arch specific
400// properties that the generated snapshot is optimized properly. Substruct
401// handling is tested with the sanitize clauses (but note there's a lot of
402// built-in logic in sanitize.go that can affect those flags).
Paul Duffina7cd8c82019-12-11 20:00:57 +0000403func TestSnapshotWithCcSharedLibraryCommonProperties(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800404 t.Parallel()
Paul Duffina7cd8c82019-12-11 20:00:57 +0000405 result := testSdkWithCc(t, `
406 sdk {
407 name: "mysdk",
408 native_shared_libs: ["mynativelib"],
409 }
410
411 cc_library_shared {
412 name: "mynativelib",
413 srcs: [
414 "Test.cpp",
415 "aidl/foo/bar/Test.aidl",
416 ],
Paul Duffin86b02a72021-02-22 11:50:04 +0000417 export_include_dirs: ["myinclude"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100418 sanitize: {
419 fuzzer: false,
420 integer_overflow: true,
421 diag: { undefined: false },
422 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000423 arch: {
424 arm64: {
425 export_system_include_dirs: ["arm64/include"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100426 sanitize: {
Martin Stjernholmb0249572020-09-15 02:32:35 +0100427 integer_overflow: false,
428 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000429 },
430 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000431 stl: "none",
432 }
433 `)
434
Paul Duffin36474d32021-03-12 12:19:43 +0000435 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000436 checkAndroidBpContents(`
Paul Duffina7cd8c82019-12-11 20:00:57 +0000437// This is auto-generated. DO NOT EDIT.
438
Spandan Dasa5e26d32024-03-06 14:04:36 +0000439apex_contributions_defaults {
440 name: "mysdk.contributions",
441 contents: ["prebuilt_mynativelib"],
442}
443
Paul Duffina7cd8c82019-12-11 20:00:57 +0000444cc_prebuilt_library_shared {
Paul Duffina7cd8c82019-12-11 20:00:57 +0000445 name: "mynativelib",
446 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100447 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000448 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000449 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100450 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +0000451 export_include_dirs: ["include/myinclude"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100452 sanitize: {
453 fuzzer: false,
454 diag: {
455 undefined: false,
456 },
457 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000458 arch: {
459 arm64: {
460 srcs: ["arm64/lib/mynativelib.so"],
461 export_system_include_dirs: ["arm64/include/arm64/include"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100462 sanitize: {
Martin Stjernholmb0249572020-09-15 02:32:35 +0100463 integer_overflow: false,
464 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000465 },
466 arm: {
467 srcs: ["arm/lib/mynativelib.so"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100468 sanitize: {
469 integer_overflow: true,
470 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000471 },
472 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +0000473 strip: {
474 none: true,
475 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000476}
Paul Duffina7cd8c82019-12-11 20:00:57 +0000477`),
478 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000479myinclude/Test.h -> include/myinclude/Test.h
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +0000480.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
Paul Duffina7cd8c82019-12-11 20:00:57 +0000481arm64/include/Arm64Test.h -> arm64/include/arm64/include/Arm64Test.h
Colin Cross7113d202019-11-20 16:39:12 -0800482.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so`),
Paul Duffina7cd8c82019-12-11 20:00:57 +0000483 )
484}
485
Paul Duffin25ce04b2020-01-16 11:47:25 +0000486func TestSnapshotWithCcBinary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800487 t.Parallel()
Paul Duffin25ce04b2020-01-16 11:47:25 +0000488 result := testSdkWithCc(t, `
489 module_exports {
490 name: "mymodule_exports",
491 native_binaries: ["mynativebinary"],
492 }
493
494 cc_binary {
495 name: "mynativebinary",
496 srcs: [
497 "Test.cpp",
498 ],
499 compile_multilib: "both",
Paul Duffin25ce04b2020-01-16 11:47:25 +0000500 }
501 `)
502
Paul Duffin36474d32021-03-12 12:19:43 +0000503 CheckSnapshot(t, result, "mymodule_exports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000504 checkAndroidBpContents(`
Paul Duffin25ce04b2020-01-16 11:47:25 +0000505// This is auto-generated. DO NOT EDIT.
506
Spandan Dasa5e26d32024-03-06 14:04:36 +0000507apex_contributions_defaults {
508 name: "mymodule_exports.contributions",
509 contents: ["prebuilt_mynativebinary"],
510}
511
Paul Duffin25ce04b2020-01-16 11:47:25 +0000512cc_prebuilt_binary {
Paul Duffin75b902a2021-02-22 12:13:13 +0000513 name: "mynativebinary",
514 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100515 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000516 apex_available: ["//apex_available:platform"],
Paul Duffin25ce04b2020-01-16 11:47:25 +0000517 compile_multilib: "both",
518 arch: {
519 arm64: {
520 srcs: ["arm64/bin/mynativebinary"],
521 },
522 arm: {
523 srcs: ["arm/bin/mynativebinary"],
524 },
525 },
526}
Paul Duffin75b902a2021-02-22 12:13:13 +0000527`),
Paul Duffin25ce04b2020-01-16 11:47:25 +0000528 checkAllCopyRules(`
529.intermediates/mynativebinary/android_arm64_armv8-a/mynativebinary -> arm64/bin/mynativebinary
530.intermediates/mynativebinary/android_arm_armv7-a-neon/mynativebinary -> arm/bin/mynativebinary
531`),
532 )
533}
534
Paul Duffina04c1072020-03-02 10:16:35 +0000535func TestMultipleHostOsTypesSnapshotWithCcBinary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800536 t.Parallel()
Paul Duffina04c1072020-03-02 10:16:35 +0000537 result := testSdkWithCc(t, `
538 module_exports {
539 name: "myexports",
540 device_supported: false,
541 host_supported: true,
542 native_binaries: ["mynativebinary"],
543 target: {
544 windows: {
545 enabled: true,
546 },
547 },
548 }
549
550 cc_binary {
551 name: "mynativebinary",
552 device_supported: false,
553 host_supported: true,
554 srcs: [
555 "Test.cpp",
556 ],
557 compile_multilib: "both",
Paul Duffina04c1072020-03-02 10:16:35 +0000558 stl: "none",
559 target: {
560 windows: {
561 enabled: true,
562 },
563 },
564 }
565 `)
566
Paul Duffin36474d32021-03-12 12:19:43 +0000567 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000568 checkAndroidBpContents(`
Paul Duffina04c1072020-03-02 10:16:35 +0000569// This is auto-generated. DO NOT EDIT.
570
Spandan Dasa5e26d32024-03-06 14:04:36 +0000571apex_contributions_defaults {
572 name: "myexports.contributions",
573 contents: ["prebuilt_mynativebinary"],
574}
575
Paul Duffina04c1072020-03-02 10:16:35 +0000576cc_prebuilt_binary {
Paul Duffin75b902a2021-02-22 12:13:13 +0000577 name: "mynativebinary",
578 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100579 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000580 apex_available: ["//apex_available:platform"],
Paul Duffina04c1072020-03-02 10:16:35 +0000581 device_supported: false,
582 host_supported: true,
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100583 stl: "none",
Paul Duffina04c1072020-03-02 10:16:35 +0000584 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100585 host: {
586 enabled: false,
587 },
Paul Duffina04c1072020-03-02 10:16:35 +0000588 linux_glibc: {
589 compile_multilib: "both",
590 },
591 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900592 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +0000593 srcs: ["linux_glibc/x86_64/bin/mynativebinary"],
594 },
595 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900596 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +0000597 srcs: ["linux_glibc/x86/bin/mynativebinary"],
598 },
599 windows: {
600 compile_multilib: "64",
601 },
602 windows_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900603 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +0000604 srcs: ["windows/x86_64/bin/mynativebinary.exe"],
605 },
606 },
607}
Paul Duffin75b902a2021-02-22 12:13:13 +0000608`),
Paul Duffina04c1072020-03-02 10:16:35 +0000609 checkAllCopyRules(`
610.intermediates/mynativebinary/linux_glibc_x86_64/mynativebinary -> linux_glibc/x86_64/bin/mynativebinary
611.intermediates/mynativebinary/linux_glibc_x86/mynativebinary -> linux_glibc/x86/bin/mynativebinary
612.intermediates/mynativebinary/windows_x86_64/mynativebinary.exe -> windows/x86_64/bin/mynativebinary.exe
613`),
614 )
615}
616
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100617func TestSnapshotWithSingleHostOsType(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800618 t.Parallel()
Paul Duffin89648f92021-03-20 00:36:55 +0000619 result := android.GroupFixturePreparers(
620 prepareForSdkTest,
Paul Duffin4a2a29c2021-03-09 22:27:13 +0000621 ccTestFs.AddToFixture(),
622 cc.PrepareForTestOnLinuxBionic,
623 android.FixtureModifyConfig(func(config android.Config) {
624 config.Targets[android.LinuxBionic] = []android.Target{
625 {android.LinuxBionic, android.Arch{ArchType: android.X86_64}, android.NativeBridgeDisabled, "", "", false},
626 }
627 }),
628 ).RunTestWithBp(t, `
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100629 cc_defaults {
630 name: "mydefaults",
631 device_supported: false,
632 host_supported: true,
633 compile_multilib: "64",
634 target: {
635 host: {
636 enabled: false,
637 },
638 linux_bionic: {
639 enabled: true,
640 },
641 },
642 }
643
644 module_exports {
645 name: "myexports",
646 defaults: ["mydefaults"],
647 native_shared_libs: ["mynativelib"],
648 native_binaries: ["mynativebinary"],
649 compile_multilib: "64", // The built-in default in sdk.go overrides mydefaults.
650 }
651
652 cc_library {
653 name: "mynativelib",
654 defaults: ["mydefaults"],
655 srcs: [
656 "Test.cpp",
657 ],
658 stl: "none",
659 }
660
661 cc_binary {
662 name: "mynativebinary",
663 defaults: ["mydefaults"],
664 srcs: [
665 "Test.cpp",
666 ],
667 stl: "none",
668 }
Paul Duffin4a2a29c2021-03-09 22:27:13 +0000669 `)
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100670
Paul Duffin36474d32021-03-12 12:19:43 +0000671 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000672 checkAndroidBpContents(`
Paul Duffin75b902a2021-02-22 12:13:13 +0000673// This is auto-generated. DO NOT EDIT.
674
Spandan Dasa5e26d32024-03-06 14:04:36 +0000675apex_contributions_defaults {
676 name: "myexports.contributions",
677 contents: [
678 "prebuilt_mynativebinary",
679 "prebuilt_mynativelib",
680 ],
681}
682
Paul Duffin75b902a2021-02-22 12:13:13 +0000683cc_prebuilt_binary {
684 name: "mynativebinary",
685 prefer: false,
686 visibility: ["//visibility:public"],
687 apex_available: ["//apex_available:platform"],
688 device_supported: false,
689 host_supported: true,
690 stl: "none",
691 compile_multilib: "64",
692 target: {
693 host: {
694 enabled: false,
695 },
696 linux_bionic_x86_64: {
697 enabled: true,
698 srcs: ["x86_64/bin/mynativebinary"],
699 },
700 },
701}
702
703cc_prebuilt_library_shared {
704 name: "mynativelib",
705 prefer: false,
706 visibility: ["//visibility:public"],
707 apex_available: ["//apex_available:platform"],
708 device_supported: false,
709 host_supported: true,
710 stl: "none",
711 compile_multilib: "64",
712 target: {
713 host: {
714 enabled: false,
715 },
716 linux_bionic_x86_64: {
717 enabled: true,
718 srcs: ["x86_64/lib/mynativelib.so"],
719 },
720 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +0000721 strip: {
722 none: true,
723 },
Paul Duffin75b902a2021-02-22 12:13:13 +0000724}
725`),
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100726 checkAllCopyRules(`
727.intermediates/mynativebinary/linux_bionic_x86_64/mynativebinary -> x86_64/bin/mynativebinary
728.intermediates/mynativelib/linux_bionic_x86_64_shared/mynativelib.so -> x86_64/lib/mynativelib.so
729`),
730 )
731}
732
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100733// Test that we support the necessary flags for the linker binary, which is
734// special in several ways.
735func TestSnapshotWithCcStaticNocrtBinary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800736 t.Parallel()
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100737 result := testSdkWithCc(t, `
738 module_exports {
739 name: "mymodule_exports",
740 host_supported: true,
741 device_supported: false,
742 native_binaries: ["linker"],
743 }
744
745 cc_binary {
746 name: "linker",
747 host_supported: true,
748 static_executable: true,
749 nocrt: true,
750 stl: "none",
751 srcs: [
752 "Test.cpp",
753 ],
754 compile_multilib: "both",
755 }
756 `)
757
Paul Duffin36474d32021-03-12 12:19:43 +0000758 CheckSnapshot(t, result, "mymodule_exports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000759 checkAndroidBpContents(`
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100760// This is auto-generated. DO NOT EDIT.
761
Spandan Dasa5e26d32024-03-06 14:04:36 +0000762apex_contributions_defaults {
763 name: "mymodule_exports.contributions",
764 contents: ["prebuilt_linker"],
765}
766
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100767cc_prebuilt_binary {
Paul Duffin75b902a2021-02-22 12:13:13 +0000768 name: "linker",
769 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100770 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000771 apex_available: ["//apex_available:platform"],
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100772 device_supported: false,
773 host_supported: true,
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100774 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100775 compile_multilib: "both",
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100776 static_executable: true,
777 nocrt: true,
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100778 target: {
779 host: {
780 enabled: false,
781 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100782 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900783 enabled: true,
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100784 srcs: ["x86_64/bin/linker"],
785 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100786 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900787 enabled: true,
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100788 srcs: ["x86/bin/linker"],
789 },
790 },
791}
Paul Duffin75b902a2021-02-22 12:13:13 +0000792`),
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100793 checkAllCopyRules(`
794.intermediates/linker/linux_glibc_x86_64/linker -> x86_64/bin/linker
795.intermediates/linker/linux_glibc_x86/linker -> x86/bin/linker
796`),
797 )
798}
799
Paul Duffin9ab556f2019-12-11 18:42:17 +0000800func TestSnapshotWithCcSharedLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800801 t.Parallel()
Paul Duffind835daa2019-11-30 17:49:09 +0000802 result := testSdkWithCc(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +0000803 sdk {
804 name: "mysdk",
805 native_shared_libs: ["mynativelib"],
806 }
807
Colin Cross22558312025-02-05 23:02:39 +0000808 apex {
809 name: "myapex",
810 key: "myapex.key",
811 min_sdk_version: "1",
812 }
813
Paul Duffina80fdec2019-12-03 15:25:00 +0000814 cc_library_shared {
815 name: "mynativelib",
816 srcs: [
817 "Test.cpp",
818 "aidl/foo/bar/Test.aidl",
819 ],
Colin Cross22558312025-02-05 23:02:39 +0000820 apex_available: ["myapex"],
Paul Duffin86b02a72021-02-22 11:50:04 +0000821 export_include_dirs: ["myinclude"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000822 aidl: {
823 export_aidl_headers: true,
824 },
Paul Duffina80fdec2019-12-03 15:25:00 +0000825 stl: "none",
826 }
827 `)
828
Paul Duffin36474d32021-03-12 12:19:43 +0000829 CheckSnapshot(t, result, "mysdk", "",
Colin Cross22558312025-02-05 23:02:39 +0000830 snapshotTestPreparer(checkSnapshotWithoutSource,
831 android.FixtureMergeMockFs(android.MockFS{
832 "myapex/Android.bp": []byte(`
833 apex {
834 name: "myapex",
835 key: "myapex.key",
836 min_sdk_version: "1",
837 }
838 `),
839 "myapex/apex_manifest.json": nil,
840 }),
841 ),
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000842 checkAndroidBpContents(`
Paul Duffina80fdec2019-12-03 15:25:00 +0000843// This is auto-generated. DO NOT EDIT.
844
Spandan Dasa5e26d32024-03-06 14:04:36 +0000845apex_contributions_defaults {
846 name: "mysdk.contributions",
847 contents: ["prebuilt_mynativelib"],
848}
849
Paul Duffina80fdec2019-12-03 15:25:00 +0000850cc_prebuilt_library_shared {
Paul Duffina80fdec2019-12-03 15:25:00 +0000851 name: "mynativelib",
852 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100853 visibility: ["//visibility:public"],
Colin Cross22558312025-02-05 23:02:39 +0000854 apex_available: ["myapex"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000855 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100856 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +0000857 export_include_dirs: ["include/myinclude"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000858 arch: {
859 arm64: {
860 srcs: ["arm64/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +0000861 export_include_dirs: ["arm64/include_gen/mynativelib/android_arm64_armv8-a_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000862 },
863 arm: {
864 srcs: ["arm/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +0000865 export_include_dirs: ["arm/include_gen/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000866 },
867 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +0000868 strip: {
869 none: true,
870 },
Paul Duffina80fdec2019-12-03 15:25:00 +0000871}
Paul Duffina80fdec2019-12-03 15:25:00 +0000872`),
873 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000874myinclude/Test.h -> include/myinclude/Test.h
Colin Cross7113d202019-11-20 16:39:12 -0800875.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +0000876.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
877.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
878.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
Colin Cross7113d202019-11-20 16:39:12 -0800879.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +0000880.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
881.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
882.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
Paul Duffina80fdec2019-12-03 15:25:00 +0000883`),
884 )
885}
886
Paul Duffin13f02712020-03-06 12:30:43 +0000887func TestSnapshotWithCcSharedLibrarySharedLibs(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800888 t.Parallel()
Paul Duffin13f02712020-03-06 12:30:43 +0000889 result := testSdkWithCc(t, `
890 sdk {
891 name: "mysdk",
892 native_shared_libs: [
893 "mynativelib",
894 "myothernativelib",
895 "mysystemnativelib",
896 ],
897 }
898
899 cc_library {
900 name: "mysystemnativelib",
901 srcs: [
902 "Test.cpp",
903 ],
Paul Duffin13f02712020-03-06 12:30:43 +0000904 stl: "none",
905 }
906
907 cc_library_shared {
908 name: "myothernativelib",
909 srcs: [
910 "Test.cpp",
911 ],
912 system_shared_libs: [
913 // A reference to a library that is not an sdk member. Uses libm as that
914 // is in the default set of modules available to this test and so is available
915 // both here and also when the generated Android.bp file is tested in
916 // CheckSnapshot(). This ensures that the system_shared_libs property correctly
917 // handles references to modules that are not sdk members.
918 "libm",
919 ],
920 stl: "none",
921 }
922
923 cc_library {
924 name: "mynativelib",
925 srcs: [
926 "Test.cpp",
927 ],
928 shared_libs: [
929 // A reference to another sdk member.
930 "myothernativelib",
931 ],
932 target: {
933 android: {
934 shared: {
935 shared_libs: [
936 // A reference to a library that is not an sdk member. The libc library
937 // is used here to check that the shared_libs property is handled correctly
938 // in a similar way to how libm is used to check system_shared_libs above.
939 "libc",
940 ],
941 },
942 },
943 },
Paul Duffin13f02712020-03-06 12:30:43 +0000944 stl: "none",
945 }
946 `)
947
Paul Duffin36474d32021-03-12 12:19:43 +0000948 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000949 checkAndroidBpContents(`
Paul Duffin13f02712020-03-06 12:30:43 +0000950// This is auto-generated. DO NOT EDIT.
951
Spandan Dasa5e26d32024-03-06 14:04:36 +0000952apex_contributions_defaults {
953 name: "mysdk.contributions",
954 contents: [
955 "prebuilt_mynativelib",
956 "prebuilt_myothernativelib",
957 "prebuilt_mysystemnativelib",
958 ],
959}
960
Paul Duffin13f02712020-03-06 12:30:43 +0000961cc_prebuilt_library_shared {
Paul Duffin13f02712020-03-06 12:30:43 +0000962 name: "mynativelib",
963 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100964 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000965 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000966 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100967 compile_multilib: "both",
Paul Duffin13f02712020-03-06 12:30:43 +0000968 shared_libs: [
969 "myothernativelib",
970 "libc",
971 ],
972 arch: {
973 arm64: {
974 srcs: ["arm64/lib/mynativelib.so"],
975 },
976 arm: {
977 srcs: ["arm/lib/mynativelib.so"],
978 },
979 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +0000980 strip: {
981 none: true,
982 },
Paul Duffin13f02712020-03-06 12:30:43 +0000983}
984
985cc_prebuilt_library_shared {
Paul Duffin13f02712020-03-06 12:30:43 +0000986 name: "myothernativelib",
987 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100988 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000989 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000990 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100991 compile_multilib: "both",
Paul Duffin13f02712020-03-06 12:30:43 +0000992 system_shared_libs: ["libm"],
993 arch: {
994 arm64: {
995 srcs: ["arm64/lib/myothernativelib.so"],
996 },
997 arm: {
998 srcs: ["arm/lib/myothernativelib.so"],
999 },
1000 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00001001 strip: {
1002 none: true,
1003 },
Paul Duffin13f02712020-03-06 12:30:43 +00001004}
1005
1006cc_prebuilt_library_shared {
Paul Duffin13f02712020-03-06 12:30:43 +00001007 name: "mysystemnativelib",
1008 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001009 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001010 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +00001011 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001012 compile_multilib: "both",
Paul Duffin13f02712020-03-06 12:30:43 +00001013 arch: {
1014 arm64: {
1015 srcs: ["arm64/lib/mysystemnativelib.so"],
1016 },
1017 arm: {
1018 srcs: ["arm/lib/mysystemnativelib.so"],
1019 },
1020 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00001021 strip: {
1022 none: true,
1023 },
Paul Duffin13f02712020-03-06 12:30:43 +00001024}
Paul Duffin13f02712020-03-06 12:30:43 +00001025`),
1026 checkAllCopyRules(`
1027.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
1028.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
1029.intermediates/myothernativelib/android_arm64_armv8-a_shared/myothernativelib.so -> arm64/lib/myothernativelib.so
1030.intermediates/myothernativelib/android_arm_armv7-a-neon_shared/myothernativelib.so -> arm/lib/myothernativelib.so
1031.intermediates/mysystemnativelib/android_arm64_armv8-a_shared/mysystemnativelib.so -> arm64/lib/mysystemnativelib.so
1032.intermediates/mysystemnativelib/android_arm_armv7-a-neon_shared/mysystemnativelib.so -> arm/lib/mysystemnativelib.so
1033`),
1034 )
1035}
1036
Paul Duffin9ab556f2019-12-11 18:42:17 +00001037func TestHostSnapshotWithCcSharedLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001038 t.Parallel()
Paul Duffind835daa2019-11-30 17:49:09 +00001039 result := testSdkWithCc(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +00001040 sdk {
1041 name: "mysdk",
1042 device_supported: false,
1043 host_supported: true,
1044 native_shared_libs: ["mynativelib"],
1045 }
1046
1047 cc_library_shared {
1048 name: "mynativelib",
1049 device_supported: false,
1050 host_supported: true,
1051 srcs: [
1052 "Test.cpp",
1053 "aidl/foo/bar/Test.aidl",
1054 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001055 export_include_dirs: ["myinclude"],
Paul Duffina80fdec2019-12-03 15:25:00 +00001056 aidl: {
1057 export_aidl_headers: true,
1058 },
Paul Duffina80fdec2019-12-03 15:25:00 +00001059 stl: "none",
Paul Duffin0c394f32020-03-05 14:09:58 +00001060 sdk_version: "minimum",
Paul Duffina80fdec2019-12-03 15:25:00 +00001061 }
1062 `)
1063
Paul Duffin36474d32021-03-12 12:19:43 +00001064 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001065 checkAndroidBpContents(`
Paul Duffina80fdec2019-12-03 15:25:00 +00001066// This is auto-generated. DO NOT EDIT.
1067
Spandan Dasa5e26d32024-03-06 14:04:36 +00001068apex_contributions_defaults {
1069 name: "mysdk.contributions",
1070 contents: ["prebuilt_mynativelib"],
1071}
1072
Paul Duffina80fdec2019-12-03 15:25:00 +00001073cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00001074 name: "mynativelib",
1075 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001076 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001077 apex_available: ["//apex_available:platform"],
Paul Duffina80fdec2019-12-03 15:25:00 +00001078 device_supported: false,
1079 host_supported: true,
Paul Duffin0c394f32020-03-05 14:09:58 +00001080 sdk_version: "minimum",
Paul Duffin0174d8d2020-03-11 18:42:08 +00001081 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001082 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001083 export_include_dirs: ["include/myinclude"],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001084 target: {
1085 host: {
1086 enabled: false,
1087 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001088 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001089 enabled: true,
Paul Duffina80fdec2019-12-03 15:25:00 +00001090 srcs: ["x86_64/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001091 export_include_dirs: ["x86_64/include_gen/mynativelib/linux_glibc_x86_64_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +00001092 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001093 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001094 enabled: true,
Paul Duffina80fdec2019-12-03 15:25:00 +00001095 srcs: ["x86/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001096 export_include_dirs: ["x86/include_gen/mynativelib/linux_glibc_x86_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +00001097 },
1098 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00001099 strip: {
1100 none: true,
1101 },
Paul Duffina80fdec2019-12-03 15:25:00 +00001102}
Paul Duffin75b902a2021-02-22 12:13:13 +00001103`),
Paul Duffina80fdec2019-12-03 15:25:00 +00001104 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001105myinclude/Test.h -> include/myinclude/Test.h
Paul Duffina80fdec2019-12-03 15:25:00 +00001106.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> x86_64/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +00001107.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
1108.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
1109.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
Paul Duffina80fdec2019-12-03 15:25:00 +00001110.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> x86/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +00001111.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
1112.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
1113.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
Paul Duffina80fdec2019-12-03 15:25:00 +00001114`),
1115 )
1116}
Paul Duffin9ab556f2019-12-11 18:42:17 +00001117
Paul Duffina04c1072020-03-02 10:16:35 +00001118func TestMultipleHostOsTypesSnapshotWithCcSharedLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001119 t.Parallel()
Paul Duffina04c1072020-03-02 10:16:35 +00001120 result := testSdkWithCc(t, `
1121 sdk {
1122 name: "mysdk",
1123 device_supported: false,
1124 host_supported: true,
1125 native_shared_libs: ["mynativelib"],
1126 target: {
1127 windows: {
1128 enabled: true,
1129 },
1130 },
1131 }
1132
1133 cc_library_shared {
1134 name: "mynativelib",
1135 device_supported: false,
1136 host_supported: true,
1137 srcs: [
1138 "Test.cpp",
1139 ],
Paul Duffina04c1072020-03-02 10:16:35 +00001140 stl: "none",
1141 target: {
1142 windows: {
1143 enabled: true,
1144 },
1145 },
1146 }
1147 `)
1148
Paul Duffin36474d32021-03-12 12:19:43 +00001149 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001150 checkAndroidBpContents(`
Paul Duffina04c1072020-03-02 10:16:35 +00001151// This is auto-generated. DO NOT EDIT.
1152
Spandan Dasa5e26d32024-03-06 14:04:36 +00001153apex_contributions_defaults {
1154 name: "mysdk.contributions",
1155 contents: ["prebuilt_mynativelib"],
1156}
1157
Paul Duffina04c1072020-03-02 10:16:35 +00001158cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00001159 name: "mynativelib",
1160 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001161 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001162 apex_available: ["//apex_available:platform"],
Paul Duffina04c1072020-03-02 10:16:35 +00001163 device_supported: false,
1164 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001165 stl: "none",
Paul Duffina04c1072020-03-02 10:16:35 +00001166 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001167 host: {
1168 enabled: false,
1169 },
Martin Stjernholm89238f42020-07-10 00:14:03 +01001170 linux_glibc: {
1171 compile_multilib: "both",
1172 },
Paul Duffina04c1072020-03-02 10:16:35 +00001173 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001174 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001175 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1176 },
1177 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001178 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001179 srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1180 },
Martin Stjernholm89238f42020-07-10 00:14:03 +01001181 windows: {
1182 compile_multilib: "64",
1183 },
Paul Duffina04c1072020-03-02 10:16:35 +00001184 windows_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001185 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001186 srcs: ["windows/x86_64/lib/mynativelib.dll"],
1187 },
1188 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00001189 strip: {
1190 none: true,
1191 },
Paul Duffina04c1072020-03-02 10:16:35 +00001192}
Paul Duffin75b902a2021-02-22 12:13:13 +00001193`),
Paul Duffina04c1072020-03-02 10:16:35 +00001194 checkAllCopyRules(`
1195.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1196.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1197.intermediates/mynativelib/windows_x86_64_shared/mynativelib.dll -> windows/x86_64/lib/mynativelib.dll
1198`),
1199 )
1200}
1201
Paul Duffin9ab556f2019-12-11 18:42:17 +00001202func TestSnapshotWithCcStaticLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001203 t.Parallel()
Paul Duffin9ab556f2019-12-11 18:42:17 +00001204 result := testSdkWithCc(t, `
Paul Duffine6029182019-12-16 17:43:48 +00001205 module_exports {
1206 name: "myexports",
Paul Duffin9ab556f2019-12-11 18:42:17 +00001207 native_static_libs: ["mynativelib"],
1208 }
1209
1210 cc_library_static {
1211 name: "mynativelib",
1212 srcs: [
1213 "Test.cpp",
1214 "aidl/foo/bar/Test.aidl",
1215 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001216 export_include_dirs: ["myinclude"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001217 aidl: {
1218 export_aidl_headers: true,
1219 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001220 stl: "none",
1221 }
1222 `)
1223
Paul Duffin36474d32021-03-12 12:19:43 +00001224 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001225 checkAndroidBpContents(`
Paul Duffin9ab556f2019-12-11 18:42:17 +00001226// This is auto-generated. DO NOT EDIT.
1227
Spandan Dasa5e26d32024-03-06 14:04:36 +00001228apex_contributions_defaults {
1229 name: "myexports.contributions",
1230 contents: ["prebuilt_mynativelib"],
1231}
1232
Paul Duffin9ab556f2019-12-11 18:42:17 +00001233cc_prebuilt_library_static {
Paul Duffin9ab556f2019-12-11 18:42:17 +00001234 name: "mynativelib",
1235 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001236 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001237 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +00001238 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001239 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001240 export_include_dirs: ["include/myinclude"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001241 arch: {
1242 arm64: {
1243 srcs: ["arm64/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001244 export_include_dirs: ["arm64/include_gen/mynativelib/android_arm64_armv8-a_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001245 },
1246 arm: {
1247 srcs: ["arm/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001248 export_include_dirs: ["arm/include_gen/mynativelib/android_arm_armv7-a-neon_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001249 },
1250 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001251}
Paul Duffin9ab556f2019-12-11 18:42:17 +00001252`),
1253 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001254myinclude/Test.h -> include/myinclude/Test.h
Colin Cross7113d202019-11-20 16:39:12 -08001255.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001256.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
1257.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
1258.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
Colin Cross7113d202019-11-20 16:39:12 -08001259.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001260.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
1261.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
1262.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
Paul Duffin9ab556f2019-12-11 18:42:17 +00001263`),
1264 )
1265}
1266
1267func TestHostSnapshotWithCcStaticLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001268 t.Parallel()
Paul Duffin9ab556f2019-12-11 18:42:17 +00001269 result := testSdkWithCc(t, `
Paul Duffine6029182019-12-16 17:43:48 +00001270 module_exports {
1271 name: "myexports",
Paul Duffin9ab556f2019-12-11 18:42:17 +00001272 device_supported: false,
1273 host_supported: true,
1274 native_static_libs: ["mynativelib"],
1275 }
1276
1277 cc_library_static {
1278 name: "mynativelib",
1279 device_supported: false,
1280 host_supported: true,
1281 srcs: [
1282 "Test.cpp",
1283 "aidl/foo/bar/Test.aidl",
1284 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001285 export_include_dirs: ["myinclude"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001286 aidl: {
1287 export_aidl_headers: true,
1288 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001289 stl: "none",
1290 }
1291 `)
1292
Paul Duffin36474d32021-03-12 12:19:43 +00001293 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001294 checkAndroidBpContents(`
Paul Duffin9ab556f2019-12-11 18:42:17 +00001295// This is auto-generated. DO NOT EDIT.
1296
Spandan Dasa5e26d32024-03-06 14:04:36 +00001297apex_contributions_defaults {
1298 name: "myexports.contributions",
1299 contents: ["prebuilt_mynativelib"],
1300}
1301
Paul Duffin9ab556f2019-12-11 18:42:17 +00001302cc_prebuilt_library_static {
Paul Duffin75b902a2021-02-22 12:13:13 +00001303 name: "mynativelib",
1304 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001305 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001306 apex_available: ["//apex_available:platform"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001307 device_supported: false,
1308 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001309 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001310 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001311 export_include_dirs: ["include/myinclude"],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001312 target: {
1313 host: {
1314 enabled: false,
1315 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001316 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001317 enabled: true,
Paul Duffin9ab556f2019-12-11 18:42:17 +00001318 srcs: ["x86_64/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001319 export_include_dirs: ["x86_64/include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001320 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001321 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001322 enabled: true,
Paul Duffin9ab556f2019-12-11 18:42:17 +00001323 srcs: ["x86/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001324 export_include_dirs: ["x86/include_gen/mynativelib/linux_glibc_x86_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001325 },
1326 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001327}
Paul Duffin75b902a2021-02-22 12:13:13 +00001328`),
Paul Duffin9ab556f2019-12-11 18:42:17 +00001329 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001330myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin9ab556f2019-12-11 18:42:17 +00001331.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001332.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
1333.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
1334.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
Paul Duffin9ab556f2019-12-11 18:42:17 +00001335.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> x86/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001336.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
1337.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
1338.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
Paul Duffin9ab556f2019-12-11 18:42:17 +00001339`),
1340 )
1341}
Paul Duffin13ad94f2020-02-19 16:19:27 +00001342
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001343func TestSnapshotWithCcLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001344 t.Parallel()
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001345 result := testSdkWithCc(t, `
1346 module_exports {
1347 name: "myexports",
1348 native_libs: ["mynativelib"],
1349 }
1350
1351 cc_library {
1352 name: "mynativelib",
1353 srcs: [
1354 "Test.cpp",
1355 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001356 export_include_dirs: ["myinclude"],
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001357 stl: "none",
Paul Duffind6abaa72020-09-07 16:39:22 +01001358 recovery_available: true,
Paul Duffind1edbd42020-08-13 19:45:31 +01001359 vendor_available: true,
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001360 }
1361 `)
1362
Paul Duffin36474d32021-03-12 12:19:43 +00001363 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001364 checkAndroidBpContents(`
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001365// This is auto-generated. DO NOT EDIT.
1366
Spandan Dasa5e26d32024-03-06 14:04:36 +00001367apex_contributions_defaults {
1368 name: "myexports.contributions",
1369 contents: ["prebuilt_mynativelib"],
1370}
1371
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001372cc_prebuilt_library {
Paul Duffin75b902a2021-02-22 12:13:13 +00001373 name: "mynativelib",
1374 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001375 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001376 apex_available: ["//apex_available:platform"],
Paul Duffind1edbd42020-08-13 19:45:31 +01001377 vendor_available: true,
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001378 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001379 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001380 export_include_dirs: ["include/myinclude"],
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001381 arch: {
1382 arm64: {
1383 static: {
1384 srcs: ["arm64/lib/mynativelib.a"],
1385 },
1386 shared: {
1387 srcs: ["arm64/lib/mynativelib.so"],
1388 },
1389 },
1390 arm: {
1391 static: {
1392 srcs: ["arm/lib/mynativelib.a"],
1393 },
1394 shared: {
1395 srcs: ["arm/lib/mynativelib.so"],
1396 },
1397 },
1398 },
1399}
Paul Duffin75b902a2021-02-22 12:13:13 +00001400`),
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001401 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001402myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001403.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a
1404.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
1405.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a
Paul Duffin1822a0a2021-03-21 12:56:33 +00001406.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
1407`),
1408 // TODO(b/183315522): Remove this and fix the issue.
1409 snapshotTestErrorHandler(checkSnapshotPreferredWithSource, android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\Qunrecognized property "arch.arm.shared.export_include_dirs"\E`)),
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001410 )
1411}
1412
Liz Kammer96320df2022-05-12 20:40:00 -04001413func TestSnapshotSameLibraryWithNativeLibsAndNativeSharedLib(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001414 t.Parallel()
Liz Kammer96320df2022-05-12 20:40:00 -04001415 result := testSdkWithCc(t, `
1416 module_exports {
1417 host_supported: true,
1418 name: "myexports",
1419 target: {
1420 android: {
1421 native_shared_libs: [
1422 "mynativelib",
1423 ],
1424 },
1425 not_windows: {
1426 native_libs: [
1427 "mynativelib",
1428 ],
1429 },
1430 },
1431 }
1432
1433 cc_library {
1434 name: "mynativelib",
1435 host_supported: true,
1436 srcs: [
1437 "Test.cpp",
1438 ],
1439 stl: "none",
1440 recovery_available: true,
1441 vendor_available: true,
1442 }
1443 `)
1444
1445 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001446 checkAndroidBpContents(`
Liz Kammer96320df2022-05-12 20:40:00 -04001447// This is auto-generated. DO NOT EDIT.
1448
Spandan Dasa5e26d32024-03-06 14:04:36 +00001449apex_contributions_defaults {
1450 name: "myexports.contributions",
1451 contents: ["prebuilt_mynativelib"],
1452}
1453
Liz Kammer96320df2022-05-12 20:40:00 -04001454cc_prebuilt_library {
1455 name: "mynativelib",
1456 prefer: false,
1457 visibility: ["//visibility:public"],
1458 apex_available: ["//apex_available:platform"],
1459 host_supported: true,
1460 vendor_available: true,
1461 stl: "none",
1462 compile_multilib: "both",
1463 target: {
1464 host: {
1465 enabled: false,
1466 },
1467 android_arm64: {
1468 shared: {
1469 srcs: ["android/arm64/lib/mynativelib.so"],
1470 },
1471 static: {
1472 enabled: false,
1473 },
1474 },
1475 android_arm: {
1476 shared: {
1477 srcs: ["android/arm/lib/mynativelib.so"],
1478 },
1479 static: {
1480 enabled: false,
1481 },
1482 },
1483 linux_glibc_x86_64: {
1484 enabled: true,
1485 static: {
1486 srcs: ["linux_glibc/x86_64/lib/mynativelib.a"],
1487 },
1488 shared: {
1489 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1490 },
1491 },
1492 linux_glibc_x86: {
1493 enabled: true,
1494 static: {
1495 srcs: ["linux_glibc/x86/lib/mynativelib.a"],
1496 },
1497 shared: {
1498 srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1499 },
1500 },
1501 },
1502}
1503`),
1504 checkAllCopyRules(`
1505.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so
1506.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so
1507.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> linux_glibc/x86_64/lib/mynativelib.a
1508.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1509.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> linux_glibc/x86/lib/mynativelib.a
1510.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1511`),
1512 )
1513}
1514
1515func TestSnapshotSameLibraryWithAndroidNativeLibsAndHostNativeSharedLib(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001516 t.Parallel()
Liz Kammer96320df2022-05-12 20:40:00 -04001517 result := testSdkWithCc(t, `
1518 module_exports {
1519 host_supported: true,
1520 name: "myexports",
1521 target: {
1522 android: {
1523 native_libs: [
1524 "mynativelib",
1525 ],
1526 },
1527 not_windows: {
1528 native_shared_libs: [
1529 "mynativelib",
1530 ],
1531 },
1532 },
1533 }
1534
1535 cc_library {
1536 name: "mynativelib",
1537 host_supported: true,
1538 srcs: [
1539 "Test.cpp",
1540 ],
1541 stl: "none",
1542 recovery_available: true,
1543 vendor_available: true,
1544 }
1545 `)
1546
1547 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001548 checkAndroidBpContents(`
Liz Kammer96320df2022-05-12 20:40:00 -04001549// This is auto-generated. DO NOT EDIT.
1550
Spandan Dasa5e26d32024-03-06 14:04:36 +00001551apex_contributions_defaults {
1552 name: "myexports.contributions",
1553 contents: ["prebuilt_mynativelib"],
1554}
1555
Liz Kammer96320df2022-05-12 20:40:00 -04001556cc_prebuilt_library {
1557 name: "mynativelib",
1558 prefer: false,
1559 visibility: ["//visibility:public"],
1560 apex_available: ["//apex_available:platform"],
1561 host_supported: true,
1562 vendor_available: true,
1563 stl: "none",
1564 compile_multilib: "both",
1565 target: {
1566 host: {
1567 enabled: false,
1568 },
1569 android_arm64: {
1570 static: {
1571 srcs: ["android/arm64/lib/mynativelib.a"],
1572 },
1573 shared: {
1574 srcs: ["android/arm64/lib/mynativelib.so"],
1575 },
1576 },
1577 android_arm: {
1578 static: {
1579 srcs: ["android/arm/lib/mynativelib.a"],
1580 },
1581 shared: {
1582 srcs: ["android/arm/lib/mynativelib.so"],
1583 },
1584 },
1585 linux_glibc_x86_64: {
1586 enabled: true,
1587 shared: {
1588 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1589 },
1590 static: {
1591 enabled: false,
1592 },
1593 },
1594 linux_glibc_x86: {
1595 enabled: true,
1596 shared: {
1597 srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1598 },
1599 static: {
1600 enabled: false,
1601 },
1602 },
1603 },
1604}
1605`),
1606 checkAllCopyRules(`
1607.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> android/arm64/lib/mynativelib.a
1608.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so
1609.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> android/arm/lib/mynativelib.a
1610.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so
1611.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1612.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1613`),
1614 )
1615}
1616
1617func TestSnapshotSameLibraryWithNativeStaticLibsAndNativeSharedLib(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001618 t.Parallel()
Liz Kammer96320df2022-05-12 20:40:00 -04001619 testSdkError(t, "Incompatible member types", `
1620 module_exports {
1621 host_supported: true,
1622 name: "myexports",
1623 target: {
1624 android: {
1625 native_shared_libs: [
1626 "mynativelib",
1627 ],
1628 },
1629 not_windows: {
1630 native_static_libs: [
1631 "mynativelib",
1632 ],
1633 },
1634 },
1635 }
1636
1637 cc_library {
1638 name: "mynativelib",
1639 host_supported: true,
1640 srcs: [
1641 ],
1642 stl: "none",
1643 recovery_available: true,
1644 vendor_available: true,
1645 }
1646 `)
1647}
1648
Paul Duffin13ad94f2020-02-19 16:19:27 +00001649func TestHostSnapshotWithMultiLib64(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001650 t.Parallel()
Paul Duffin13ad94f2020-02-19 16:19:27 +00001651 result := testSdkWithCc(t, `
1652 module_exports {
1653 name: "myexports",
1654 device_supported: false,
1655 host_supported: true,
1656 target: {
1657 host: {
1658 compile_multilib: "64",
1659 },
1660 },
1661 native_static_libs: ["mynativelib"],
1662 }
1663
1664 cc_library_static {
1665 name: "mynativelib",
1666 device_supported: false,
1667 host_supported: true,
1668 srcs: [
1669 "Test.cpp",
1670 "aidl/foo/bar/Test.aidl",
1671 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001672 export_include_dirs: ["myinclude"],
Paul Duffin13ad94f2020-02-19 16:19:27 +00001673 aidl: {
1674 export_aidl_headers: true,
1675 },
Paul Duffin13ad94f2020-02-19 16:19:27 +00001676 stl: "none",
1677 }
1678 `)
1679
Paul Duffin36474d32021-03-12 12:19:43 +00001680 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001681 checkAndroidBpContents(`
Paul Duffin13ad94f2020-02-19 16:19:27 +00001682// This is auto-generated. DO NOT EDIT.
1683
Spandan Dasa5e26d32024-03-06 14:04:36 +00001684apex_contributions_defaults {
1685 name: "myexports.contributions",
1686 contents: ["prebuilt_mynativelib"],
1687}
1688
Paul Duffin13ad94f2020-02-19 16:19:27 +00001689cc_prebuilt_library_static {
Paul Duffin75b902a2021-02-22 12:13:13 +00001690 name: "mynativelib",
1691 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001692 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001693 apex_available: ["//apex_available:platform"],
Paul Duffin13ad94f2020-02-19 16:19:27 +00001694 device_supported: false,
1695 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001696 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001697 compile_multilib: "64",
Paul Duffin7a7d0672021-02-17 12:17:40 +00001698 export_include_dirs: [
1699 "include/myinclude",
1700 "include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl",
1701 ],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001702 target: {
1703 host: {
1704 enabled: false,
1705 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001706 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001707 enabled: true,
Paul Duffin13ad94f2020-02-19 16:19:27 +00001708 srcs: ["x86_64/lib/mynativelib.a"],
Paul Duffin13ad94f2020-02-19 16:19:27 +00001709 },
1710 },
Paul Duffin13ad94f2020-02-19 16:19:27 +00001711}
Paul Duffin75b902a2021-02-22 12:13:13 +00001712`),
Paul Duffin13ad94f2020-02-19 16:19:27 +00001713 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001714myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin7a7d0672021-02-17 12:17:40 +00001715.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
1716.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
1717.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
Paul Duffin13ad94f2020-02-19 16:19:27 +00001718.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a
Paul Duffin13ad94f2020-02-19 16:19:27 +00001719`),
1720 )
1721}
Paul Duffin91756d22020-02-21 16:29:57 +00001722
1723func TestSnapshotWithCcHeadersLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001724 t.Parallel()
Paul Duffin91756d22020-02-21 16:29:57 +00001725 result := testSdkWithCc(t, `
1726 sdk {
1727 name: "mysdk",
1728 native_header_libs: ["mynativeheaders"],
1729 }
1730
1731 cc_library_headers {
1732 name: "mynativeheaders",
Paul Duffin86b02a72021-02-22 11:50:04 +00001733 export_include_dirs: ["myinclude"],
Paul Duffin91756d22020-02-21 16:29:57 +00001734 stl: "none",
1735 }
1736 `)
1737
Paul Duffin36474d32021-03-12 12:19:43 +00001738 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001739 checkAndroidBpContents(`
Paul Duffin91756d22020-02-21 16:29:57 +00001740// This is auto-generated. DO NOT EDIT.
1741
Spandan Dasa5e26d32024-03-06 14:04:36 +00001742apex_contributions_defaults {
1743 name: "mysdk.contributions",
1744 contents: ["prebuilt_mynativeheaders"],
1745}
1746
Paul Duffin91756d22020-02-21 16:29:57 +00001747cc_prebuilt_library_headers {
Paul Duffin91756d22020-02-21 16:29:57 +00001748 name: "mynativeheaders",
1749 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001750 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001751 apex_available: ["//apex_available:platform"],
Paul Duffin91756d22020-02-21 16:29:57 +00001752 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001753 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001754 export_include_dirs: ["include/myinclude"],
Paul Duffin91756d22020-02-21 16:29:57 +00001755}
Paul Duffin91756d22020-02-21 16:29:57 +00001756`),
1757 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001758myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin91756d22020-02-21 16:29:57 +00001759`),
1760 )
1761}
1762
Paul Duffin93b750e2019-11-19 19:44:10 +00001763func TestSnapshotWithCcHeadersLibraryAndNativeBridgeSupport(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001764 t.Parallel()
Paul Duffin93b750e2019-11-19 19:44:10 +00001765 result := android.GroupFixturePreparers(
1766 cc.PrepareForTestWithCcDefaultModules,
1767 PrepareForTestWithSdkBuildComponents,
1768 ccTestFs.AddToFixture(),
1769 prepareForTestWithNativeBridgeTarget,
Spandan Dasa5e26d32024-03-06 14:04:36 +00001770 android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
1771 android.RegisterApexContributionsBuildComponents(ctx)
1772 }),
Paul Duffin93b750e2019-11-19 19:44:10 +00001773 ).RunTestWithBp(t, `
1774 sdk {
1775 name: "mysdk",
1776 native_header_libs: ["mynativeheaders"],
1777 traits: {
1778 native_bridge_support: ["mynativeheaders"],
1779 },
1780 }
1781
1782 cc_library_headers {
1783 name: "mynativeheaders",
1784 export_include_dirs: ["myinclude"],
1785 stl: "none",
1786 system_shared_libs: [],
1787 native_bridge_supported: true,
1788 }
1789 `)
1790
1791 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001792 checkAndroidBpContents(`
Paul Duffin93b750e2019-11-19 19:44:10 +00001793// This is auto-generated. DO NOT EDIT.
1794
Spandan Dasa5e26d32024-03-06 14:04:36 +00001795apex_contributions_defaults {
1796 name: "mysdk.contributions",
1797 contents: ["prebuilt_mynativeheaders"],
1798}
1799
Paul Duffin93b750e2019-11-19 19:44:10 +00001800cc_prebuilt_library_headers {
1801 name: "mynativeheaders",
1802 prefer: false,
1803 visibility: ["//visibility:public"],
1804 apex_available: ["//apex_available:platform"],
1805 native_bridge_supported: true,
1806 stl: "none",
1807 compile_multilib: "both",
1808 system_shared_libs: [],
1809 export_include_dirs: ["include/myinclude"],
1810}
1811`),
1812 checkAllCopyRules(`
1813myinclude/Test.h -> include/myinclude/Test.h
1814`),
1815 )
1816}
1817
1818// TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties verifies that when a
1819// module that has different output files for a native bridge target requests the native bridge
1820// variants are copied into the sdk snapshot that it reports an error.
1821func TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001822 t.Parallel()
Paul Duffin93b750e2019-11-19 19:44:10 +00001823 android.GroupFixturePreparers(
1824 cc.PrepareForTestWithCcDefaultModules,
1825 PrepareForTestWithSdkBuildComponents,
1826 ccTestFs.AddToFixture(),
1827 prepareForTestWithNativeBridgeTarget,
1828 ).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
1829 `\QArchitecture variant "arm64_native_bridge" of sdk member "mynativeheaders" has properties distinct from other variants; this is not yet supported. The properties are:
1830 export_include_dirs: [
1831 "arm64_native_bridge/include/myinclude_nativebridge",
1832 "arm64_native_bridge/include/myinclude",
1833 ],\E`)).
1834 RunTestWithBp(t, `
1835 sdk {
1836 name: "mysdk",
1837 native_header_libs: ["mynativeheaders"],
1838 traits: {
1839 native_bridge_support: ["mynativeheaders"],
1840 },
1841 }
1842
1843 cc_library_headers {
1844 name: "mynativeheaders",
1845 export_include_dirs: ["myinclude"],
1846 stl: "none",
1847 system_shared_libs: [],
1848 native_bridge_supported: true,
1849 target: {
1850 native_bridge: {
1851 export_include_dirs: ["myinclude_nativebridge"],
1852 },
1853 },
1854 }
1855 `)
1856}
1857
Paul Duffin63696222021-09-06 10:28:34 +01001858func TestSnapshotWithCcHeadersLibraryAndImageVariants(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001859 t.Parallel()
Paul Duffin63696222021-09-06 10:28:34 +01001860 testImageVariant := func(t *testing.T, property, trait string) {
1861 result := android.GroupFixturePreparers(
1862 cc.PrepareForTestWithCcDefaultModules,
1863 PrepareForTestWithSdkBuildComponents,
1864 ccTestFs.AddToFixture(),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001865 android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
1866 android.RegisterApexContributionsBuildComponents(ctx)
1867 }),
Paul Duffin63696222021-09-06 10:28:34 +01001868 ).RunTestWithBp(t, fmt.Sprintf(`
1869 sdk {
1870 name: "mysdk",
1871 native_header_libs: ["mynativeheaders"],
1872 traits: {
1873 %s: ["mynativeheaders"],
1874 },
1875 }
1876
1877 cc_library_headers {
1878 name: "mynativeheaders",
1879 export_include_dirs: ["myinclude"],
1880 stl: "none",
1881 system_shared_libs: [],
1882 %s: true,
1883 }
1884 `, trait, property))
1885
1886 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001887 checkAndroidBpContents(fmt.Sprintf(`
Paul Duffin63696222021-09-06 10:28:34 +01001888// This is auto-generated. DO NOT EDIT.
1889
Spandan Dasa5e26d32024-03-06 14:04:36 +00001890apex_contributions_defaults {
1891 name: "mysdk.contributions",
1892 contents: ["prebuilt_mynativeheaders"],
1893}
1894
Paul Duffin63696222021-09-06 10:28:34 +01001895cc_prebuilt_library_headers {
1896 name: "mynativeheaders",
1897 prefer: false,
1898 visibility: ["//visibility:public"],
1899 apex_available: ["//apex_available:platform"],
1900 %s: true,
1901 stl: "none",
1902 compile_multilib: "both",
1903 system_shared_libs: [],
1904 export_include_dirs: ["include/myinclude"],
1905}
1906`, property)),
1907 checkAllCopyRules(`
1908myinclude/Test.h -> include/myinclude/Test.h
1909`),
1910 )
1911 }
1912
Paul Duffin12a0a312021-09-15 17:25:10 +01001913 t.Run("ramdisk", func(t *testing.T) {
1914 testImageVariant(t, "ramdisk_available", "ramdisk_image_required")
1915 })
1916
Paul Duffin63696222021-09-06 10:28:34 +01001917 t.Run("recovery", func(t *testing.T) {
1918 testImageVariant(t, "recovery_available", "recovery_image_required")
1919 })
1920}
1921
Paul Duffin91756d22020-02-21 16:29:57 +00001922func TestHostSnapshotWithCcHeadersLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001923 t.Parallel()
Paul Duffin91756d22020-02-21 16:29:57 +00001924 result := testSdkWithCc(t, `
1925 sdk {
1926 name: "mysdk",
1927 device_supported: false,
1928 host_supported: true,
1929 native_header_libs: ["mynativeheaders"],
1930 }
1931
1932 cc_library_headers {
1933 name: "mynativeheaders",
1934 device_supported: false,
1935 host_supported: true,
Paul Duffin86b02a72021-02-22 11:50:04 +00001936 export_include_dirs: ["myinclude"],
Paul Duffin91756d22020-02-21 16:29:57 +00001937 stl: "none",
1938 }
1939 `)
1940
Paul Duffin36474d32021-03-12 12:19:43 +00001941 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001942 checkAndroidBpContents(`
Paul Duffin91756d22020-02-21 16:29:57 +00001943// This is auto-generated. DO NOT EDIT.
1944
Spandan Dasa5e26d32024-03-06 14:04:36 +00001945apex_contributions_defaults {
1946 name: "mysdk.contributions",
1947 contents: ["prebuilt_mynativeheaders"],
1948}
1949
Paul Duffin91756d22020-02-21 16:29:57 +00001950cc_prebuilt_library_headers {
Paul Duffin75b902a2021-02-22 12:13:13 +00001951 name: "mynativeheaders",
1952 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001953 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001954 apex_available: ["//apex_available:platform"],
Paul Duffin91756d22020-02-21 16:29:57 +00001955 device_supported: false,
1956 host_supported: true,
Paul Duffin91756d22020-02-21 16:29:57 +00001957 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001958 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001959 export_include_dirs: ["include/myinclude"],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001960 target: {
1961 host: {
1962 enabled: false,
1963 },
Jiyong Park8fe14e62020-10-19 22:47:34 +09001964 linux_glibc_x86_64: {
1965 enabled: true,
1966 },
1967 linux_glibc_x86: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001968 enabled: true,
1969 },
1970 },
Paul Duffin91756d22020-02-21 16:29:57 +00001971}
Paul Duffin75b902a2021-02-22 12:13:13 +00001972`),
Paul Duffin91756d22020-02-21 16:29:57 +00001973 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001974myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin91756d22020-02-21 16:29:57 +00001975`),
1976 )
1977}
Paul Duffina04c1072020-03-02 10:16:35 +00001978
1979func TestDeviceAndHostSnapshotWithCcHeadersLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001980 t.Parallel()
Paul Duffina04c1072020-03-02 10:16:35 +00001981 result := testSdkWithCc(t, `
1982 sdk {
1983 name: "mysdk",
1984 host_supported: true,
1985 native_header_libs: ["mynativeheaders"],
1986 }
1987
1988 cc_library_headers {
1989 name: "mynativeheaders",
1990 host_supported: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001991 stl: "none",
Paul Duffin86b02a72021-02-22 11:50:04 +00001992 export_system_include_dirs: ["myinclude"],
Paul Duffina04c1072020-03-02 10:16:35 +00001993 target: {
1994 android: {
Paul Duffin86b02a72021-02-22 11:50:04 +00001995 export_include_dirs: ["myinclude-android"],
Paul Duffina04c1072020-03-02 10:16:35 +00001996 },
1997 host: {
Paul Duffin86b02a72021-02-22 11:50:04 +00001998 export_include_dirs: ["myinclude-host"],
Paul Duffina04c1072020-03-02 10:16:35 +00001999 },
2000 },
2001 }
2002 `)
2003
Paul Duffin36474d32021-03-12 12:19:43 +00002004 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002005 checkAndroidBpContents(`
Paul Duffina04c1072020-03-02 10:16:35 +00002006// This is auto-generated. DO NOT EDIT.
2007
Spandan Dasa5e26d32024-03-06 14:04:36 +00002008apex_contributions_defaults {
2009 name: "mysdk.contributions",
2010 contents: ["prebuilt_mynativeheaders"],
2011}
2012
Paul Duffina04c1072020-03-02 10:16:35 +00002013cc_prebuilt_library_headers {
Paul Duffin75b902a2021-02-22 12:13:13 +00002014 name: "mynativeheaders",
2015 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002016 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002017 apex_available: ["//apex_available:platform"],
Paul Duffina04c1072020-03-02 10:16:35 +00002018 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00002019 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01002020 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00002021 export_system_include_dirs: ["common_os/include/myinclude"],
Paul Duffina04c1072020-03-02 10:16:35 +00002022 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002023 host: {
2024 enabled: false,
2025 },
Paul Duffina04c1072020-03-02 10:16:35 +00002026 android: {
Paul Duffin86b02a72021-02-22 11:50:04 +00002027 export_include_dirs: ["android/include/myinclude-android"],
Paul Duffina04c1072020-03-02 10:16:35 +00002028 },
2029 linux_glibc: {
Paul Duffin86b02a72021-02-22 11:50:04 +00002030 export_include_dirs: ["linux_glibc/include/myinclude-host"],
Paul Duffina04c1072020-03-02 10:16:35 +00002031 },
Jiyong Park8fe14e62020-10-19 22:47:34 +09002032 linux_glibc_x86_64: {
2033 enabled: true,
2034 },
2035 linux_glibc_x86: {
2036 enabled: true,
2037 },
Paul Duffina04c1072020-03-02 10:16:35 +00002038 },
Paul Duffina04c1072020-03-02 10:16:35 +00002039}
Paul Duffin75b902a2021-02-22 12:13:13 +00002040`),
Paul Duffina04c1072020-03-02 10:16:35 +00002041 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00002042myinclude/Test.h -> common_os/include/myinclude/Test.h
2043myinclude-android/AndroidTest.h -> android/include/myinclude-android/AndroidTest.h
2044myinclude-host/HostTest.h -> linux_glibc/include/myinclude-host/HostTest.h
Paul Duffina04c1072020-03-02 10:16:35 +00002045`),
2046 )
2047}
Martin Stjernholm10566a02020-03-24 01:19:52 +00002048
2049func TestSystemSharedLibPropagation(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002050 t.Parallel()
Martin Stjernholm10566a02020-03-24 01:19:52 +00002051 result := testSdkWithCc(t, `
2052 sdk {
2053 name: "mysdk",
Colin Cross6b8f4252021-07-22 11:39:44 -07002054 native_shared_libs: ["sslnil", "sslempty", "sslnonempty"],
Martin Stjernholm10566a02020-03-24 01:19:52 +00002055 }
2056
2057 cc_library {
2058 name: "sslnil",
2059 host_supported: true,
2060 }
2061
2062 cc_library {
2063 name: "sslempty",
2064 system_shared_libs: [],
2065 }
2066
2067 cc_library {
2068 name: "sslnonempty",
2069 system_shared_libs: ["sslnil"],
2070 }
2071 `)
2072
Paul Duffin36474d32021-03-12 12:19:43 +00002073 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002074 checkAndroidBpContents(`
Martin Stjernholm10566a02020-03-24 01:19:52 +00002075// This is auto-generated. DO NOT EDIT.
2076
Spandan Dasa5e26d32024-03-06 14:04:36 +00002077apex_contributions_defaults {
2078 name: "mysdk.contributions",
2079 contents: [
2080 "prebuilt_sslnil",
2081 "prebuilt_sslempty",
2082 "prebuilt_sslnonempty",
2083 ],
2084}
2085
Martin Stjernholm10566a02020-03-24 01:19:52 +00002086cc_prebuilt_library_shared {
Martin Stjernholm10566a02020-03-24 01:19:52 +00002087 name: "sslnil",
2088 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002089 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002090 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01002091 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00002092 arch: {
2093 arm64: {
2094 srcs: ["arm64/lib/sslnil.so"],
2095 },
2096 arm: {
2097 srcs: ["arm/lib/sslnil.so"],
2098 },
2099 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002100 strip: {
2101 none: true,
2102 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002103}
2104
2105cc_prebuilt_library_shared {
Martin Stjernholm10566a02020-03-24 01:19:52 +00002106 name: "sslempty",
2107 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002108 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002109 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01002110 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00002111 system_shared_libs: [],
2112 arch: {
2113 arm64: {
2114 srcs: ["arm64/lib/sslempty.so"],
2115 },
2116 arm: {
2117 srcs: ["arm/lib/sslempty.so"],
2118 },
2119 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002120 strip: {
2121 none: true,
2122 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002123}
2124
2125cc_prebuilt_library_shared {
Martin Stjernholm10566a02020-03-24 01:19:52 +00002126 name: "sslnonempty",
2127 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002128 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002129 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01002130 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00002131 system_shared_libs: ["sslnil"],
2132 arch: {
2133 arm64: {
2134 srcs: ["arm64/lib/sslnonempty.so"],
2135 },
2136 arm: {
2137 srcs: ["arm/lib/sslnonempty.so"],
2138 },
2139 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002140 strip: {
2141 none: true,
2142 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002143}
Colin Cross6b8f4252021-07-22 11:39:44 -07002144`))
Martin Stjernholm10566a02020-03-24 01:19:52 +00002145
2146 result = testSdkWithCc(t, `
2147 sdk {
2148 name: "mysdk",
2149 host_supported: true,
Colin Cross6b8f4252021-07-22 11:39:44 -07002150 native_shared_libs: ["sslvariants"],
Martin Stjernholm10566a02020-03-24 01:19:52 +00002151 }
2152
2153 cc_library {
2154 name: "sslvariants",
2155 host_supported: true,
2156 target: {
2157 android: {
2158 system_shared_libs: [],
2159 },
2160 },
2161 }
2162 `)
2163
Paul Duffin36474d32021-03-12 12:19:43 +00002164 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002165 checkAndroidBpContents(`
Martin Stjernholm10566a02020-03-24 01:19:52 +00002166// This is auto-generated. DO NOT EDIT.
2167
Spandan Dasa5e26d32024-03-06 14:04:36 +00002168apex_contributions_defaults {
2169 name: "mysdk.contributions",
2170 contents: ["prebuilt_sslvariants"],
2171}
2172
Martin Stjernholm10566a02020-03-24 01:19:52 +00002173cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00002174 name: "sslvariants",
2175 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002176 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002177 apex_available: ["//apex_available:platform"],
Martin Stjernholm10566a02020-03-24 01:19:52 +00002178 host_supported: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +01002179 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00002180 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002181 host: {
2182 enabled: false,
2183 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002184 android: {
2185 system_shared_libs: [],
2186 },
2187 android_arm64: {
2188 srcs: ["android/arm64/lib/sslvariants.so"],
2189 },
2190 android_arm: {
2191 srcs: ["android/arm/lib/sslvariants.so"],
2192 },
2193 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002194 enabled: true,
Martin Stjernholm10566a02020-03-24 01:19:52 +00002195 srcs: ["linux_glibc/x86_64/lib/sslvariants.so"],
2196 },
2197 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002198 enabled: true,
Martin Stjernholm10566a02020-03-24 01:19:52 +00002199 srcs: ["linux_glibc/x86/lib/sslvariants.so"],
2200 },
2201 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002202 strip: {
2203 none: true,
2204 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002205}
Paul Duffin75b902a2021-02-22 12:13:13 +00002206`),
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002207 )
Martin Stjernholm10566a02020-03-24 01:19:52 +00002208}
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002209
2210func TestStubsLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002211 t.Parallel()
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002212 result := testSdkWithCc(t, `
2213 sdk {
2214 name: "mysdk",
2215 native_shared_libs: ["stubslib"],
2216 }
2217
2218 cc_library {
Martin Stjernholmcc330d62020-04-21 20:45:35 +01002219 name: "internaldep",
2220 }
2221
2222 cc_library {
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002223 name: "stubslib",
Martin Stjernholmcc330d62020-04-21 20:45:35 +01002224 shared_libs: ["internaldep"],
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002225 stubs: {
2226 symbol_file: "some/where/stubslib.map.txt",
2227 versions: ["1", "2", "3"],
2228 },
2229 }
2230 `)
2231
Paul Duffin36474d32021-03-12 12:19:43 +00002232 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002233 checkAndroidBpContents(`
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002234// This is auto-generated. DO NOT EDIT.
2235
Spandan Dasa5e26d32024-03-06 14:04:36 +00002236apex_contributions_defaults {
2237 name: "mysdk.contributions",
2238 contents: ["prebuilt_stubslib"],
2239}
2240
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002241cc_prebuilt_library_shared {
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002242 name: "stubslib",
2243 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002244 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002245 apex_available: ["//apex_available:platform"],
Colin Cross694fced2024-06-25 14:56:42 -07002246 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01002247 compile_multilib: "both",
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002248 stubs: {
Martin Stjernholm618b6712020-09-24 16:53:04 +01002249 versions: [
2250 "1",
2251 "2",
2252 "3",
Jiyong Parkd4a3a132021-03-17 20:21:35 +09002253 "current",
Martin Stjernholm618b6712020-09-24 16:53:04 +01002254 ],
Spandan Dase20c56c2024-07-23 21:34:24 +00002255 symbol_file: "stubslib.map.txt",
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002256 },
2257 arch: {
2258 arm64: {
2259 srcs: ["arm64/lib/stubslib.so"],
2260 },
2261 arm: {
2262 srcs: ["arm/lib/stubslib.so"],
2263 },
2264 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002265 strip: {
2266 none: true,
2267 },
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002268}
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002269`))
2270}
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002271
2272func TestDeviceAndHostSnapshotWithStubsLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002273 t.Parallel()
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002274 result := testSdkWithCc(t, `
2275 sdk {
2276 name: "mysdk",
2277 host_supported: true,
2278 native_shared_libs: ["stubslib"],
2279 }
2280
2281 cc_library {
2282 name: "internaldep",
2283 host_supported: true,
2284 }
2285
2286 cc_library {
2287 name: "stubslib",
2288 host_supported: true,
2289 shared_libs: ["internaldep"],
2290 stubs: {
2291 symbol_file: "some/where/stubslib.map.txt",
2292 versions: ["1", "2", "3"],
2293 },
2294 }
2295 `)
2296
Paul Duffin36474d32021-03-12 12:19:43 +00002297 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002298 checkAndroidBpContents(`
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002299// This is auto-generated. DO NOT EDIT.
2300
Spandan Dasa5e26d32024-03-06 14:04:36 +00002301apex_contributions_defaults {
2302 name: "mysdk.contributions",
2303 contents: ["prebuilt_stubslib"],
2304}
2305
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002306cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00002307 name: "stubslib",
2308 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002309 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002310 apex_available: ["//apex_available:platform"],
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002311 host_supported: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +01002312 compile_multilib: "both",
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002313 stubs: {
Martin Stjernholm618b6712020-09-24 16:53:04 +01002314 versions: [
2315 "1",
2316 "2",
2317 "3",
Jiyong Parkd4a3a132021-03-17 20:21:35 +09002318 "current",
Martin Stjernholm618b6712020-09-24 16:53:04 +01002319 ],
Spandan Dase20c56c2024-07-23 21:34:24 +00002320 symbol_file: "stubslib.map.txt",
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002321 },
2322 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002323 host: {
2324 enabled: false,
2325 },
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002326 android_arm64: {
2327 srcs: ["android/arm64/lib/stubslib.so"],
2328 },
2329 android_arm: {
2330 srcs: ["android/arm/lib/stubslib.so"],
2331 },
2332 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002333 enabled: true,
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002334 srcs: ["linux_glibc/x86_64/lib/stubslib.so"],
2335 },
2336 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002337 enabled: true,
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002338 srcs: ["linux_glibc/x86/lib/stubslib.so"],
2339 },
2340 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002341 strip: {
2342 none: true,
2343 },
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002344}
Paul Duffin75b902a2021-02-22 12:13:13 +00002345`),
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002346 )
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002347}
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002348
2349func TestUniqueHostSoname(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002350 t.Parallel()
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002351 result := testSdkWithCc(t, `
2352 sdk {
2353 name: "mysdk",
2354 host_supported: true,
2355 native_shared_libs: ["mylib"],
2356 }
2357
2358 cc_library {
2359 name: "mylib",
2360 host_supported: true,
2361 unique_host_soname: true,
2362 }
2363 `)
2364
Paul Duffin36474d32021-03-12 12:19:43 +00002365 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002366 checkAndroidBpContents(`
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002367// This is auto-generated. DO NOT EDIT.
2368
Spandan Dasa5e26d32024-03-06 14:04:36 +00002369apex_contributions_defaults {
2370 name: "mysdk.contributions",
2371 contents: ["prebuilt_mylib"],
2372}
2373
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002374cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00002375 name: "mylib",
2376 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002377 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002378 apex_available: ["//apex_available:platform"],
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002379 host_supported: true,
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002380 unique_host_soname: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +01002381 compile_multilib: "both",
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002382 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002383 host: {
2384 enabled: false,
2385 },
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002386 android_arm64: {
2387 srcs: ["android/arm64/lib/mylib.so"],
2388 },
2389 android_arm: {
2390 srcs: ["android/arm/lib/mylib.so"],
2391 },
2392 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002393 enabled: true,
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002394 srcs: ["linux_glibc/x86_64/lib/mylib-host.so"],
2395 },
2396 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002397 enabled: true,
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002398 srcs: ["linux_glibc/x86/lib/mylib-host.so"],
2399 },
2400 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002401 strip: {
2402 none: true,
2403 },
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002404}
Paul Duffin75b902a2021-02-22 12:13:13 +00002405`),
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002406 checkAllCopyRules(`
2407.intermediates/mylib/android_arm64_armv8-a_shared/mylib.so -> android/arm64/lib/mylib.so
2408.intermediates/mylib/android_arm_armv7-a-neon_shared/mylib.so -> android/arm/lib/mylib.so
2409.intermediates/mylib/linux_glibc_x86_64_shared/mylib-host.so -> linux_glibc/x86_64/lib/mylib-host.so
2410.intermediates/mylib/linux_glibc_x86_shared/mylib-host.so -> linux_glibc/x86/lib/mylib-host.so
2411`),
2412 )
2413}
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002414
2415func TestNoSanitizerMembers(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002416 t.Parallel()
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002417 result := testSdkWithCc(t, `
2418 sdk {
2419 name: "mysdk",
2420 native_shared_libs: ["mynativelib"],
2421 }
2422
2423 cc_library_shared {
2424 name: "mynativelib",
2425 srcs: ["Test.cpp"],
Paul Duffin86b02a72021-02-22 11:50:04 +00002426 export_include_dirs: ["myinclude"],
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002427 arch: {
2428 arm64: {
2429 export_system_include_dirs: ["arm64/include"],
2430 sanitize: {
2431 hwaddress: true,
2432 },
2433 },
2434 },
2435 }
2436 `)
2437
Paul Duffin36474d32021-03-12 12:19:43 +00002438 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002439 checkAndroidBpContents(`
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002440// This is auto-generated. DO NOT EDIT.
2441
Spandan Dasa5e26d32024-03-06 14:04:36 +00002442apex_contributions_defaults {
2443 name: "mysdk.contributions",
2444 contents: ["prebuilt_mynativelib"],
2445}
2446
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002447cc_prebuilt_library_shared {
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002448 name: "mynativelib",
2449 prefer: false,
2450 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002451 apex_available: ["//apex_available:platform"],
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002452 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00002453 export_include_dirs: ["include/myinclude"],
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002454 arch: {
2455 arm64: {
2456 export_system_include_dirs: ["arm64/include/arm64/include"],
2457 },
2458 arm: {
2459 srcs: ["arm/lib/mynativelib.so"],
2460 },
2461 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002462 strip: {
2463 none: true,
2464 },
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002465}
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002466`),
2467 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00002468myinclude/Test.h -> include/myinclude/Test.h
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002469arm64/include/Arm64Test.h -> arm64/include/arm64/include/Arm64Test.h
Paul Duffin1822a0a2021-03-21 12:56:33 +00002470.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
2471`),
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002472 )
2473}