Start implementing the system manager.
authorcoderain <coderain@sdf.org>
Thu, 18 May 2017 16:11:40 +0000 (18:11 +0200)
committercoderain <coderain@sdf.org>
Thu, 18 May 2017 16:11:40 +0000 (18:11 +0200)
.gitignore
Makefile
manager/.gitignore [new file with mode: 0644]
manager/Makefile [new file with mode: 0644]
manager/src/start.c [new file with mode: 0644]

index 9cf9e3cbc410fcd95e786f0a51843bea6c3d7d1e..b9c7b75777e692548dfd706a000495b71da6a079 100644 (file)
@@ -12,3 +12,5 @@
 !library/*
 !tests
 !tests/*
+!manager
+!manager/*
index c213b2fbe53e68da3c7cdd11ae5138884f9d10a5..3fdec0e51ef56b6e41ce98408aeefb9084ff6dc6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.PHONY: all clean kernel library tests
+.PHONY: all clean kernel library manager tests
 
 all: livecd.iso tests
 
@@ -8,13 +8,17 @@ kernel:
 library: kernel
        $(MAKE) -C library all
 
+manager: library
+       $(MAKE) -C manager all
+
 tests:
        $(MAKE) -C tests all
 
-livecd.iso: kernel library
+livecd.iso: kernel library manager
        mkdir -p livecd
        mkdir -p livecd/boot
        cp kernel/monolithium livecd/boot/monolithium
+       cp manager/manager livecd/manager
        mkdir -p livecd/boot/grub
        cp grub.cfg livecd/boot/grub/grub.cfg
        grub-mkrescue -o $@ livecd
@@ -22,5 +26,6 @@ livecd.iso: kernel library
 clean:
        $(MAKE) -C kernel clean
        $(MAKE) -C library clean
+       $(MAKE) -C manager clean
        $(MAKE) -C tests clean
        rm livecd.iso
diff --git a/manager/.gitignore b/manager/.gitignore
new file mode 100644 (file)
index 0000000..f4f4f75
--- /dev/null
@@ -0,0 +1,7 @@
+*
+
+# Include the following files:
+!.gitignore
+!Makefile
+!src
+!src/*
diff --git a/manager/Makefile b/manager/Makefile
new file mode 100644 (file)
index 0000000..d1bf843
--- /dev/null
@@ -0,0 +1,80 @@
+#
+# Makefile
+#
+# Copyright (C) 2017 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+DEBUG = yes
+
+# Compilers and tools
+CC = i686-elf-gcc
+ASM = nasm
+LINK = i686-aout-ld
+OBJCOPY = i686-elf-objcopy
+
+# Directories
+SRCDIR = src
+OBJDIR = obj
+DEPDIR = dep
+
+LIBGCC_DIR = $(shell $(CC) -print-file-name=)
+
+# Flags
+CFLAGS = -Wall -Werror -ffreestanding -nostdlib -I../kernel/include
+ASMFLAGS = -felf
+LDFLAGS = -mi386aout -e process_startup -L $(LIBGCC_DIR) -lgcc -L ../library -lmlsys
+
+ifeq ($(DEBUG), yes)
+    CFLAGS += -g
+else
+    CFLAGS += -O3
+endif
+
+# Input and output files
+SOURCES =  $(wildcard $(SRCDIR)/*.c)
+SOURCES += $(wildcard $(SRCDIR)/*.asm)
+
+DEPENDS = $(shell find $(DEPDIR) -type f -name \*.d)
+OBJECTS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(patsubst $(SRCDIR)/%.asm, $(OBJDIR)/%.o, $(SOURCES)))
+
+.PHONY: all clean
+
+all: $(OBJDIR) $(DEPDIR) manager
+
+-include $(DEPENDS)
+
+$(OBJDIR):
+       mkdir -p $(OBJDIR)
+
+$(DEPDIR):
+       mkdir -p $(DEPDIR)
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.c Makefile
+       mkdir -p $(dir $@)
+       mkdir -p $(dir $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d))
+       $(CC) $(CFLAGS) -MMD -MP -MF $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d) -o $@ -c $<
+       $(OBJCOPY) --keep-file-symbols -j .text -j .data -j .bss $@ $@
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.asm Makefile
+       $(ASM) $(ASMFLAGS) -o $@ $<
+
+manager: $(OBJECTS)
+       $(LINK) $(LDFLAGS) -o $@ $^
+
+clean:
+       rm -f manager
+       find $(OBJDIR) -name \*.o -delete
+       find $(DEPDIR) -name \*.d -delete
diff --git a/manager/src/start.c b/manager/src/start.c
new file mode 100644 (file)
index 0000000..28944be
--- /dev/null
@@ -0,0 +1,8 @@
+#include <syscalls.h>
+#include <process.h>
+
+int process_startup(process_params_t *parameters)
+{
+    for (;;);
+    return 0;
+}