From 4cc8124f0715a5d336071be06a4efd574471e691 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 20 Mar 2026 12:34:54 +0100 Subject: [CHORE] Working on libThread for NeKernel's thread implementation. Signed-off-by: Amlal El Mahrouss --- compile_flags.txt | 5 +++- drivers/Threads.drv/Threads.drv.json | 21 -------------- drivers/Threads.drv/dist/.keep | 0 drivers/X11.drv/X11.drv.json | 3 ++ frameworks/libThread.fwrk/dist/.keep | 0 frameworks/libThread.fwrk/libThread.fwrk.json | 20 +++++++++++++ frameworks/libThread.fwrk/src/ThreadManager.cpp | 37 +++++++++++++++++++++++++ 7 files changed, 64 insertions(+), 22 deletions(-) delete mode 100644 drivers/Threads.drv/Threads.drv.json delete mode 100644 drivers/Threads.drv/dist/.keep create mode 100644 frameworks/libThread.fwrk/dist/.keep create mode 100644 frameworks/libThread.fwrk/libThread.fwrk.json create mode 100644 frameworks/libThread.fwrk/src/ThreadManager.cpp diff --git a/compile_flags.txt b/compile_flags.txt index 126163e..7e05658 100644 --- a/compile_flags.txt +++ b/compile_flags.txt @@ -3,9 +3,12 @@ -Isrc/boot/ -Isrc/build/src -Isrc/kernel/src +-Isrc/kernel/src/libDDK +-Isrc/kernel/src/libSystem -Isrc/kernel/public -Isrc/kernel/public/frameworks -Iframeworks -Isrc/nectar/src -I/opt/homebrew/Cellar/boost/1.90.0/include --Iinclude/ \ No newline at end of file +-Iinclude/ +-D__NEOSKRNL__ \ No newline at end of file diff --git a/drivers/Threads.drv/Threads.drv.json b/drivers/Threads.drv/Threads.drv.json deleted file mode 100644 index f4177f5..0000000 --- a/drivers/Threads.drv/Threads.drv.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compiler_path": "x86_64-w64-mingw32-g++", - "compiler_std": "c++20", - "headers_path": ["../", "./", "../src/kernel/src/", "../src/kernel/src/kernel"], - "sources_path": ["src/*.cc"], - "output_name": "./dist/threads.ddk.out", - "compiler_flags": [ - "-ffreestanding", - "-shared", - "-fno-rtti", - "-fno-exceptions", - "-Wl,--subsystem=17" - ], - "cpp_macros": [ - "kKTVersion=0x0100", - "kKTVersionHighest=0x0100", - "kKTVersionLowest=0x0100", - "__NE_AMD64__" - ] - } - diff --git a/drivers/Threads.drv/dist/.keep b/drivers/Threads.drv/dist/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/drivers/X11.drv/X11.drv.json b/drivers/X11.drv/X11.drv.json index 0235752..ff9cf06 100644 --- a/drivers/X11.drv/X11.drv.json +++ b/drivers/X11.drv/X11.drv.json @@ -11,6 +11,9 @@ "-fno-exceptions", "-Wl,--subsystem=17" ], + "ddk_depends_on": [ + "GPUBasic" + ], "cpp_macros": [ "kX11Version=0x0100", "kX11VersionHighest=0x0100", diff --git a/frameworks/libThread.fwrk/dist/.keep b/frameworks/libThread.fwrk/dist/.keep new file mode 100644 index 0000000..e69de29 diff --git a/frameworks/libThread.fwrk/libThread.fwrk.json b/frameworks/libThread.fwrk/libThread.fwrk.json new file mode 100644 index 0000000..1fd7e12 --- /dev/null +++ b/frameworks/libThread.fwrk/libThread.fwrk.json @@ -0,0 +1,20 @@ +{ + "compiler_path": "x86_64-w64-mingw32-g++", + "compiler_std": "c++20", + "headers_path": ["../", "./", "../src/kernel/src/", "../src/kernel/src/kernel"], + "sources_path": ["src/*.cpp"], + "output_name": "./dist/libThread.fwrk.dylib", + "compiler_flags": [ + "-ffreestanding", + "-shared", + "-fno-rtti", + "-fno-exceptions", + "-Wl,--subsystem=17" + ], + "cpp_macros": [ + "kKTVersion=0x0100", + "kKTVersionHighest=0x0100", + "kKTVersionLowest=0x0100" + ] + } + diff --git a/frameworks/libThread.fwrk/src/ThreadManager.cpp b/frameworks/libThread.fwrk/src/ThreadManager.cpp new file mode 100644 index 0000000..9b222ab --- /dev/null +++ b/frameworks/libThread.fwrk/src/ThreadManager.cpp @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright 2026, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/ne-foss-org/ne_system + +#include + +#define kThreadMapMax (1024UL) +#define kThreadBaseHash (0x5555ffff6ULL) + +/// @brief The registered thread for a specific process. +static ThreadRef kThreadMap[kThreadMapMax]; + +/// @brief This hash-list stores the thread to be run. +static ThreadRef kThreadHeads[kThreadMapMax]; + +IMPORT_C ThreadRef ThrCreateThread(const Char* thread_name, ThrProcKind procedure, + SInt32 argument_count, VoidPtr args, SInt32 flags) { + ThreadRef ref = new REF_TYPE; + if (!ref) return nullptr; + + if (!thread_name || !procedure) { + delete ref; + ref = nullptr; + return nullptr; + } + + ref->__hash = *(UInt32*) thread_name; + ref->__hash += kThreadBaseHash; + + ref->__self = (VoidPtr) procedure; + + kThreadMap[kThreadMapMax % ref->__hash] = ref; + kThreadHeads[kThreadMapMax % ref->__hash] = ref; + + return ref; +} -- cgit v1.2.3