blob: 0b43176ab30cae5dca90b3f95facab0895ce04c6 [file] [log] [blame]
//
// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once
#include "ExecuteNetworkParams.hpp"
#include <armnn/IRuntime.hpp>
/*
* Historically we use the ',' character to separate dimensions in a tensor shape. However, cxxopts will read this
* an an array of values which is fine until we have multiple tensors specified. This lumps the values of all shapes
* together in a single array and we cannot break it up again. We'll change the vector delimiter to a '.'. We do this
* as close as possible to the usage of cxxopts to avoid polluting other possible uses.
*/
#define CXXOPTS_VECTOR_DELIMITER '.'
#include <cxxopts/cxxopts.hpp>
/// Holds and parses program options for the ExecuteNetwork application
struct ProgramOptions
{
/// Initializes ProgramOptions by adding options to the underlying cxxopts::options object.
/// (Does not parse any options)
ProgramOptions();
/// Runs ParseOptions() on initialization
ProgramOptions(int ac, const char* av[]);
/// Parses program options from the command line or another source and stores
/// the values in member variables. It also checks the validity of the parsed parameters.
/// Throws a cxxopts exception if parsing fails or an armnn exception if parameters are not valid.
void ParseOptions(int ac, const char* av[]);
/// Ensures that the parameters for ExecuteNetwork fit together
void ValidateExecuteNetworkParams();
/// Ensures that the runtime options are valid
void ValidateRuntimeOptions();
cxxopts::Options m_CxxOptions;
cxxopts::ParseResult m_CxxResult;
ExecuteNetworkParams m_ExNetParams;
armnn::IRuntime::CreationOptions m_RuntimeOptions;
};