/*
 * Copyright 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

cc_defaults {
    name: "NeuralNetworksTest_default_libs",
    defaults: ["neuralnetworks_defaults"],
    host_supported: false,
    // b/109953668, disable OpenMP
    // openmp: true,
    shared_libs: [
        "libandroid",
        "libbase",
        "libbinder",
        "libcutils",
        "libfmq",
        "libhidlbase",
        "libhidltransport",
        "libhidlmemory",
        "liblog",
        "libnativewindow",
        "libtextclassifier_hash",
        "libui",
        "libutils",
        "android.hardware.neuralnetworks@1.0",
        "android.hardware.neuralnetworks@1.1",
        "android.hardware.neuralnetworks@1.2",
        "android.hidl.allocator@1.0",
        "android.hidl.memory@1.0",
    ],
    static_libs: [
        "libc++fs",
        "libcrypto",
    ],
    header_libs: [
        "libneuralnetworks_generated_test_harness_headers",
    ],
}

cc_defaults {
    name: "NeuralNetworksTest_defaults",
    defaults: ["NeuralNetworksTest_default_libs"],
    srcs: [
        "TestNeuralNetworksWrapper.cpp",

        // Subset of tests that rely only on public functionality.
        //
        // Changes to this list must be reflected in cts/tests/tests/neuralnetworks/Android.mk
        // to ensure CTS tests coverage.
        "generated/tests/*.cpp",
        "TestGenerated.cpp",
        "TestMemory.cpp",
        "TestOperandExtraParams.cpp",
        "TestTrivialModel.cpp",
        "TestUnknownDimensions.cpp",
        "TestUnspecifiedDimensions.cpp",
        "TestValidateModel.cpp",
        "TestValidateOperations.cpp",
        "TestValidation.cpp",
        "TestWrapper.cpp",
    ],
    static_libs: [
        "libgmock",
    ],
}

cc_test {
    name: "NeuralNetworksTest_shared_partial",
    defaults: ["NeuralNetworksTest_defaults"],
    srcs: [
        "TestMain.cpp",
    ],
    cflags: [
        "-DNNTEST_ONLY_PUBLIC_API"
    ],
    shared_libs: [
        "libneuralnetworks",
        "libtextclassifier_hash",
    ],
}

cc_defaults {
    name: "NeuralNetworksTest_static_defaults",
    defaults: ["NeuralNetworksTest_defaults"],
    srcs: [
        "TestMain.cpp",

        "Bridge.cpp",
        // Tests that rely on non-public functionality (i.e., symbols
        // not exported from libneuralnetworks.so).
        "TestCompilationCaching.cpp",
        "TestCompliance.cpp",
        "TestExecution.cpp",
        "TestMemoryInternal.cpp",
        // b/109953668, disable OpenMP
        // "TestOpenmpSettings.cpp",
        "TestPartitioning.cpp",
        "TestPartitioningRandom.cpp",
        "TestIntrospectionControl.cpp",
        "TestExtensions.cpp",
        "fibonacci_extension/FibonacciExtensionTest.cpp",
        "fibonacci_extension/FibonacciDriver.cpp",
    ],
    static_libs: [
        "libgmock",
        "libneuralnetworks",
        "libneuralnetworks_common",
        "libSampleDriver",
    ],
    shared_libs: [
        "libcutils",
    ],
    header_libs: [
        "libneuralnetworks_private_headers",
        "neuralnetworks_test_vendor_fibonacci_extension",
    ],
    test_suites: [
        "general-tests",
    ],
}

cc_test {
    name: "NeuralNetworksTest_static",
    defaults: ["NeuralNetworksTest_static_defaults"],
}

cc_test {
    name: "NeuralNetworksTest_static_fuzzing",
    defaults: ["NeuralNetworksTest_default_libs"],
    srcs: [
        "TestNeuralNetworksWrapper.cpp",
        "fuzzing/operation_signatures/*.cpp",
        "fuzzing/OperationManager.cpp",
        "fuzzing/RandomGraphGenerator.cpp",
        "fuzzing/RandomGraphGeneratorUtils.cpp",
        "fuzzing/RandomVariable.cpp",
        "fuzzing/TestRandomGraph.cpp",
    ],
    static_libs: [
        "libgmock",
        "libneuralnetworks",
        "libneuralnetworks_common",
        "libSampleDriver",
    ],
    header_libs: [
        "libneuralnetworks_private_headers",
    ],
}

cc_test {
    name: "NeuralNetworksTest_static_asan",
    defaults: ["NeuralNetworksTest_static_defaults"],
    sanitize: {
      address: true,
    },
    // Declare explicit library dependency for continuous builds
    target: {
        android_arm: {
            required: [
                "libclang_rt.asan-arm-android",
            ],
        },
        android_arm64: {
            required: [
                "libclang_rt.asan-aarch64-android",
            ],
        },
        android_x86: {
            required: [
                "libclang_rt.asan-i686-android",
            ],
        },
        android_x86_64: {
            required: [
                "libclang_rt.asan-x86_64-android",
            ],
        },
    },
}

cc_test {
    name: "NeuralNetworksTest_static_ubsan",
    defaults: ["NeuralNetworksTest_static_defaults"],
    sanitize: {
      undefined: true,
      all_undefined: true,
      diag: {
        undefined: true,
      },
    },
}

cc_defaults {
    name: "NeuralNetworksTest_mt_defaults",
    defaults: ["NeuralNetworksTest_default_libs"],
    srcs: [
        "TestNeuralNetworksWrapper.cpp",
        "TestMain.cpp",
        "generated/tests/*.cpp",
        "TestGenerated.cpp",
    ],
    cflags: [
        "-DNNTEST_MULTITHREADED"
    ],
    static_libs: [
        "libgmock",
        "libneuralnetworks",
        "libneuralnetworks_common",
        "libSampleDriver",
    ],
    shared_libs: [
        "libcutils",
    ],
    header_libs: [
        "libneuralnetworks_private_headers",
    ],
}

cc_test {
    name: "NeuralNetworksTest_mt_static",
    defaults: ["NeuralNetworksTest_mt_defaults"],
}

cc_test {
    // Note: tsan not supported on Android (yet)
    name: "NeuralNetworksTest_mt_static_asan",
    defaults: ["NeuralNetworksTest_mt_defaults"],
    sanitize: {
      address: true,
    },
}