From ec6cd43a1418c381904694348a554493235c8014 Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Thu, 12 Feb 2026 22:57:33 +0100 Subject: [PATCH] Move out libmsl functionality into separate libs --- Makefile | 2 ++ aux/devel.sh | 2 ++ aux/format.sh | 3 ++ init/Makefile | 7 +++-- init/init.c | 13 ++++----- liballoc/Makefile | 28 +++++++++++++++++++ {libmsl => liballoc}/alloc/.gitignore | 0 {libmsl => liballoc}/alloc/liballoc.c | 0 {libmsl => liballoc}/alloc/liballoc.h | 0 {libmsl => liballoc}/alloc/src.mk | 0 liballoc/src.mk | 1 + libmsl/Makefile | 2 +- libmsl/proc/local.h | 6 ---- libmsl/proc/src.mk | 3 -- libmsl/src.mk | 2 -- libprocess/Makefile | 28 +++++++++++++++++++ .../proc => libprocess/process}/.gitignore | 0 .../proc.c => libprocess/process/process.c | 6 ++-- .../proc.h => libprocess/process/process.h | 8 +++--- libprocess/process/src.mk | 3 ++ libprocess/src.mk | 1 + libterminal/terminal/terminal.c | 2 +- make/liballoc.mk | 10 +++++++ make/libprocess.mk | 10 +++++++ make/ufuncs.mk | 4 +++ 25 files changed, 112 insertions(+), 29 deletions(-) create mode 100644 liballoc/Makefile rename {libmsl => liballoc}/alloc/.gitignore (100%) rename {libmsl => liballoc}/alloc/liballoc.c (100%) rename {libmsl => liballoc}/alloc/liballoc.h (100%) rename {libmsl => liballoc}/alloc/src.mk (100%) create mode 100644 liballoc/src.mk delete mode 100644 libmsl/proc/local.h delete mode 100644 libmsl/proc/src.mk create mode 100644 libprocess/Makefile rename {libmsl/proc => libprocess/process}/.gitignore (100%) rename libmsl/proc/proc.c => libprocess/process/process.c (75%) rename libmsl/proc/proc.h => libprocess/process/process.h (54%) create mode 100644 libprocess/process/src.mk create mode 100644 libprocess/src.mk create mode 100644 make/liballoc.mk create mode 100644 make/libprocess.mk create mode 100644 make/ufuncs.mk diff --git a/Makefile b/Makefile index fef495f..b8e248c 100644 --- a/Makefile +++ b/Makefile @@ -5,4 +5,6 @@ include make/kernel.mk include make/dist.mk include make/docs.mk include make/libmsl.mk +include make/liballoc.mk include make/libterminal.mk +include make/libprocess.mk diff --git a/aux/devel.sh b/aux/devel.sh index 997c4da..f8cd000 100755 --- a/aux/devel.sh +++ b/aux/devel.sh @@ -9,6 +9,8 @@ else fi make -B all_libmsl +make -B all_liballoc +make -B all_libprocess make -B all_libterminal make -B all_apps make -B all_dist diff --git a/aux/format.sh b/aux/format.sh index 3e5963a..71bd892 100755 --- a/aux/format.sh +++ b/aux/format.sh @@ -4,4 +4,7 @@ set -x make -B format_kernel make -B format_libmsl +make -B format_libterminal +make -B format_libprocess +make -B format_liballoc make -B format_apps diff --git a/init/Makefile b/init/Makefile index bfa8045..0efb681 100644 --- a/init/Makefile +++ b/init/Makefile @@ -1,4 +1,7 @@ -ldflags += -L ../libterminal/build -l:libterminal.a -cflags += -isystem ../libterminal +include ../make/ufuncs.mk + +$(eval $(call add_lib,libterminal)) +$(eval $(call add_lib,liballoc)) +$(eval $(call add_lib,libprocess)) include ../make/user.mk diff --git a/init/init.c b/init/init.c index 71b52bc..a629dee 100644 --- a/init/init.c +++ b/init/init.c @@ -1,6 +1,5 @@ #include -#include -#include +#include #include #include #include @@ -8,10 +7,10 @@ #define MUTEX 2000 -LOCAL volatile char letter = 'c'; +__thread volatile char letter = 'c'; void app_proc (void) { - char arg_letter = (char)(uintptr_t)argument_ptr (); + char arg_letter = (char)(uintptr_t)process_argument (); letter = arg_letter; @@ -32,9 +31,9 @@ void app_main (void) { letter = 'a'; - /* process_spawn (&app_proc, (void*)'b'); */ - /* process_spawn (&app_proc, (void*)'c'); */ - /* process_spawn (&app_proc, (void*)'d'); */ + process_spawn (&app_proc, (void*)'b'); + process_spawn (&app_proc, (void*)'c'); + process_spawn (&app_proc, (void*)'d'); for (;;) { mutex_lock (MUTEX); diff --git a/liballoc/Makefile b/liballoc/Makefile new file mode 100644 index 0000000..7b4b8a1 --- /dev/null +++ b/liballoc/Makefile @@ -0,0 +1,28 @@ +cc := clang +o := +c := +cflags := -isystem . -isystem ../libmsl +buildtype ?= release + +include src.mk +include ../generic/flags.mk +include ../$(platform)/flags.mk + +all: build/liballoc.a + +build/liballoc.a: $(o) + llvm-ar rcs $@ $^ + +%.o: %.c + $(cc) -c -o $@ $(cflags) $< + +%.o: %.S + $(cc) -c -o $@ $(cflags) $< + +clean: + rm -f $(o) build/liballoc.a + +format: + clang-format -i $$(git ls-files '*.c' '*.h') + +.PHONY: all clean format diff --git a/libmsl/alloc/.gitignore b/liballoc/alloc/.gitignore similarity index 100% rename from libmsl/alloc/.gitignore rename to liballoc/alloc/.gitignore diff --git a/libmsl/alloc/liballoc.c b/liballoc/alloc/liballoc.c similarity index 100% rename from libmsl/alloc/liballoc.c rename to liballoc/alloc/liballoc.c diff --git a/libmsl/alloc/liballoc.h b/liballoc/alloc/liballoc.h similarity index 100% rename from libmsl/alloc/liballoc.h rename to liballoc/alloc/liballoc.h diff --git a/libmsl/alloc/src.mk b/liballoc/alloc/src.mk similarity index 100% rename from libmsl/alloc/src.mk rename to liballoc/alloc/src.mk diff --git a/liballoc/src.mk b/liballoc/src.mk new file mode 100644 index 0000000..cd9623f --- /dev/null +++ b/liballoc/src.mk @@ -0,0 +1 @@ +include alloc/src.mk diff --git a/libmsl/Makefile b/libmsl/Makefile index e7a71eb..87db1e7 100644 --- a/libmsl/Makefile +++ b/libmsl/Makefile @@ -1,7 +1,7 @@ cc := clang o := c := -cflags := -isystem . +cflags := -isystem . -isystem ../liballoc buildtype ?= release include src.mk diff --git a/libmsl/proc/local.h b/libmsl/proc/local.h deleted file mode 100644 index df3c69d..0000000 --- a/libmsl/proc/local.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _LIBMSL_PROC_TLS_H -#define _LIBMSL_PROC_TLS_H - -#define LOCAL __thread - -#endif // _LIBMSL_PROC_TLS_H diff --git a/libmsl/proc/src.mk b/libmsl/proc/src.mk deleted file mode 100644 index 1c7a57b..0000000 --- a/libmsl/proc/src.mk +++ /dev/null @@ -1,3 +0,0 @@ -c += proc/proc.c - -o += proc/proc.o diff --git a/libmsl/src.mk b/libmsl/src.mk index f3e6044..2d7c2af 100644 --- a/libmsl/src.mk +++ b/libmsl/src.mk @@ -2,5 +2,3 @@ include $(platform)/src.mk include init/src.mk include m/src.mk include string/src.mk -include alloc/src.mk -include proc/src.mk diff --git a/libprocess/Makefile b/libprocess/Makefile new file mode 100644 index 0000000..10c41da --- /dev/null +++ b/libprocess/Makefile @@ -0,0 +1,28 @@ +cc := clang +o := +c := +cflags := -isystem . -isystem ../libmsl -isystem ../liballoc +buildtype ?= release + +include src.mk +include ../generic/flags.mk +include ../$(platform)/flags.mk + +all: build/libprocess.a + +build/libprocess.a: $(o) + llvm-ar rcs $@ $^ + +%.o: %.c + $(cc) -c -o $@ $(cflags) $< + +%.o: %.S + $(cc) -c -o $@ $(cflags) $< + +clean: + rm -f $(o) build/libprocess.a + +format: + clang-format -i $$(git ls-files '*.c' '*.h') + +.PHONY: all clean format diff --git a/libmsl/proc/.gitignore b/libprocess/process/.gitignore similarity index 100% rename from libmsl/proc/.gitignore rename to libprocess/process/.gitignore diff --git a/libmsl/proc/proc.c b/libprocess/process/process.c similarity index 75% rename from libmsl/proc/proc.c rename to libprocess/process/process.c index b61c8a4..b6dda7f 100644 --- a/libmsl/proc/proc.c +++ b/libprocess/process/process.c @@ -1,16 +1,16 @@ #include #include #include -#include +#include #include #include int process_spawn (process_func_t func, void* argument_ptr) { - void* stack = malloc (PROC_STACK_SIZE); + void* stack = malloc (STACK_SIZE); if (stack == NULL) return -ST_OOM_ERROR; - uintptr_t top = (uintptr_t)stack + PROC_STACK_SIZE; + uintptr_t top = (uintptr_t)stack + STACK_SIZE; return clone (top, func, argument_ptr); } diff --git a/libmsl/proc/proc.h b/libprocess/process/process.h similarity index 54% rename from libmsl/proc/proc.h rename to libprocess/process/process.h index ba2655d..40d2a32 100644 --- a/libmsl/proc/proc.h +++ b/libprocess/process/process.h @@ -1,9 +1,9 @@ -#ifndef _LIBMSL_PROC_PROC_H -#define _LIBMSL_PROC_PROC_H +#ifndef _LIBPROCESS_PROCESS_PROCESS_H +#define _LIBPROCESS_PROCESS_PROCESS_H #include -#define PROC_STACK_SIZE 256 * PAGE_SIZE +#define STACK_SIZE (256 * PAGE_SIZE) typedef void (*process_func_t) (void); @@ -11,4 +11,4 @@ int process_spawn (process_func_t func, void* argument_ptr); int process_quit (void); void* process_argument (void); -#endif // _LIBMSL_PROC_PROC_H +#endif // _LIBPROCESS_PROCESS_PROCESS_H diff --git a/libprocess/process/src.mk b/libprocess/process/src.mk new file mode 100644 index 0000000..ea3cd1d --- /dev/null +++ b/libprocess/process/src.mk @@ -0,0 +1,3 @@ +c += process/process.c + +o += process/process.o diff --git a/libprocess/src.mk b/libprocess/src.mk new file mode 100644 index 0000000..b5dd9d0 --- /dev/null +++ b/libprocess/src.mk @@ -0,0 +1 @@ +include process/src.mk diff --git a/libterminal/terminal/terminal.c b/libterminal/terminal/terminal.c index 2df8ecb..91b7ed3 100644 --- a/libterminal/terminal/terminal.c +++ b/libterminal/terminal/terminal.c @@ -1,7 +1,7 @@ +#include #include #include #include -#include void terminal_print (const char* string, size_t len) { device_do (TERMINAL_DEVICE, TERMINAL_PUTSTR, (void*)string, &len, NULL, NULL); diff --git a/make/liballoc.mk b/make/liballoc.mk new file mode 100644 index 0000000..813995b --- /dev/null +++ b/make/liballoc.mk @@ -0,0 +1,10 @@ +all_liballoc: + make -C liballoc platform=$(platform) all + +clean_liballoc: + make -C liballoc platform=$(platform) clean + +format_liballoc: + make -C liballoc platform=$(platform) format + +.PHONY: all_liballoc clean_liballoc format_liballoc diff --git a/make/libprocess.mk b/make/libprocess.mk new file mode 100644 index 0000000..0399fc6 --- /dev/null +++ b/make/libprocess.mk @@ -0,0 +1,10 @@ +all_libprocess: + make -C libprocess platform=$(platform) all + +clean_libprocess: + make -C libprocess platform=$(platform) clean + +format_libprocess: + make -C libprocess platform=$(platform) format + +.PHONY: all_libprocess clean_libprocess format_libprocess diff --git a/make/ufuncs.mk b/make/ufuncs.mk new file mode 100644 index 0000000..c9f779d --- /dev/null +++ b/make/ufuncs.mk @@ -0,0 +1,4 @@ +define add_lib + ldflags += -L ../$(1)/build -l:$(1).a + cflags += -isystem ../$(1) +endef