From 60dddb847c585ba9a3030b656e5df74a0c5be059 Mon Sep 17 00:00:00 2001 From: Nav Date: Mon, 12 Feb 2024 20:25:51 +0000 Subject: [PATCH] Added CLI command to list supported targets in JSON format --- src/Application.cpp | 34 ++++++++++++++++++++++++++++++++-- src/Application.hpp | 7 +++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/Application.cpp b/src/Application.cpp index b27e59df..9559b9e5 100644 --- a/src/Application.cpp +++ b/src/Application.cpp @@ -13,10 +13,12 @@ #include #include -#include "src/Services/ProcessService.hpp" - #include "src/Logger/Logger.hpp" #include "src/Services/PathService.hpp" +#include "src/Services/ProcessService.hpp" +#include "src/Helpers/BiMap.hpp" + +#include "src/Targets/TargetDescription/TargetDescriptionFile.hpp" #include "src/Exceptions/InvalidConfig.hpp" @@ -134,6 +136,10 @@ std::map> Application::getCommandHandlersByCom "init", std::bind(&Application::initProject, this) }, + { + "--target-list-machine", + std::bind(&Application::presentTargetListMachine, this) + }, }; } @@ -387,6 +393,30 @@ int Application::presentVersionMachineText() { return EXIT_SUCCESS; } +int Application::presentTargetListMachine() { + Logger::silence(); + + using Targets::TargetFamily; + static const auto targetFamilyNames = BiMap({ + {TargetFamily::AVR_8, "AVR8"}, + {TargetFamily::RISC_V, "RISC-V"}, + }); + + auto output = QJsonArray(); + + for (const auto& [configValue, descriptor] : Targets::TargetDescription::TargetDescriptionFile::mapping()) { + output.push_back(QJsonObject({ + {"name" , QString::fromStdString(descriptor.targetName)}, + {"family" , targetFamilyNames.at(descriptor.targetFamily)}, + {"configurationValue" , QString::fromStdString(configValue)}, + })); + } + + std::cout << QJsonDocument(output).toJson().toStdString(); + + return EXIT_SUCCESS; +} + int Application::initProject() { auto configFile = QFile(QString::fromStdString(Services::PathService::projectConfigPath())); diff --git a/src/Application.hpp b/src/Application.hpp index 3588b2bf..dd41698c 100644 --- a/src/Application.hpp +++ b/src/Application.hpp @@ -216,6 +216,13 @@ private: */ int presentVersionMachineText(); + /** + * Lists all supported targets, in JSON format. + * + * @return + */ + int presentTargetListMachine(); + /** * Initialises a project in the user's working directory. *