blob: 265579aa18be3e051bd12cc0788f62e8ffe93596 [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) {
61 // Mock a module with DeviceSupported() == true.
62 s := &sdk{}
63 android.InitAndroidArchModule(s, android.DeviceSupported, android.MultilibCommon)
64
65 osTypes := s.getPossibleOsTypes()
66 if len(osTypes) != 1 {
67 // The snapshot generation assumes there is a single device OS. If more are
68 // added it might need to disable them by default, like it does for host
69 // OS'es.
70 t.Errorf("expected a single device OS, got %v", osTypes)
71 }
72}
73
Paul Duffina80fdec2019-12-03 15:25:00 +000074func TestSdkIsCompileMultilibBoth(t *testing.T) {
Paul Duffind835daa2019-11-30 17:49:09 +000075 result := testSdkWithCc(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +000076 sdk {
77 name: "mysdk",
78 native_shared_libs: ["sdkmember"],
79 }
80
81 cc_library_shared {
82 name: "sdkmember",
83 srcs: ["Test.cpp"],
Paul Duffina80fdec2019-12-03 15:25:00 +000084 stl: "none",
85 }
86 `)
87
Colin Cross7113d202019-11-20 16:39:12 -080088 armOutput := result.Module("sdkmember", "android_arm_armv7-a-neon_shared").(*cc.Module).OutputFile()
89 arm64Output := result.Module("sdkmember", "android_arm64_armv8-a_shared").(*cc.Module).OutputFile()
Paul Duffina80fdec2019-12-03 15:25:00 +000090
91 var inputs []string
Paul Duffin1356d8c2020-02-25 19:26:33 +000092 buildParams := result.Module("mysdk", android.CommonOS.Name).BuildParamsForTests()
Paul Duffina80fdec2019-12-03 15:25:00 +000093 for _, bp := range buildParams {
94 if bp.Input != nil {
95 inputs = append(inputs, bp.Input.String())
96 }
97 }
98
99 // ensure that both 32/64 outputs are inputs of the sdk snapshot
100 ensureListContains(t, inputs, armOutput.String())
101 ensureListContains(t, inputs, arm64Output.String())
102}
103
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100104func TestSdkCompileMultilibOverride(t *testing.T) {
105 result := testSdkWithCc(t, `
106 sdk {
107 name: "mysdk",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100108 host_supported: true,
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100109 native_shared_libs: ["sdkmember"],
110 compile_multilib: "64",
111 }
112
113 cc_library_shared {
114 name: "sdkmember",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100115 host_supported: true,
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100116 srcs: ["Test.cpp"],
117 stl: "none",
118 compile_multilib: "64",
119 }
120 `)
121
Paul Duffin36474d32021-03-12 12:19:43 +0000122 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000123 checkAndroidBpContents(`
Martin Stjernholm89238f42020-07-10 00:14:03 +0100124// This is auto-generated. DO NOT EDIT.
125
126cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +0000127 name: "sdkmember",
128 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100129 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000130 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +0100131 host_supported: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +0100132 stl: "none",
133 compile_multilib: "64",
Martin Stjernholm4cfa2c62020-07-10 19:55:36 +0100134 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100135 host: {
136 enabled: false,
137 },
Martin Stjernholm4cfa2c62020-07-10 19:55:36 +0100138 android_arm64: {
139 srcs: ["android/arm64/lib/sdkmember.so"],
140 },
141 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900142 enabled: true,
Martin Stjernholm4cfa2c62020-07-10 19:55:36 +0100143 srcs: ["linux_glibc/x86_64/lib/sdkmember.so"],
Martin Stjernholm89238f42020-07-10 00:14:03 +0100144 },
145 },
146}
Paul Duffin75b902a2021-02-22 12:13:13 +0000147`),
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100148 checkAllCopyRules(`
Martin Stjernholm4cfa2c62020-07-10 19:55:36 +0100149.intermediates/sdkmember/android_arm64_armv8-a_shared/sdkmember.so -> android/arm64/lib/sdkmember.so
150.intermediates/sdkmember/linux_glibc_x86_64_shared/sdkmember.so -> linux_glibc/x86_64/lib/sdkmember.so
Martin Stjernholm26ab8e82020-06-30 20:34:00 +0100151`))
152}
153
Paul Duffina0843f62019-12-13 19:50:38 +0000154// Make sure the sdk can use host specific cc libraries static/shared and both.
155func TestHostSdkWithCc(t *testing.T) {
156 testSdkWithCc(t, `
157 sdk {
158 name: "mysdk",
159 device_supported: false,
160 host_supported: true,
161 native_shared_libs: ["sdkshared"],
162 native_static_libs: ["sdkstatic"],
163 }
164
165 cc_library_host_shared {
166 name: "sdkshared",
Paul Duffina0843f62019-12-13 19:50:38 +0000167 stl: "none",
168 }
169
170 cc_library_host_static {
171 name: "sdkstatic",
Paul Duffina0843f62019-12-13 19:50:38 +0000172 stl: "none",
173 }
174 `)
175}
176
177// Make sure the sdk can use cc libraries static/shared and both.
178func TestSdkWithCc(t *testing.T) {
179 testSdkWithCc(t, `
180 sdk {
181 name: "mysdk",
182 native_shared_libs: ["sdkshared", "sdkboth1"],
183 native_static_libs: ["sdkstatic", "sdkboth2"],
184 }
185
186 cc_library_shared {
187 name: "sdkshared",
Paul Duffina0843f62019-12-13 19:50:38 +0000188 stl: "none",
189 }
190
191 cc_library_static {
192 name: "sdkstatic",
Paul Duffina0843f62019-12-13 19:50:38 +0000193 stl: "none",
194 }
195
196 cc_library {
197 name: "sdkboth1",
Paul Duffina0843f62019-12-13 19:50:38 +0000198 stl: "none",
199 }
200
201 cc_library {
202 name: "sdkboth2",
Paul Duffina0843f62019-12-13 19:50:38 +0000203 stl: "none",
204 }
205 `)
206}
207
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000208func TestSnapshotWithObject(t *testing.T) {
209 result := testSdkWithCc(t, `
210 sdk {
211 name: "mysdk",
212 native_objects: ["crtobj"],
213 }
214
215 cc_object {
216 name: "crtobj",
217 stl: "none",
Colin Cross6b8f4252021-07-22 11:39:44 -0700218 system_shared_libs: [],
Martin Stjernholmfbb486f2020-08-21 18:43:51 +0100219 sanitize: {
220 never: true,
221 },
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000222 }
223 `)
224
Paul Duffin36474d32021-03-12 12:19:43 +0000225 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000226 checkAndroidBpContents(`
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000227// This is auto-generated. DO NOT EDIT.
228
229cc_prebuilt_object {
Paul Duffin75b902a2021-02-22 12:13:13 +0000230 name: "crtobj",
231 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100232 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000233 apex_available: ["//apex_available:platform"],
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000234 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100235 compile_multilib: "both",
Colin Cross6b8f4252021-07-22 11:39:44 -0700236 system_shared_libs: [],
Martin Stjernholmfbb486f2020-08-21 18:43:51 +0100237 sanitize: {
238 never: true,
239 },
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000240 arch: {
241 arm64: {
242 srcs: ["arm64/lib/crtobj.o"],
243 },
244 arm: {
245 srcs: ["arm/lib/crtobj.o"],
246 },
247 },
248}
Paul Duffin75b902a2021-02-22 12:13:13 +0000249`),
Martin Stjernholmcd07bce2020-03-10 22:37:59 +0000250 checkAllCopyRules(`
251.intermediates/crtobj/android_arm64_armv8-a/crtobj.o -> arm64/lib/crtobj.o
252.intermediates/crtobj/android_arm_armv7-a-neon/crtobj.o -> arm/lib/crtobj.o
253`),
254 )
255}
256
Paul Duffinc62a5102019-12-11 18:34:15 +0000257func TestSnapshotWithCcDuplicateHeaders(t *testing.T) {
258 result := testSdkWithCc(t, `
259 sdk {
260 name: "mysdk",
261 native_shared_libs: ["mynativelib1", "mynativelib2"],
262 }
263
264 cc_library_shared {
265 name: "mynativelib1",
266 srcs: [
267 "Test.cpp",
268 ],
Paul Duffin86b02a72021-02-22 11:50:04 +0000269 export_include_dirs: ["myinclude"],
Paul Duffinc62a5102019-12-11 18:34:15 +0000270 stl: "none",
271 }
272
273 cc_library_shared {
274 name: "mynativelib2",
275 srcs: [
276 "Test.cpp",
277 ],
Paul Duffin86b02a72021-02-22 11:50:04 +0000278 export_include_dirs: ["myinclude"],
Paul Duffinc62a5102019-12-11 18:34:15 +0000279 stl: "none",
280 }
281 `)
282
Paul Duffin36474d32021-03-12 12:19:43 +0000283 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinc62a5102019-12-11 18:34:15 +0000284 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000285myinclude/Test.h -> include/myinclude/Test.h
Colin Cross7113d202019-11-20 16:39:12 -0800286.intermediates/mynativelib1/android_arm64_armv8-a_shared/mynativelib1.so -> arm64/lib/mynativelib1.so
287.intermediates/mynativelib1/android_arm_armv7-a-neon_shared/mynativelib1.so -> arm/lib/mynativelib1.so
288.intermediates/mynativelib2/android_arm64_armv8-a_shared/mynativelib2.so -> arm64/lib/mynativelib2.so
289.intermediates/mynativelib2/android_arm_armv7-a-neon_shared/mynativelib2.so -> arm/lib/mynativelib2.so
Paul Duffinc62a5102019-12-11 18:34:15 +0000290`),
291 )
292}
293
Paul Duffina43f9272021-02-17 10:55:25 +0000294func TestSnapshotWithCcExportGeneratedHeaders(t *testing.T) {
295 result := testSdkWithCc(t, `
296 sdk {
297 name: "mysdk",
298 native_shared_libs: ["mynativelib"],
299 }
300
301 cc_library_shared {
302 name: "mynativelib",
303 srcs: [
304 "Test.cpp",
305 ],
306 generated_headers: [
307 "generated_foo",
308 ],
309 export_generated_headers: [
310 "generated_foo",
311 ],
Paul Duffin86b02a72021-02-22 11:50:04 +0000312 export_include_dirs: ["myinclude"],
Paul Duffina43f9272021-02-17 10:55:25 +0000313 stl: "none",
314 }
315
316 genrule {
317 name: "generated_foo",
318 cmd: "generate-foo",
319 out: [
320 "generated_foo/protos/foo/bar.h",
321 ],
322 export_include_dirs: [
323 ".",
324 "protos",
325 ],
326 }
327 `)
328
Paul Duffindb462dd2021-03-21 22:01:55 +0000329 // TODO(b/183322862): Remove this and fix the issue.
330 errorHandler := android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module source path "snapshot/include_gen/generated_foo/gen/protos" does not exist`)
331
Paul Duffin36474d32021-03-12 12:19:43 +0000332 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000333 checkAndroidBpContents(`
Paul Duffina43f9272021-02-17 10:55:25 +0000334// This is auto-generated. DO NOT EDIT.
335
336cc_prebuilt_library_shared {
337 name: "mynativelib",
338 prefer: false,
339 visibility: ["//visibility:public"],
340 apex_available: ["//apex_available:platform"],
341 stl: "none",
342 compile_multilib: "both",
Paul Duffin7a7d0672021-02-17 12:17:40 +0000343 export_include_dirs: [
344 "include/myinclude",
345 "include_gen/generated_foo/gen",
346 "include_gen/generated_foo/gen/protos",
347 ],
Paul Duffina43f9272021-02-17 10:55:25 +0000348 arch: {
349 arm64: {
350 srcs: ["arm64/lib/mynativelib.so"],
Paul Duffina43f9272021-02-17 10:55:25 +0000351 },
352 arm: {
353 srcs: ["arm/lib/mynativelib.so"],
Paul Duffina43f9272021-02-17 10:55:25 +0000354 },
355 },
356}
357`),
358 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000359myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin7a7d0672021-02-17 12:17:40 +0000360.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 +0000361.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
Paul Duffina43f9272021-02-17 10:55:25 +0000362.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
Paul Duffina43f9272021-02-17 10:55:25 +0000363`),
Paul Duffindb462dd2021-03-21 22:01:55 +0000364 snapshotTestErrorHandler(checkSnapshotWithoutSource, errorHandler),
365 snapshotTestErrorHandler(checkSnapshotWithSourcePreferred, errorHandler),
366 snapshotTestErrorHandler(checkSnapshotPreferredWithSource, errorHandler),
Paul Duffina43f9272021-02-17 10:55:25 +0000367 )
368}
369
Martin Stjernholmb0249572020-09-15 02:32:35 +0100370// Verify that when the shared library has some common and some arch specific
371// properties that the generated snapshot is optimized properly. Substruct
372// handling is tested with the sanitize clauses (but note there's a lot of
373// built-in logic in sanitize.go that can affect those flags).
Paul Duffina7cd8c82019-12-11 20:00:57 +0000374func TestSnapshotWithCcSharedLibraryCommonProperties(t *testing.T) {
375 result := testSdkWithCc(t, `
376 sdk {
377 name: "mysdk",
378 native_shared_libs: ["mynativelib"],
379 }
380
381 cc_library_shared {
382 name: "mynativelib",
383 srcs: [
384 "Test.cpp",
385 "aidl/foo/bar/Test.aidl",
386 ],
Paul Duffin86b02a72021-02-22 11:50:04 +0000387 export_include_dirs: ["myinclude"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100388 sanitize: {
389 fuzzer: false,
390 integer_overflow: true,
391 diag: { undefined: false },
392 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000393 arch: {
394 arm64: {
395 export_system_include_dirs: ["arm64/include"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100396 sanitize: {
Martin Stjernholmb0249572020-09-15 02:32:35 +0100397 integer_overflow: false,
398 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000399 },
400 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000401 stl: "none",
402 }
403 `)
404
Paul Duffin36474d32021-03-12 12:19:43 +0000405 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000406 checkAndroidBpContents(`
Paul Duffina7cd8c82019-12-11 20:00:57 +0000407// This is auto-generated. DO NOT EDIT.
408
409cc_prebuilt_library_shared {
Paul Duffina7cd8c82019-12-11 20:00:57 +0000410 name: "mynativelib",
411 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100412 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000413 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000414 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100415 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +0000416 export_include_dirs: ["include/myinclude"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100417 sanitize: {
418 fuzzer: false,
419 diag: {
420 undefined: false,
421 },
422 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000423 arch: {
424 arm64: {
425 srcs: ["arm64/lib/mynativelib.so"],
426 export_system_include_dirs: ["arm64/include/arm64/include"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100427 sanitize: {
Martin Stjernholmb0249572020-09-15 02:32:35 +0100428 integer_overflow: false,
429 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000430 },
431 arm: {
432 srcs: ["arm/lib/mynativelib.so"],
Martin Stjernholmb0249572020-09-15 02:32:35 +0100433 sanitize: {
434 integer_overflow: true,
435 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000436 },
437 },
Paul Duffina7cd8c82019-12-11 20:00:57 +0000438}
Paul Duffina7cd8c82019-12-11 20:00:57 +0000439`),
440 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000441myinclude/Test.h -> include/myinclude/Test.h
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +0000442.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
Paul Duffina7cd8c82019-12-11 20:00:57 +0000443arm64/include/Arm64Test.h -> arm64/include/arm64/include/Arm64Test.h
Colin Cross7113d202019-11-20 16:39:12 -0800444.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so`),
Paul Duffina7cd8c82019-12-11 20:00:57 +0000445 )
446}
447
Paul Duffin25ce04b2020-01-16 11:47:25 +0000448func TestSnapshotWithCcBinary(t *testing.T) {
449 result := testSdkWithCc(t, `
450 module_exports {
451 name: "mymodule_exports",
452 native_binaries: ["mynativebinary"],
453 }
454
455 cc_binary {
456 name: "mynativebinary",
457 srcs: [
458 "Test.cpp",
459 ],
460 compile_multilib: "both",
Paul Duffin25ce04b2020-01-16 11:47:25 +0000461 }
462 `)
463
Paul Duffin36474d32021-03-12 12:19:43 +0000464 CheckSnapshot(t, result, "mymodule_exports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000465 checkAndroidBpContents(`
Paul Duffin25ce04b2020-01-16 11:47:25 +0000466// This is auto-generated. DO NOT EDIT.
467
468cc_prebuilt_binary {
Paul Duffin75b902a2021-02-22 12:13:13 +0000469 name: "mynativebinary",
470 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100471 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000472 apex_available: ["//apex_available:platform"],
Paul Duffin25ce04b2020-01-16 11:47:25 +0000473 compile_multilib: "both",
474 arch: {
475 arm64: {
476 srcs: ["arm64/bin/mynativebinary"],
477 },
478 arm: {
479 srcs: ["arm/bin/mynativebinary"],
480 },
481 },
482}
Paul Duffin75b902a2021-02-22 12:13:13 +0000483`),
Paul Duffin25ce04b2020-01-16 11:47:25 +0000484 checkAllCopyRules(`
485.intermediates/mynativebinary/android_arm64_armv8-a/mynativebinary -> arm64/bin/mynativebinary
486.intermediates/mynativebinary/android_arm_armv7-a-neon/mynativebinary -> arm/bin/mynativebinary
487`),
488 )
489}
490
Paul Duffina04c1072020-03-02 10:16:35 +0000491func TestMultipleHostOsTypesSnapshotWithCcBinary(t *testing.T) {
Paul Duffina04c1072020-03-02 10:16:35 +0000492 result := testSdkWithCc(t, `
493 module_exports {
494 name: "myexports",
495 device_supported: false,
496 host_supported: true,
497 native_binaries: ["mynativebinary"],
498 target: {
499 windows: {
500 enabled: true,
501 },
502 },
503 }
504
505 cc_binary {
506 name: "mynativebinary",
507 device_supported: false,
508 host_supported: true,
509 srcs: [
510 "Test.cpp",
511 ],
512 compile_multilib: "both",
Paul Duffina04c1072020-03-02 10:16:35 +0000513 stl: "none",
514 target: {
515 windows: {
516 enabled: true,
517 },
518 },
519 }
520 `)
521
Paul Duffin36474d32021-03-12 12:19:43 +0000522 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000523 checkAndroidBpContents(`
Paul Duffina04c1072020-03-02 10:16:35 +0000524// This is auto-generated. DO NOT EDIT.
525
526cc_prebuilt_binary {
Paul Duffin75b902a2021-02-22 12:13:13 +0000527 name: "mynativebinary",
528 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100529 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000530 apex_available: ["//apex_available:platform"],
Paul Duffina04c1072020-03-02 10:16:35 +0000531 device_supported: false,
532 host_supported: true,
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100533 stl: "none",
Paul Duffina04c1072020-03-02 10:16:35 +0000534 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100535 host: {
536 enabled: false,
537 },
Paul Duffina04c1072020-03-02 10:16:35 +0000538 linux_glibc: {
539 compile_multilib: "both",
540 },
541 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900542 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +0000543 srcs: ["linux_glibc/x86_64/bin/mynativebinary"],
544 },
545 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900546 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +0000547 srcs: ["linux_glibc/x86/bin/mynativebinary"],
548 },
549 windows: {
550 compile_multilib: "64",
551 },
552 windows_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900553 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +0000554 srcs: ["windows/x86_64/bin/mynativebinary.exe"],
555 },
556 },
557}
Paul Duffin75b902a2021-02-22 12:13:13 +0000558`),
Paul Duffina04c1072020-03-02 10:16:35 +0000559 checkAllCopyRules(`
560.intermediates/mynativebinary/linux_glibc_x86_64/mynativebinary -> linux_glibc/x86_64/bin/mynativebinary
561.intermediates/mynativebinary/linux_glibc_x86/mynativebinary -> linux_glibc/x86/bin/mynativebinary
562.intermediates/mynativebinary/windows_x86_64/mynativebinary.exe -> windows/x86_64/bin/mynativebinary.exe
563`),
564 )
565}
566
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100567func TestSnapshotWithSingleHostOsType(t *testing.T) {
Paul Duffin89648f92021-03-20 00:36:55 +0000568 result := android.GroupFixturePreparers(
569 prepareForSdkTest,
Paul Duffin4a2a29c2021-03-09 22:27:13 +0000570 ccTestFs.AddToFixture(),
571 cc.PrepareForTestOnLinuxBionic,
572 android.FixtureModifyConfig(func(config android.Config) {
573 config.Targets[android.LinuxBionic] = []android.Target{
574 {android.LinuxBionic, android.Arch{ArchType: android.X86_64}, android.NativeBridgeDisabled, "", "", false},
575 }
576 }),
577 ).RunTestWithBp(t, `
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100578 cc_defaults {
579 name: "mydefaults",
580 device_supported: false,
581 host_supported: true,
582 compile_multilib: "64",
583 target: {
584 host: {
585 enabled: false,
586 },
587 linux_bionic: {
588 enabled: true,
589 },
590 },
591 }
592
593 module_exports {
594 name: "myexports",
595 defaults: ["mydefaults"],
596 native_shared_libs: ["mynativelib"],
597 native_binaries: ["mynativebinary"],
598 compile_multilib: "64", // The built-in default in sdk.go overrides mydefaults.
599 }
600
601 cc_library {
602 name: "mynativelib",
603 defaults: ["mydefaults"],
604 srcs: [
605 "Test.cpp",
606 ],
607 stl: "none",
608 }
609
610 cc_binary {
611 name: "mynativebinary",
612 defaults: ["mydefaults"],
613 srcs: [
614 "Test.cpp",
615 ],
616 stl: "none",
617 }
Paul Duffin4a2a29c2021-03-09 22:27:13 +0000618 `)
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100619
Paul Duffin36474d32021-03-12 12:19:43 +0000620 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000621 checkAndroidBpContents(`
Paul Duffin75b902a2021-02-22 12:13:13 +0000622// This is auto-generated. DO NOT EDIT.
623
624cc_prebuilt_binary {
625 name: "mynativebinary",
626 prefer: false,
627 visibility: ["//visibility:public"],
628 apex_available: ["//apex_available:platform"],
629 device_supported: false,
630 host_supported: true,
631 stl: "none",
632 compile_multilib: "64",
633 target: {
634 host: {
635 enabled: false,
636 },
637 linux_bionic_x86_64: {
638 enabled: true,
639 srcs: ["x86_64/bin/mynativebinary"],
640 },
641 },
642}
643
644cc_prebuilt_library_shared {
645 name: "mynativelib",
646 prefer: false,
647 visibility: ["//visibility:public"],
648 apex_available: ["//apex_available:platform"],
649 device_supported: false,
650 host_supported: true,
651 stl: "none",
652 compile_multilib: "64",
653 target: {
654 host: {
655 enabled: false,
656 },
657 linux_bionic_x86_64: {
658 enabled: true,
659 srcs: ["x86_64/lib/mynativelib.so"],
660 },
661 },
662}
663`),
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100664 checkAllCopyRules(`
665.intermediates/mynativebinary/linux_bionic_x86_64/mynativebinary -> x86_64/bin/mynativebinary
666.intermediates/mynativelib/linux_bionic_x86_64_shared/mynativelib.so -> x86_64/lib/mynativelib.so
667`),
668 )
669}
670
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100671// Test that we support the necessary flags for the linker binary, which is
672// special in several ways.
673func TestSnapshotWithCcStaticNocrtBinary(t *testing.T) {
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100674 result := testSdkWithCc(t, `
675 module_exports {
676 name: "mymodule_exports",
677 host_supported: true,
678 device_supported: false,
679 native_binaries: ["linker"],
680 }
681
682 cc_binary {
683 name: "linker",
684 host_supported: true,
685 static_executable: true,
686 nocrt: true,
687 stl: "none",
688 srcs: [
689 "Test.cpp",
690 ],
691 compile_multilib: "both",
692 }
693 `)
694
Paul Duffin36474d32021-03-12 12:19:43 +0000695 CheckSnapshot(t, result, "mymodule_exports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000696 checkAndroidBpContents(`
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100697// This is auto-generated. DO NOT EDIT.
698
699cc_prebuilt_binary {
Paul Duffin75b902a2021-02-22 12:13:13 +0000700 name: "linker",
701 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100702 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000703 apex_available: ["//apex_available:platform"],
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100704 device_supported: false,
705 host_supported: true,
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100706 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100707 compile_multilib: "both",
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100708 static_executable: true,
709 nocrt: true,
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100710 target: {
711 host: {
712 enabled: false,
713 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100714 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900715 enabled: true,
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100716 srcs: ["x86_64/bin/linker"],
717 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100718 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900719 enabled: true,
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100720 srcs: ["x86/bin/linker"],
721 },
722 },
723}
Paul Duffin75b902a2021-02-22 12:13:13 +0000724`),
Martin Stjernholm7130fab2020-05-28 22:58:01 +0100725 checkAllCopyRules(`
726.intermediates/linker/linux_glibc_x86_64/linker -> x86_64/bin/linker
727.intermediates/linker/linux_glibc_x86/linker -> x86/bin/linker
728`),
729 )
730}
731
Paul Duffin9ab556f2019-12-11 18:42:17 +0000732func TestSnapshotWithCcSharedLibrary(t *testing.T) {
Paul Duffind835daa2019-11-30 17:49:09 +0000733 result := testSdkWithCc(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +0000734 sdk {
735 name: "mysdk",
736 native_shared_libs: ["mynativelib"],
737 }
738
739 cc_library_shared {
740 name: "mynativelib",
741 srcs: [
742 "Test.cpp",
743 "aidl/foo/bar/Test.aidl",
744 ],
Paul Duffinbefa4b92020-03-04 14:22:45 +0000745 apex_available: ["apex1", "apex2"],
Paul Duffin86b02a72021-02-22 11:50:04 +0000746 export_include_dirs: ["myinclude"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000747 aidl: {
748 export_aidl_headers: true,
749 },
Paul Duffina80fdec2019-12-03 15:25:00 +0000750 stl: "none",
751 }
752 `)
753
Paul Duffin36474d32021-03-12 12:19:43 +0000754 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000755 checkAndroidBpContents(`
Paul Duffina80fdec2019-12-03 15:25:00 +0000756// This is auto-generated. DO NOT EDIT.
757
758cc_prebuilt_library_shared {
Paul Duffina80fdec2019-12-03 15:25:00 +0000759 name: "mynativelib",
760 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100761 visibility: ["//visibility:public"],
Paul Duffinbefa4b92020-03-04 14:22:45 +0000762 apex_available: [
763 "apex1",
764 "apex2",
765 ],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000766 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100767 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +0000768 export_include_dirs: ["include/myinclude"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000769 arch: {
770 arm64: {
771 srcs: ["arm64/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +0000772 export_include_dirs: ["arm64/include_gen/mynativelib/android_arm64_armv8-a_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000773 },
774 arm: {
775 srcs: ["arm/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +0000776 export_include_dirs: ["arm/include_gen/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000777 },
778 },
Paul Duffina80fdec2019-12-03 15:25:00 +0000779}
Paul Duffina80fdec2019-12-03 15:25:00 +0000780`),
781 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000782myinclude/Test.h -> include/myinclude/Test.h
Colin Cross7113d202019-11-20 16:39:12 -0800783.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +0000784.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
785.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
786.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 -0800787.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +0000788.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
789.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
790.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 +0000791`),
792 )
793}
794
Paul Duffin13f02712020-03-06 12:30:43 +0000795func TestSnapshotWithCcSharedLibrarySharedLibs(t *testing.T) {
796 result := testSdkWithCc(t, `
797 sdk {
798 name: "mysdk",
799 native_shared_libs: [
800 "mynativelib",
801 "myothernativelib",
802 "mysystemnativelib",
803 ],
804 }
805
806 cc_library {
807 name: "mysystemnativelib",
808 srcs: [
809 "Test.cpp",
810 ],
Paul Duffin13f02712020-03-06 12:30:43 +0000811 stl: "none",
812 }
813
814 cc_library_shared {
815 name: "myothernativelib",
816 srcs: [
817 "Test.cpp",
818 ],
819 system_shared_libs: [
820 // A reference to a library that is not an sdk member. Uses libm as that
821 // is in the default set of modules available to this test and so is available
822 // both here and also when the generated Android.bp file is tested in
823 // CheckSnapshot(). This ensures that the system_shared_libs property correctly
824 // handles references to modules that are not sdk members.
825 "libm",
826 ],
827 stl: "none",
828 }
829
830 cc_library {
831 name: "mynativelib",
832 srcs: [
833 "Test.cpp",
834 ],
835 shared_libs: [
836 // A reference to another sdk member.
837 "myothernativelib",
838 ],
839 target: {
840 android: {
841 shared: {
842 shared_libs: [
843 // A reference to a library that is not an sdk member. The libc library
844 // is used here to check that the shared_libs property is handled correctly
845 // in a similar way to how libm is used to check system_shared_libs above.
846 "libc",
847 ],
848 },
849 },
850 },
Paul Duffin13f02712020-03-06 12:30:43 +0000851 stl: "none",
852 }
853 `)
854
Paul Duffin36474d32021-03-12 12:19:43 +0000855 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000856 checkAndroidBpContents(`
Paul Duffin13f02712020-03-06 12:30:43 +0000857// This is auto-generated. DO NOT EDIT.
858
859cc_prebuilt_library_shared {
Paul Duffin13f02712020-03-06 12:30:43 +0000860 name: "mynativelib",
861 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100862 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000863 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000864 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100865 compile_multilib: "both",
Paul Duffin13f02712020-03-06 12:30:43 +0000866 shared_libs: [
867 "myothernativelib",
868 "libc",
869 ],
870 arch: {
871 arm64: {
872 srcs: ["arm64/lib/mynativelib.so"],
873 },
874 arm: {
875 srcs: ["arm/lib/mynativelib.so"],
876 },
877 },
Paul Duffin13f02712020-03-06 12:30:43 +0000878}
879
880cc_prebuilt_library_shared {
Paul Duffin13f02712020-03-06 12:30:43 +0000881 name: "myothernativelib",
882 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100883 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000884 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000885 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100886 compile_multilib: "both",
Paul Duffin13f02712020-03-06 12:30:43 +0000887 system_shared_libs: ["libm"],
888 arch: {
889 arm64: {
890 srcs: ["arm64/lib/myothernativelib.so"],
891 },
892 arm: {
893 srcs: ["arm/lib/myothernativelib.so"],
894 },
895 },
Paul Duffin13f02712020-03-06 12:30:43 +0000896}
897
898cc_prebuilt_library_shared {
Paul Duffin13f02712020-03-06 12:30:43 +0000899 name: "mysystemnativelib",
900 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100901 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000902 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +0000903 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100904 compile_multilib: "both",
Paul Duffin13f02712020-03-06 12:30:43 +0000905 arch: {
906 arm64: {
907 srcs: ["arm64/lib/mysystemnativelib.so"],
908 },
909 arm: {
910 srcs: ["arm/lib/mysystemnativelib.so"],
911 },
912 },
Paul Duffin13f02712020-03-06 12:30:43 +0000913}
Paul Duffin13f02712020-03-06 12:30:43 +0000914`),
915 checkAllCopyRules(`
916.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
917.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
918.intermediates/myothernativelib/android_arm64_armv8-a_shared/myothernativelib.so -> arm64/lib/myothernativelib.so
919.intermediates/myothernativelib/android_arm_armv7-a-neon_shared/myothernativelib.so -> arm/lib/myothernativelib.so
920.intermediates/mysystemnativelib/android_arm64_armv8-a_shared/mysystemnativelib.so -> arm64/lib/mysystemnativelib.so
921.intermediates/mysystemnativelib/android_arm_armv7-a-neon_shared/mysystemnativelib.so -> arm/lib/mysystemnativelib.so
922`),
923 )
924}
925
Paul Duffin9ab556f2019-12-11 18:42:17 +0000926func TestHostSnapshotWithCcSharedLibrary(t *testing.T) {
Paul Duffind835daa2019-11-30 17:49:09 +0000927 result := testSdkWithCc(t, `
Paul Duffina80fdec2019-12-03 15:25:00 +0000928 sdk {
929 name: "mysdk",
930 device_supported: false,
931 host_supported: true,
932 native_shared_libs: ["mynativelib"],
933 }
934
935 cc_library_shared {
936 name: "mynativelib",
937 device_supported: false,
938 host_supported: true,
939 srcs: [
940 "Test.cpp",
941 "aidl/foo/bar/Test.aidl",
942 ],
Paul Duffin86b02a72021-02-22 11:50:04 +0000943 export_include_dirs: ["myinclude"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000944 aidl: {
945 export_aidl_headers: true,
946 },
Paul Duffina80fdec2019-12-03 15:25:00 +0000947 stl: "none",
Paul Duffin0c394f32020-03-05 14:09:58 +0000948 sdk_version: "minimum",
Paul Duffina80fdec2019-12-03 15:25:00 +0000949 }
950 `)
951
Paul Duffin36474d32021-03-12 12:19:43 +0000952 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000953 checkAndroidBpContents(`
Paul Duffina80fdec2019-12-03 15:25:00 +0000954// This is auto-generated. DO NOT EDIT.
955
956cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +0000957 name: "mynativelib",
958 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +0100959 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +0000960 apex_available: ["//apex_available:platform"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000961 device_supported: false,
962 host_supported: true,
Paul Duffin0c394f32020-03-05 14:09:58 +0000963 sdk_version: "minimum",
Paul Duffin0174d8d2020-03-11 18:42:08 +0000964 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +0100965 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +0000966 export_include_dirs: ["include/myinclude"],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100967 target: {
968 host: {
969 enabled: false,
970 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100971 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900972 enabled: true,
Paul Duffina80fdec2019-12-03 15:25:00 +0000973 srcs: ["x86_64/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +0000974 export_include_dirs: ["x86_64/include_gen/mynativelib/linux_glibc_x86_64_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000975 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +0100976 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +0900977 enabled: true,
Paul Duffina80fdec2019-12-03 15:25:00 +0000978 srcs: ["x86/lib/mynativelib.so"],
Paul Duffin42dd4e62021-02-22 11:35:24 +0000979 export_include_dirs: ["x86/include_gen/mynativelib/linux_glibc_x86_shared/gen/aidl"],
Paul Duffina80fdec2019-12-03 15:25:00 +0000980 },
981 },
Paul Duffina80fdec2019-12-03 15:25:00 +0000982}
Paul Duffin75b902a2021-02-22 12:13:13 +0000983`),
Paul Duffina80fdec2019-12-03 15:25:00 +0000984 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +0000985myinclude/Test.h -> include/myinclude/Test.h
Paul Duffina80fdec2019-12-03 15:25:00 +0000986.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> x86_64/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +0000987.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
988.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
989.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 +0000990.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> x86/lib/mynativelib.so
Paul Duffin42dd4e62021-02-22 11:35:24 +0000991.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
992.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
993.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 +0000994`),
995 )
996}
Paul Duffin9ab556f2019-12-11 18:42:17 +0000997
Paul Duffina04c1072020-03-02 10:16:35 +0000998func TestMultipleHostOsTypesSnapshotWithCcSharedLibrary(t *testing.T) {
Paul Duffina04c1072020-03-02 10:16:35 +0000999 result := testSdkWithCc(t, `
1000 sdk {
1001 name: "mysdk",
1002 device_supported: false,
1003 host_supported: true,
1004 native_shared_libs: ["mynativelib"],
1005 target: {
1006 windows: {
1007 enabled: true,
1008 },
1009 },
1010 }
1011
1012 cc_library_shared {
1013 name: "mynativelib",
1014 device_supported: false,
1015 host_supported: true,
1016 srcs: [
1017 "Test.cpp",
1018 ],
Paul Duffina04c1072020-03-02 10:16:35 +00001019 stl: "none",
1020 target: {
1021 windows: {
1022 enabled: true,
1023 },
1024 },
1025 }
1026 `)
1027
Paul Duffin36474d32021-03-12 12:19:43 +00001028 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001029 checkAndroidBpContents(`
Paul Duffina04c1072020-03-02 10:16:35 +00001030// This is auto-generated. DO NOT EDIT.
1031
1032cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00001033 name: "mynativelib",
1034 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001035 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001036 apex_available: ["//apex_available:platform"],
Paul Duffina04c1072020-03-02 10:16:35 +00001037 device_supported: false,
1038 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001039 stl: "none",
Paul Duffina04c1072020-03-02 10:16:35 +00001040 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001041 host: {
1042 enabled: false,
1043 },
Martin Stjernholm89238f42020-07-10 00:14:03 +01001044 linux_glibc: {
1045 compile_multilib: "both",
1046 },
Paul Duffina04c1072020-03-02 10:16:35 +00001047 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001048 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001049 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1050 },
1051 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001052 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001053 srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1054 },
Martin Stjernholm89238f42020-07-10 00:14:03 +01001055 windows: {
1056 compile_multilib: "64",
1057 },
Paul Duffina04c1072020-03-02 10:16:35 +00001058 windows_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001059 enabled: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001060 srcs: ["windows/x86_64/lib/mynativelib.dll"],
1061 },
1062 },
Paul Duffina04c1072020-03-02 10:16:35 +00001063}
Paul Duffin75b902a2021-02-22 12:13:13 +00001064`),
Paul Duffina04c1072020-03-02 10:16:35 +00001065 checkAllCopyRules(`
1066.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1067.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1068.intermediates/mynativelib/windows_x86_64_shared/mynativelib.dll -> windows/x86_64/lib/mynativelib.dll
1069`),
1070 )
1071}
1072
Paul Duffin9ab556f2019-12-11 18:42:17 +00001073func TestSnapshotWithCcStaticLibrary(t *testing.T) {
1074 result := testSdkWithCc(t, `
Paul Duffine6029182019-12-16 17:43:48 +00001075 module_exports {
1076 name: "myexports",
Paul Duffin9ab556f2019-12-11 18:42:17 +00001077 native_static_libs: ["mynativelib"],
1078 }
1079
1080 cc_library_static {
1081 name: "mynativelib",
1082 srcs: [
1083 "Test.cpp",
1084 "aidl/foo/bar/Test.aidl",
1085 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001086 export_include_dirs: ["myinclude"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001087 aidl: {
1088 export_aidl_headers: true,
1089 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001090 stl: "none",
1091 }
1092 `)
1093
Paul Duffin36474d32021-03-12 12:19:43 +00001094 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001095 checkAndroidBpContents(`
Paul Duffin9ab556f2019-12-11 18:42:17 +00001096// This is auto-generated. DO NOT EDIT.
1097
1098cc_prebuilt_library_static {
Paul Duffin9ab556f2019-12-11 18:42:17 +00001099 name: "mynativelib",
1100 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001101 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001102 apex_available: ["//apex_available:platform"],
Paul Duffin0174d8d2020-03-11 18:42:08 +00001103 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001104 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001105 export_include_dirs: ["include/myinclude"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001106 arch: {
1107 arm64: {
1108 srcs: ["arm64/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001109 export_include_dirs: ["arm64/include_gen/mynativelib/android_arm64_armv8-a_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001110 },
1111 arm: {
1112 srcs: ["arm/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001113 export_include_dirs: ["arm/include_gen/mynativelib/android_arm_armv7-a-neon_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001114 },
1115 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001116}
Paul Duffin9ab556f2019-12-11 18:42:17 +00001117`),
1118 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001119myinclude/Test.h -> include/myinclude/Test.h
Colin Cross7113d202019-11-20 16:39:12 -08001120.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001121.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
1122.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
1123.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 -08001124.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001125.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
1126.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
1127.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 +00001128`),
1129 )
1130}
1131
1132func TestHostSnapshotWithCcStaticLibrary(t *testing.T) {
Paul Duffin9ab556f2019-12-11 18:42:17 +00001133 result := testSdkWithCc(t, `
Paul Duffine6029182019-12-16 17:43:48 +00001134 module_exports {
1135 name: "myexports",
Paul Duffin9ab556f2019-12-11 18:42:17 +00001136 device_supported: false,
1137 host_supported: true,
1138 native_static_libs: ["mynativelib"],
1139 }
1140
1141 cc_library_static {
1142 name: "mynativelib",
1143 device_supported: false,
1144 host_supported: true,
1145 srcs: [
1146 "Test.cpp",
1147 "aidl/foo/bar/Test.aidl",
1148 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001149 export_include_dirs: ["myinclude"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001150 aidl: {
1151 export_aidl_headers: true,
1152 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001153 stl: "none",
1154 }
1155 `)
1156
Paul Duffin36474d32021-03-12 12:19:43 +00001157 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001158 checkAndroidBpContents(`
Paul Duffin9ab556f2019-12-11 18:42:17 +00001159// This is auto-generated. DO NOT EDIT.
1160
1161cc_prebuilt_library_static {
Paul Duffin75b902a2021-02-22 12:13:13 +00001162 name: "mynativelib",
1163 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001164 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001165 apex_available: ["//apex_available:platform"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001166 device_supported: false,
1167 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001168 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001169 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001170 export_include_dirs: ["include/myinclude"],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001171 target: {
1172 host: {
1173 enabled: false,
1174 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001175 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001176 enabled: true,
Paul Duffin9ab556f2019-12-11 18:42:17 +00001177 srcs: ["x86_64/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001178 export_include_dirs: ["x86_64/include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001179 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001180 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001181 enabled: true,
Paul Duffin9ab556f2019-12-11 18:42:17 +00001182 srcs: ["x86/lib/mynativelib.a"],
Paul Duffin42dd4e62021-02-22 11:35:24 +00001183 export_include_dirs: ["x86/include_gen/mynativelib/linux_glibc_x86_static/gen/aidl"],
Paul Duffin9ab556f2019-12-11 18:42:17 +00001184 },
1185 },
Paul Duffin9ab556f2019-12-11 18:42:17 +00001186}
Paul Duffin75b902a2021-02-22 12:13:13 +00001187`),
Paul Duffin9ab556f2019-12-11 18:42:17 +00001188 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001189myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin9ab556f2019-12-11 18:42:17 +00001190.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001191.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
1192.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
1193.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 +00001194.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> x86/lib/mynativelib.a
Paul Duffin42dd4e62021-02-22 11:35:24 +00001195.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
1196.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
1197.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 +00001198`),
1199 )
1200}
Paul Duffin13ad94f2020-02-19 16:19:27 +00001201
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001202func TestSnapshotWithCcLibrary(t *testing.T) {
1203 result := testSdkWithCc(t, `
1204 module_exports {
1205 name: "myexports",
1206 native_libs: ["mynativelib"],
1207 }
1208
1209 cc_library {
1210 name: "mynativelib",
1211 srcs: [
1212 "Test.cpp",
1213 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001214 export_include_dirs: ["myinclude"],
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001215 stl: "none",
Paul Duffind6abaa72020-09-07 16:39:22 +01001216 recovery_available: true,
Paul Duffind1edbd42020-08-13 19:45:31 +01001217 vendor_available: true,
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001218 }
1219 `)
1220
Paul Duffin36474d32021-03-12 12:19:43 +00001221 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001222 checkAndroidBpContents(`
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001223// This is auto-generated. DO NOT EDIT.
1224
1225cc_prebuilt_library {
Paul Duffin75b902a2021-02-22 12:13:13 +00001226 name: "mynativelib",
1227 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001228 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001229 apex_available: ["//apex_available:platform"],
Paul Duffind1edbd42020-08-13 19:45:31 +01001230 vendor_available: true,
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001231 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001232 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001233 export_include_dirs: ["include/myinclude"],
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001234 arch: {
1235 arm64: {
1236 static: {
1237 srcs: ["arm64/lib/mynativelib.a"],
1238 },
1239 shared: {
1240 srcs: ["arm64/lib/mynativelib.so"],
1241 },
1242 },
1243 arm: {
1244 static: {
1245 srcs: ["arm/lib/mynativelib.a"],
1246 },
1247 shared: {
1248 srcs: ["arm/lib/mynativelib.so"],
1249 },
1250 },
1251 },
1252}
Paul Duffin75b902a2021-02-22 12:13:13 +00001253`),
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001254 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001255myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001256.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> arm64/lib/mynativelib.a
1257.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
1258.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> arm/lib/mynativelib.a
Paul Duffin1822a0a2021-03-21 12:56:33 +00001259.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
1260`),
1261 // TODO(b/183315522): Remove this and fix the issue.
1262 snapshotTestErrorHandler(checkSnapshotPreferredWithSource, android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\Qunrecognized property "arch.arm.shared.export_include_dirs"\E`)),
Paul Duffin9b76c0b2020-03-12 10:24:35 +00001263 )
1264}
1265
Liz Kammer96320df2022-05-12 20:40:00 -04001266func TestSnapshotSameLibraryWithNativeLibsAndNativeSharedLib(t *testing.T) {
1267 result := testSdkWithCc(t, `
1268 module_exports {
1269 host_supported: true,
1270 name: "myexports",
1271 target: {
1272 android: {
1273 native_shared_libs: [
1274 "mynativelib",
1275 ],
1276 },
1277 not_windows: {
1278 native_libs: [
1279 "mynativelib",
1280 ],
1281 },
1282 },
1283 }
1284
1285 cc_library {
1286 name: "mynativelib",
1287 host_supported: true,
1288 srcs: [
1289 "Test.cpp",
1290 ],
1291 stl: "none",
1292 recovery_available: true,
1293 vendor_available: true,
1294 }
1295 `)
1296
1297 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001298 checkAndroidBpContents(`
Liz Kammer96320df2022-05-12 20:40:00 -04001299// This is auto-generated. DO NOT EDIT.
1300
1301cc_prebuilt_library {
1302 name: "mynativelib",
1303 prefer: false,
1304 visibility: ["//visibility:public"],
1305 apex_available: ["//apex_available:platform"],
1306 host_supported: true,
1307 vendor_available: true,
1308 stl: "none",
1309 compile_multilib: "both",
1310 target: {
1311 host: {
1312 enabled: false,
1313 },
1314 android_arm64: {
1315 shared: {
1316 srcs: ["android/arm64/lib/mynativelib.so"],
1317 },
1318 static: {
1319 enabled: false,
1320 },
1321 },
1322 android_arm: {
1323 shared: {
1324 srcs: ["android/arm/lib/mynativelib.so"],
1325 },
1326 static: {
1327 enabled: false,
1328 },
1329 },
1330 linux_glibc_x86_64: {
1331 enabled: true,
1332 static: {
1333 srcs: ["linux_glibc/x86_64/lib/mynativelib.a"],
1334 },
1335 shared: {
1336 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1337 },
1338 },
1339 linux_glibc_x86: {
1340 enabled: true,
1341 static: {
1342 srcs: ["linux_glibc/x86/lib/mynativelib.a"],
1343 },
1344 shared: {
1345 srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1346 },
1347 },
1348 },
1349}
1350`),
1351 checkAllCopyRules(`
1352.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so
1353.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so
1354.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> linux_glibc/x86_64/lib/mynativelib.a
1355.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1356.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> linux_glibc/x86/lib/mynativelib.a
1357.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1358`),
1359 )
1360}
1361
1362func TestSnapshotSameLibraryWithAndroidNativeLibsAndHostNativeSharedLib(t *testing.T) {
1363 result := testSdkWithCc(t, `
1364 module_exports {
1365 host_supported: true,
1366 name: "myexports",
1367 target: {
1368 android: {
1369 native_libs: [
1370 "mynativelib",
1371 ],
1372 },
1373 not_windows: {
1374 native_shared_libs: [
1375 "mynativelib",
1376 ],
1377 },
1378 },
1379 }
1380
1381 cc_library {
1382 name: "mynativelib",
1383 host_supported: true,
1384 srcs: [
1385 "Test.cpp",
1386 ],
1387 stl: "none",
1388 recovery_available: true,
1389 vendor_available: true,
1390 }
1391 `)
1392
1393 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001394 checkAndroidBpContents(`
Liz Kammer96320df2022-05-12 20:40:00 -04001395// This is auto-generated. DO NOT EDIT.
1396
1397cc_prebuilt_library {
1398 name: "mynativelib",
1399 prefer: false,
1400 visibility: ["//visibility:public"],
1401 apex_available: ["//apex_available:platform"],
1402 host_supported: true,
1403 vendor_available: true,
1404 stl: "none",
1405 compile_multilib: "both",
1406 target: {
1407 host: {
1408 enabled: false,
1409 },
1410 android_arm64: {
1411 static: {
1412 srcs: ["android/arm64/lib/mynativelib.a"],
1413 },
1414 shared: {
1415 srcs: ["android/arm64/lib/mynativelib.so"],
1416 },
1417 },
1418 android_arm: {
1419 static: {
1420 srcs: ["android/arm/lib/mynativelib.a"],
1421 },
1422 shared: {
1423 srcs: ["android/arm/lib/mynativelib.so"],
1424 },
1425 },
1426 linux_glibc_x86_64: {
1427 enabled: true,
1428 shared: {
1429 srcs: ["linux_glibc/x86_64/lib/mynativelib.so"],
1430 },
1431 static: {
1432 enabled: false,
1433 },
1434 },
1435 linux_glibc_x86: {
1436 enabled: true,
1437 shared: {
1438 srcs: ["linux_glibc/x86/lib/mynativelib.so"],
1439 },
1440 static: {
1441 enabled: false,
1442 },
1443 },
1444 },
1445}
1446`),
1447 checkAllCopyRules(`
1448.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> android/arm64/lib/mynativelib.a
1449.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so
1450.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> android/arm/lib/mynativelib.a
1451.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so
1452.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so
1453.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so
1454`),
1455 )
1456}
1457
1458func TestSnapshotSameLibraryWithNativeStaticLibsAndNativeSharedLib(t *testing.T) {
1459 testSdkError(t, "Incompatible member types", `
1460 module_exports {
1461 host_supported: true,
1462 name: "myexports",
1463 target: {
1464 android: {
1465 native_shared_libs: [
1466 "mynativelib",
1467 ],
1468 },
1469 not_windows: {
1470 native_static_libs: [
1471 "mynativelib",
1472 ],
1473 },
1474 },
1475 }
1476
1477 cc_library {
1478 name: "mynativelib",
1479 host_supported: true,
1480 srcs: [
1481 ],
1482 stl: "none",
1483 recovery_available: true,
1484 vendor_available: true,
1485 }
1486 `)
1487}
1488
Paul Duffin13ad94f2020-02-19 16:19:27 +00001489func TestHostSnapshotWithMultiLib64(t *testing.T) {
Paul Duffin13ad94f2020-02-19 16:19:27 +00001490 result := testSdkWithCc(t, `
1491 module_exports {
1492 name: "myexports",
1493 device_supported: false,
1494 host_supported: true,
1495 target: {
1496 host: {
1497 compile_multilib: "64",
1498 },
1499 },
1500 native_static_libs: ["mynativelib"],
1501 }
1502
1503 cc_library_static {
1504 name: "mynativelib",
1505 device_supported: false,
1506 host_supported: true,
1507 srcs: [
1508 "Test.cpp",
1509 "aidl/foo/bar/Test.aidl",
1510 ],
Paul Duffin86b02a72021-02-22 11:50:04 +00001511 export_include_dirs: ["myinclude"],
Paul Duffin13ad94f2020-02-19 16:19:27 +00001512 aidl: {
1513 export_aidl_headers: true,
1514 },
Paul Duffin13ad94f2020-02-19 16:19:27 +00001515 stl: "none",
1516 }
1517 `)
1518
Paul Duffin36474d32021-03-12 12:19:43 +00001519 CheckSnapshot(t, result, "myexports", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001520 checkAndroidBpContents(`
Paul Duffin13ad94f2020-02-19 16:19:27 +00001521// This is auto-generated. DO NOT EDIT.
1522
1523cc_prebuilt_library_static {
Paul Duffin75b902a2021-02-22 12:13:13 +00001524 name: "mynativelib",
1525 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001526 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001527 apex_available: ["//apex_available:platform"],
Paul Duffin13ad94f2020-02-19 16:19:27 +00001528 device_supported: false,
1529 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001530 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001531 compile_multilib: "64",
Paul Duffin7a7d0672021-02-17 12:17:40 +00001532 export_include_dirs: [
1533 "include/myinclude",
1534 "include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl",
1535 ],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001536 target: {
1537 host: {
1538 enabled: false,
1539 },
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001540 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001541 enabled: true,
Paul Duffin13ad94f2020-02-19 16:19:27 +00001542 srcs: ["x86_64/lib/mynativelib.a"],
Paul Duffin13ad94f2020-02-19 16:19:27 +00001543 },
1544 },
Paul Duffin13ad94f2020-02-19 16:19:27 +00001545}
Paul Duffin75b902a2021-02-22 12:13:13 +00001546`),
Paul Duffin13ad94f2020-02-19 16:19:27 +00001547 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001548myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin7a7d0672021-02-17 12:17:40 +00001549.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
1550.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
1551.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 +00001552.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> x86_64/lib/mynativelib.a
Paul Duffin13ad94f2020-02-19 16:19:27 +00001553`),
1554 )
1555}
Paul Duffin91756d22020-02-21 16:29:57 +00001556
1557func TestSnapshotWithCcHeadersLibrary(t *testing.T) {
1558 result := testSdkWithCc(t, `
1559 sdk {
1560 name: "mysdk",
1561 native_header_libs: ["mynativeheaders"],
1562 }
1563
1564 cc_library_headers {
1565 name: "mynativeheaders",
Paul Duffin86b02a72021-02-22 11:50:04 +00001566 export_include_dirs: ["myinclude"],
Paul Duffin91756d22020-02-21 16:29:57 +00001567 stl: "none",
1568 }
1569 `)
1570
Paul Duffin36474d32021-03-12 12:19:43 +00001571 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001572 checkAndroidBpContents(`
Paul Duffin91756d22020-02-21 16:29:57 +00001573// This is auto-generated. DO NOT EDIT.
1574
1575cc_prebuilt_library_headers {
Paul Duffin91756d22020-02-21 16:29:57 +00001576 name: "mynativeheaders",
1577 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001578 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001579 apex_available: ["//apex_available:platform"],
Paul Duffin91756d22020-02-21 16:29:57 +00001580 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001581 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001582 export_include_dirs: ["include/myinclude"],
Paul Duffin91756d22020-02-21 16:29:57 +00001583}
Paul Duffin91756d22020-02-21 16:29:57 +00001584`),
1585 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001586myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin91756d22020-02-21 16:29:57 +00001587`),
1588 )
1589}
1590
Paul Duffin93b750e2019-11-19 19:44:10 +00001591func TestSnapshotWithCcHeadersLibraryAndNativeBridgeSupport(t *testing.T) {
1592 result := android.GroupFixturePreparers(
1593 cc.PrepareForTestWithCcDefaultModules,
1594 PrepareForTestWithSdkBuildComponents,
1595 ccTestFs.AddToFixture(),
1596 prepareForTestWithNativeBridgeTarget,
1597 ).RunTestWithBp(t, `
1598 sdk {
1599 name: "mysdk",
1600 native_header_libs: ["mynativeheaders"],
1601 traits: {
1602 native_bridge_support: ["mynativeheaders"],
1603 },
1604 }
1605
1606 cc_library_headers {
1607 name: "mynativeheaders",
1608 export_include_dirs: ["myinclude"],
1609 stl: "none",
1610 system_shared_libs: [],
1611 native_bridge_supported: true,
1612 }
1613 `)
1614
1615 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001616 checkAndroidBpContents(`
Paul Duffin93b750e2019-11-19 19:44:10 +00001617// This is auto-generated. DO NOT EDIT.
1618
1619cc_prebuilt_library_headers {
1620 name: "mynativeheaders",
1621 prefer: false,
1622 visibility: ["//visibility:public"],
1623 apex_available: ["//apex_available:platform"],
1624 native_bridge_supported: true,
1625 stl: "none",
1626 compile_multilib: "both",
1627 system_shared_libs: [],
1628 export_include_dirs: ["include/myinclude"],
1629}
1630`),
1631 checkAllCopyRules(`
1632myinclude/Test.h -> include/myinclude/Test.h
1633`),
1634 )
1635}
1636
1637// TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties verifies that when a
1638// module that has different output files for a native bridge target requests the native bridge
1639// variants are copied into the sdk snapshot that it reports an error.
1640func TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties(t *testing.T) {
1641 android.GroupFixturePreparers(
1642 cc.PrepareForTestWithCcDefaultModules,
1643 PrepareForTestWithSdkBuildComponents,
1644 ccTestFs.AddToFixture(),
1645 prepareForTestWithNativeBridgeTarget,
1646 ).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
1647 `\QArchitecture variant "arm64_native_bridge" of sdk member "mynativeheaders" has properties distinct from other variants; this is not yet supported. The properties are:
1648 export_include_dirs: [
1649 "arm64_native_bridge/include/myinclude_nativebridge",
1650 "arm64_native_bridge/include/myinclude",
1651 ],\E`)).
1652 RunTestWithBp(t, `
1653 sdk {
1654 name: "mysdk",
1655 native_header_libs: ["mynativeheaders"],
1656 traits: {
1657 native_bridge_support: ["mynativeheaders"],
1658 },
1659 }
1660
1661 cc_library_headers {
1662 name: "mynativeheaders",
1663 export_include_dirs: ["myinclude"],
1664 stl: "none",
1665 system_shared_libs: [],
1666 native_bridge_supported: true,
1667 target: {
1668 native_bridge: {
1669 export_include_dirs: ["myinclude_nativebridge"],
1670 },
1671 },
1672 }
1673 `)
1674}
1675
Paul Duffin63696222021-09-06 10:28:34 +01001676func TestSnapshotWithCcHeadersLibraryAndImageVariants(t *testing.T) {
1677 testImageVariant := func(t *testing.T, property, trait string) {
1678 result := android.GroupFixturePreparers(
1679 cc.PrepareForTestWithCcDefaultModules,
1680 PrepareForTestWithSdkBuildComponents,
1681 ccTestFs.AddToFixture(),
1682 ).RunTestWithBp(t, fmt.Sprintf(`
1683 sdk {
1684 name: "mysdk",
1685 native_header_libs: ["mynativeheaders"],
1686 traits: {
1687 %s: ["mynativeheaders"],
1688 },
1689 }
1690
1691 cc_library_headers {
1692 name: "mynativeheaders",
1693 export_include_dirs: ["myinclude"],
1694 stl: "none",
1695 system_shared_libs: [],
1696 %s: true,
1697 }
1698 `, trait, property))
1699
1700 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001701 checkAndroidBpContents(fmt.Sprintf(`
Paul Duffin63696222021-09-06 10:28:34 +01001702// This is auto-generated. DO NOT EDIT.
1703
1704cc_prebuilt_library_headers {
1705 name: "mynativeheaders",
1706 prefer: false,
1707 visibility: ["//visibility:public"],
1708 apex_available: ["//apex_available:platform"],
1709 %s: true,
1710 stl: "none",
1711 compile_multilib: "both",
1712 system_shared_libs: [],
1713 export_include_dirs: ["include/myinclude"],
1714}
1715`, property)),
1716 checkAllCopyRules(`
1717myinclude/Test.h -> include/myinclude/Test.h
1718`),
1719 )
1720 }
1721
Paul Duffin12a0a312021-09-15 17:25:10 +01001722 t.Run("ramdisk", func(t *testing.T) {
1723 testImageVariant(t, "ramdisk_available", "ramdisk_image_required")
1724 })
1725
Paul Duffin63696222021-09-06 10:28:34 +01001726 t.Run("recovery", func(t *testing.T) {
1727 testImageVariant(t, "recovery_available", "recovery_image_required")
1728 })
1729}
1730
Paul Duffin91756d22020-02-21 16:29:57 +00001731func TestHostSnapshotWithCcHeadersLibrary(t *testing.T) {
Paul Duffin91756d22020-02-21 16:29:57 +00001732 result := testSdkWithCc(t, `
1733 sdk {
1734 name: "mysdk",
1735 device_supported: false,
1736 host_supported: true,
1737 native_header_libs: ["mynativeheaders"],
1738 }
1739
1740 cc_library_headers {
1741 name: "mynativeheaders",
1742 device_supported: false,
1743 host_supported: true,
Paul Duffin86b02a72021-02-22 11:50:04 +00001744 export_include_dirs: ["myinclude"],
Paul Duffin91756d22020-02-21 16:29:57 +00001745 stl: "none",
1746 }
1747 `)
1748
Paul Duffin36474d32021-03-12 12:19:43 +00001749 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001750 checkAndroidBpContents(`
Paul Duffin91756d22020-02-21 16:29:57 +00001751// This is auto-generated. DO NOT EDIT.
1752
1753cc_prebuilt_library_headers {
Paul Duffin75b902a2021-02-22 12:13:13 +00001754 name: "mynativeheaders",
1755 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001756 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001757 apex_available: ["//apex_available:platform"],
Paul Duffin91756d22020-02-21 16:29:57 +00001758 device_supported: false,
1759 host_supported: true,
Paul Duffin91756d22020-02-21 16:29:57 +00001760 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001761 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001762 export_include_dirs: ["include/myinclude"],
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001763 target: {
1764 host: {
1765 enabled: false,
1766 },
Jiyong Park8fe14e62020-10-19 22:47:34 +09001767 linux_glibc_x86_64: {
1768 enabled: true,
1769 },
1770 linux_glibc_x86: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001771 enabled: true,
1772 },
1773 },
Paul Duffin91756d22020-02-21 16:29:57 +00001774}
Paul Duffin75b902a2021-02-22 12:13:13 +00001775`),
Paul Duffin91756d22020-02-21 16:29:57 +00001776 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001777myinclude/Test.h -> include/myinclude/Test.h
Paul Duffin91756d22020-02-21 16:29:57 +00001778`),
1779 )
1780}
Paul Duffina04c1072020-03-02 10:16:35 +00001781
1782func TestDeviceAndHostSnapshotWithCcHeadersLibrary(t *testing.T) {
Paul Duffina04c1072020-03-02 10:16:35 +00001783 result := testSdkWithCc(t, `
1784 sdk {
1785 name: "mysdk",
1786 host_supported: true,
1787 native_header_libs: ["mynativeheaders"],
1788 }
1789
1790 cc_library_headers {
1791 name: "mynativeheaders",
1792 host_supported: true,
Paul Duffina04c1072020-03-02 10:16:35 +00001793 stl: "none",
Paul Duffin86b02a72021-02-22 11:50:04 +00001794 export_system_include_dirs: ["myinclude"],
Paul Duffina04c1072020-03-02 10:16:35 +00001795 target: {
1796 android: {
Paul Duffin86b02a72021-02-22 11:50:04 +00001797 export_include_dirs: ["myinclude-android"],
Paul Duffina04c1072020-03-02 10:16:35 +00001798 },
1799 host: {
Paul Duffin86b02a72021-02-22 11:50:04 +00001800 export_include_dirs: ["myinclude-host"],
Paul Duffina04c1072020-03-02 10:16:35 +00001801 },
1802 },
1803 }
1804 `)
1805
Paul Duffin36474d32021-03-12 12:19:43 +00001806 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001807 checkAndroidBpContents(`
Paul Duffina04c1072020-03-02 10:16:35 +00001808// This is auto-generated. DO NOT EDIT.
1809
1810cc_prebuilt_library_headers {
Paul Duffin75b902a2021-02-22 12:13:13 +00001811 name: "mynativeheaders",
1812 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001813 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001814 apex_available: ["//apex_available:platform"],
Paul Duffina04c1072020-03-02 10:16:35 +00001815 host_supported: true,
Paul Duffin0174d8d2020-03-11 18:42:08 +00001816 stl: "none",
Martin Stjernholm89238f42020-07-10 00:14:03 +01001817 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00001818 export_system_include_dirs: ["common_os/include/myinclude"],
Paul Duffina04c1072020-03-02 10:16:35 +00001819 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001820 host: {
1821 enabled: false,
1822 },
Paul Duffina04c1072020-03-02 10:16:35 +00001823 android: {
Paul Duffin86b02a72021-02-22 11:50:04 +00001824 export_include_dirs: ["android/include/myinclude-android"],
Paul Duffina04c1072020-03-02 10:16:35 +00001825 },
1826 linux_glibc: {
Paul Duffin86b02a72021-02-22 11:50:04 +00001827 export_include_dirs: ["linux_glibc/include/myinclude-host"],
Paul Duffina04c1072020-03-02 10:16:35 +00001828 },
Jiyong Park8fe14e62020-10-19 22:47:34 +09001829 linux_glibc_x86_64: {
1830 enabled: true,
1831 },
1832 linux_glibc_x86: {
1833 enabled: true,
1834 },
Paul Duffina04c1072020-03-02 10:16:35 +00001835 },
Paul Duffina04c1072020-03-02 10:16:35 +00001836}
Paul Duffin75b902a2021-02-22 12:13:13 +00001837`),
Paul Duffina04c1072020-03-02 10:16:35 +00001838 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00001839myinclude/Test.h -> common_os/include/myinclude/Test.h
1840myinclude-android/AndroidTest.h -> android/include/myinclude-android/AndroidTest.h
1841myinclude-host/HostTest.h -> linux_glibc/include/myinclude-host/HostTest.h
Paul Duffina04c1072020-03-02 10:16:35 +00001842`),
1843 )
1844}
Martin Stjernholm10566a02020-03-24 01:19:52 +00001845
1846func TestSystemSharedLibPropagation(t *testing.T) {
1847 result := testSdkWithCc(t, `
1848 sdk {
1849 name: "mysdk",
Colin Cross6b8f4252021-07-22 11:39:44 -07001850 native_shared_libs: ["sslnil", "sslempty", "sslnonempty"],
Martin Stjernholm10566a02020-03-24 01:19:52 +00001851 }
1852
1853 cc_library {
1854 name: "sslnil",
1855 host_supported: true,
1856 }
1857
1858 cc_library {
1859 name: "sslempty",
1860 system_shared_libs: [],
1861 }
1862
1863 cc_library {
1864 name: "sslnonempty",
1865 system_shared_libs: ["sslnil"],
1866 }
1867 `)
1868
Paul Duffin36474d32021-03-12 12:19:43 +00001869 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001870 checkAndroidBpContents(`
Martin Stjernholm10566a02020-03-24 01:19:52 +00001871// This is auto-generated. DO NOT EDIT.
1872
1873cc_prebuilt_library_shared {
Martin Stjernholm10566a02020-03-24 01:19:52 +00001874 name: "sslnil",
1875 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001876 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001877 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01001878 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00001879 arch: {
1880 arm64: {
1881 srcs: ["arm64/lib/sslnil.so"],
1882 },
1883 arm: {
1884 srcs: ["arm/lib/sslnil.so"],
1885 },
1886 },
1887}
1888
1889cc_prebuilt_library_shared {
Martin Stjernholm10566a02020-03-24 01:19:52 +00001890 name: "sslempty",
1891 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001892 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001893 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01001894 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00001895 system_shared_libs: [],
1896 arch: {
1897 arm64: {
1898 srcs: ["arm64/lib/sslempty.so"],
1899 },
1900 arm: {
1901 srcs: ["arm/lib/sslempty.so"],
1902 },
1903 },
1904}
1905
1906cc_prebuilt_library_shared {
Martin Stjernholm10566a02020-03-24 01:19:52 +00001907 name: "sslnonempty",
1908 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001909 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001910 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01001911 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00001912 system_shared_libs: ["sslnil"],
1913 arch: {
1914 arm64: {
1915 srcs: ["arm64/lib/sslnonempty.so"],
1916 },
1917 arm: {
1918 srcs: ["arm/lib/sslnonempty.so"],
1919 },
1920 },
1921}
Colin Cross6b8f4252021-07-22 11:39:44 -07001922`))
Martin Stjernholm10566a02020-03-24 01:19:52 +00001923
1924 result = testSdkWithCc(t, `
1925 sdk {
1926 name: "mysdk",
1927 host_supported: true,
Colin Cross6b8f4252021-07-22 11:39:44 -07001928 native_shared_libs: ["sslvariants"],
Martin Stjernholm10566a02020-03-24 01:19:52 +00001929 }
1930
1931 cc_library {
1932 name: "sslvariants",
1933 host_supported: true,
1934 target: {
1935 android: {
1936 system_shared_libs: [],
1937 },
1938 },
1939 }
1940 `)
1941
Paul Duffin36474d32021-03-12 12:19:43 +00001942 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001943 checkAndroidBpContents(`
Martin Stjernholm10566a02020-03-24 01:19:52 +00001944// This is auto-generated. DO NOT EDIT.
1945
1946cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00001947 name: "sslvariants",
1948 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01001949 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00001950 apex_available: ["//apex_available:platform"],
Martin Stjernholm10566a02020-03-24 01:19:52 +00001951 host_supported: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +01001952 compile_multilib: "both",
Martin Stjernholm10566a02020-03-24 01:19:52 +00001953 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01001954 host: {
1955 enabled: false,
1956 },
Martin Stjernholm10566a02020-03-24 01:19:52 +00001957 android: {
1958 system_shared_libs: [],
1959 },
1960 android_arm64: {
1961 srcs: ["android/arm64/lib/sslvariants.so"],
1962 },
1963 android_arm: {
1964 srcs: ["android/arm/lib/sslvariants.so"],
1965 },
1966 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001967 enabled: true,
Martin Stjernholm10566a02020-03-24 01:19:52 +00001968 srcs: ["linux_glibc/x86_64/lib/sslvariants.so"],
1969 },
1970 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09001971 enabled: true,
Martin Stjernholm10566a02020-03-24 01:19:52 +00001972 srcs: ["linux_glibc/x86/lib/sslvariants.so"],
1973 },
1974 },
1975}
Paul Duffin75b902a2021-02-22 12:13:13 +00001976`),
Paul Duffinb01ac4b2022-05-24 20:10:05 +00001977 )
Martin Stjernholm10566a02020-03-24 01:19:52 +00001978}
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01001979
1980func TestStubsLibrary(t *testing.T) {
1981 result := testSdkWithCc(t, `
1982 sdk {
1983 name: "mysdk",
1984 native_shared_libs: ["stubslib"],
1985 }
1986
1987 cc_library {
Martin Stjernholmcc330d62020-04-21 20:45:35 +01001988 name: "internaldep",
1989 }
1990
1991 cc_library {
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01001992 name: "stubslib",
Martin Stjernholmcc330d62020-04-21 20:45:35 +01001993 shared_libs: ["internaldep"],
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01001994 stubs: {
1995 symbol_file: "some/where/stubslib.map.txt",
1996 versions: ["1", "2", "3"],
1997 },
1998 }
1999 `)
2000
Paul Duffin36474d32021-03-12 12:19:43 +00002001 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002002 checkAndroidBpContents(`
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002003// This is auto-generated. DO NOT EDIT.
2004
2005cc_prebuilt_library_shared {
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002006 name: "stubslib",
2007 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002008 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002009 apex_available: ["//apex_available:platform"],
Martin Stjernholm89238f42020-07-10 00:14:03 +01002010 compile_multilib: "both",
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002011 stubs: {
Martin Stjernholm618b6712020-09-24 16:53:04 +01002012 versions: [
2013 "1",
2014 "2",
2015 "3",
Jiyong Parkd4a3a132021-03-17 20:21:35 +09002016 "current",
Martin Stjernholm618b6712020-09-24 16:53:04 +01002017 ],
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002018 },
2019 arch: {
2020 arm64: {
2021 srcs: ["arm64/lib/stubslib.so"],
2022 },
2023 arm: {
2024 srcs: ["arm/lib/stubslib.so"],
2025 },
2026 },
2027}
Martin Stjernholmc5dd4f72020-04-01 20:38:01 +01002028`))
2029}
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002030
2031func TestDeviceAndHostSnapshotWithStubsLibrary(t *testing.T) {
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002032 result := testSdkWithCc(t, `
2033 sdk {
2034 name: "mysdk",
2035 host_supported: true,
2036 native_shared_libs: ["stubslib"],
2037 }
2038
2039 cc_library {
2040 name: "internaldep",
2041 host_supported: true,
2042 }
2043
2044 cc_library {
2045 name: "stubslib",
2046 host_supported: true,
2047 shared_libs: ["internaldep"],
2048 stubs: {
2049 symbol_file: "some/where/stubslib.map.txt",
2050 versions: ["1", "2", "3"],
2051 },
2052 }
2053 `)
2054
Paul Duffin36474d32021-03-12 12:19:43 +00002055 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002056 checkAndroidBpContents(`
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002057// This is auto-generated. DO NOT EDIT.
2058
2059cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00002060 name: "stubslib",
2061 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002062 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002063 apex_available: ["//apex_available:platform"],
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002064 host_supported: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +01002065 compile_multilib: "both",
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002066 stubs: {
Martin Stjernholm618b6712020-09-24 16:53:04 +01002067 versions: [
2068 "1",
2069 "2",
2070 "3",
Jiyong Parkd4a3a132021-03-17 20:21:35 +09002071 "current",
Martin Stjernholm618b6712020-09-24 16:53:04 +01002072 ],
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002073 },
2074 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002075 host: {
2076 enabled: false,
2077 },
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002078 android_arm64: {
2079 srcs: ["android/arm64/lib/stubslib.so"],
2080 },
2081 android_arm: {
2082 srcs: ["android/arm/lib/stubslib.so"],
2083 },
2084 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002085 enabled: true,
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002086 srcs: ["linux_glibc/x86_64/lib/stubslib.so"],
2087 },
2088 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002089 enabled: true,
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002090 srcs: ["linux_glibc/x86/lib/stubslib.so"],
2091 },
2092 },
2093}
Paul Duffin75b902a2021-02-22 12:13:13 +00002094`),
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002095 )
Paul Duffin7a1f7f32020-05-04 15:32:08 +01002096}
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002097
2098func TestUniqueHostSoname(t *testing.T) {
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002099 result := testSdkWithCc(t, `
2100 sdk {
2101 name: "mysdk",
2102 host_supported: true,
2103 native_shared_libs: ["mylib"],
2104 }
2105
2106 cc_library {
2107 name: "mylib",
2108 host_supported: true,
2109 unique_host_soname: true,
2110 }
2111 `)
2112
Paul Duffin36474d32021-03-12 12:19:43 +00002113 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002114 checkAndroidBpContents(`
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002115// This is auto-generated. DO NOT EDIT.
2116
2117cc_prebuilt_library_shared {
Paul Duffin75b902a2021-02-22 12:13:13 +00002118 name: "mylib",
2119 prefer: false,
Paul Duffind99d9972020-09-29 16:00:55 +01002120 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002121 apex_available: ["//apex_available:platform"],
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002122 host_supported: true,
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002123 unique_host_soname: true,
Martin Stjernholm89238f42020-07-10 00:14:03 +01002124 compile_multilib: "both",
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002125 target: {
Martin Stjernholmcaa47d72020-07-11 04:52:24 +01002126 host: {
2127 enabled: false,
2128 },
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002129 android_arm64: {
2130 srcs: ["android/arm64/lib/mylib.so"],
2131 },
2132 android_arm: {
2133 srcs: ["android/arm/lib/mylib.so"],
2134 },
2135 linux_glibc_x86_64: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002136 enabled: true,
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002137 srcs: ["linux_glibc/x86_64/lib/mylib-host.so"],
2138 },
2139 linux_glibc_x86: {
Jiyong Park8fe14e62020-10-19 22:47:34 +09002140 enabled: true,
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002141 srcs: ["linux_glibc/x86/lib/mylib-host.so"],
2142 },
2143 },
2144}
Paul Duffin75b902a2021-02-22 12:13:13 +00002145`),
Martin Stjernholm47ed3522020-06-17 22:52:25 +01002146 checkAllCopyRules(`
2147.intermediates/mylib/android_arm64_armv8-a_shared/mylib.so -> android/arm64/lib/mylib.so
2148.intermediates/mylib/android_arm_armv7-a-neon_shared/mylib.so -> android/arm/lib/mylib.so
2149.intermediates/mylib/linux_glibc_x86_64_shared/mylib-host.so -> linux_glibc/x86_64/lib/mylib-host.so
2150.intermediates/mylib/linux_glibc_x86_shared/mylib-host.so -> linux_glibc/x86/lib/mylib-host.so
2151`),
2152 )
2153}
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002154
2155func TestNoSanitizerMembers(t *testing.T) {
2156 result := testSdkWithCc(t, `
2157 sdk {
2158 name: "mysdk",
2159 native_shared_libs: ["mynativelib"],
2160 }
2161
2162 cc_library_shared {
2163 name: "mynativelib",
2164 srcs: ["Test.cpp"],
Paul Duffin86b02a72021-02-22 11:50:04 +00002165 export_include_dirs: ["myinclude"],
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002166 arch: {
2167 arm64: {
2168 export_system_include_dirs: ["arm64/include"],
2169 sanitize: {
2170 hwaddress: true,
2171 },
2172 },
2173 },
2174 }
2175 `)
2176
Paul Duffin36474d32021-03-12 12:19:43 +00002177 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +00002178 checkAndroidBpContents(`
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002179// This is auto-generated. DO NOT EDIT.
2180
2181cc_prebuilt_library_shared {
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002182 name: "mynativelib",
2183 prefer: false,
2184 visibility: ["//visibility:public"],
Martin Stjernholm1e041092020-11-03 00:11:09 +00002185 apex_available: ["//apex_available:platform"],
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002186 compile_multilib: "both",
Paul Duffin86b02a72021-02-22 11:50:04 +00002187 export_include_dirs: ["include/myinclude"],
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002188 arch: {
2189 arm64: {
2190 export_system_include_dirs: ["arm64/include/arm64/include"],
2191 },
2192 arm: {
2193 srcs: ["arm/lib/mynativelib.so"],
2194 },
2195 },
2196}
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002197`),
2198 checkAllCopyRules(`
Paul Duffin86b02a72021-02-22 11:50:04 +00002199myinclude/Test.h -> include/myinclude/Test.h
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002200arm64/include/Arm64Test.h -> arm64/include/arm64/include/Arm64Test.h
Paul Duffin1822a0a2021-03-21 12:56:33 +00002201.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
2202`),
Martin Stjernholm59e0c7a2020-10-28 23:38:33 +00002203 )
2204}