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    // Inherits all licenses from parent to get Apache 2.0 and package name.
20    default_applicable_licenses: [
21        "packages_modules_NeuralNetworks_runtime_license",
22    ],
23}
24
25cc_defaults {
26    name: "NeuralNetworksTest_default_libs",
27    defaults: [
28        "neuralnetworks_defaults",
29        "neuralnetworks_use_latest_utils_hal_aidl",
30    ],
31    host_supported: true,
32    // b/109953668, disable OpenMP
33    // openmp: true,
34    shared_libs: [
35        "[email protected]",
36        "[email protected]",
37        "libbase",
38        "libbinder_ndk",
39        "libcutils",
40        "libfmq",
41        "libhidlbase",
42        "libhidlmemory",
43        "liblog",
44        "libneuralnetworks_packageinfo",
45        "libutils",
46    ],
47    static_libs: [
48        "[email protected]",
49        "[email protected]",
50        "[email protected]",
51        "[email protected]",
52        "libaidlcommonsupport",
53        "libneuralnetworks_generated_test_harness",
54        "libtextclassifier_hash_static",
55        "neuralnetworks_utils_hal_service",
56        "server_configurable_flags",
57    ],
58    whole_static_libs: [
59        "libcrypto_static",
60    ],
61    target: {
62        android: {
63            shared_libs: [
64                "libandroid",
65                "libnativewindow",
66                "libstatssocket",
67            ],
68        },
69        host: {
70            cflags: [
71                "-D__ANDROID_API_FUTURE__=10000",
72                "-D__ANDROID_API_Q__=29",
73                "-D__ANDROID_API_R__=30",
74                "-D__ANDROID_API_S__=31",
75                "-D__INTRODUCED_IN(n)=",
76            ],
77        },
78    },
79    srcs: [
80        "RequireDebug.cpp", // Abort compilation if NDEBUG is defined
81    ],
82    cflags: [
83        "-UNDEBUG",
84    ],
85}
86
87cc_defaults {
88    name: "NeuralNetworksTest_defaults",
89    defaults: ["NeuralNetworksTest_default_libs"],
90    srcs: [
91        // Subset of tests that rely only on public functionality.
92        //
93        // Changes to this list must be reflected in the "CtsNNAPITests_static"
94        // library to ensure CTS tests coverage.
95        "GeneratedTestUtils.cpp",
96        "TestAssertions.cpp",
97        "TestControlFlow.cpp",
98        "TestFree.cpp",
99        "TestGenerated.cpp",
100        "TestMemory.cpp",
101        "TestNeuralNetworksWrapper.cpp",
102        "TestOperandExtraParams.cpp",
103        "TestTrivialModel.cpp",
104        "TestUnknownDimensions.cpp",
105        "TestUnspecifiedDimensions.cpp",
106        "TestUpdatability.cpp",
107        "TestValidateModel.cpp",
108        "TestValidateOperations.cpp",
109        "TestValidation.cpp",
110        "TestWrapper.cpp",
111    ],
112    tidy_disabled_srcs: [
113        "TestValidateModel.cpp", // includes large generated code
114    ],
115    header_libs: [
116        "libneuralnetworks_common_headers",
117        "neuralnetworks_types_headers",
118    ],
119    static_libs: [
120        "libgmock",
121    ],
122    whole_static_libs: [
123        "neuralnetworks_generated_AIDL_V2_example",
124        "neuralnetworks_generated_AIDL_V3_example",
125        "neuralnetworks_generated_V1_0_example",
126        "neuralnetworks_generated_V1_1_example",
127        "neuralnetworks_generated_V1_2_example",
128        "neuralnetworks_generated_V1_3_cts_only_example",
129        "neuralnetworks_generated_V1_3_example",
130    ],
131    target: {
132        android: {
133            shared_libs: [
134                "libvulkan",
135            ],
136            srcs: [
137                "TestGpuNnapi.cpp",
138            ],
139        },
140    },
141}
142
143cc_test {
144    name: "NeuralNetworksTest_shared_partial",
145    host_supported: false,
146    defaults: ["NeuralNetworksTest_defaults"],
147    srcs: [
148        "TestMain.cpp",
149    ],
150    cflags: [
151        "-DNNTEST_ONLY_PUBLIC_API",
152    ],
153    shared_libs: [
154        "libneuralnetworks",
155    ],
156}
157
158cc_defaults {
159    name: "NeuralNetworksTest_static_defaults",
160    defaults: ["NeuralNetworksTest_defaults"],
161    srcs: [
162        // Tests that rely on non-public functionality (i.e., symbols
163        // not exported from libneuralnetworks.so).
164        //
165        // b/109953668, disable OpenMP
166        // "TestOpenmpSettings.cpp",
167        "PreparedModelCallback.cpp",
168        "TestCompilationCaching.cpp",
169        "TestCompliance.cpp",
170        "TestExecution.cpp",
171        "TestExtensions.cpp",
172        "TestFailingDriver.cpp",
173        "TestIntrospectionControl.cpp",
174        "TestMain.cpp",
175        "TestMemoryDomain.cpp",
176        "TestMemoryInternal.cpp",
177        "TestPartitioning.cpp",
178        "TestPartitioningRandom.cpp",
179        "TestRemoveDefaultArguments.cpp",
180        "TestServerFlag.cpp",
181        "TestTelemetry.cpp",
182        "fibonacci_extension/FibonacciDriver.cpp",
183        "fibonacci_extension/FibonacciExtensionTest.cpp",
184    ],
185    static_libs: [
186        "libSampleDriver",
187        "libgmock",
188        "libneuralnetworks_common",
189        "libneuralnetworks_generated_test_harness",
190        "libneuralnetworks_static",
191        "neuralnetworks_test_utils",
192    ],
193    shared_libs: [
194        "libcutils",
195    ],
196    header_libs: [
197        "libneuralnetworks_private_headers",
198        "libutils_headers",
199        "neuralnetworks_example_fibonacci_extension",
200    ],
201}
202
203cc_defaults {
204    name: "NeuralNetworksTest_v2_static_defaults",
205    defaults: ["NeuralNetworksTest_static_defaults"],
206    srcs: [
207        "TestCompatibilityLayer.cpp",
208    ],
209    exclude_srcs: [
210        "PreparedModelCallback.cpp",
211        "TestCompilationCaching.cpp",
212        "TestCompliance.cpp",
213        "TestControlFlow.cpp",
214        "TestExecution.cpp",
215        "TestExtensions.cpp",
216        "TestFailingDriver.cpp",
217        "TestFree.cpp",
218        "TestGenerated.cpp",
219        "TestIntrospectionControl.cpp",
220        "TestMemory.cpp",
221        "TestMemoryDomain.cpp",
222        "TestMemoryInternal.cpp",
223        "TestOperandExtraParams.cpp",
224        "TestPartitioning.cpp",
225        "TestPartitioningRandom.cpp",
226        "TestRemoveDefaultArguments.cpp",
227        "TestServerFlag.cpp",
228        "TestTelemetry.cpp",
229        "TestTrivialModel.cpp",
230        "TestUnknownDimensions.cpp",
231        "TestUnspecifiedDimensions.cpp",
232        "TestUpdatability.cpp",
233        "TestValidateModel.cpp",
234        "TestValidateOperations.cpp",
235        "TestValidation.cpp",
236        "fibonacci_extension/FibonacciDriver.cpp",
237        "fibonacci_extension/FibonacciExtensionTest.cpp",
238    ],
239
240    include_dirs: [
241        "external/flatbuffers/include",
242        "external/tensorflow",
243    ],
244
245    static_libs: [
246        "libflatbuffers-cpp",
247        "libneuralnetworks_v2_static_experimental",
248        "libtflite_static",
249    ],
250    exclude_static_libs: [
251        "libneuralnetworks_static",
252    ],
253}
254
255cc_test {
256    name: "NeuralNetworksTest_static",
257    defaults: ["NeuralNetworksTest_static_defaults"],
258    test_suites: [
259        "general-tests",
260    ],
261    target: {
262        android: {
263            test_config: "AndroidTest_NeuralNetworksTest_static.xml",
264            srcs: ["TestStatsdTelemetry.cpp"],
265        },
266        host: {
267            cflags: [
268                "-D__ANDROID_API__=10000",
269            ],
270        },
271    },
272    whole_static_libs: [
273        "neuralnetworks_generated_experimental_example",
274    ],
275    exclude_static_libs: [
276        "libneuralnetworks_common",
277        "libneuralnetworks_static",
278        "neuralnetworks_types",
279        "server_configurable_flags",
280    ],
281    static_libs: [
282        "libneuralnetworks_common_experimental",
283        "libneuralnetworks_static_experimental",
284        "neuralnetworks_types_experimental",
285    ],
286    cflags: ["-DNN_EXPERIMENTAL_FEATURE"],
287    test_options: {
288        unit_test: false,
289    },
290}
291
292cc_test {
293    name: "NeuralNetworksTest_v2_static",
294    defaults: ["NeuralNetworksTest_v2_static_defaults"],
295    test_suites: [
296        "general-tests",
297    ],
298    target: {
299        android: {
300            test_config: "AndroidTest_NeuralNetworksTest_v2_static.xml",
301            srcs: ["TestStatsdTelemetry.cpp"],
302        },
303        host: {
304            cflags: [
305                "-D__ANDROID_API__=10000",
306            ],
307        },
308    },
309    whole_static_libs: [
310        "neuralnetworks_generated_experimental_example",
311    ],
312    exclude_static_libs: [
313        "libneuralnetworks_common",
314        "neuralnetworks_types",
315        "server_configurable_flags",
316    ],
317    static_libs: [
318        "libneuralnetworks_common_experimental",
319        "neuralnetworks_types_experimental",
320    ],
321    cflags: ["-DNN_EXPERIMENTAL_FEATURE"],
322    test_options: {
323        unit_test: false,
324    },
325}
326
327tidy_disabled_operation_signatures_files = [
328    // These took too much time with clang-tidy.
329    "fuzzing/operation_signatures/Convolutions.cpp",
330    "fuzzing/operation_signatures/Poolings.cpp",
331    "fuzzing/operation_signatures/Reshape.cpp",
332    "fuzzing/operation_signatures/Resize.cpp",
333]
334
335cc_test {
336    name: "NeuralNetworksTest_static_fuzzing",
337    defaults: ["NeuralNetworksTest_default_libs"],
338    srcs: [
339        "GeneratedTestUtils.cpp",
340        "TestNeuralNetworksWrapper.cpp",
341        "fuzzing/OperationManager.cpp",
342        "fuzzing/RandomGraphGenerator.cpp",
343        "fuzzing/RandomGraphGeneratorUtils.cpp",
344        "fuzzing/RandomVariable.cpp",
345        "fuzzing/TestRandomGraph.cpp",
346        "fuzzing/operation_signatures/*.cpp",
347    ],
348    tidy_disabled_srcs: tidy_disabled_operation_signatures_files,
349    static_libs: [
350        "libSampleDriver",
351        "libgmock",
352        "libneuralnetworks_common",
353        "libneuralnetworks_static",
354        "neuralnetworks_types",
355        "neuralnetworks_utils_hal_1_0",
356        "neuralnetworks_utils_hal_1_1",
357        "neuralnetworks_utils_hal_1_2",
358        "neuralnetworks_utils_hal_1_3",
359    ],
360    target: {
361        android: {
362            shared_libs: [
363                "libmemunreachable",
364            ],
365        },
366    },
367    header_libs: [
368        "libneuralnetworks_private_headers",
369    ],
370    sanitize: {
371        integer_overflow: true,
372    },
373    test_options: {
374        unit_test: false,
375    },
376}
377
378cc_fuzz {
379    name: "libneuralnetworks_fuzzer",
380    defaults: [
381        "NeuralNetworksTest_default_libs",
382        "libneuralnetworks_fuzzer_defaults",
383    ],
384    owner: "google",
385    fuzz_config: {
386        cc: ["[email protected]"],
387    },
388    srcs: [
389        "android_fuzzing/FuzzTest.cpp",
390    ],
391    static_libs: [
392        "libneuralnetworks_common",
393        "libneuralnetworks_generated_test_harness",
394        "libneuralnetworks_static",
395    ],
396}
397
398cc_fuzz {
399    name: "libneuralnetworks_driver_fuzzer",
400    defaults: [
401        "NeuralNetworksTest_default_libs",
402        "libneuralnetworks_fuzzer_defaults",
403    ],
404    owner: "google",
405    fuzz_config: {
406        cc: ["[email protected]"],
407    },
408    srcs: [
409        "android_fuzzing/DriverFuzzTest.cpp",
410    ],
411    header_libs: [
412        "libneuralnetworks_headers",
413    ],
414    static_libs: [
415        "libneuralnetworks_common",
416        "libneuralnetworks_generated_test_harness",
417        "neuralnetworks_canonical_sample_driver",
418        "neuralnetworks_test_utils",
419        "neuralnetworks_types",
420    ],
421}
422
423// Temporarily disabled due to b/139889855.
424cc_test {
425    name: "NeuralNetworksTest_static_ubsan",
426    host_supported: false,
427    defaults: ["NeuralNetworksTest_static_defaults"],
428    enabled: false,
429    sanitize: {
430        undefined: true,
431        all_undefined: true,
432        diag: {
433            undefined: true,
434        },
435    },
436}
437
438cc_defaults {
439    name: "NeuralNetworksTest_mt_defaults",
440    defaults: ["NeuralNetworksTest_default_libs"],
441    host_supported: false,
442    srcs: [
443        "GeneratedTestUtils.cpp",
444        "TestGenerated.cpp",
445        "TestMain.cpp",
446        "TestNeuralNetworksWrapper.cpp",
447    ],
448    cflags: [
449        "-DNNTEST_MULTITHREADED",
450    ],
451    static_libs: [
452        "libSampleDriver",
453        "libgmock",
454        "libneuralnetworks_common",
455        "libneuralnetworks_static",
456    ],
457    whole_static_libs: [
458        "neuralnetworks_generated_AIDL_V2_example",
459        "neuralnetworks_generated_AIDL_V3_example",
460        "neuralnetworks_generated_V1_0_example",
461        "neuralnetworks_generated_V1_1_example",
462        "neuralnetworks_generated_V1_2_example",
463        "neuralnetworks_generated_V1_3_cts_only_example",
464        "neuralnetworks_generated_V1_3_example",
465    ],
466    shared_libs: [
467        "libcutils",
468    ],
469    header_libs: [
470        "libneuralnetworks_private_headers",
471    ],
472}
473
474cc_test {
475    name: "NeuralNetworksTest_mt_static",
476    defaults: ["NeuralNetworksTest_mt_defaults"],
477}
478
479cc_library_static {
480    name: "CtsNNAPITests_static",
481    host_supported: true,
482    srcs: [
483        ":libneuralnetworks_generated_test_harness_for_cts",
484        "CtsMain.cpp",
485        "GeneratedTestUtils.cpp",
486        "RequireDebug.cpp", // Abort compilation if NDEBUG is defined
487        "TestControlFlow.cpp",
488        "TestFree.cpp",
489        "TestGenerated.cpp",
490        "TestMemory.cpp",
491        "TestNeuralNetworksWrapper.cpp",
492        "TestTrivialModel.cpp",
493        "TestUnknownDimensions.cpp",
494        "TestUpdatability.cpp",
495        "TestValidateModel.cpp",
496        "TestValidateOperations.cpp",
497        "TestValidation.cpp",
498        "TestWrapper.cpp",
499        "fuzzing/OperationManager.cpp",
500        "fuzzing/RandomGraphGenerator.cpp",
501        "fuzzing/RandomGraphGeneratorUtils.cpp",
502        "fuzzing/RandomVariable.cpp",
503        "fuzzing/TestRandomGraph.cpp",
504        "fuzzing/operation_signatures/*.cpp",
505        "generated/spec_AIDL_V*/*.example.cpp",
506        "generated/spec_V1_*/*.example.cpp",
507    ],
508    // generated code are too big to run with clang-tidy
509    tidy_disabled_srcs: [
510        "TestValidateModel.cpp", // includes large generated code
511        "generated/spec_AIDL_V*/*.example.cpp",
512        "generated/spec_V1_*/*.example.cpp",
513    ] + tidy_disabled_operation_signatures_files,
514    include_dirs: [
515        "packages/modules/NeuralNetworks/common/include",
516        "packages/modules/NeuralNetworks/common/types/include",
517        "packages/modules/NeuralNetworks/runtime/",
518        "packages/modules/NeuralNetworks/runtime/include/",
519        "packages/modules/NeuralNetworks/tools/test_generator/test_harness/include",
520    ],
521    cflags: [
522        "-DNNTEST_CTS",
523        "-DNNTEST_ONLY_PUBLIC_API",
524        "-UNDEBUG",
525        "-Wall",
526        "-Werror",
527    ],
528    shared_libs: [
529        "liblog",
530        "libneuralnetworks",
531    ],
532    target: {
533        android: {
534            static_libs: [
535                "libbase_ndk",
536                "libgmock_ndk",
537                "libgtest_ndk_c++",
538            ],
539            shared_libs: [
540                "libandroid",
541                "libvulkan",
542            ],
543            srcs: [
544                "TestGpuNnapi.cpp",
545            ],
546        },
547        host: {
548            static_libs: [
549                "libbase",
550                "libgmock",
551                "libgtest",
552            ],
553            cflags: [
554                "-D__ANDROID_API_FUTURE__=10000",
555                "-D__ANDROID_API_Q__=29",
556                "-D__ANDROID_API_R__=30",
557                "-D__ANDROID_API_S__=31",
558                "-D__ANDROID_API__=10000",
559                "-D__INTRODUCED_IN(n)=",
560            ],
561        },
562    },
563    min_sdk_version: "30",
564    sdk_version: "current",
565    stl: "libc++_static",
566}
567
568cc_defaults {
569    name: "neuralnetworks_generated_defaults",
570    tidy: false, // generated files are too big to run with clang-tidy
571    host_supported: true,
572    vendor_available: true,
573    static_libs: ["libneuralnetworks_generated_test_harness"],
574}
575
576cc_library_static {
577    name: "neuralnetworks_generated_V1_0_example",
578    defaults: ["neuralnetworks_generated_defaults"],
579    srcs: ["generated/spec_V1_0/*.example.cpp"],
580}
581
582cc_library_static {
583    name: "neuralnetworks_generated_V1_1_example",
584    defaults: ["neuralnetworks_generated_defaults"],
585    srcs: ["generated/spec_V1_1/*.example.cpp"],
586}
587
588cc_library_static {
589    name: "neuralnetworks_generated_V1_2_example",
590    defaults: ["neuralnetworks_generated_defaults"],
591    srcs: ["generated/spec_V1_2/*.example.cpp"],
592}
593
594cc_library_static {
595    name: "neuralnetworks_generated_V1_3_example",
596    defaults: ["neuralnetworks_generated_defaults"],
597    srcs: ["generated/spec_V1_3/*.example.cpp"],
598}
599
600cc_library_static {
601    name: "neuralnetworks_generated_AIDL_V2_example",
602    defaults: ["neuralnetworks_generated_defaults"],
603    srcs: ["generated/spec_AIDL_V2/*.example.cpp"],
604}
605
606cc_library_static {
607    name: "neuralnetworks_generated_AIDL_V3_example",
608    defaults: ["neuralnetworks_generated_defaults"],
609    srcs: ["generated/spec_AIDL_V3/*.example.cpp"],
610}
611
612cc_library_static {
613    name: "neuralnetworks_generated_V1_3_cts_only_example",
614    host_supported: true,
615    tidy: false, // generated files are too big to run with clang-tidy
616    srcs: ["generated/spec_V1_3_cts_only/*.example.cpp"],
617    static_libs: ["libneuralnetworks_generated_test_harness"],
618}
619
620cc_library_static {
621    name: "neuralnetworks_generated_experimental_example",
622    defaults: ["neuralnetworks_generated_defaults"],
623    srcs: ["generated/spec_experimental/*.example.cpp"],
624    cflags: ["-DNN_EXPERIMENTAL_FEATURE"],
625}
626
627cc_library_static {
628    name: "NeuralNetworksTest_random_graph",
629    host_supported: true,
630    srcs: [
631        ":libneuralnetworks_generated_test_harness_for_cts",
632        "GeneratedTestUtils.cpp",
633        "TestNeuralNetworksWrapper.cpp",
634        "fuzzing/OperationManager.cpp",
635        "fuzzing/RandomGraphGenerator.cpp",
636        "fuzzing/RandomGraphGeneratorUtils.cpp",
637        "fuzzing/RandomVariable.cpp",
638        "fuzzing/operation_signatures/*.cpp",
639    ],
640    tidy_disabled_srcs: tidy_disabled_operation_signatures_files,
641    include_dirs: [
642        "packages/modules/NeuralNetworks/common/include",
643        "packages/modules/NeuralNetworks/runtime/",
644        "packages/modules/NeuralNetworks/runtime/include/",
645    ],
646    header_libs: [
647        "libneuralnetworks_generated_test_harness_headers_for_cts",
648    ],
649    export_include_dirs: [
650        ".",
651        "fuzzing",
652    ],
653    cflags: [
654        "-UNDEBUG",
655        "-Wall",
656        "-Werror",
657    ],
658    shared_libs: [
659        "liblog",
660        "libneuralnetworks",
661    ],
662    target: {
663        android: {
664            static_libs: [
665                "libbase_ndk",
666                "libgmock_ndk",
667                "libgtest_ndk_c++",
668            ],
669            shared_libs: [
670                "libandroid",
671            ],
672        },
673        host: {
674            static_libs: [
675                "libbase",
676                "libgmock",
677                "libgtest",
678            ],
679            cflags: [
680                "-D__ANDROID_API_S__=31",
681                "-D__INTRODUCED_IN(n)=",
682            ],
683        },
684    },
685    sanitize: {
686        all_undefined: true,
687    },
688    strip: {
689        keep_symbols: true,
690    },
691    sdk_version: "current",
692    stl: "libc++_static",
693}
694
695cc_test {
696    name: "NeuralNetworksSupportLibraryTest",
697    host_supported: false,
698    srcs: [
699        "GeneratedTestUtils.cpp",
700        "SupportLibraryTestGenerated.cpp",
701        "SupportLibraryTestMain.cpp",
702    ],
703    cflags: [
704        "-DNNTEST_COMPUTE_MODE",
705        "-DNNTEST_ONLY_PUBLIC_API",
706        "-DNNTEST_SLTS",
707        "-DNN_COMPATIBILITY_LIBRARY_BUILD",
708        "-Wall",
709        "-Werror",
710    ],
711    shared_libs: [
712        "libandroid",
713        "liblog",
714    ],
715    static_libs: [
716        "libbase_ndk",
717        "libgmock_ndk",
718        "libgtest_ndk_c++",
719        "libneuralnetworks_generated_test_harness",
720        "neuralnetworks_supportlibrary_loader",
721    ],
722    whole_static_libs: [
723        "neuralnetworks_generated_AIDL_V2_example",
724        "neuralnetworks_generated_AIDL_V3_example",
725        "neuralnetworks_generated_V1_0_example",
726        "neuralnetworks_generated_V1_1_example",
727        "neuralnetworks_generated_V1_2_example",
728        "neuralnetworks_generated_V1_3_example", // TODO (b/209655430): Decide if need to add "neuralnetworks_generated_V1_3_cts_only_example".
729    ],
730    include_dirs: [
731        "packages/modules/NeuralNetworks/runtime/include/",
732        "packages/modules/NeuralNetworks/tools/test_generator/test_harness/include",
733    ],
734    test_suites: ["general-tests"],
735}
736