Add flag handling for ROM file in main application
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include "absl/debugging/failure_signal_handler.h"
|
||||
#include "absl/debugging/symbolize.h"
|
||||
#include "app/core/controller.h"
|
||||
#include "util/flag.h"
|
||||
|
||||
/**
|
||||
* @namespace yaze
|
||||
@@ -12,19 +13,22 @@
|
||||
*/
|
||||
using namespace yaze;
|
||||
|
||||
DECLARE_FLAG(std::string, rom_file);
|
||||
DEFINE_FLAG(std::string, rom_file, "", "The ROM file to load.");
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
absl::InitializeSymbolizer(argv[0]);
|
||||
|
||||
absl::FailureSignalHandlerOptions options;
|
||||
options.symbolize_stacktrace = true;
|
||||
options.use_alternate_stack = true;
|
||||
options.alarm_on_failure_secs = true;
|
||||
options.call_previous_handler = true;
|
||||
absl::InstallFailureSignalHandler(options);
|
||||
|
||||
std::string rom_filename;
|
||||
if (argc > 1) {
|
||||
rom_filename = argv[1];
|
||||
yaze::util::FlagParser parser(yaze::util::global_flag_registry());
|
||||
RETURN_IF_EXCEPTION(parser.Parse(argc, argv));
|
||||
std::string rom_filename = "";
|
||||
if (!FLAGS_rom_file.empty()) {
|
||||
rom_filename = FLAGS_rom_file;
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
||||
@@ -96,7 +96,6 @@ class FlagRegistry {
|
||||
std::unordered_map<std::string, std::unique_ptr<IFlag>> flags_;
|
||||
};
|
||||
|
||||
|
||||
inline FlagRegistry* global_flag_registry() {
|
||||
// Guaranteed to be initialized once per process.
|
||||
static FlagRegistry* registry = new FlagRegistry();
|
||||
@@ -106,9 +105,10 @@ inline FlagRegistry* global_flag_registry() {
|
||||
#define DECLARE_FLAG(type, name) extern yaze::util::Flag<type>* FLAGS_##name
|
||||
|
||||
// Defines a global Flag<type>* FLAGS_<name> and registers it.
|
||||
#define DEFINE_FLAG(type, name, default_val, help_text) \
|
||||
yaze::util::Flag<type>* FLAGS_##name = \
|
||||
yaze::util::global_flag_registry()->RegisterFlag<type>("--" #name, (default_val), (help_text))
|
||||
#define DEFINE_FLAG(type, name, default_val, help_text) \
|
||||
yaze::util::Flag<type>* FLAGS_##name = \
|
||||
yaze::util::global_flag_registry()->RegisterFlag<type>( \
|
||||
"--" #name, (default_val), (help_text))
|
||||
|
||||
// Retrieves the current value of a declared flag.
|
||||
#define FLAG_VALUE(name) (FLAGS_##name->Get())
|
||||
@@ -117,6 +117,15 @@ class FlagParser {
|
||||
public:
|
||||
explicit FlagParser(FlagRegistry* registry) : registry_(registry) {}
|
||||
|
||||
// Parses flags out of the given command line arguments.
|
||||
void Parse(int argc, char** argv) {
|
||||
std::vector<std::string> tokens;
|
||||
for (int i = 0; i < argc; i++) {
|
||||
tokens.push_back(argv[i]);
|
||||
}
|
||||
Parse(&tokens);
|
||||
}
|
||||
|
||||
// Parses flags out of the given token list. Recognizes forms:
|
||||
// --flag=value or --flag value
|
||||
// Any token not recognized as a flag is left in `leftover`.
|
||||
|
||||
Reference in New Issue
Block a user