Files
FEX-Emu--FEX/Source/Tools/FEXGetConfig/Main.cpp
T
Ryan Houdek c07b5e480b Adds new FEXGetConfig program
This is a simple program to get a few configuration options that are necessary
to expose for pressure-vessel
2021-08-13 20:53:30 -07:00

79 lines
2.4 KiB
C++

#include "ConfigDefines.h"
#include "OptionParser.h"
#include "Common/Config.h"
#include "Common/RootFSSetup.h"
#include "git_version.h"
#include <FEXCore/Config/Config.h>
#include <filesystem>
int main(int argc, char **argv, char **envp) {
FEXCore::Config::Initialize();
FEXCore::Config::AddLayer(std::make_unique<FEX::Config::MainLoader>());
// No FEX arguments passed through command line
FEXCore::Config::AddLayer(std::make_unique<FEX::Config::EnvLoader>(envp));
FEXCore::Config::Load();
// Load the arguments
optparse::OptionParser Parser = optparse::OptionParser()
.description("Simple application to get a couple of FEX options");
Parser.add_option("--install-prefix")
.action("store_true")
.help("Print the FEX install prefix");
Parser.add_option("--app")
.help("Load an application profile for this application if it exists");
Parser.add_option("--current-rootfs")
.action("store_true")
.help("Print the directory that contains the FEX rootfs. Mounted in the case of squashfs");
Parser.add_option("--current-rootfs-lock")
.action("store_true")
.help("SquashFS lock file if squashfs is mounted");
Parser.add_option("--version")
.action("store_true")
.help("Print the installed FEX-Emu version");
optparse::Values Options = Parser.parse_args(argc, argv);
if (Options.is_set_by_user("app")) {
// Load the application config if one was provided
auto ProgramName = std::filesystem::path(Options["app"]).filename();
FEXCore::Config::AddLayer(std::make_unique<FEX::Config::AppLoader>(ProgramName, true));
FEXCore::Config::AddLayer(std::make_unique<FEX::Config::AppLoader>(ProgramName, false));
}
// Reload the meta layer
FEXCore::Config::ReloadMetaLayer();
if (Options.is_set_by_user("version")) {
fprintf(stdout, GIT_DESCRIBE_STRING "\n");
}
if (Options.is_set_by_user("install_prefix")) {
fprintf(stdout, FEX_INSTALL_PREFIX "\n");
}
if (Options.is_set_by_user("current_rootfs_lock")) {
auto LockFile = FEX::RootFS::GetRootFSLockFile();
if (FEX::RootFS::CheckLockExists(LockFile)) {
fprintf(stdout, "%s\n", LockFile.c_str());
}
}
if (Options.is_set_by_user("current_rootfs")) {
// Ensure RootFS is setup before config options try to pull CONFIG_ROOTFS
auto Status = FEX::RootFS::UpdateRootFSPath();
if (Status) {
FEX_CONFIG_OPT(LDPath, ROOTFS);
fprintf(stdout, "%s\n", LDPath().c_str());
}
}
return 0;
}