blob: 939477f618c33a05d305e71a2f5c1570ada643cf [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
808 cc_library_shared {
809 name: "mynativelib",
810 srcs: [
811 "Test.cpp",
812 "aidl/foo/bar/Test.aidl",
813 ],
Chaitanya Cheemala (xWF)7a570922025-02-07 01:37:56 -0800814 apex_available: ["apex1", "apex2"],
Paul Duffin86b02a72021-02-22 11:50:04 +0000815 export_include_dirs: ["myinclude"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000816 aidl: {
817 export_aidl_headers: true,
818 },
Paul Duffina80fdec2019-12-03 15:25:00 +0000819 stl: "none",
820 }
821 `)
822
Paul Duffin36474d32021-03-12 12:19:43 +0000823 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000824 checkAndroidBpContents(`
Paul Duffina80fdec2019-12-03 15:25:00 +0000825// This is auto-generated. DO NOT EDIT.
826
Spandan Dasa5e26d32024-03-06 14:04:36 +0000827apex_contributions_defaults {
828 name: "mysdk.contributions",
829 contents: ["prebuilt_mynativelib"],
830}
831
Paul Duffina80fdec2019-12-03 15:25:00 +0000832cc_prebuilt_library_shared {
Paul Duffina80fdec2019-12-03 15:25:00 +0000833 name: "mynativelib",
834 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100835 visibility: ["//visibility:public"],
Chaitanya Cheemala (xWF)7a570922025-02-07 01:37:56 -0800836 apex_available: [
837 "apex1",
838 "apex2",
839 ],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000840 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100841 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +0000842 export_include_dirs: ["include/myinclude"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000843 arch: {
844 arm64: {
845 srcs: ["arm64/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +0000846 export_include_dirs: ["arm64/include_gen/mynativelib/android_arm64_armv8-a_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000847 },
848 arm: {
849 srcs: ["arm/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +0000850 export_include_dirs: ["arm/include_gen/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000851 },
852 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +0000853 strip: {
854 none: true,
855 },
Paul Duffina80fdec2019-12-03 15:25:00 +0000856}
Paul Duffina80fdec2019-12-03 15:25:00 +0000857`),
858 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000859myinclude/Test.h -> include/myinclude/Test.h
Colin Cross7113d202019-11-20 16:39:12 -0800860.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +0000861.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
862.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
863.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 -0800864.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +0000865.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
866.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
867.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 +0000868`),
869 )
870}
871
Paul Duffin13f02712020-03-06 12:30:43 +0000872func TestSnapshotWithCcSharedLibrarySharedLibs(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -0800873 t.Parallel()
Paul Duffin13f02712020-03-06 12:30:43 +0000874 result := testSdkWithCc(t, `
875 sdk {
876 name: "mysdk",
877 native_shared_libs: [
878 "mynativelib",
879 "myothernativelib",
880 "mysystemnativelib",
881 ],
882 }
883
884 cc_library {
885 name: "mysystemnativelib",
886 srcs: [
887 "Test.cpp",
888 ],
Paul Duffin13f02712020-03-06 12:30:43 +0000889 stl: "none",
890 }
891
892 cc_library_shared {
893 name: "myothernativelib",
894 srcs: [
895 "Test.cpp",
896 ],
897 system_shared_libs: [
898 // A reference to a library that is not an sdk member. Uses libm as that
899 // is in the default set of modules available to this test and so is available
900 // both here and also when the generated Android.bp file is tested in
901 // CheckSnapshot(). This ensures that the system_shared_libs property correctly
902 // handles references to modules that are not sdk members.
903 "libm",
904 ],
905 stl: "none",
906 }
907
908 cc_library {
909 name: "mynativelib",
910 srcs: [
911 "Test.cpp",
912 ],
913 shared_libs: [
914 // A reference to another sdk member.
915 "myothernativelib",
916 ],
917 target: {
918 android: {
919 shared: {
920 shared_libs: [
921 // A reference to a library that is not an sdk member. The libc library
922 // is used here to check that the shared_libs property is handled correctly
923 // in a similar way to how libm is used to check system_shared_libs above.
924 "libc",
925 ],
926 },
927 },
928 },
Paul Duffin13f02712020-03-06 12:30:43 +0000929 stl: "none",
930 }
931 `)
932
Paul Duffin36474d32021-03-12 12:19:43 +0000933 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000934 checkAndroidBpContents(`
Paul Duffin13f02712020-03-06 12:30:43 +0000935// This is auto-generated. DO NOT EDIT.
936
Spandan Dasa5e26d32024-03-06 14:04:36 +0000937apex_contributions_defaults {
938 name: "mysdk.contributions",
939 contents: [
940 "prebuilt_mynativelib",
941 "prebuilt_myothernativelib",
942 "prebuilt_mysystemnativelib",
943 ],
944}
945
Paul Duffin13f02712020-03-06 12:30:43 +0000946cc_prebuilt_library_shared {
Paul Duffin13f02712020-03-06 12:30:43 +0000947 name: "mynativelib",
948 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100949 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000950 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000951 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100952 compile_multilib: "both",
Paul Duffin13f02712020-03-06 12:30:43 +0000953 shared_libs: [
954 "myothernativelib",
955 "libc",
956 ],
957 arch: {
958 arm64: {
959 srcs: ["arm64/lib/mynativelib.so"],
960 },
961 arm: {
962 srcs: ["arm/lib/mynativelib.so"],
963 },
964 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +0000965 strip: {
966 none: true,
967 },
Paul Duffin13f02712020-03-06 12:30:43 +0000968}
969
970cc_prebuilt_library_shared {
Paul Duffin13f02712020-03-06 12:30:43 +0000971 name: "myothernativelib",
972 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100973 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000974 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000975 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100976 compile_multilib: "both",
Paul Duffin13f02712020-03-06 12:30:43 +0000977 system_shared_libs: ["libm"],
978 arch: {
979 arm64: {
980 srcs: ["arm64/lib/myothernativelib.so"],
981 },
982 arm: {
983 srcs: ["arm/lib/myothernativelib.so"],
984 },
985 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +0000986 strip: {
987 none: true,
988 },
Paul Duffin13f02712020-03-06 12:30:43 +0000989}
990
991cc_prebuilt_library_shared {
Paul Duffin13f02712020-03-06 12:30:43 +0000992 name: "mysystemnativelib",
993 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100994 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000995 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000996 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100997 compile_multilib: "both",
Paul Duffin13f02712020-03-06 12:30:43 +0000998 arch: {
999 arm64: {
1000 srcs: ["arm64/lib/mysystemnativelib.so"],
1001 },
1002 arm: {
1003 srcs: ["arm/lib/mysystemnativelib.so"],
1004 },
1005 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00001006 strip: {
1007 none: true,
1008 },
Paul Duffin13f02712020-03-06 12:30:43 +00001009}
Paul Duffin13f02712020-03-06 12:30:43 +00001010`),
1011 checkAllCopyRules(`
1012.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
1013.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
1014.intermediates/myothernativelib/android_arm64_armv8-a_shared/myothernativelib.so -> arm64/lib/myothernativelib.so
1015.intermediates/myothernativelib/android_arm_armv7-a-neon_shared/myothernativelib.so -> arm/lib/myothernativelib.so
1016.intermediates/mysystemnativelib/android_arm64_armv8-a_shared/mysystemnativelib.so -> arm64/lib/mysystemnativelib.so
1017.intermediates/mysystemnativelib/android_arm_armv7-a-neon_shared/mysystemnativelib.so -> arm/lib/mysystemnativelib.so
1018`),
1019 )
1020}
1021
Paul Duffin9ab556f2019-12-11 18:42:17 +00001022func TestHostSnapshotWithCcSharedLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001023 t.Parallel()
Paul Duffind835daa2019-11-30 17:49:09 +00001024 result := testSdkWithCc(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +00001025 sdk {
1026 name: "mysdk",
1027 device_supported: false,
1028 host_supported: true,
1029 native_shared_libs: ["mynativelib"],
1030 }
1031
1032 cc_library_shared {
1033 name: "mynativelib",
1034 device_supported: false,
1035 host_supported: true,
1036 srcs: [
1037 "Test.cpp",
1038 "aidl/foo/bar/Test.aidl",
1039 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001040 export_include_dirs: ["myinclude"],
Paul Duffina80fdec2019-12-03 15:25:00 +00001041 aidl: {
1042 export_aidl_headers: true,
1043 },
Paul Duffina80fdec2019-12-03 15:25:00 +00001044 stl: "none",
Paul Duffin0c394f32020-03-05 14:09:58 +00001045 sdk_version: "minimum",
Paul Duffina80fdec2019-12-03 15:25:00 +00001046 }
1047 `)
1048
Paul Duffin36474d32021-03-12 12:19:43 +00001049 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001050 checkAndroidBpContents(`
Paul Duffina80fdec2019-12-03 15:25:00 +00001051// This is auto-generated. DO NOT EDIT.
1052
Spandan Dasa5e26d32024-03-06 14:04:36 +00001053apex_contributions_defaults {
1054 name: "mysdk.contributions",
1055 contents: ["prebuilt_mynativelib"],
1056}
1057
Paul Duffina80fdec2019-12-03 15:25:00 +00001058cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00001059 name: "mynativelib",
1060 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001061 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001062 apex_available: ["//apex_available:platform"],
Paul Duffina80fdec2019-12-03 15:25:00 +00001063 device_supported: false,
1064 host_supported: true,
Paul Duffin0c394f32020-03-05 14:09:58 +00001065 sdk_version: "minimum",
Paul Duffin0174d8d2020-03-11 18:42:08 +00001066 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001067 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001068 export_include_dirs: ["include/myinclude"],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001069 target: {
1070 host: {
1071 enabled: false,
1072 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001073 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001074 enabled: true,
Paul Duffina80fdec2019-12-03 15:25:00 +00001075 srcs: ["x86_64/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001076 export_include_dirs: ["x86_64/include_gen/mynativelib/linux_glibc_x86_64_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +00001077 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001078 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001079 enabled: true,
Paul Duffina80fdec2019-12-03 15:25:00 +00001080 srcs: ["x86/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001081 export_include_dirs: ["x86/include_gen/mynativelib/linux_glibc_x86_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +00001082 },
1083 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00001084 strip: {
1085 none: true,
1086 },
Paul Duffina80fdec2019-12-03 15:25:00 +00001087}
Paul Duffin75b902a2021-02-22 12:13:13 +00001088`),
Paul Duffina80fdec2019-12-03 15:25:00 +00001089 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001090myinclude/Test.h -> include/myinclude/Test.h
Paul Duffina80fdec2019-12-03 15:25:00 +00001091.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> x86_64/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +00001092.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
1093.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
1094.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 +00001095.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> x86/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +00001096.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
1097.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
1098.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 +00001099`),
1100 )
1101}
Paul Duffin9ab556f2019-12-11 18:42:17 +00001102
Paul Duffina04c1072020-03-02 10:16:35 +00001103func TestMultipleHostOsTypesSnapshotWithCcSharedLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001104 t.Parallel()
Paul Duffina04c1072020-03-02 10:16:35 +00001105 result := testSdkWithCc(t, `
1106 sdk {
1107 name: "mysdk",
1108 device_supported: false,
1109 host_supported: true,
1110 native_shared_libs: ["mynativelib"],
1111 target: {
1112 windows: {
1113 enabled: true,
1114 },
1115 },
1116 }
1117
1118 cc_library_shared {
1119 name: "mynativelib",
1120 device_supported: false,
1121 host_supported: true,
1122 srcs: [
1123 "Test.cpp",
1124 ],
Paul Duffina04c1072020-03-02 10:16:35 +00001125 stl: "none",
1126 target: {
1127 windows: {
1128 enabled: true,
1129 },
1130 },
1131 }
1132 `)
1133
Paul Duffin36474d32021-03-12 12:19:43 +00001134 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001135 checkAndroidBpContents(`
Paul Duffina04c1072020-03-02 10:16:35 +00001136// This is auto-generated. DO NOT EDIT.
1137
Spandan Dasa5e26d32024-03-06 14:04:36 +00001138apex_contributions_defaults {
1139 name: "mysdk.contributions",
1140 contents: ["prebuilt_mynativelib"],
1141}
1142
Paul Duffina04c1072020-03-02 10:16:35 +00001143cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00001144 name: "mynativelib",
1145 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001146 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001147 apex_available: ["//apex_available:platform"],
Paul Duffina04c1072020-03-02 10:16:35 +00001148 device_supported: false,
1149 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001150 stl: "none",
Paul Duffina04c1072020-03-02 10:16:35 +00001151 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001152 host: {
1153 enabled: false,
1154 },
Martin Stjernholm89238f42020-07-10 00:14:03 +01001155 linux_glibc: {
1156 compile_multilib: "both",
1157 },
Paul Duffina04c1072020-03-02 10:16:35 +00001158 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001159 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001160 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1161 },
1162 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001163 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001164 srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1165 },
Martin Stjernholm89238f42020-07-10 00:14:03 +01001166 windows: {
1167 compile_multilib: "64",
1168 },
Paul Duffina04c1072020-03-02 10:16:35 +00001169 windows_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001170 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001171 srcs: ["windows/x86_64/lib/mynativelib.dll"],
1172 },
1173 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00001174 strip: {
1175 none: true,
1176 },
Paul Duffina04c1072020-03-02 10:16:35 +00001177}
Paul Duffin75b902a2021-02-22 12:13:13 +00001178`),
Paul Duffina04c1072020-03-02 10:16:35 +00001179 checkAllCopyRules(`
1180.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1181.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1182.intermediates/mynativelib/windows_x86_64_shared/mynativelib.dll -> windows/x86_64/lib/mynativelib.dll
1183`),
1184 )
1185}
1186
Paul Duffin9ab556f2019-12-11 18:42:17 +00001187func TestSnapshotWithCcStaticLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001188 t.Parallel()
Paul Duffin9ab556f2019-12-11 18:42:17 +00001189 result := testSdkWithCc(t, `
Paul Duffine6029182019-12-16 17:43:48 +00001190 module_exports {
1191 name: "myexports",
Paul Duffin9ab556f2019-12-11 18:42:17 +00001192 native_static_libs: ["mynativelib"],
1193 }
1194
1195 cc_library_static {
1196 name: "mynativelib",
1197 srcs: [
1198 "Test.cpp",
1199 "aidl/foo/bar/Test.aidl",
1200 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001201 export_include_dirs: ["myinclude"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001202 aidl: {
1203 export_aidl_headers: true,
1204 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001205 stl: "none",
1206 }
1207 `)
1208
Paul Duffin36474d32021-03-12 12:19:43 +00001209 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001210 checkAndroidBpContents(`
Paul Duffin9ab556f2019-12-11 18:42:17 +00001211// This is auto-generated. DO NOT EDIT.
1212
Spandan Dasa5e26d32024-03-06 14:04:36 +00001213apex_contributions_defaults {
1214 name: "myexports.contributions",
1215 contents: ["prebuilt_mynativelib"],
1216}
1217
Paul Duffin9ab556f2019-12-11 18:42:17 +00001218cc_prebuilt_library_static {
Paul Duffin9ab556f2019-12-11 18:42:17 +00001219 name: "mynativelib",
1220 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001221 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001222 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +00001223 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001224 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001225 export_include_dirs: ["include/myinclude"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001226 arch: {
1227 arm64: {
1228 srcs: ["arm64/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001229 export_include_dirs: ["arm64/include_gen/mynativelib/android_arm64_armv8-a_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001230 },
1231 arm: {
1232 srcs: ["arm/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001233 export_include_dirs: ["arm/include_gen/mynativelib/android_arm_armv7-a-neon_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001234 },
1235 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001236}
Paul Duffin9ab556f2019-12-11 18:42:17 +00001237`),
1238 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001239myinclude/Test.h -> include/myinclude/Test.h
Colin Cross7113d202019-11-20 16:39:12 -08001240.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001241.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
1242.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
1243.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 -08001244.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001245.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
1246.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
1247.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 +00001248`),
1249 )
1250}
1251
1252func TestHostSnapshotWithCcStaticLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001253 t.Parallel()
Paul Duffin9ab556f2019-12-11 18:42:17 +00001254 result := testSdkWithCc(t, `
Paul Duffine6029182019-12-16 17:43:48 +00001255 module_exports {
1256 name: "myexports",
Paul Duffin9ab556f2019-12-11 18:42:17 +00001257 device_supported: false,
1258 host_supported: true,
1259 native_static_libs: ["mynativelib"],
1260 }
1261
1262 cc_library_static {
1263 name: "mynativelib",
1264 device_supported: false,
1265 host_supported: true,
1266 srcs: [
1267 "Test.cpp",
1268 "aidl/foo/bar/Test.aidl",
1269 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001270 export_include_dirs: ["myinclude"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001271 aidl: {
1272 export_aidl_headers: true,
1273 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001274 stl: "none",
1275 }
1276 `)
1277
Paul Duffin36474d32021-03-12 12:19:43 +00001278 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001279 checkAndroidBpContents(`
Paul Duffin9ab556f2019-12-11 18:42:17 +00001280// This is auto-generated. DO NOT EDIT.
1281
Spandan Dasa5e26d32024-03-06 14:04:36 +00001282apex_contributions_defaults {
1283 name: "myexports.contributions",
1284 contents: ["prebuilt_mynativelib"],
1285}
1286
Paul Duffin9ab556f2019-12-11 18:42:17 +00001287cc_prebuilt_library_static {
Paul Duffin75b902a2021-02-22 12:13:13 +00001288 name: "mynativelib",
1289 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001290 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001291 apex_available: ["//apex_available:platform"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001292 device_supported: false,
1293 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001294 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001295 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001296 export_include_dirs: ["include/myinclude"],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001297 target: {
1298 host: {
1299 enabled: false,
1300 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001301 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001302 enabled: true,
Paul Duffin9ab556f2019-12-11 18:42:17 +00001303 srcs: ["x86_64/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001304 export_include_dirs: ["x86_64/include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001305 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001306 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001307 enabled: true,
Paul Duffin9ab556f2019-12-11 18:42:17 +00001308 srcs: ["x86/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001309 export_include_dirs: ["x86/include_gen/mynativelib/linux_glibc_x86_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001310 },
1311 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001312}
Paul Duffin75b902a2021-02-22 12:13:13 +00001313`),
Paul Duffin9ab556f2019-12-11 18:42:17 +00001314 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001315myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin9ab556f2019-12-11 18:42:17 +00001316.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001317.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
1318.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
1319.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 +00001320.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> x86/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001321.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
1322.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
1323.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 +00001324`),
1325 )
1326}
Paul Duffin13ad94f2020-02-19 16:19:27 +00001327
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001328func TestSnapshotWithCcLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001329 t.Parallel()
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001330 result := testSdkWithCc(t, `
1331 module_exports {
1332 name: "myexports",
1333 native_libs: ["mynativelib"],
1334 }
1335
1336 cc_library {
1337 name: "mynativelib",
1338 srcs: [
1339 "Test.cpp",
1340 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001341 export_include_dirs: ["myinclude"],
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001342 stl: "none",
Paul Duffind6abaa72020-09-07 16:39:22 +01001343 recovery_available: true,
Paul Duffind1edbd42020-08-13 19:45:31 +01001344 vendor_available: true,
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001345 }
1346 `)
1347
Paul Duffin36474d32021-03-12 12:19:43 +00001348 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001349 checkAndroidBpContents(`
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001350// This is auto-generated. DO NOT EDIT.
1351
Spandan Dasa5e26d32024-03-06 14:04:36 +00001352apex_contributions_defaults {
1353 name: "myexports.contributions",
1354 contents: ["prebuilt_mynativelib"],
1355}
1356
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001357cc_prebuilt_library {
Paul Duffin75b902a2021-02-22 12:13:13 +00001358 name: "mynativelib",
1359 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001360 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001361 apex_available: ["//apex_available:platform"],
Paul Duffind1edbd42020-08-13 19:45:31 +01001362 vendor_available: true,
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001363 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001364 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001365 export_include_dirs: ["include/myinclude"],
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001366 arch: {
1367 arm64: {
1368 static: {
1369 srcs: ["arm64/lib/mynativelib.a"],
1370 },
1371 shared: {
1372 srcs: ["arm64/lib/mynativelib.so"],
1373 },
1374 },
1375 arm: {
1376 static: {
1377 srcs: ["arm/lib/mynativelib.a"],
1378 },
1379 shared: {
1380 srcs: ["arm/lib/mynativelib.so"],
1381 },
1382 },
1383 },
1384}
Paul Duffin75b902a2021-02-22 12:13:13 +00001385`),
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001386 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001387myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001388.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a
1389.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
1390.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a
Paul Duffin1822a0a2021-03-21 12:56:33 +00001391.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
1392`),
1393 // TODO(b/183315522): Remove this and fix the issue.
1394 snapshotTestErrorHandler(checkSnapshotPreferredWithSource, android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\Qunrecognized property "arch.arm.shared.export_include_dirs"\E`)),
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001395 )
1396}
1397
Liz Kammer96320df2022-05-12 20:40:00 -04001398func TestSnapshotSameLibraryWithNativeLibsAndNativeSharedLib(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001399 t.Parallel()
Liz Kammer96320df2022-05-12 20:40:00 -04001400 result := testSdkWithCc(t, `
1401 module_exports {
1402 host_supported: true,
1403 name: "myexports",
1404 target: {
1405 android: {
1406 native_shared_libs: [
1407 "mynativelib",
1408 ],
1409 },
1410 not_windows: {
1411 native_libs: [
1412 "mynativelib",
1413 ],
1414 },
1415 },
1416 }
1417
1418 cc_library {
1419 name: "mynativelib",
1420 host_supported: true,
1421 srcs: [
1422 "Test.cpp",
1423 ],
1424 stl: "none",
1425 recovery_available: true,
1426 vendor_available: true,
1427 }
1428 `)
1429
1430 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001431 checkAndroidBpContents(`
Liz Kammer96320df2022-05-12 20:40:00 -04001432// This is auto-generated. DO NOT EDIT.
1433
Spandan Dasa5e26d32024-03-06 14:04:36 +00001434apex_contributions_defaults {
1435 name: "myexports.contributions",
1436 contents: ["prebuilt_mynativelib"],
1437}
1438
Liz Kammer96320df2022-05-12 20:40:00 -04001439cc_prebuilt_library {
1440 name: "mynativelib",
1441 prefer: false,
1442 visibility: ["//visibility:public"],
1443 apex_available: ["//apex_available:platform"],
1444 host_supported: true,
1445 vendor_available: true,
1446 stl: "none",
1447 compile_multilib: "both",
1448 target: {
1449 host: {
1450 enabled: false,
1451 },
1452 android_arm64: {
1453 shared: {
1454 srcs: ["android/arm64/lib/mynativelib.so"],
1455 },
1456 static: {
1457 enabled: false,
1458 },
1459 },
1460 android_arm: {
1461 shared: {
1462 srcs: ["android/arm/lib/mynativelib.so"],
1463 },
1464 static: {
1465 enabled: false,
1466 },
1467 },
1468 linux_glibc_x86_64: {
1469 enabled: true,
1470 static: {
1471 srcs: ["linux_glibc/x86_64/lib/mynativelib.a"],
1472 },
1473 shared: {
1474 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1475 },
1476 },
1477 linux_glibc_x86: {
1478 enabled: true,
1479 static: {
1480 srcs: ["linux_glibc/x86/lib/mynativelib.a"],
1481 },
1482 shared: {
1483 srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1484 },
1485 },
1486 },
1487}
1488`),
1489 checkAllCopyRules(`
1490.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so
1491.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so
1492.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> linux_glibc/x86_64/lib/mynativelib.a
1493.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1494.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> linux_glibc/x86/lib/mynativelib.a
1495.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1496`),
1497 )
1498}
1499
1500func TestSnapshotSameLibraryWithAndroidNativeLibsAndHostNativeSharedLib(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001501 t.Parallel()
Liz Kammer96320df2022-05-12 20:40:00 -04001502 result := testSdkWithCc(t, `
1503 module_exports {
1504 host_supported: true,
1505 name: "myexports",
1506 target: {
1507 android: {
1508 native_libs: [
1509 "mynativelib",
1510 ],
1511 },
1512 not_windows: {
1513 native_shared_libs: [
1514 "mynativelib",
1515 ],
1516 },
1517 },
1518 }
1519
1520 cc_library {
1521 name: "mynativelib",
1522 host_supported: true,
1523 srcs: [
1524 "Test.cpp",
1525 ],
1526 stl: "none",
1527 recovery_available: true,
1528 vendor_available: true,
1529 }
1530 `)
1531
1532 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001533 checkAndroidBpContents(`
Liz Kammer96320df2022-05-12 20:40:00 -04001534// This is auto-generated. DO NOT EDIT.
1535
Spandan Dasa5e26d32024-03-06 14:04:36 +00001536apex_contributions_defaults {
1537 name: "myexports.contributions",
1538 contents: ["prebuilt_mynativelib"],
1539}
1540
Liz Kammer96320df2022-05-12 20:40:00 -04001541cc_prebuilt_library {
1542 name: "mynativelib",
1543 prefer: false,
1544 visibility: ["//visibility:public"],
1545 apex_available: ["//apex_available:platform"],
1546 host_supported: true,
1547 vendor_available: true,
1548 stl: "none",
1549 compile_multilib: "both",
1550 target: {
1551 host: {
1552 enabled: false,
1553 },
1554 android_arm64: {
1555 static: {
1556 srcs: ["android/arm64/lib/mynativelib.a"],
1557 },
1558 shared: {
1559 srcs: ["android/arm64/lib/mynativelib.so"],
1560 },
1561 },
1562 android_arm: {
1563 static: {
1564 srcs: ["android/arm/lib/mynativelib.a"],
1565 },
1566 shared: {
1567 srcs: ["android/arm/lib/mynativelib.so"],
1568 },
1569 },
1570 linux_glibc_x86_64: {
1571 enabled: true,
1572 shared: {
1573 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1574 },
1575 static: {
1576 enabled: false,
1577 },
1578 },
1579 linux_glibc_x86: {
1580 enabled: true,
1581 shared: {
1582 srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1583 },
1584 static: {
1585 enabled: false,
1586 },
1587 },
1588 },
1589}
1590`),
1591 checkAllCopyRules(`
1592.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> android/arm64/lib/mynativelib.a
1593.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so
1594.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> android/arm/lib/mynativelib.a
1595.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so
1596.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1597.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1598`),
1599 )
1600}
1601
1602func TestSnapshotSameLibraryWithNativeStaticLibsAndNativeSharedLib(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001603 t.Parallel()
Liz Kammer96320df2022-05-12 20:40:00 -04001604 testSdkError(t, "Incompatible member types", `
1605 module_exports {
1606 host_supported: true,
1607 name: "myexports",
1608 target: {
1609 android: {
1610 native_shared_libs: [
1611 "mynativelib",
1612 ],
1613 },
1614 not_windows: {
1615 native_static_libs: [
1616 "mynativelib",
1617 ],
1618 },
1619 },
1620 }
1621
1622 cc_library {
1623 name: "mynativelib",
1624 host_supported: true,
1625 srcs: [
1626 ],
1627 stl: "none",
1628 recovery_available: true,
1629 vendor_available: true,
1630 }
1631 `)
1632}
1633
Paul Duffin13ad94f2020-02-19 16:19:27 +00001634func TestHostSnapshotWithMultiLib64(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001635 t.Parallel()
Paul Duffin13ad94f2020-02-19 16:19:27 +00001636 result := testSdkWithCc(t, `
1637 module_exports {
1638 name: "myexports",
1639 device_supported: false,
1640 host_supported: true,
1641 target: {
1642 host: {
1643 compile_multilib: "64",
1644 },
1645 },
1646 native_static_libs: ["mynativelib"],
1647 }
1648
1649 cc_library_static {
1650 name: "mynativelib",
1651 device_supported: false,
1652 host_supported: true,
1653 srcs: [
1654 "Test.cpp",
1655 "aidl/foo/bar/Test.aidl",
1656 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001657 export_include_dirs: ["myinclude"],
Paul Duffin13ad94f2020-02-19 16:19:27 +00001658 aidl: {
1659 export_aidl_headers: true,
1660 },
Paul Duffin13ad94f2020-02-19 16:19:27 +00001661 stl: "none",
1662 }
1663 `)
1664
Paul Duffin36474d32021-03-12 12:19:43 +00001665 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001666 checkAndroidBpContents(`
Paul Duffin13ad94f2020-02-19 16:19:27 +00001667// This is auto-generated. DO NOT EDIT.
1668
Spandan Dasa5e26d32024-03-06 14:04:36 +00001669apex_contributions_defaults {
1670 name: "myexports.contributions",
1671 contents: ["prebuilt_mynativelib"],
1672}
1673
Paul Duffin13ad94f2020-02-19 16:19:27 +00001674cc_prebuilt_library_static {
Paul Duffin75b902a2021-02-22 12:13:13 +00001675 name: "mynativelib",
1676 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001677 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001678 apex_available: ["//apex_available:platform"],
Paul Duffin13ad94f2020-02-19 16:19:27 +00001679 device_supported: false,
1680 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001681 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001682 compile_multilib: "64",
Paul Duffin7a7d0672021-02-17 12:17:40 +00001683 export_include_dirs: [
1684 "include/myinclude",
1685 "include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl",
1686 ],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001687 target: {
1688 host: {
1689 enabled: false,
1690 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001691 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001692 enabled: true,
Paul Duffin13ad94f2020-02-19 16:19:27 +00001693 srcs: ["x86_64/lib/mynativelib.a"],
Paul Duffin13ad94f2020-02-19 16:19:27 +00001694 },
1695 },
Paul Duffin13ad94f2020-02-19 16:19:27 +00001696}
Paul Duffin75b902a2021-02-22 12:13:13 +00001697`),
Paul Duffin13ad94f2020-02-19 16:19:27 +00001698 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001699myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin7a7d0672021-02-17 12:17:40 +00001700.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
1701.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
1702.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 +00001703.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a
Paul Duffin13ad94f2020-02-19 16:19:27 +00001704`),
1705 )
1706}
Paul Duffin91756d22020-02-21 16:29:57 +00001707
1708func TestSnapshotWithCcHeadersLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001709 t.Parallel()
Paul Duffin91756d22020-02-21 16:29:57 +00001710 result := testSdkWithCc(t, `
1711 sdk {
1712 name: "mysdk",
1713 native_header_libs: ["mynativeheaders"],
1714 }
1715
1716 cc_library_headers {
1717 name: "mynativeheaders",
Paul Duffin86b02a72021-02-22 11:50:04 +00001718 export_include_dirs: ["myinclude"],
Paul Duffin91756d22020-02-21 16:29:57 +00001719 stl: "none",
1720 }
1721 `)
1722
Paul Duffin36474d32021-03-12 12:19:43 +00001723 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001724 checkAndroidBpContents(`
Paul Duffin91756d22020-02-21 16:29:57 +00001725// This is auto-generated. DO NOT EDIT.
1726
Spandan Dasa5e26d32024-03-06 14:04:36 +00001727apex_contributions_defaults {
1728 name: "mysdk.contributions",
1729 contents: ["prebuilt_mynativeheaders"],
1730}
1731
Paul Duffin91756d22020-02-21 16:29:57 +00001732cc_prebuilt_library_headers {
Paul Duffin91756d22020-02-21 16:29:57 +00001733 name: "mynativeheaders",
1734 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001735 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001736 apex_available: ["//apex_available:platform"],
Paul Duffin91756d22020-02-21 16:29:57 +00001737 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001738 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001739 export_include_dirs: ["include/myinclude"],
Paul Duffin91756d22020-02-21 16:29:57 +00001740}
Paul Duffin91756d22020-02-21 16:29:57 +00001741`),
1742 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001743myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin91756d22020-02-21 16:29:57 +00001744`),
1745 )
1746}
1747
Paul Duffin93b750e2019-11-19 19:44:10 +00001748func TestSnapshotWithCcHeadersLibraryAndNativeBridgeSupport(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001749 t.Parallel()
Paul Duffin93b750e2019-11-19 19:44:10 +00001750 result := android.GroupFixturePreparers(
1751 cc.PrepareForTestWithCcDefaultModules,
1752 PrepareForTestWithSdkBuildComponents,
1753 ccTestFs.AddToFixture(),
1754 prepareForTestWithNativeBridgeTarget,
Spandan Dasa5e26d32024-03-06 14:04:36 +00001755 android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
1756 android.RegisterApexContributionsBuildComponents(ctx)
1757 }),
Paul Duffin93b750e2019-11-19 19:44:10 +00001758 ).RunTestWithBp(t, `
1759 sdk {
1760 name: "mysdk",
1761 native_header_libs: ["mynativeheaders"],
1762 traits: {
1763 native_bridge_support: ["mynativeheaders"],
1764 },
1765 }
1766
1767 cc_library_headers {
1768 name: "mynativeheaders",
1769 export_include_dirs: ["myinclude"],
1770 stl: "none",
1771 system_shared_libs: [],
1772 native_bridge_supported: true,
1773 }
1774 `)
1775
1776 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001777 checkAndroidBpContents(`
Paul Duffin93b750e2019-11-19 19:44:10 +00001778// This is auto-generated. DO NOT EDIT.
1779
Spandan Dasa5e26d32024-03-06 14:04:36 +00001780apex_contributions_defaults {
1781 name: "mysdk.contributions",
1782 contents: ["prebuilt_mynativeheaders"],
1783}
1784
Paul Duffin93b750e2019-11-19 19:44:10 +00001785cc_prebuilt_library_headers {
1786 name: "mynativeheaders",
1787 prefer: false,
1788 visibility: ["//visibility:public"],
1789 apex_available: ["//apex_available:platform"],
1790 native_bridge_supported: true,
1791 stl: "none",
1792 compile_multilib: "both",
1793 system_shared_libs: [],
1794 export_include_dirs: ["include/myinclude"],
1795}
1796`),
1797 checkAllCopyRules(`
1798myinclude/Test.h -> include/myinclude/Test.h
1799`),
1800 )
1801}
1802
1803// TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties verifies that when a
1804// module that has different output files for a native bridge target requests the native bridge
1805// variants are copied into the sdk snapshot that it reports an error.
1806func TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001807 t.Parallel()
Paul Duffin93b750e2019-11-19 19:44:10 +00001808 android.GroupFixturePreparers(
1809 cc.PrepareForTestWithCcDefaultModules,
1810 PrepareForTestWithSdkBuildComponents,
1811 ccTestFs.AddToFixture(),
1812 prepareForTestWithNativeBridgeTarget,
1813 ).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
1814 `\QArchitecture variant "arm64_native_bridge" of sdk member "mynativeheaders" has properties distinct from other variants; this is not yet supported. The properties are:
1815 export_include_dirs: [
1816 "arm64_native_bridge/include/myinclude_nativebridge",
1817 "arm64_native_bridge/include/myinclude",
1818 ],\E`)).
1819 RunTestWithBp(t, `
1820 sdk {
1821 name: "mysdk",
1822 native_header_libs: ["mynativeheaders"],
1823 traits: {
1824 native_bridge_support: ["mynativeheaders"],
1825 },
1826 }
1827
1828 cc_library_headers {
1829 name: "mynativeheaders",
1830 export_include_dirs: ["myinclude"],
1831 stl: "none",
1832 system_shared_libs: [],
1833 native_bridge_supported: true,
1834 target: {
1835 native_bridge: {
1836 export_include_dirs: ["myinclude_nativebridge"],
1837 },
1838 },
1839 }
1840 `)
1841}
1842
Paul Duffin63696222021-09-06 10:28:34 +01001843func TestSnapshotWithCcHeadersLibraryAndImageVariants(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001844 t.Parallel()
Paul Duffin63696222021-09-06 10:28:34 +01001845 testImageVariant := func(t *testing.T, property, trait string) {
1846 result := android.GroupFixturePreparers(
1847 cc.PrepareForTestWithCcDefaultModules,
1848 PrepareForTestWithSdkBuildComponents,
1849 ccTestFs.AddToFixture(),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001850 android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
1851 android.RegisterApexContributionsBuildComponents(ctx)
1852 }),
Paul Duffin63696222021-09-06 10:28:34 +01001853 ).RunTestWithBp(t, fmt.Sprintf(`
1854 sdk {
1855 name: "mysdk",
1856 native_header_libs: ["mynativeheaders"],
1857 traits: {
1858 %s: ["mynativeheaders"],
1859 },
1860 }
1861
1862 cc_library_headers {
1863 name: "mynativeheaders",
1864 export_include_dirs: ["myinclude"],
1865 stl: "none",
1866 system_shared_libs: [],
1867 %s: true,
1868 }
1869 `, trait, property))
1870
1871 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001872 checkAndroidBpContents(fmt.Sprintf(`
Paul Duffin63696222021-09-06 10:28:34 +01001873// This is auto-generated. DO NOT EDIT.
1874
Spandan Dasa5e26d32024-03-06 14:04:36 +00001875apex_contributions_defaults {
1876 name: "mysdk.contributions",
1877 contents: ["prebuilt_mynativeheaders"],
1878}
1879
Paul Duffin63696222021-09-06 10:28:34 +01001880cc_prebuilt_library_headers {
1881 name: "mynativeheaders",
1882 prefer: false,
1883 visibility: ["//visibility:public"],
1884 apex_available: ["//apex_available:platform"],
1885 %s: true,
1886 stl: "none",
1887 compile_multilib: "both",
1888 system_shared_libs: [],
1889 export_include_dirs: ["include/myinclude"],
1890}
1891`, property)),
1892 checkAllCopyRules(`
1893myinclude/Test.h -> include/myinclude/Test.h
1894`),
1895 )
1896 }
1897
Paul Duffin12a0a312021-09-15 17:25:10 +01001898 t.Run("ramdisk", func(t *testing.T) {
1899 testImageVariant(t, "ramdisk_available", "ramdisk_image_required")
1900 })
1901
Paul Duffin63696222021-09-06 10:28:34 +01001902 t.Run("recovery", func(t *testing.T) {
1903 testImageVariant(t, "recovery_available", "recovery_image_required")
1904 })
1905}
1906
Paul Duffin91756d22020-02-21 16:29:57 +00001907func TestHostSnapshotWithCcHeadersLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001908 t.Parallel()
Paul Duffin91756d22020-02-21 16:29:57 +00001909 result := testSdkWithCc(t, `
1910 sdk {
1911 name: "mysdk",
1912 device_supported: false,
1913 host_supported: true,
1914 native_header_libs: ["mynativeheaders"],
1915 }
1916
1917 cc_library_headers {
1918 name: "mynativeheaders",
1919 device_supported: false,
1920 host_supported: true,
Paul Duffin86b02a72021-02-22 11:50:04 +00001921 export_include_dirs: ["myinclude"],
Paul Duffin91756d22020-02-21 16:29:57 +00001922 stl: "none",
1923 }
1924 `)
1925
Paul Duffin36474d32021-03-12 12:19:43 +00001926 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001927 checkAndroidBpContents(`
Paul Duffin91756d22020-02-21 16:29:57 +00001928// This is auto-generated. DO NOT EDIT.
1929
Spandan Dasa5e26d32024-03-06 14:04:36 +00001930apex_contributions_defaults {
1931 name: "mysdk.contributions",
1932 contents: ["prebuilt_mynativeheaders"],
1933}
1934
Paul Duffin91756d22020-02-21 16:29:57 +00001935cc_prebuilt_library_headers {
Paul Duffin75b902a2021-02-22 12:13:13 +00001936 name: "mynativeheaders",
1937 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001938 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001939 apex_available: ["//apex_available:platform"],
Paul Duffin91756d22020-02-21 16:29:57 +00001940 device_supported: false,
1941 host_supported: true,
Paul Duffin91756d22020-02-21 16:29:57 +00001942 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001943 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001944 export_include_dirs: ["include/myinclude"],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001945 target: {
1946 host: {
1947 enabled: false,
1948 },
Jiyong Park8fe14e62020-10-19 22:47:34 +09001949 linux_glibc_x86_64: {
1950 enabled: true,
1951 },
1952 linux_glibc_x86: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001953 enabled: true,
1954 },
1955 },
Paul Duffin91756d22020-02-21 16:29:57 +00001956}
Paul Duffin75b902a2021-02-22 12:13:13 +00001957`),
Paul Duffin91756d22020-02-21 16:29:57 +00001958 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001959myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin91756d22020-02-21 16:29:57 +00001960`),
1961 )
1962}
Paul Duffina04c1072020-03-02 10:16:35 +00001963
1964func TestDeviceAndHostSnapshotWithCcHeadersLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08001965 t.Parallel()
Paul Duffina04c1072020-03-02 10:16:35 +00001966 result := testSdkWithCc(t, `
1967 sdk {
1968 name: "mysdk",
1969 host_supported: true,
1970 native_header_libs: ["mynativeheaders"],
1971 }
1972
1973 cc_library_headers {
1974 name: "mynativeheaders",
1975 host_supported: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001976 stl: "none",
Paul Duffin86b02a72021-02-22 11:50:04 +00001977 export_system_include_dirs: ["myinclude"],
Paul Duffina04c1072020-03-02 10:16:35 +00001978 target: {
1979 android: {
Paul Duffin86b02a72021-02-22 11:50:04 +00001980 export_include_dirs: ["myinclude-android"],
Paul Duffina04c1072020-03-02 10:16:35 +00001981 },
1982 host: {
Paul Duffin86b02a72021-02-22 11:50:04 +00001983 export_include_dirs: ["myinclude-host"],
Paul Duffina04c1072020-03-02 10:16:35 +00001984 },
1985 },
1986 }
1987 `)
1988
Paul Duffin36474d32021-03-12 12:19:43 +00001989 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001990 checkAndroidBpContents(`
Paul Duffina04c1072020-03-02 10:16:35 +00001991// This is auto-generated. DO NOT EDIT.
1992
Spandan Dasa5e26d32024-03-06 14:04:36 +00001993apex_contributions_defaults {
1994 name: "mysdk.contributions",
1995 contents: ["prebuilt_mynativeheaders"],
1996}
1997
Paul Duffina04c1072020-03-02 10:16:35 +00001998cc_prebuilt_library_headers {
Paul Duffin75b902a2021-02-22 12:13:13 +00001999 name: "mynativeheaders",
2000 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002001 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002002 apex_available: ["//apex_available:platform"],
Paul Duffina04c1072020-03-02 10:16:35 +00002003 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00002004 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01002005 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00002006 export_system_include_dirs: ["common_os/include/myinclude"],
Paul Duffina04c1072020-03-02 10:16:35 +00002007 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002008 host: {
2009 enabled: false,
2010 },
Paul Duffina04c1072020-03-02 10:16:35 +00002011 android: {
Paul Duffin86b02a72021-02-22 11:50:04 +00002012 export_include_dirs: ["android/include/myinclude-android"],
Paul Duffina04c1072020-03-02 10:16:35 +00002013 },
2014 linux_glibc: {
Paul Duffin86b02a72021-02-22 11:50:04 +00002015 export_include_dirs: ["linux_glibc/include/myinclude-host"],
Paul Duffina04c1072020-03-02 10:16:35 +00002016 },
Jiyong Park8fe14e62020-10-19 22:47:34 +09002017 linux_glibc_x86_64: {
2018 enabled: true,
2019 },
2020 linux_glibc_x86: {
2021 enabled: true,
2022 },
Paul Duffina04c1072020-03-02 10:16:35 +00002023 },
Paul Duffina04c1072020-03-02 10:16:35 +00002024}
Paul Duffin75b902a2021-02-22 12:13:13 +00002025`),
Paul Duffina04c1072020-03-02 10:16:35 +00002026 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00002027myinclude/Test.h -> common_os/include/myinclude/Test.h
2028myinclude-android/AndroidTest.h -> android/include/myinclude-android/AndroidTest.h
2029myinclude-host/HostTest.h -> linux_glibc/include/myinclude-host/HostTest.h
Paul Duffina04c1072020-03-02 10:16:35 +00002030`),
2031 )
2032}
Martin Stjernholm10566a02020-03-24 01:19:52 +00002033
2034func TestSystemSharedLibPropagation(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002035 t.Parallel()
Martin Stjernholm10566a02020-03-24 01:19:52 +00002036 result := testSdkWithCc(t, `
2037 sdk {
2038 name: "mysdk",
Colin Cross6b8f4252021-07-22 11:39:44 -07002039 native_shared_libs: ["sslnil", "sslempty", "sslnonempty"],
Martin Stjernholm10566a02020-03-24 01:19:52 +00002040 }
2041
2042 cc_library {
2043 name: "sslnil",
2044 host_supported: true,
2045 }
2046
2047 cc_library {
2048 name: "sslempty",
2049 system_shared_libs: [],
2050 }
2051
2052 cc_library {
2053 name: "sslnonempty",
2054 system_shared_libs: ["sslnil"],
2055 }
2056 `)
2057
Paul Duffin36474d32021-03-12 12:19:43 +00002058 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002059 checkAndroidBpContents(`
Martin Stjernholm10566a02020-03-24 01:19:52 +00002060// This is auto-generated. DO NOT EDIT.
2061
Spandan Dasa5e26d32024-03-06 14:04:36 +00002062apex_contributions_defaults {
2063 name: "mysdk.contributions",
2064 contents: [
2065 "prebuilt_sslnil",
2066 "prebuilt_sslempty",
2067 "prebuilt_sslnonempty",
2068 ],
2069}
2070
Martin Stjernholm10566a02020-03-24 01:19:52 +00002071cc_prebuilt_library_shared {
Martin Stjernholm10566a02020-03-24 01:19:52 +00002072 name: "sslnil",
2073 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002074 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002075 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01002076 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00002077 arch: {
2078 arm64: {
2079 srcs: ["arm64/lib/sslnil.so"],
2080 },
2081 arm: {
2082 srcs: ["arm/lib/sslnil.so"],
2083 },
2084 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002085 strip: {
2086 none: true,
2087 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002088}
2089
2090cc_prebuilt_library_shared {
Martin Stjernholm10566a02020-03-24 01:19:52 +00002091 name: "sslempty",
2092 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002093 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002094 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01002095 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00002096 system_shared_libs: [],
2097 arch: {
2098 arm64: {
2099 srcs: ["arm64/lib/sslempty.so"],
2100 },
2101 arm: {
2102 srcs: ["arm/lib/sslempty.so"],
2103 },
2104 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002105 strip: {
2106 none: true,
2107 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002108}
2109
2110cc_prebuilt_library_shared {
Martin Stjernholm10566a02020-03-24 01:19:52 +00002111 name: "sslnonempty",
2112 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002113 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002114 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01002115 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00002116 system_shared_libs: ["sslnil"],
2117 arch: {
2118 arm64: {
2119 srcs: ["arm64/lib/sslnonempty.so"],
2120 },
2121 arm: {
2122 srcs: ["arm/lib/sslnonempty.so"],
2123 },
2124 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002125 strip: {
2126 none: true,
2127 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002128}
Colin Cross6b8f4252021-07-22 11:39:44 -07002129`))
Martin Stjernholm10566a02020-03-24 01:19:52 +00002130
2131 result = testSdkWithCc(t, `
2132 sdk {
2133 name: "mysdk",
2134 host_supported: true,
Colin Cross6b8f4252021-07-22 11:39:44 -07002135 native_shared_libs: ["sslvariants"],
Martin Stjernholm10566a02020-03-24 01:19:52 +00002136 }
2137
2138 cc_library {
2139 name: "sslvariants",
2140 host_supported: true,
2141 target: {
2142 android: {
2143 system_shared_libs: [],
2144 },
2145 },
2146 }
2147 `)
2148
Paul Duffin36474d32021-03-12 12:19:43 +00002149 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002150 checkAndroidBpContents(`
Martin Stjernholm10566a02020-03-24 01:19:52 +00002151// This is auto-generated. DO NOT EDIT.
2152
Spandan Dasa5e26d32024-03-06 14:04:36 +00002153apex_contributions_defaults {
2154 name: "mysdk.contributions",
2155 contents: ["prebuilt_sslvariants"],
2156}
2157
Martin Stjernholm10566a02020-03-24 01:19:52 +00002158cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00002159 name: "sslvariants",
2160 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002161 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002162 apex_available: ["//apex_available:platform"],
Martin Stjernholm10566a02020-03-24 01:19:52 +00002163 host_supported: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +01002164 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00002165 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002166 host: {
2167 enabled: false,
2168 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002169 android: {
2170 system_shared_libs: [],
2171 },
2172 android_arm64: {
2173 srcs: ["android/arm64/lib/sslvariants.so"],
2174 },
2175 android_arm: {
2176 srcs: ["android/arm/lib/sslvariants.so"],
2177 },
2178 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002179 enabled: true,
Martin Stjernholm10566a02020-03-24 01:19:52 +00002180 srcs: ["linux_glibc/x86_64/lib/sslvariants.so"],
2181 },
2182 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002183 enabled: true,
Martin Stjernholm10566a02020-03-24 01:19:52 +00002184 srcs: ["linux_glibc/x86/lib/sslvariants.so"],
2185 },
2186 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002187 strip: {
2188 none: true,
2189 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00002190}
Paul Duffin75b902a2021-02-22 12:13:13 +00002191`),
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002192 )
Martin Stjernholm10566a02020-03-24 01:19:52 +00002193}
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002194
2195func TestStubsLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002196 t.Parallel()
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002197 result := testSdkWithCc(t, `
2198 sdk {
2199 name: "mysdk",
2200 native_shared_libs: ["stubslib"],
2201 }
2202
2203 cc_library {
Martin Stjernholmcc330d62020-04-21 20:45:35 +01002204 name: "internaldep",
2205 }
2206
2207 cc_library {
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002208 name: "stubslib",
Martin Stjernholmcc330d62020-04-21 20:45:35 +01002209 shared_libs: ["internaldep"],
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002210 stubs: {
2211 symbol_file: "some/where/stubslib.map.txt",
2212 versions: ["1", "2", "3"],
2213 },
2214 }
2215 `)
2216
Paul Duffin36474d32021-03-12 12:19:43 +00002217 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002218 checkAndroidBpContents(`
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002219// This is auto-generated. DO NOT EDIT.
2220
Spandan Dasa5e26d32024-03-06 14:04:36 +00002221apex_contributions_defaults {
2222 name: "mysdk.contributions",
2223 contents: ["prebuilt_stubslib"],
2224}
2225
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002226cc_prebuilt_library_shared {
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002227 name: "stubslib",
2228 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002229 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002230 apex_available: ["//apex_available:platform"],
Colin Cross694fced2024-06-25 14:56:42 -07002231 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01002232 compile_multilib: "both",
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002233 stubs: {
Martin Stjernholm618b6712020-09-24 16:53:04 +01002234 versions: [
2235 "1",
2236 "2",
2237 "3",
Jiyong Parkd4a3a132021-03-17 20:21:35 +09002238 "current",
Martin Stjernholm618b6712020-09-24 16:53:04 +01002239 ],
Spandan Dase20c56c2024-07-23 21:34:24 +00002240 symbol_file: "stubslib.map.txt",
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002241 },
2242 arch: {
2243 arm64: {
2244 srcs: ["arm64/lib/stubslib.so"],
2245 },
2246 arm: {
2247 srcs: ["arm/lib/stubslib.so"],
2248 },
2249 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002250 strip: {
2251 none: true,
2252 },
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002253}
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002254`))
2255}
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002256
2257func TestDeviceAndHostSnapshotWithStubsLibrary(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002258 t.Parallel()
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002259 result := testSdkWithCc(t, `
2260 sdk {
2261 name: "mysdk",
2262 host_supported: true,
2263 native_shared_libs: ["stubslib"],
2264 }
2265
2266 cc_library {
2267 name: "internaldep",
2268 host_supported: true,
2269 }
2270
2271 cc_library {
2272 name: "stubslib",
2273 host_supported: true,
2274 shared_libs: ["internaldep"],
2275 stubs: {
2276 symbol_file: "some/where/stubslib.map.txt",
2277 versions: ["1", "2", "3"],
2278 },
2279 }
2280 `)
2281
Paul Duffin36474d32021-03-12 12:19:43 +00002282 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002283 checkAndroidBpContents(`
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002284// This is auto-generated. DO NOT EDIT.
2285
Spandan Dasa5e26d32024-03-06 14:04:36 +00002286apex_contributions_defaults {
2287 name: "mysdk.contributions",
2288 contents: ["prebuilt_stubslib"],
2289}
2290
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002291cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00002292 name: "stubslib",
2293 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002294 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002295 apex_available: ["//apex_available:platform"],
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002296 host_supported: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +01002297 compile_multilib: "both",
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002298 stubs: {
Martin Stjernholm618b6712020-09-24 16:53:04 +01002299 versions: [
2300 "1",
2301 "2",
2302 "3",
Jiyong Parkd4a3a132021-03-17 20:21:35 +09002303 "current",
Martin Stjernholm618b6712020-09-24 16:53:04 +01002304 ],
Spandan Dase20c56c2024-07-23 21:34:24 +00002305 symbol_file: "stubslib.map.txt",
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002306 },
2307 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002308 host: {
2309 enabled: false,
2310 },
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002311 android_arm64: {
2312 srcs: ["android/arm64/lib/stubslib.so"],
2313 },
2314 android_arm: {
2315 srcs: ["android/arm/lib/stubslib.so"],
2316 },
2317 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002318 enabled: true,
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002319 srcs: ["linux_glibc/x86_64/lib/stubslib.so"],
2320 },
2321 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002322 enabled: true,
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002323 srcs: ["linux_glibc/x86/lib/stubslib.so"],
2324 },
2325 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002326 strip: {
2327 none: true,
2328 },
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002329}
Paul Duffin75b902a2021-02-22 12:13:13 +00002330`),
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002331 )
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002332}
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002333
2334func TestUniqueHostSoname(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002335 t.Parallel()
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002336 result := testSdkWithCc(t, `
2337 sdk {
2338 name: "mysdk",
2339 host_supported: true,
2340 native_shared_libs: ["mylib"],
2341 }
2342
2343 cc_library {
2344 name: "mylib",
2345 host_supported: true,
2346 unique_host_soname: true,
2347 }
2348 `)
2349
Paul Duffin36474d32021-03-12 12:19:43 +00002350 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002351 checkAndroidBpContents(`
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002352// This is auto-generated. DO NOT EDIT.
2353
Spandan Dasa5e26d32024-03-06 14:04:36 +00002354apex_contributions_defaults {
2355 name: "mysdk.contributions",
2356 contents: ["prebuilt_mylib"],
2357}
2358
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002359cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00002360 name: "mylib",
2361 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002362 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002363 apex_available: ["//apex_available:platform"],
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002364 host_supported: true,
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002365 unique_host_soname: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +01002366 compile_multilib: "both",
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002367 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002368 host: {
2369 enabled: false,
2370 },
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002371 android_arm64: {
2372 srcs: ["android/arm64/lib/mylib.so"],
2373 },
2374 android_arm: {
2375 srcs: ["android/arm/lib/mylib.so"],
2376 },
2377 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002378 enabled: true,
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002379 srcs: ["linux_glibc/x86_64/lib/mylib-host.so"],
2380 },
2381 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002382 enabled: true,
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002383 srcs: ["linux_glibc/x86/lib/mylib-host.so"],
2384 },
2385 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002386 strip: {
2387 none: true,
2388 },
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002389}
Paul Duffin75b902a2021-02-22 12:13:13 +00002390`),
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002391 checkAllCopyRules(`
2392.intermediates/mylib/android_arm64_armv8-a_shared/mylib.so -> android/arm64/lib/mylib.so
2393.intermediates/mylib/android_arm_armv7-a-neon_shared/mylib.so -> android/arm/lib/mylib.so
2394.intermediates/mylib/linux_glibc_x86_64_shared/mylib-host.so -> linux_glibc/x86_64/lib/mylib-host.so
2395.intermediates/mylib/linux_glibc_x86_shared/mylib-host.so -> linux_glibc/x86/lib/mylib-host.so
2396`),
2397 )
2398}
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002399
2400func TestNoSanitizerMembers(t *testing.T) {
Colin Crossaba8cd92025-02-05 16:39:18 -08002401 t.Parallel()
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002402 result := testSdkWithCc(t, `
2403 sdk {
2404 name: "mysdk",
2405 native_shared_libs: ["mynativelib"],
2406 }
2407
2408 cc_library_shared {
2409 name: "mynativelib",
2410 srcs: ["Test.cpp"],
Paul Duffin86b02a72021-02-22 11:50:04 +00002411 export_include_dirs: ["myinclude"],
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002412 arch: {
2413 arm64: {
2414 export_system_include_dirs: ["arm64/include"],
2415 sanitize: {
2416 hwaddress: true,
2417 },
2418 },
2419 },
2420 }
2421 `)
2422
Paul Duffin36474d32021-03-12 12:19:43 +00002423 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002424 checkAndroidBpContents(`
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002425// This is auto-generated. DO NOT EDIT.
2426
Spandan Dasa5e26d32024-03-06 14:04:36 +00002427apex_contributions_defaults {
2428 name: "mysdk.contributions",
2429 contents: ["prebuilt_mynativelib"],
2430}
2431
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002432cc_prebuilt_library_shared {
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002433 name: "mynativelib",
2434 prefer: false,
2435 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002436 apex_available: ["//apex_available:platform"],
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002437 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00002438 export_include_dirs: ["include/myinclude"],
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002439 arch: {
2440 arm64: {
2441 export_system_include_dirs: ["arm64/include/arm64/include"],
2442 },
2443 arm: {
2444 srcs: ["arm/lib/mynativelib.so"],
2445 },
2446 },
Alyssa Ketpreechasawat59ec0fa2024-07-04 19:51:17 +00002447 strip: {
2448 none: true,
2449 },
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002450}
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002451`),
2452 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00002453myinclude/Test.h -> include/myinclude/Test.h
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002454arm64/include/Arm64Test.h -> arm64/include/arm64/include/Arm64Test.h
Paul Duffin1822a0a2021-03-21 12:56:33 +00002455.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
2456`),
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002457 )
2458}