diff options
Diffstat (limited to 'tests/tools/nnpackage_run/src/args.cc')
-rw-r--r-- | tests/tools/nnpackage_run/src/args.cc | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/tools/nnpackage_run/src/args.cc b/tests/tools/nnpackage_run/src/args.cc new file mode 100644 index 000000000..a7593fabb --- /dev/null +++ b/tests/tools/nnpackage_run/src/args.cc @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved + * + * 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. + */ + +#include "args.h" + +#include <iostream> +#include <boost/filesystem.hpp> + +namespace NNPackageRun +{ + +Args::Args(const int argc, char **argv) noexcept +{ + Initialize(); + Parse(argc, argv); +} + +void Args::Initialize(void) +{ + // General options + po::options_description general("General options"); + + // clang-format off + general.add_options() + ("help,h", "Display available options") + ("nnpackage", po::value<std::string>()->required()) + ("dump,d", po::value<std::string>()->default_value(""), "Output filename") + ("load,l", po::value<std::string>()->default_value(""), "Input filename"); + // clang-format on + + _options.add(general); + _positional.add("nnpackage", 1); +} + +void Args::Parse(const int argc, char **argv) +{ + po::variables_map vm; + po::store(po::command_line_parser(argc, argv).options(_options).positional(_positional).run(), + vm); + + { + auto conflicting_options = [&](const std::string &o1, const std::string &o2) { + if ((vm.count(o1) && !vm[o1].defaulted()) && (vm.count(o2) && !vm[o2].defaulted())) + { + throw boost::program_options::error(std::string("Two options '") + o1 + "' and '" + o2 + + "' cannot be given at once."); + } + }; + } + + if (vm.count("help")) + { + std::cout << "nnpackage_run\n\n"; + std::cout << "Usage: " << argv[0] << " path to nnpackage root directory [<options>]\n\n"; + std::cout << _options; + std::cout << "\n"; + + exit(0); + } + + po::notify(vm); + + if (vm.count("dump")) + { + _dump_filename = vm["dump"].as<std::string>(); + } + + if (vm.count("load")) + { + _load_filename = vm["load"].as<std::string>(); + } + + if (vm.count("nnpackage")) + { + _package_filename = vm["nnpackage"].as<std::string>(); + + if (_package_filename.empty()) + { + // TODO Print usage instead of the below message + std::cerr << "Please specify nnpackage file. Run with `--help` for usage." + << "\n"; + + exit(1); + } + else + { + if (!boost::filesystem::exists(_package_filename)) + { + std::cerr << "nnpackage not found: " << _package_filename << "\n"; + } + } + } +} + +} // end of namespace NNPackageRun |