From e108f0859b8c14e7db6cb341f750626098e224a2 Mon Sep 17 00:00:00 2001 From: Jorijn van der Graaf Date: Sat, 28 Dec 2024 21:26:19 +0100 Subject: [PATCH] added CLI --- Crafter.Build-Project.cpp | 6 +++++- build.sh | 7 ++----- main.cpp | 22 +++++++++++++++++++--- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/Crafter.Build-Project.cpp b/Crafter.Build-Project.cpp index 0c9be94..fba5988 100644 --- a/Crafter.Build-Project.cpp +++ b/Crafter.Build-Project.cpp @@ -114,12 +114,16 @@ void Project::Build(std::string configuration) { thread.join(); } system(std::format("clang++ {}-o {}/{}", files, config.outputDir, name).c_str()); - break; + return; } } + throw std::runtime_error("Configuration: " + configuration + " not found."); } Project Project::LoadFromJSON(std::string file) { + if (!std::filesystem::exists(file)) { + throw std::runtime_error("Project file: " + file + " not found."); + } std::ifstream f(file); nlohmann::json data = nlohmann::json::parse(f); const std::string name = data["name"].get(); diff --git a/build.sh b/build.sh index fa8a741..ac9e22d 100755 --- a/build.sh +++ b/build.sh @@ -1,5 +1,5 @@ -rm -rf ./build -mkdir build; +mkdir build +mkdir bin clang++ -std=c++26 Crafter.Build-Configuration.cppm --precompile -fprebuilt-module-path=./build -o ./build/Crafter.Build-Configuration.pcm clang++ -std=c++26 Crafter.Build-Project.cppm --precompile -fprebuilt-module-path=./build -o ./build/Crafter.Build-Project.pcm clang++ -std=c++26 Crafter.Build.cppm --precompile -fprebuilt-module-path=./build -o ./build/Crafter.Build.pcm @@ -12,6 +12,3 @@ clang++ -std=c++26 ./build/Crafter.Build-Project.pcm -fprebuilt-module-path=./bu clang++ -std=c++26 ./build/Crafter.Build-Configuration.pcm -fprebuilt-module-path=./build -c -o ./build/Crafter.Build-Configuration.o clang++ -std=c++26 ./build/Crafter.Build.pcm -fprebuilt-module-path=./build -c -o ./build/Crafter.Build.o clang++ ./build/main.o ./build/Crafter.Build.o ./build/Crafter.Build-Configuration.o ./build/Crafter.Build-Configuration_source.o ./build/Crafter.Build-Project.o ./build/Crafter.Build-Project_source.o -o ./bin/crafter-build -rm -rf ./build -mkdir build; -#./bin/crafter-build diff --git a/main.cpp b/main.cpp index 4718efe..68975dc 100644 --- a/main.cpp +++ b/main.cpp @@ -1,10 +1,26 @@ #include #include +#include #include "json.hpp" import Crafter.Build; using namespace Crafter::Build; int main(int argc, char* argv[]) { - Project project = Project::LoadFromJSON("/home/jorijn/repos/crafter-build/project.json"); - project.Build("debug"); - return 1; + if(argc == 1){ + std::println("No configuration provided, use --help for help"); + } else if(argc == 2) { + if(std::string(argv[1]) == "--help"){ + std::println(" to build this configuration with the defualt project filename \"project.json\"\n to build this configuration with the specified project filename\nhelp displays this help message"); + } else { + Project project = Project::LoadFromJSON("./project.json"); + project.Build(argv[1]); + } + return 0; + } else if(argc == 3) { + Project project = Project::LoadFromJSON(argv[2]); + project.Build(argv[1]); + return 0; + } else { + std::println("Too many arguments provided"); + return 1; + } }