1/*
2 * Copyright 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package {
18    // See: http://go/android-license-faq
19    // A large-scale-change added 'default_applicable_licenses' to import
20    // all of the 'license_kinds' from "packages_modules_NeuralNetworks_runtime_license"
21    // to get the below license kinds:
22    //   SPDX-license-identifier-Apache-2.0
23    //   SPDX-license-identifier-Artistic
24    default_applicable_licenses: [
25        "packages_modules_NeuralNetworks_runtime_license",
26    ],
27}
28
29cc_defaults {
30    name: "NeuralNetworksTest_default_libs",
31    defaults: ["neuralnetworks_defaults"],
32    host_supported: false,
33    // b/109953668, disable OpenMP
34    // openmp: true,
35    shared_libs: [
36        "android.hidl.allocator@1.0",
37        "android.hidl.memory@1.0",
38        "libandroid",
39        "libbase",
40        "libbinder_ndk",
41        "libcutils",
42        "libfmq",
43        "libhidlbase",
44        "libhidlmemory",
45        "liblog",
46        "libnativewindow",
47        "libneuralnetworks_packageinfo",
48        "libutils",
49    ],
50    static_libs: [
51        "android.hardware.common-V2-ndk_platform",
52        "android.hardware.graphics.common-V2-ndk_platform",
53        "android.hardware.neuralnetworks-V1-ndk_platform",
54        "android.hardware.neuralnetworks@1.0",
55        "android.hardware.neuralnetworks@1.1",
56        "android.hardware.neuralnetworks@1.2",
57        "android.hardware.neuralnetworks@1.3",
58        "libaidlcommonsupport",
59        "libc++fs",
60        "libneuralnetworks_generated_test_harness",
61        "libtextclassifier_hash_static",
62    ],
63    whole_static_libs: [
64        "libcrypto_static",
65    ],
66    srcs: [
67        "RequireDebug.cpp", // Abort compilation if NDEBUG is defined
68    ],
69    cflags: [
70        "-UNDEBUG",
71    ],
72}
73
74cc_defaults {
75    name: "NeuralNetworksTest_defaults",
76    defaults: ["NeuralNetworksTest_default_libs"],
77    srcs: [
78        // Subset of tests that rely only on public functionality.
79        //
80        // Changes to this list must be reflected in the "CtsNNAPITests_static"
81        // library to ensure CTS tests coverage.
82        "GeneratedTestUtils.cpp",
83        "TestAssertions.cpp",
84        "TestControlFlow.cpp",
85        "TestFree.cpp",
86        "TestGenerated.cpp",
87        "TestGpuNnapi.cpp",
88        "TestMemory.cpp",
89        "TestNeuralNetworksWrapper.cpp",
90        "TestOperandExtraParams.cpp",
91        "TestTrivialModel.cpp",
92        "TestUnknownDimensions.cpp",
93        "TestUnspecifiedDimensions.cpp",
94        "TestUpdatability.cpp",
95        "TestValidateModel.cpp",
96        "TestValidateOperations.cpp",
97        "TestValidation.cpp",
98        "TestWrapper.cpp",
99
100    ],
101    header_libs: [
102        "libneuralnetworks_common_headers",
103    ],
104    static_libs: [
105        "libgmock",
106    ],
107    shared_libs: [
108        "libvulkan",
109    ],
110    whole_static_libs: [
111        "neuralnetworks_generated_V1_0_example",
112        "neuralnetworks_generated_V1_1_example",
113        "neuralnetworks_generated_V1_2_example",
114        "neuralnetworks_generated_V1_3_cts_only_example",
115        "neuralnetworks_generated_V1_3_example",
116    ],
117}
118
119cc_test {
120    name: "NeuralNetworksTest_shared_partial",
121    defaults: ["NeuralNetworksTest_defaults"],
122    srcs: [
123        "TestMain.cpp",
124    ],
125    cflags: [
126        "-DNNTEST_ONLY_PUBLIC_API",
127    ],
128    shared_libs: [
129        "libneuralnetworks",
130    ],
131}
132
133cc_defaults {
134    name: "NeuralNetworksTest_static_defaults",
135    defaults: ["NeuralNetworksTest_defaults"],
136    srcs: [
137        // Tests that rely on non-public functionality (i.e., symbols
138        // not exported from libneuralnetworks.so).
139        //
140        // b/109953668, disable OpenMP
141        // "TestOpenmpSettings.cpp",
142        "PreparedModelCallback.cpp",
143        "TestCompilationCaching.cpp",
144        "TestCompliance.cpp",
145        "TestExecution.cpp",
146        "TestExtensions.cpp",
147        "TestFailingDriver.cpp",
148        "TestIntrospectionControl.cpp",
149        "TestMemoryDomain.cpp",
150        "TestMemoryInternal.cpp",
151        "TestPartitioning.cpp",
152        "TestPartitioningRandom.cpp",
153        "TestRemoveDefaultArguments.cpp",
154        "fibonacci_extension/FibonacciDriver.cpp",
155        "fibonacci_extension/FibonacciExtensionTest.cpp",
156
157        "TestMain.cpp",
158    ],
159    static_libs: [
160        "android.hardware.neuralnetworks@1.0-adapter-helper",
161        "android.hardware.neuralnetworks@1.1-adapter-helper",
162        "android.hardware.neuralnetworks@1.2-adapter-helper",
163        "android.hardware.neuralnetworks@1.3-adapter-helper",
164        "libSampleDriver",
165        "libgmock",
166        "libhidladapter",
167        "libneuralnetworks_common",
168        "libneuralnetworks_generated_test_harness",
169        "libneuralnetworks_static",
170        "neuralnetworks_test_utils",
171    ],
172    shared_libs: [
173        "libcutils",
174    ],
175    header_libs: [
176        "libneuralnetworks_private_headers",
177        "libutils_headers",
178        "neuralnetworks_example_fibonacci_extension",
179    ],
180}
181
182cc_test {
183    name: "NeuralNetworksTest_static",
184    defaults: ["NeuralNetworksTest_static_defaults"],
185    test_suites: [
186        "general-tests",
187    ],
188}
189
190cc_test {
191    name: "NeuralNetworksTest_static_fuzzing",
192    defaults: ["NeuralNetworksTest_default_libs"],
193    srcs: [
194        "GeneratedTestUtils.cpp",
195        "TestNeuralNetworksWrapper.cpp",
196        "fuzzing/OperationManager.cpp",
197        "fuzzing/RandomGraphGenerator.cpp",
198        "fuzzing/RandomGraphGeneratorUtils.cpp",
199        "fuzzing/RandomVariable.cpp",
200        "fuzzing/TestRandomGraph.cpp",
201        "fuzzing/operation_signatures/*.cpp",
202    ],
203    static_libs: [
204        "libSampleDriver",
205        "libgmock",
206        "libneuralnetworks_common",
207        "libneuralnetworks_static",
208        "neuralnetworks_types",
209        "neuralnetworks_utils_hal_1_0",
210        "neuralnetworks_utils_hal_1_1",
211        "neuralnetworks_utils_hal_1_2",
212        "neuralnetworks_utils_hal_1_3",
213    ],
214    shared_libs: ["libmemunreachable"],
215    header_libs: [
216        "libneuralnetworks_private_headers",
217    ],
218    sanitize: {
219        integer_overflow: true,
220    },
221}
222
223cc_fuzz {
224    name: "libneuralnetworks_fuzzer",
225    defaults: [
226        "NeuralNetworksTest_default_libs",
227        "libneuralnetworks_fuzzer_defaults",
228    ],
229    owner: "google",
230    fuzz_config: {
231        cc: ["butlermichael@google.com"],
232        // Temporarily disabled due to b/151102177.
233        fuzz_on_haiku_host: false,
234        fuzz_on_haiku_device: false,
235    },
236    srcs: [
237        "android_fuzzing/FuzzTest.cpp",
238    ],
239    static_libs: [
240        "libneuralnetworks_common",
241        "libneuralnetworks_generated_test_harness",
242        "libneuralnetworks_static",
243    ],
244}
245
246cc_fuzz {
247    name: "libneuralnetworks_driver_fuzzer",
248    defaults: [
249        "NeuralNetworksTest_default_libs",
250        "libneuralnetworks_fuzzer_defaults",
251    ],
252    owner: "google",
253    fuzz_config: {
254        cc: ["butlermichael@google.com"],
255        // Temporarily disabled due to b/151102177.
256        fuzz_on_haiku_host: false,
257        fuzz_on_haiku_device: false,
258    },
259    srcs: [
260        "android_fuzzing/DriverFuzzTest.cpp",
261    ],
262    static_libs: [
263        "libSampleDriver",
264        "libneuralnetworks_common",
265        "libneuralnetworks_generated_test_harness",
266        "libneuralnetworks_static",
267    ],
268}
269
270// Temporarily disabled due to b/139889855.
271cc_test {
272    name: "NeuralNetworksTest_static_asan",
273    defaults: ["NeuralNetworksTest_static_defaults"],
274    enabled: false,
275    sanitize: {
276        address: true,
277    },
278    // Declare explicit library dependency for continuous builds
279    target: {
280        android_arm: {
281            required: [
282                "libclang_rt.asan-arm-android",
283            ],
284        },
285        android_arm64: {
286            required: [
287                "libclang_rt.asan-aarch64-android",
288            ],
289        },
290        android_x86: {
291            required: [
292                "libclang_rt.asan-i686-android",
293            ],
294        },
295        android_x86_64: {
296            required: [
297                "libclang_rt.asan-x86_64-android",
298            ],
299        },
300    },
301}
302
303// Temporarily disabled due to b/139889855.
304cc_test {
305    name: "NeuralNetworksTest_static_ubsan",
306    defaults: ["NeuralNetworksTest_static_defaults"],
307    enabled: false,
308    sanitize: {
309        undefined: true,
310        all_undefined: true,
311        diag: {
312            undefined: true,
313        },
314    },
315}
316
317cc_defaults {
318    name: "NeuralNetworksTest_mt_defaults",
319    defaults: ["NeuralNetworksTest_default_libs"],
320    srcs: [
321        "GeneratedTestUtils.cpp",
322        "TestGenerated.cpp",
323        "TestMain.cpp",
324        "TestNeuralNetworksWrapper.cpp",
325    ],
326    cflags: [
327        "-DNNTEST_MULTITHREADED",
328    ],
329    static_libs: [
330        "libSampleDriver",
331        "libgmock",
332        "libneuralnetworks_common",
333        "libneuralnetworks_static",
334    ],
335    whole_static_libs: [
336        "neuralnetworks_generated_V1_0_example",
337        "neuralnetworks_generated_V1_1_example",
338        "neuralnetworks_generated_V1_2_example",
339        "neuralnetworks_generated_V1_3_cts_only_example",
340        "neuralnetworks_generated_V1_3_example",
341    ],
342    shared_libs: [
343        "libcutils",
344    ],
345    header_libs: [
346        "libneuralnetworks_private_headers",
347    ],
348}
349
350cc_test {
351    name: "NeuralNetworksTest_mt_static",
352    defaults: ["NeuralNetworksTest_mt_defaults"],
353}
354
355// Temporarily disabled due to b/139889855.
356cc_test {
357    // Note: tsan not supported on Android (yet)
358    name: "NeuralNetworksTest_mt_static_asan",
359    defaults: ["NeuralNetworksTest_mt_defaults"],
360    enabled: false,
361    sanitize: {
362        address: true,
363    },
364}
365
366cc_library_static {
367    name: "CtsNNAPITests_static",
368    defaults: ["neuralnetworks_float16"],
369    srcs: [
370        ":libneuralnetworks_generated_test_harness_for_cts",
371        "CtsMain.cpp",
372        "GeneratedTestUtils.cpp",
373        "RequireDebug.cpp", // Abort compilation if NDEBUG is defined
374        "TestControlFlow.cpp",
375        "TestFree.cpp",
376        "TestGenerated.cpp",
377        "TestGpuNnapi.cpp",
378        "TestMemory.cpp",
379        "TestNeuralNetworksWrapper.cpp",
380        "TestTrivialModel.cpp",
381        "TestUnknownDimensions.cpp",
382        "TestUpdatability.cpp",
383        "TestValidateModel.cpp",
384        "TestValidateOperations.cpp",
385        "TestValidation.cpp",
386        "TestWrapper.cpp",
387        "fuzzing/OperationManager.cpp",
388        "fuzzing/RandomGraphGenerator.cpp",
389        "fuzzing/RandomGraphGeneratorUtils.cpp",
390        "fuzzing/RandomVariable.cpp",
391        "fuzzing/TestRandomGraph.cpp",
392        "fuzzing/operation_signatures/*.cpp",
393        "generated/spec_V1_*/*.example.cpp",
394    ],
395    include_dirs: [
396        "packages/modules/NeuralNetworks/common/include",
397        "packages/modules/NeuralNetworks/runtime/",
398        "packages/modules/NeuralNetworks/runtime/include/",
399        "packages/modules/NeuralNetworks/tools/test_generator/test_harness/include",
400    ],
401    cflags: [
402        "-DNNTEST_CTS",
403        "-DNNTEST_ONLY_PUBLIC_API",
404        "-UNDEBUG",
405        "-Wall",
406        "-Werror",
407    ],
408    shared_libs: [
409        "libandroid",
410        "liblog",
411        "libneuralnetworks",
412        "libvulkan",
413    ],
414    static_libs: [
415        "libbase_ndk",
416        "libgmock_ndk",
417        "libgtest_ndk_c++",
418    ],
419    min_sdk_version: "30",
420    sdk_version: "current",
421    stl: "libc++_static",
422}
423
424cc_defaults {
425    name: "neuralnetworks_generated_defaults",
426    defaults: ["neuralnetworks_float16"],
427    // b/146324523, NNAPI host build capability
428    host_supported: false,
429    vendor_available: true,
430    static_libs: ["libneuralnetworks_generated_test_harness"],
431}
432
433cc_library_static {
434    name: "neuralnetworks_generated_V1_0_example",
435    defaults: ["neuralnetworks_generated_defaults"],
436    srcs: ["generated/spec_V1_0/*.example.cpp"],
437}
438
439cc_library_static {
440    name: "neuralnetworks_generated_V1_1_example",
441    defaults: ["neuralnetworks_generated_defaults"],
442    srcs: ["generated/spec_V1_1/*.example.cpp"],
443}
444
445cc_library_static {
446    name: "neuralnetworks_generated_V1_2_example",
447    defaults: ["neuralnetworks_generated_defaults"],
448    srcs: ["generated/spec_V1_2/*.example.cpp"],
449}
450
451cc_library_static {
452    name: "neuralnetworks_generated_V1_3_example",
453    defaults: ["neuralnetworks_generated_defaults"],
454    srcs: ["generated/spec_V1_3/*.example.cpp"],
455}
456
457cc_library_static {
458    name: "neuralnetworks_generated_V1_3_cts_only_example",
459    defaults: ["neuralnetworks_float16"],
460    srcs: ["generated/spec_V1_3_cts_only/*.example.cpp"],
461    static_libs: ["libneuralnetworks_generated_test_harness"],
462}
463
464cc_library_static {
465    name: "NeuralNetworksTest_random_graph",
466    defaults: ["neuralnetworks_float16"],
467    srcs: [
468        ":libneuralnetworks_generated_test_harness_for_cts",
469        "GeneratedTestUtils.cpp",
470        "TestNeuralNetworksWrapper.cpp",
471        "fuzzing/OperationManager.cpp",
472        "fuzzing/RandomGraphGenerator.cpp",
473        "fuzzing/RandomGraphGeneratorUtils.cpp",
474        "fuzzing/RandomVariable.cpp",
475        "fuzzing/operation_signatures/*.cpp",
476    ],
477    include_dirs: [
478        "packages/modules/NeuralNetworks/common/include",
479        "packages/modules/NeuralNetworks/runtime/",
480        "packages/modules/NeuralNetworks/runtime/include/",
481    ],
482    header_libs: [
483        "libneuralnetworks_generated_test_harness_headers_for_cts",
484    ],
485    export_include_dirs: [
486        ".",
487        "fuzzing",
488    ],
489    cflags: [
490        "-UNDEBUG",
491        "-Wall",
492        "-Werror",
493    ],
494    shared_libs: [
495        "libandroid",
496        "liblog",
497        "libneuralnetworks",
498    ],
499    static_libs: [
500        "libbase_ndk",
501        "libgmock_ndk",
502        "libgtest_ndk_c++",
503    ],
504    sanitize: {
505        address: true,
506        all_undefined: true,
507    },
508    strip: {
509        keep_symbols: true,
510    },
511    sdk_version: "current",
512    stl: "libc++_static",
513}
514
515cc_test {
516    name: "NeuralNetworksSupportLibraryTest",
517    srcs: [
518        "GeneratedTestUtils.cpp",
519        "SupportLibraryTestGenerated.cpp",
520        "SupportLibraryTestMain.cpp",
521    ],
522    cflags: [
523        "-DNNTEST_COMPUTE_MODE",
524        "-DNNTEST_ONLY_PUBLIC_API",
525        "-DNNTEST_SLTS",
526        "-DNN_COMPATIBILITY_LIBRARY_BUILD",
527        "-Wall",
528        "-Werror",
529    ],
530    shared_libs: [
531        "libandroid",
532        "liblog",
533    ],
534    static_libs: [
535        "libbase_ndk",
536        "libgmock_ndk",
537        "libgtest_ndk_c++",
538        "libneuralnetworks_generated_test_harness",
539        "neuralnetworks_supportlibrary_loader",
540    ],
541    whole_static_libs: [
542        "neuralnetworks_generated_V1_0_example",
543        "neuralnetworks_generated_V1_1_example",
544        "neuralnetworks_generated_V1_2_example",
545        "neuralnetworks_generated_V1_3_cts_only_example",
546        "neuralnetworks_generated_V1_3_example",
547    ],
548    include_dirs: [
549        "packages/modules/NeuralNetworks/runtime/include/",
550        "packages/modules/NeuralNetworks/tools/test_generator/test_harness/include",
551    ],
552    test_suites: ["general-tests"],
553}
554