#include "ConfigDefines.h" #include "OptionParser.h" #include "Common/FEXServerClient.h" #include "git_version.h" #include #include #include #include int main(int argc, char **argv, char **envp) { FEXCore::Config::Initialize(); FEXCore::Config::AddLayer(FEXCore::Config::CreateGlobalMainLayer()); FEXCore::Config::AddLayer(FEXCore::Config::CreateMainLayer()); // No FEX arguments passed through command line FEXCore::Config::AddLayer(FEXCore::Config::CreateEnvironmentLayer(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("--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(FEXCore::Config::CreateAppLayer(ProgramName, FEXCore::Config::LayerType::LAYER_GLOBAL_APP)); FEXCore::Config::AddLayer(FEXCore::Config::CreateAppLayer(ProgramName, FEXCore::Config::LayerType::LAYER_LOCAL_APP)); auto SteamID = getenv("SteamAppId"); if (SteamID) { // If a SteamID exists then let's search for Steam application configs as well. // We want to key off both the SteamAppId number /and/ the executable since we may not want to thunk all binaries. auto SteamAppName = fmt::format("Steam_{}_{}", SteamID, ProgramName.string()); FEXCore::Config::AddLayer(FEXCore::Config::CreateAppLayer(SteamAppName, FEXCore::Config::LayerType::LAYER_GLOBAL_STEAM_APP)); FEXCore::Config::AddLayer(FEXCore::Config::CreateAppLayer(SteamAppName, FEXCore::Config::LayerType::LAYER_LOCAL_STEAM_APP)); } } // 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")) { int ServerFD = FEXServerClient::ConnectToServer(); if (ServerFD != -1) { auto RootFS = FEXServerClient::RequestRootFSPath(ServerFD); if (!RootFS.empty()) { fprintf(stdout, "%s\n", RootFS.c_str()); } } } return 0; }