diff options
Diffstat (limited to 'src/libPThread')
| -rw-r--r-- | src/libPThread/.keep | 0 | ||||
| -rw-r--r-- | src/libPThread/PThreadKit/.keep | 0 | ||||
| -rw-r--r-- | src/libPThread/PThreadKit/Thread.h | 22 | ||||
| -rw-r--r-- | src/libPThread/libPThread.json | 22 | ||||
| -rw-r--r-- | src/libPThread/src/.keep | 0 | ||||
| -rw-r--r-- | src/libPThread/src/Thread.cpp | 42 |
6 files changed, 86 insertions, 0 deletions
diff --git a/src/libPThread/.keep b/src/libPThread/.keep new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src/libPThread/.keep diff --git a/src/libPThread/PThreadKit/.keep b/src/libPThread/PThreadKit/.keep new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src/libPThread/PThreadKit/.keep diff --git a/src/libPThread/PThreadKit/Thread.h b/src/libPThread/PThreadKit/Thread.h new file mode 100644 index 00000000..5282a623 --- /dev/null +++ b/src/libPThread/PThreadKit/Thread.h @@ -0,0 +1,22 @@ +// 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/nekernel + +#ifndef LIBPOSIX_POSIXKIT_THREAD_H +#define LIBPOSIX_POSIXKIT_THREAD_H + +#include <libPOSIXWrapper/POSIXKit/unistd.h> + +/// @brief Please use these macros to specify whether your function is thread safe or not. +#define PTHREAD_UNSAFE __THREAD_UNSAFE +#define PTHREAD_SAFE __THREAD_SAFE + +PTHREAD_SAFE SInt32 pthread_create(_Output ThreadRef* thread, VoidPtr attr, VoidPtr (*start_routine)(VoidPtr), VoidPtr arg); +PTHREAD_SAFE SInt32 pthread_join(ThreadRef thread, VoidPtr* retval); +PTHREAD_SAFE SInt32 pthread_exit(SInt32 retval); +PTHREAD_SAFE SInt32 pthread_detach(ThreadRef thread); +PTHREAD_SAFE ThreadRef pthread_self(Void); +PTHREAD_SAFE SInt32 pthread_yield(void); + +#endif // LIBPOSIX_POSIXKIT_THREAD_H diff --git a/src/libPThread/libPThread.json b/src/libPThread/libPThread.json new file mode 100644 index 00000000..a5cfba73 --- /dev/null +++ b/src/libPThread/libPThread.json @@ -0,0 +1,22 @@ +{ + "compiler_path": "x86_64-w64-mingw32-gcc", + "compiler_std": "c++20", + "headers_path": ["../", "./"], + "sources_path": ["src/*.cpp"], + "output_name": "libPThread.dll", + "compiler_flags": [ + "-ffreestanding", + "-shared", + "-std=c++20", + "-fno-rtti", + "-fno-exceptions", + "-Wl,--subsystem=17" + ], + "cpp_macros": [ + "__NEOSKRNL__", + "kPosixVersionHighest=0x0100", + "kPosixVersionLowest=0x0100", + "kPosixVersion=0x0100" + ], + "description": "The NeKernel PThread System. Refer to: https://man7.org/linux/man-pages/man7/pthreads.7.html" +} diff --git a/src/libPThread/src/.keep b/src/libPThread/src/.keep new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src/libPThread/src/.keep diff --git a/src/libPThread/src/Thread.cpp b/src/libPThread/src/Thread.cpp new file mode 100644 index 00000000..5a351be8 --- /dev/null +++ b/src/libPThread/src/Thread.cpp @@ -0,0 +1,42 @@ +// 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/nekernel + +#include <libPThread/PThreadKit/Thread.h> + +PTHREAD_SAFE SInt32 pthread_detach(ThreadRef thread) { + return ThrDetachThread(thread); +} + +PTHREAD_SAFE SInt32 pthread_yield(void) { + return ThrYieldThread(pthread_self()); +} + +PTHREAD_SAFE ThreadRef pthread_self(Void) { + return ThrCurrentThread(); +} + +PTHREAD_SAFE SInt32 pthread_exit(SInt32 retval) { + return ThrExitCurrentThread(retval); +} + +PTHREAD_SAFE SInt32 pthread_join(ThreadRef thread, VoidPtr* retval) { + SInt32* ret = (SInt32*)retval; + *ret = ThrJoinThread(thread); + + return 0; +} + +PTHREAD_SAFE SInt32 pthread_create(_Output ThreadRef* thread, VoidPtr attr, VoidPtr (*start_routine)(VoidPtr), VoidPtr arg) { + LIBSYS_UNUSED(attr); + + /// @note passing zero means you'd have to read the argv until you hit a nullptr. + ThreadRef thrd = ThrCreateThread("pthread_thread", (ThrProcKind)start_routine, 0, arg, 0); + + if (!thrd) return -1; + + *thread = thrd; + return 0; +} + |
