#include "Common/ArgumentLoader.h" #include "Common/Config.h" #include "OptionParser.h" #include "git_version.h" namespace FEX::Handler { std::string CoreHandler(std::string &Value) { if (Value == "irint") return "0"; else if (Value == "irjit") return "1"; #ifdef _M_X86_64 else if (Value == "host") return "2"; #endif return "1"; } std::string SMCCheckHandler(std::string &Value) { if (Value == "none") return "0"; else if (Value == "mman") return "1"; else if (Value == "full") return "2"; return "0"; } } namespace FEX::ArgLoader { std::vector RemainingArgs; std::vector ProgramArguments; static std::string Version = "FEX-Emu (" GIT_DESCRIBE_STRING ") "; void FEX::ArgLoader::ArgLoader::Load() { optparse::OptionParser Parser{}; Parser.version(Version); optparse::OptionGroup CPUGroup(Parser, "CPU Core options"); optparse::OptionGroup EmulationGroup(Parser, "Emulation options"); optparse::OptionGroup DebugGroup(Parser, "Debug options"); optparse::OptionGroup HacksGroup(Parser, "Hacks options"); optparse::OptionGroup MiscGroup(Parser, "Miscellaneous options"); optparse::OptionGroup LoggingGroup(Parser, "Logging options"); #define BEFORE_PARSE #include Parser.add_option_group(CPUGroup); Parser.add_option_group(EmulationGroup); Parser.add_option_group(DebugGroup); Parser.add_option_group(HacksGroup); Parser.add_option_group(MiscGroup); Parser.add_option_group(LoggingGroup); optparse::Values Options = Parser.parse_args(argc, argv); using int32 = int32_t; using uint32 = uint32_t; #define AFTER_PARSE #include RemainingArgs = Parser.args(); ProgramArguments = Parser.parsed_args(); } void LoadWithoutArguments(int _argc, char **_argv) { // Skip argument 0, which will be the interpreter for (int i = 1; i < _argc; ++i) { RemainingArgs.emplace_back(_argv[i]); } // Put the interpreter in ProgramArguments ProgramArguments.emplace_back(_argv[0]); } std::vector Get() { return RemainingArgs; } std::vector GetParsedArgs() { return ProgramArguments; } }