From e1d5089d237a34c4977cdf5dfa65c9f58b351d11 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Thu, 19 Feb 2026 07:49:30 +0100 Subject: chore: build: project infra tweaks. Signed-off-by: Amlal El Mahrouss --- src/cli/CLI.cpp | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/cli/CLI.cpp (limited to 'src/cli/CLI.cpp') diff --git a/src/cli/CLI.cpp b/src/cli/CLI.cpp new file mode 100644 index 0000000..a21c4ad --- /dev/null +++ b/src/cli/CLI.cpp @@ -0,0 +1,83 @@ + +// ============================================================= // +// NeBuild +// FILE: main.cc +// PURPOSE: Main Tool Entrypoint. +// Copyright (C) 2024-2025, Amlal El Mahrouss and NeKernel Authors, licensed under BSD-3 license. +// ============================================================= // + +#include +#include +#include +#include + +int main(int argc, char** argv) { + if (argc < 1) return EXIT_FAILURE; + + NeBuild::BuildConfig config; + + for (size_t index = 1; index < argc; ++index) { + std::string index_path = argv[index]; + + if (index_path == "-v" || index_path == "-version") { + NeBuild::Logger::info() << "NeBuild (" << NEBUILD_VERSION << ")\n"; + return EXIT_SUCCESS; + } else if (index_path == "-dry-run" || index_path == "-n") { + config.dry_run(true); + continue; + } else if (index_path == "-h" || index_path == "-help") { + NeBuild::Logger::info() << "nebuild \n"; + return EXIT_SUCCESS; + } + + auto index_cpy = index; + + std::thread job_build_thread([&index_path, &index, &index_cpy, &argc, &argv, &config]() -> void { + std::unique_ptr builder; + + constexpr auto kJsonExtension = ".json"; + + if (index_path.ends_with(kJsonExtension)) { + builder = std::make_unique(); + + /// report failed build to config. + if (!builder) { + config.has_failed(true); + return; + } + } else { + constexpr auto kTomlExtension = ".toml"; + builder = std::make_unique(); + + if (!index_path.ends_with(kTomlExtension)) { + NeBuild::Logger::info() << "error: file '" << index_path << "' is not a manifest file!" + << std::endl; + config.has_failed(true); + return; + } + } + + std::string next_path; + + if ((index_cpy + 1) < argc && argv[index_cpy + 1]) next_path = argv[index_cpy + 1]; + + if (next_path == "-build-system") { + NeBuild::Logger::info() << builder->BuildSystem() << std::endl; + std::exit(EXIT_SUCCESS); + } + + NeBuild::Logger::info() << "building manifest: " << index_path << std::endl; + + config.path(index_path); + + if (builder && !builder->BuildTarget(config)) { + config.has_failed(true); + } + }); + + job_build_thread.join(); + } + + // check for whether config is valid. if so return failure, or success. + return !config ? EXIT_FAILURE : EXIT_SUCCESS; +} -- cgit v1.2.3