summaryrefslogtreecommitdiffhomepage
path: root/src/cli/main.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-29 01:28:48 -0500
committerAmlal El Mahrouss <amlal@nekernel.org>2025-11-29 01:28:48 -0500
commit36cb5079f273aaf9a84882749e3e15cd2ca70829 (patch)
treece7a545073f184e1c7e991eb3f9e7f41738685cf /src/cli/main.cc
parent978e187043902c1e87a6e9c3d244dabdf6f749c7 (diff)
feat: new `-build-system` switch for NeBuild.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/cli/main.cc')
-rw-r--r--src/cli/main.cc89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/cli/main.cc b/src/cli/main.cc
new file mode 100644
index 0000000..cbce3c0
--- /dev/null
+++ b/src/cli/main.cc
@@ -0,0 +1,89 @@
+
+// ============================================================= //
+// nebuild
+// Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under BSD-3 license.
+// ============================================================= //
+
+#include <NeBuildKit/JSONManifestBuilder.h>
+#include <NeBuildKit/TOMLManifestBuilder.h>
+#include "NeBuildKit/Defines.h"
+
+static bool kFailed = false;
+static bool kDryRun = false;
+
+int main(int argc, char** argv) {
+ if (argc <= 1) return EXIT_FAILURE;
+
+ for (size_t index = 1; index < argc; ++index) {
+ std::string index_path = argv[index];
+
+ if (index_path == "-v" || index_path == "-version") {
+ NeBuild::Logger::info() << "NeKernel Build.\n";
+ NeBuild::Logger::info()
+ << "Bugs, Issues? Check out: https://github.com/nekernel-org/nebuild/issues\n";
+
+ return EXIT_SUCCESS;
+ } else if (index_path == "-dry-run" || index_path == "-n") {
+ kDryRun = true;
+ continue;
+ } else if (index_path == "-h" || index_path == "-help") {
+ NeBuild::Logger::info() << "usage: nebuild <options> <file>.\n";
+
+ return EXIT_SUCCESS;
+ }
+
+ auto index_cpy = index;
+
+ std::thread job_build_thread(
+ [&index_path, &index, &index_cpy, &argv]() -> void {
+ NeBuild::IManifestBuilder* builder = nullptr;
+
+ const auto kJsonExtension = ".json";
+
+ if (index_path.ends_with(kJsonExtension)) {
+ builder = new NeBuild::JSONManifestBuilder();
+
+ if (!builder) {
+ kFailed = true;
+ return;
+ }
+ } else {
+ const auto kTomlExtension = ".toml";
+ builder = new NeBuild::TOMLManifestBuilder();
+
+ if (index_path.ends_with(kTomlExtension)) {
+ goto toml_build;
+ } else {
+ NeBuild::Logger::info()
+ << "error: file '" << index_path << "' is not a manifest file!" << std::endl;
+ kFailed = true;
+ return;
+ }
+ }
+
+ toml_build:
+ std::string next_path;
+
+ if (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;
+
+ if (builder && !builder->BuildTarget(index_path, kDryRun)) {
+ kFailed = true;
+ }
+
+ toml_build_done:
+ delete builder;
+ builder = nullptr;
+ });
+
+ job_build_thread.join();
+ }
+
+ return kFailed ? EXIT_FAILURE : EXIT_SUCCESS;
+}