From 358bcc6a52793dc7043415b242169af9ec78f6b4 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 12 Dec 2025 09:38:48 +0100 Subject: [PATCH 1/2] chore: codebase and cmakelists chore. Signed-off-by: Amlal El Mahrouss --- CMakeLists.txt | 5 +++++ README.md | 1 - src/lib/JSONManifestBuilder.cc | 21 ++++++++++----------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c4af61e..01284a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,8 @@ +# // ============================================================= // +# // nebuild +# // Copyright (C) 2025, Amlal El Mahrouss, licensed under BSD-3 license. +# // ============================================================= // + cmake_minimum_required(VERSION 3.16) project(nebuild VERSION 0.1 LANGUAGES CXX) diff --git a/README.md b/README.md index 0a3eb57..02a792c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # NeBuild -![CI](https://github.com/nekernel-org/nebuild/actions/workflows/c-cpp.yml/badge.svg) ![CI](https://github.com/nekernel-org/nebuild/actions/workflows/c-cpp-dev.yml/badge.svg) [![License: GPL-3.0](https://img.shields.io/badge/license-BSD--3.0-blue.svg)](LICENSE) diff --git a/src/lib/JSONManifestBuilder.cc b/src/lib/JSONManifestBuilder.cc index af69176..5bd89c6 100644 --- a/src/lib/JSONManifestBuilder.cc +++ b/src/lib/JSONManifestBuilder.cc @@ -8,13 +8,12 @@ #include namespace NeBuild { -using JSON = nlohmann::json; namespace FS = std::filesystem; /// =========================================================== /// -/// @brief Builds a JSON target from a JSON file. +/// @brief Builds a nlohmann::json target from a nlohmann::json file. /// @param arg_sz filename size (must be 1 or greater). -/// @param arg_val filename path (must be a valid JSON file). +/// @param arg_val filename path (must be a valid nlohmann::json file). /// @retval true building has succeeded. /// @retval false fail to build, see error message. /// =========================================================== /// @@ -38,42 +37,42 @@ bool JSONManifestBuilder::BuildTarget(BuildConfig& config) { std::ifstream json(path); if (!json.good()) { - NeBuild::Logger::info() << "nebuild: error: file '" << path << "' is not a valid JSON" + NeBuild::Logger::info() << "nebuild: error: file '" << path << "' is not a valid nlohmann::json" << std::endl; return false; } - JSON json_obj = JSON::parse(json); + nlohmann::json json_obj = nlohmann::json::parse(json); std::string compiler = json_obj["compiler_path"].get(); std::string command = compiler + " "; - JSON header_search_path = json_obj["compiler_headers_path"]; + nlohmann::json header_search_path = json_obj["compiler_headers_path"]; for (auto& headers : header_search_path) { command += "-I" + headers.get() + " "; } - JSON headers_path = json_obj["headers_path"]; + nlohmann::json headers_path = json_obj["headers_path"]; for (auto& headers : headers_path) { command += "-I" + headers.get() + " "; } - JSON sources_files = json_obj["sources_path"]; + nlohmann::json sources_files = json_obj["sources_path"]; for (auto& sources : sources_files) { command += sources.get() + " "; } - JSON macros_list = json_obj["cpp_macros"]; + nlohmann::json macros_list = json_obj["cpp_macros"]; for (auto& macro : macros_list) { command += "-D" + macro.get() + " "; } - JSON compiler_flags = json_obj["compiler_flags"]; + nlohmann::json compiler_flags = json_obj["compiler_flags"]; for (auto& flag : compiler_flags) { command += flag.get() + " "; @@ -109,6 +108,6 @@ bool JSONManifestBuilder::BuildTarget(BuildConfig& config) { /// @brief Returns the build system name. /// =========================================================== /// const std::string_view JSONManifestBuilder::BuildSystem() { - return "NeBuild (JSON)"; + return "NeBuild (nlohmann::json)"; } } // namespace NeBuild \ No newline at end of file From fb094b222027aad36ebc294c0b21909dfe20b3f9 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 12 Dec 2025 14:45:09 +0100 Subject: [PATCH 2/2] chore: performance improvements and tweaks. Signed-off-by: Amlal El Mahrouss --- examples/example_01_hello_world/posix.json | 2 +- examples/example_01_hello_world/win64.json | 2 +- examples/example_02_libnebuild/posix.json | 2 +- examples/example_02_libnebuild/win64.json | 2 +- .../example_03_hello_world_toml/posix.toml | 2 +- .../example_03_hello_world_toml/win64.toml | 2 +- include/NeBuildKit/IManifestBuilder.h | 6 +++--- include/NeBuildKit/JSONManifestBuilder.h | 2 +- include/NeBuildKit/TOMLManifestBuilder.h | 2 +- src/lib/JSONManifestBuilder.cc | 19 +++++++++++++++++-- src/lib/TOMLManifestBuilder.cc | 17 +++++++++++++++++ 11 files changed, 45 insertions(+), 13 deletions(-) diff --git a/examples/example_01_hello_world/posix.json b/examples/example_01_hello_world/posix.json index 09cbef7..197e4a2 100644 --- a/examples/example_01_hello_world/posix.json +++ b/examples/example_01_hello_world/posix.json @@ -3,7 +3,7 @@ "compiler_std": "c++20", "headers_path": ["lib"], "sources_path": ["hello_world.cc"], - "output_name": "hello_world.elf", + "output_name": "./hello_world.elf", "compiler_flags": ["-fPIC"], "cpp_macros": ["FOO_MACRO"], "run_after_build": true diff --git a/examples/example_01_hello_world/win64.json b/examples/example_01_hello_world/win64.json index 4af5bdd..4545228 100644 --- a/examples/example_01_hello_world/win64.json +++ b/examples/example_01_hello_world/win64.json @@ -3,7 +3,7 @@ "compiler_std": "c++20", "headers_path": ["lib"], "sources_path": ["hello_world.cc"], - "output_name": "hello_world.elf", + "output_name": "./hello_world.elf", "compiler_flags": ["-fPIC"], "cpp_macros": ["FOO_MACRO"], "run_after_build": true diff --git a/examples/example_02_libnebuild/posix.json b/examples/example_02_libnebuild/posix.json index 809cb67..d7ef767 100644 --- a/examples/example_02_libnebuild/posix.json +++ b/examples/example_02_libnebuild/posix.json @@ -8,7 +8,7 @@ "sources_path": [ "libnebuild.cc" ], - "output_name": "libnebuild.elf", + "output_name": "./libnebuild.elf", "compiler_flags": [ "-L/usr/lib", "-lNeBuildKit" diff --git a/examples/example_02_libnebuild/win64.json b/examples/example_02_libnebuild/win64.json index dcd1142..094208b 100644 --- a/examples/example_02_libnebuild/win64.json +++ b/examples/example_02_libnebuild/win64.json @@ -8,7 +8,7 @@ "sources_path": [ "libbtb.cc" ], - "output_name": "libbtb.exe", + "output_name": "./libbtb.exe", "compiler_flags": [ "-lNeBuild" ], diff --git a/examples/example_03_hello_world_toml/posix.toml b/examples/example_03_hello_world_toml/posix.toml index e8595d4..a384ddb 100644 --- a/examples/example_03_hello_world_toml/posix.toml +++ b/examples/example_03_hello_world_toml/posix.toml @@ -2,7 +2,7 @@ compiler_path = "clang++" compiler_std = "c++20" headers_path = [ "lib" ] sources_path = [ "hello_world.cc" ] -output_name = "hello_world.elf" +output_name = "./hello_world.elf" compiler_flags = [ "-fPIC" ] cpp_macros = [ "FOO_MACRO" ] run_after_build = true diff --git a/examples/example_03_hello_world_toml/win64.toml b/examples/example_03_hello_world_toml/win64.toml index c8001a4..6f30476 100644 --- a/examples/example_03_hello_world_toml/win64.toml +++ b/examples/example_03_hello_world_toml/win64.toml @@ -2,7 +2,7 @@ compiler_path = "x86_64-w64-mingw32-g++" compiler_std = "c++20" headers_path = [ "lib" ] sources_path = [ "hello_world.cc" ] -output_name = "hello_world.elf" +output_name = "./hello_world.elf" compiler_flags = [ "-fPIC" ] cpp_macros = [ "FOO_MACRO" ] run_after_build = true diff --git a/include/NeBuildKit/IManifestBuilder.h b/include/NeBuildKit/IManifestBuilder.h index c42f257..8223506 100644 --- a/include/NeBuildKit/IManifestBuilder.h +++ b/include/NeBuildKit/IManifestBuilder.h @@ -8,7 +8,7 @@ #include #include -#define NEBUILD_MANIFEST_BUILDER : public ::NeBuild::IManifestBuilder +#define NEBUILD_MANIFEST_BUILDER final : public ::NeBuild::IManifestBuilder namespace NeBuild { /// =========================================================== /// @@ -29,11 +29,11 @@ class IManifestBuilder { /// @retval true building has succeeded. /// @retval false fail to build, see error message. /// =========================================================== /// - virtual bool BuildTarget(BuildConfig& config) = 0; + virtual bool BuildTarget(BuildConfig& config) { return false; } /// =========================================================== /// /// @brief Returns the build system name. /// =========================================================== /// - virtual const std::string_view BuildSystem() = 0; + virtual const std::string_view BuildSystem() { return "(null)"; } }; } // namespace NeBuild \ No newline at end of file diff --git a/include/NeBuildKit/JSONManifestBuilder.h b/include/NeBuildKit/JSONManifestBuilder.h index 9f1afdc..4f3cec5 100644 --- a/include/NeBuildKit/JSONManifestBuilder.h +++ b/include/NeBuildKit/JSONManifestBuilder.h @@ -12,7 +12,7 @@ namespace NeBuild { /// @brief JSON builder -class JSONManifestBuilder final NEBUILD_MANIFEST_BUILDER { +class JSONManifestBuilder NEBUILD_MANIFEST_BUILDER { public: JSONManifestBuilder() = default; ~JSONManifestBuilder() override = default; diff --git a/include/NeBuildKit/TOMLManifestBuilder.h b/include/NeBuildKit/TOMLManifestBuilder.h index 1c6bb1b..b4d61b8 100644 --- a/include/NeBuildKit/TOMLManifestBuilder.h +++ b/include/NeBuildKit/TOMLManifestBuilder.h @@ -12,7 +12,7 @@ namespace NeBuild { /// @brief TOML builder -class TOMLManifestBuilder final NEBUILD_MANIFEST_BUILDER { +class TOMLManifestBuilder NEBUILD_MANIFEST_BUILDER { public: TOMLManifestBuilder() = default; ~TOMLManifestBuilder() override = default; diff --git a/src/lib/JSONManifestBuilder.cc b/src/lib/JSONManifestBuilder.cc index 5bd89c6..45c7ce7 100644 --- a/src/lib/JSONManifestBuilder.cc +++ b/src/lib/JSONManifestBuilder.cc @@ -37,8 +37,8 @@ bool JSONManifestBuilder::BuildTarget(BuildConfig& config) { std::ifstream json(path); if (!json.good()) { - NeBuild::Logger::info() << "nebuild: error: file '" << path << "' is not a valid nlohmann::json" - << std::endl; + NeBuild::Logger::info() << "nebuild: error: file '" << path + << "' is not a valid nlohmann::json" << std::endl; return false; } @@ -95,6 +95,21 @@ bool JSONManifestBuilder::BuildTarget(BuildConfig& config) { config.has_failed_ = true; return false; } + + if (!config.dry_run_) { + auto run_after_build = json_obj["run_after_build"].get(); + + if (run_after_build) { + ret_exec = std::system(target.c_str()); + + if (ret_exec > 0) { + NeBuild::Logger::info() << "error: exit with message: " << std::strerror(ret_exec) << "" + << std::endl; + config.has_failed_ = true; + return false; + } + } + } } catch (std::runtime_error& err) { NeBuild::Logger::info() << "error: exit with message: " << err.what() << "" << std::endl; config.has_failed_ = true; diff --git a/src/lib/TOMLManifestBuilder.cc b/src/lib/TOMLManifestBuilder.cc index 5b759fc..257c4a3 100644 --- a/src/lib/TOMLManifestBuilder.cc +++ b/src/lib/TOMLManifestBuilder.cc @@ -100,6 +100,23 @@ bool TOMLManifestBuilder::BuildTarget(BuildConfig& config) { config.has_failed_ = true; return false; } + + if (!config.dry_run_) { + auto run_after_build = toml_file["run_after_build"].as_boolean(); + if (!run_after_build) return true; + + auto val = run_after_build->get(); + if (val) { + ret_exec = std::system(target.c_str()); + + if (ret_exec > 0) { + NeBuild::Logger::info() << "error: exit with message: " << std::strerror(ret_exec) << "" + << std::endl; + config.has_failed_ = true; + return false; + } + } + } } catch (std::runtime_error& err) { NeBuild::Logger::info() << "error: exit with message: " << err.what() << "" << std::endl; config.has_failed_ = true;