#include "pch.h"
#include "swa_recompiler.h"
#include "test_recompiler.h"

// argv 1: xex file path
// argv 2: switches toml file path
// argv 3: output directory path

int main(int argc, char* argv[])
{
    if (strstr(argv[1], ".xex") != nullptr)
    {
        SWARecompiler recompiler;
        //recompiler.config.skipLr = true;
        recompiler.config.ctrAsLocalVariable = true;
        recompiler.config.xerAsLocalVariable = true;
        recompiler.config.reservedRegisterAsLocalVariable = true;
        recompiler.config.skipMsr = true;
        recompiler.config.crRegistersAsLocalVariables = true;
        recompiler.config.nonArgumentRegistersAsLocalVariables = true;
        recompiler.config.nonVolatileRegistersAsLocalVariables = true;

        std::println("Loading executable...");
        recompiler.LoadExecutable(argv[1]);

        std::println("Loading switch tables...");
        recompiler.LoadSwitchTables(argv[2]);

        std::println("Analysing functions...");
        recompiler.Analyse();

        auto entry = recompiler.image.symbols.find(recompiler.image.entry_point);
        if (entry != recompiler.image.symbols.end())
        {
            entry->name = "_xstart";
        }

        recompiler.Recompile(argv[3]);
    }
    else
    {
        TestRecompiler::RecompileTests(argv[1], argv[2]);
    }

    return 0;
}