//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#pragma once

#include <HalInterfaces.h>

#include <log/log.h>

#ifdef ARMNN_ANDROID_NN_V1_2 // Using ::android::hardware::neuralnetworks::V1_2

#include "1.1/ArmnnDriver.hpp"
#include "1.2/ArmnnDriver.hpp"

namespace armnn_driver
{

class ArmnnDriver : public hal_1_2::ArmnnDriver
{
public:
    ArmnnDriver(DriverOptions options)
        : hal_1_2::ArmnnDriver(std::move(options))
    {
        ALOGV("ArmnnDriver::ArmnnDriver()");
    }
    ~ArmnnDriver() {}
};

} // namespace armnn_driver
#elif ARMNN_ANDROID_NN_V1_1 // Using ::android::hardware::neuralnetworks::V1_1

#include "1.1/ArmnnDriver.hpp"

namespace armnn_driver
{

class ArmnnDriver : public hal_1_1::ArmnnDriver
{
public:
    ArmnnDriver(DriverOptions options)
        : hal_1_1::ArmnnDriver(std::move(options))
    {
        ALOGV("ArmnnDriver::ArmnnDriver()");
    }
    ~ArmnnDriver() {}
};

} // namespace armnn_driver

#else // Fallback to ::android::hardware::neuralnetworks::V1_0

#include "1.0/ArmnnDriver.hpp"

namespace armnn_driver
{

class ArmnnDriver : public hal_1_0::ArmnnDriver
{
public:
    ArmnnDriver(DriverOptions options)
        : hal_1_0::ArmnnDriver(std::move(options))
    {
        ALOGV("ArmnnDriver::ArmnnDriver()");
    }
    ~ArmnnDriver() {}
};

} // namespace armnn_driver

#endif
