From ce0566f9b6f8332d4ea85746f449c623097e330f Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Sat, 9 May 2026 23:27:36 -0300 Subject: Port project to cmake --- CMakeLists.txt | 60 ++++++++++++++--------------- CMakePresets.json | 78 +++++++++++++++++++------------------- Makefile | 83 ---------------------------------------- launch.vs.json | 12 ------ src/NT.cpp | 104 --------------------------------------------------- src/RelationalNT.cpp | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 170 insertions(+), 271 deletions(-) delete mode 100644 Makefile delete mode 100644 launch.vs.json delete mode 100644 src/NT.cpp create mode 100644 src/RelationalNT.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 77d2321..ceac7a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,38 +1,34 @@ -cmake_minimum_required(VERSION 3.20) -project(RelationalNT LANGUAGES CXX) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# Toggle the "Press Enter to exit" prompt. ON by default for interactive runs; -# set -DNT_WAIT_ON_EXIT=OFF on the cmake command line to disable (e.g. in CI). -option(NT_WAIT_ON_EXIT "Wait for Enter key before exiting the console app" ON) +# CMakeList.txt : CMake project for RelationalNT, include source and define +# project specific logic here. +# +cmake_minimum_required (VERSION 3.10) + +# Enable Hot Reload for MSVC compilers if supported. +if (POLICY CMP0141) + cmake_policy(SET CMP0141 NEW) + set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$,$>,$<$:EditAndContinue>,$<$:ProgramDatabase>>") +endif() -set(SOURCES - src/CursorManager.cpp - src/HandlerManager.cpp - src/IdentityManager.cpp - src/LifecycleManager.cpp - src/NamespaceReferenceManager.cpp - src/NT.cpp - src/ObjectManager.cpp - src/PermissionsManager.cpp - src/VM.cpp +project ("RelationalNT") + +# Add source to this project's executable. +add_executable (RelationalNT + "src/RelationalNT.cpp" + "src/ObjectManager.cpp" + "src/PermissionsManager.cpp" + "src/IdentityManager.cpp" + "src/LifecycleManager.cpp" + "src/HandlerManager.cpp" + "src/CursorManager.cpp" + "src/NamespaceReferenceManager.cpp" + "src/VM.cpp" ) -add_executable(RNT ${SOURCES}) +target_include_directories(RelationalNT PRIVATE "include") +target_compile_definitions(RelationalNT PRIVATE NT_CONSOLE_APP) -target_include_directories(RNT PRIVATE include) - -target_compile_definitions(RNT PRIVATE NT_CONSOLE_APP) - -if(NT_WAIT_ON_EXIT) - target_compile_definitions(RNT PRIVATE NT_WAIT_ON_EXIT) +if (CMAKE_VERSION VERSION_GREATER 3.12) + set_property(TARGET RelationalNT PROPERTY CXX_STANDARD 20) endif() -if(MSVC) - target_compile_options(RNT PRIVATE /W4) -else() - target_compile_options(RNT PRIVATE -Wall -Wextra) -endif() +# TODO: Add tests and install targets if needed. diff --git a/CMakePresets.json b/CMakePresets.json index 7b03857..abf4065 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,63 +1,61 @@ -{ +{ "version": 3, "configurePresets": [ { - "name": "windows-debug", - "displayName": "Windows Debug", + "name": "windows-base", + "hidden": true, "generator": "Ninja", - "binaryDir": "${sourceDir}/out/debug", + "binaryDir": "${sourceDir}/out/build/${presetName}", + "installDir": "${sourceDir}/out/install/${presetName}", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "NT_WAIT_ON_EXIT": "ON" + "CMAKE_C_COMPILER": "cl.exe", + "CMAKE_CXX_COMPILER": "cl.exe" + }, + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Windows" } }, { - "name": "windows-release", - "displayName": "Windows Release", - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/release", + "name": "x64-debug", + "displayName": "x64 Debug", + "inherits": "windows-base", + "architecture": { + "value": "x64", + "strategy": "external" + }, "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "NT_WAIT_ON_EXIT": "OFF" + "CMAKE_BUILD_TYPE": "Debug" } }, { - "name": "unix-debug", - "displayName": "Unix Debug", - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/debug", + "name": "x64-release", + "displayName": "x64 Release", + "inherits": "x64-debug", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "NT_WAIT_ON_EXIT": "ON" + "CMAKE_BUILD_TYPE": "Release" } }, { - "name": "unix-release", - "displayName": "Unix Release", - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/release", + "name": "x86-debug", + "displayName": "x86 Debug", + "inherits": "windows-base", + "architecture": { + "value": "x86", + "strategy": "external" + }, "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "NT_WAIT_ON_EXIT": "OFF" + "CMAKE_BUILD_TYPE": "Debug" } - } - ], - "buildPresets": [ - { - "name": "windows-debug", - "configurePreset": "windows-debug" }, { - "name": "windows-release", - "configurePreset": "windows-release" - }, - { - "name": "unix-debug", - "configurePreset": "unix-debug" - }, - { - "name": "unix-release", - "configurePreset": "unix-release" + "name": "x86-release", + "displayName": "x86 Release", + "inherits": "x86-debug", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } } ] } diff --git a/Makefile b/Makefile deleted file mode 100644 index 4b444d9..0000000 --- a/Makefile +++ /dev/null @@ -1,83 +0,0 @@ -CXX = cl -TARGET = RNT.exe -OBJECTS = NT.obj ObjectManager.obj PermissionsManager.obj NamespaceReferenceManager.obj CursorManager.obj IdentityManager.obj LifecycleManager.obj HandlerManager.obj VM.obj -INCDIR = include -DEFINES = /DNT_CONSOLE_APP /DNT_WAIT_ON_EXIT -INCLUDE_FLAG = /I$(INCDIR) -COMPILE_FLAGS = /std:c++17 /W4 /EHsc -COMPILE_ONLY = /c -LINK_FLAGS = -TARGET_OUT = /Fe:$(TARGET) -REMOVE = del /Q - -all: $(TARGET) - -windows: all - -unix: - $(MAKE) CXX=c++ TARGET=RNT OBJECTS="NT.o ObjectManager.o PermissionsManager.o NamespaceReferenceManager.o CursorManager.o IdentityManager.o LifecycleManager.o HandlerManager.o VM.o" DEFINES=-DNT_CONSOLE_APP INCLUDE_FLAG=-Iinclude COMPILE_FLAGS="-std=c++17 -Wall -Wextra" COMPILE_ONLY=-c LINK_FLAGS= TARGET_OUT="-o RNT" REMOVE="rm -f" all - -linux: unix - -macos: - $(MAKE) CXX=c++ TARGET=RNT OBJECTS="NT.o ObjectManager.o PermissionsManager.o NamespaceReferenceManager.o CursorManager.o IdentityManager.o LifecycleManager.o HandlerManager.o VM.o" DEFINES=-DNT_CONSOLE_APP INCLUDE_FLAG=-Iinclude COMPILE_FLAGS="-std=c++17 -Wall -Wextra" COMPILE_ONLY=-c LINK_FLAGS= TARGET_OUT="-o RNT" REMOVE="rm -f" all - -$(TARGET): $(OBJECTS) - $(CXX) $(LINK_FLAGS) $(OBJECTS) $(TARGET_OUT) - -NT.obj: src\NT.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src\NT.cpp /Fo:NT.obj - -ObjectManager.obj: src\ObjectManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src\ObjectManager.cpp /Fo:ObjectManager.obj - -PermissionsManager.obj: src\PermissionsManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src\PermissionsManager.cpp /Fo:PermissionsManager.obj - -NamespaceReferenceManager.obj: src\NamespaceReferenceManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src\NamespaceReferenceManager.cpp /Fo:NamespaceReferenceManager.obj - -CursorManager.obj: src\CursorManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src\CursorManager.cpp /Fo:CursorManager.obj - -IdentityManager.obj: src\IdentityManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src\IdentityManager.cpp /Fo:IdentityManager.obj - -LifecycleManager.obj: src\LifecycleManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src\LifecycleManager.cpp /Fo:LifecycleManager.obj - -HandlerManager.obj: src\HandlerManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src\HandlerManager.cpp /Fo:HandlerManager.obj - -VM.obj: src\VM.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src\VM.cpp /Fo:VM.obj - -NT.o: src/NT.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src/NT.cpp -o NT.o - -ObjectManager.o: src/ObjectManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src/ObjectManager.cpp -o ObjectManager.o - -PermissionsManager.o: src/PermissionsManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src/PermissionsManager.cpp -o PermissionsManager.o - -NamespaceReferenceManager.o: src/NamespaceReferenceManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src/NamespaceReferenceManager.cpp -o NamespaceReferenceManager.o - -CursorManager.o: src/CursorManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src/CursorManager.cpp -o CursorManager.o - -IdentityManager.o: src/IdentityManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src/IdentityManager.cpp -o IdentityManager.o - -LifecycleManager.o: src/LifecycleManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src/LifecycleManager.cpp -o LifecycleManager.o - -HandlerManager.o: src/HandlerManager.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src/HandlerManager.cpp -o HandlerManager.o - -VM.o: src/VM.cpp - $(CXX) $(DEFINES) $(INCLUDE_FLAG) $(COMPILE_FLAGS) $(COMPILE_ONLY) src/VM.cpp -o VM.o - -clean: - -$(REMOVE) RNT.exe RNT $(OBJECTS) NT.obj ObjectManager.obj PermissionsManager.obj NamespaceReferenceManager.obj CursorManager.obj IdentityManager.obj LifecycleManager.obj HandlerManager.obj VM.obj NT.o ObjectManager.o PermissionsManager.o NamespaceReferenceManager.o CursorManager.o IdentityManager.o LifecycleManager.o HandlerManager.o VM.o RNT.exp RNT.lib diff --git a/launch.vs.json b/launch.vs.json deleted file mode 100644 index 4533583..0000000 --- a/launch.vs.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "version": "0.2.1", - "configurations": [ - { - "type": "default", - "project": "CMakeLists.txt", - "projectTarget": "RNT.exe", - "name": "RNT.exe (Debug)", - "currentDir": "${workspaceRoot}" - } - ] -} diff --git a/src/NT.cpp b/src/NT.cpp deleted file mode 100644 index 66752ef..0000000 --- a/src/NT.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include "Runtime.h" - -#ifdef NT_CONSOLE_APP -#include "CursorManager.h" -#include "HandlerManager.h" -#include "IdentityManager.h" -#include "LifecycleManager.h" -#include "ObjectManager.h" -#include "PermissionsManager.h" -#include "VM.h" - -#include -#endif - -namespace nt -{ - bool NT::IsRunning() const - { - return true; - } - - void NT::SimulateEntryCall() - { - } -} - -#ifdef NT_CONSOLE_APP -int main() -{ - const nt::NT runtime; - std::cout << "RNT running: " << (runtime.IsRunning() ? "yes" : "no") << '\n'; - - // --- Mock: register RelationX in the object registry --- - nt::ObjectManager objects; - - auto type = std::make_unique(); - type->label = RELATION; - type->disposable = false; - type->methods = { OPEN, CLOSE }; - - objects.Register({ "RelationX" }, std::make_unique(), std::move(type)); - - // --- Mock: populate the cursor store with three tuples --- - nt::CursorManager cursors; - cursors.MockInsert({ "RelationX" }, { { "name", "Alice" }, { "age", "30" } }); - cursors.MockInsert({ "RelationX" }, { { "name", "Bob" }, { "age", "25" } }); - cursors.MockInsert({ "RelationX" }, { { "name", "Carol" }, { "age", "35" } }); - - // --- Open a handle on RelationX through the full manager pipeline --- - nt::PermissionsManager permissions; - nt::IdentityManager identities; - nt::LifecycleManager lifecycles; - nt::HandlerManager handler(objects, permissions, identities, lifecycles); - - int connection = 1; // dummy connection context - nt::HandlerManager::handle* handle = handler.Open({ "RelationX" }, &connection); - if (handle == nullptr) - { - std::cout << "Failed to open handle for RelationX\n"; - return 1; - } - - // --- Open a cursor on the relation --- - nt::CursorManager::cursor* cursor = cursors.Open(handle); - if (cursor == nullptr) - { - std::cout << "Failed to open cursor for RelationX\n"; - handler.Close(handle); - return 1; - } - - // --- Build a SCAN plan and pull all tuples lazily through the FOL VM --- - nt::PlanNode plan; - plan.op = nt::PlanNode::Op::SCAN; - plan.scan_cursor = cursor; - - nt::VM vm(cursors); - std::cout << "Tuples in RelationX:\n"; - while (nt::Tuple* t = vm.Next(&plan)) - { - std::cout << " "; - const nt::Attribute* attr = t->Next(); - while (attr != nullptr) - { - std::cout << attr->name << "=" << attr->value; - attr = t->Next(); - if (attr != nullptr) - std::cout << ", "; - } - std::cout << '\n'; - } - - // --- Cleanup --- - cursors.Close(cursor); - handler.Close(handle); - -#ifdef NT_WAIT_ON_EXIT - std::cout << "Press Enter to exit..."; - std::cin.get(); -#endif - - return runtime.IsRunning() ? 0 : 1; -} -#endif diff --git a/src/RelationalNT.cpp b/src/RelationalNT.cpp new file mode 100644 index 0000000..66752ef --- /dev/null +++ b/src/RelationalNT.cpp @@ -0,0 +1,104 @@ +#include "Runtime.h" + +#ifdef NT_CONSOLE_APP +#include "CursorManager.h" +#include "HandlerManager.h" +#include "IdentityManager.h" +#include "LifecycleManager.h" +#include "ObjectManager.h" +#include "PermissionsManager.h" +#include "VM.h" + +#include +#endif + +namespace nt +{ + bool NT::IsRunning() const + { + return true; + } + + void NT::SimulateEntryCall() + { + } +} + +#ifdef NT_CONSOLE_APP +int main() +{ + const nt::NT runtime; + std::cout << "RNT running: " << (runtime.IsRunning() ? "yes" : "no") << '\n'; + + // --- Mock: register RelationX in the object registry --- + nt::ObjectManager objects; + + auto type = std::make_unique(); + type->label = RELATION; + type->disposable = false; + type->methods = { OPEN, CLOSE }; + + objects.Register({ "RelationX" }, std::make_unique(), std::move(type)); + + // --- Mock: populate the cursor store with three tuples --- + nt::CursorManager cursors; + cursors.MockInsert({ "RelationX" }, { { "name", "Alice" }, { "age", "30" } }); + cursors.MockInsert({ "RelationX" }, { { "name", "Bob" }, { "age", "25" } }); + cursors.MockInsert({ "RelationX" }, { { "name", "Carol" }, { "age", "35" } }); + + // --- Open a handle on RelationX through the full manager pipeline --- + nt::PermissionsManager permissions; + nt::IdentityManager identities; + nt::LifecycleManager lifecycles; + nt::HandlerManager handler(objects, permissions, identities, lifecycles); + + int connection = 1; // dummy connection context + nt::HandlerManager::handle* handle = handler.Open({ "RelationX" }, &connection); + if (handle == nullptr) + { + std::cout << "Failed to open handle for RelationX\n"; + return 1; + } + + // --- Open a cursor on the relation --- + nt::CursorManager::cursor* cursor = cursors.Open(handle); + if (cursor == nullptr) + { + std::cout << "Failed to open cursor for RelationX\n"; + handler.Close(handle); + return 1; + } + + // --- Build a SCAN plan and pull all tuples lazily through the FOL VM --- + nt::PlanNode plan; + plan.op = nt::PlanNode::Op::SCAN; + plan.scan_cursor = cursor; + + nt::VM vm(cursors); + std::cout << "Tuples in RelationX:\n"; + while (nt::Tuple* t = vm.Next(&plan)) + { + std::cout << " "; + const nt::Attribute* attr = t->Next(); + while (attr != nullptr) + { + std::cout << attr->name << "=" << attr->value; + attr = t->Next(); + if (attr != nullptr) + std::cout << ", "; + } + std::cout << '\n'; + } + + // --- Cleanup --- + cursors.Close(cursor); + handler.Close(handle); + +#ifdef NT_WAIT_ON_EXIT + std::cout << "Press Enter to exit..."; + std::cin.get(); +#endif + + return runtime.IsRunning() ? 0 : 1; +} +#endif -- cgit v1.2.3