summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-29 21:27:17 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-30 11:23:59 -0400
commit78c1891d87c4880289bf76fba82fa8ca0bf6a478 (patch)
tree7d2f601cc57ede012e4ebfe45cf4f23c5ddc85f6
parentupdate fs headers 2.0 (diff)
downloadcomus-78c1891d87c4880289bf76fba82fa8ca0bf6a478.tar.gz
comus-78c1891d87c4880289bf76fba82fa8ca0bf6a478.tar.bz2
comus-78c1891d87c4880289bf76fba82fa8ca0bf6a478.zip
update makefiles
-rw-r--r--Makefile106
-rw-r--r--config.mk20
-rw-r--r--config/gdbinit2
-rw-r--r--config/grub.cfg2
-rw-r--r--kernel/Makefile39
-rw-r--r--kernel/cpu/idt.c3
-rw-r--r--kernel/font/default8x16.psfu (renamed from font/default8x16.psfu)bin4969 -> 4969 bytes
-rw-r--r--kernel/font/font.S (renamed from kernel/font.S)0
-rw-r--r--kernel/user.c14
-rw-r--r--user/Makefile58
-rw-r--r--user/include/incbin.h1
11 files changed, 124 insertions, 121 deletions
diff --git a/Makefile b/Makefile
index 5dc3e03..f5d6020 100644
--- a/Makefile
+++ b/Makefile
@@ -1,109 +1,59 @@
### Copyright (c) 2025 Freya Murphy <freya@freyacat.org>
-.PHONY: build fmt clean qemu
+.PHONY: build clean fmt qemu qemu-kvm qemu-gdb gdb
.SILENT:
-AS ?= as
-CC ?= cc
-LD ?= ld
-CPP ?= cpp
-
-CPPFLAGS += -Ikernel/include
-
-CFLAGS += -O2
-CFLAGS += -std=c11
-CFLAGS += -Wall -Wextra -pedantic
-CFLAGS += -fno-pie -fno-stack-protector
-CFLAGS += -fno-omit-frame-pointer -ffreestanding
-CFLAGS += -nostdlib -fno-builtin -mno-red-zone
-CFLAGS += -D DEBUG -g
-CFLAGS += $(CPPFLAGS)
-
-LDFLAGS += -nmagic -nostdlib
-LDFLAGS += -z noexecstack
-
-SRC=kernel
BIN=bin
-KERNEL=kernel.bin
ISO=os.iso
-IMAGE=disk.img
-IMAGE_SIZE=4G
-
-H_SRC = $(shell find $(SRC) -type f -name "*.h")
-A_SRC = $(shell find $(SRC) -type f -name "*.S")
-A_OBJ = $(patsubst %.S,$(BIN)/%.S.o,$(A_SRC))
-C_SRC = $(shell find $(SRC) -type f -name "*.c")
-C_OBJ = $(patsubst %.c,$(BIN)/%.o,$(C_SRC))
-
-UNAME := $(shell uname)
-QEMU = qemu-system-x86_64
-QEMUOPTS = -cdrom $(BIN)/$(ISO) \
- -no-reboot \
- -drive format=raw,file=$(BIN)/user/apple\
- -serial mon:stdio \
- -m 4G \
- -name kern
+QEMU ?= qemu-system-x86_64
+GRUB ?= grub-mkrescue
-GRUB = grub-mkrescue
+QEMUOPTS += -cdrom $(BIN)/$(ISO) \
+ -no-reboot \
+ -drive format=raw,file=user/bin/apple \
+ -serial mon:stdio \
+ -m 4G \
+ -name kern
ifdef UEFI
QEMU = qemu-system-x86_64-uefi
GRUB = grub-mkrescue-uefi
endif
-qemu: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
+ifndef DISPLAY
+QEMUOPTS += -nographic
+endif
+
+qemu: $(BIN)/$(ISO)
$(QEMU) $(QEMUOPTS)
-qemu-kvm: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
+qemu-kvm: $(BIN)/$(ISO)
$(QEMU) $(QEMUOPTS) -cpu host --enable-kvm
-qemu-kvm-nox: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
- $(QEMU) $(QEMUOPTS) -cpu host --enable-kvm -nographic
-
-qemu-nox: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
- $(QEMU) $(QEMUOPTS) -nographic
-
-qemu-gdb: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
+qemu-gdb: $(BIN)/$(ISO)
$(QEMU) $(QEMUOPTS) -S -gdb tcp::1337
-qemu-gdb-nox: $(BIN)/$(ISO) $(BIN)/$(IMAGE)
- $(QEMU) $(QEMUOPTS) -nographic -S -gdb tcp::1337
-
gdb:
gdb -q -n -x config/gdbinit
-clean:
- rm -fr $(BIN)
-
-build: $(BIN)/$(KERNEL)
+build:
+ make -s -C kernel
make -s -C user
-$(A_OBJ): $(BIN)/%.S.o : %.S $(H_SRC)
- mkdir -p $(@D)
- printf "\033[33m AS \033[0m%s\n" $<
- $(CPP) $(CPPFLAGS) -o $@.cpp $<
- $(AS) -o $@ $@.cpp
-
-$(C_OBJ): $(BIN)/%.o : %.c $(H_SRC)
- mkdir -p $(@D)
- printf "\033[34m CC \033[0m%s\n" $<
- $(CC) -c $(CFLAGS) -o $@ $<
+clean:
+ rm -fr $(BIN)
+ make -s -C kernel clean
+ make -s -C user clean
-$(BIN)/$(KERNEL): $(C_OBJ) $(A_OBJ)
- mkdir -p $(@D)
- printf "\033[32m LD \033[0m%s\n" $@
- $(LD) $(LDFLAGS) -T config/kernel.ld -o $(BIN)/$(KERNEL) $(A_OBJ) $(C_OBJ)
+fmt:
+ clang-format -i $(shell find -type f -name "*.[ch]" -and -not -path "./kernel/old/*")
+ sed -i 's/[ \t]*$$//' $(shell find -type f -name "*.[chS]" -and -not -path "./kernel/old/*")
-$(BIN)/$(ISO): $(BIN)/$(KERNEL)
+$(BIN)/$(ISO): build config/grub.cfg
+ printf "\033[35m ISO \033[0m%s\n" $@
mkdir -p $(BIN)/iso/boot/grub
cp config/grub.cfg $(BIN)/iso/boot/grub
- cp $(BIN)/$(KERNEL) $(BIN)/iso/boot
+ cp kernel/bin/kernel $(BIN)/iso/boot
$(GRUB) -o $(BIN)/$(ISO) bin/iso 2>/dev/null
-$(BIN)/$(IMAGE): build
- qemu-img create $(BIN)/$(IMAGE) $(IMAGE_SIZE)
-
-fmt:
- clang-format -i $(shell find -type f -name "*.[ch]" -and -not -path "./kernel/old/*")
- sed -i 's/[ \t]*$$//' $(shell find -type f -name "*.[chS]" -and -not -path "./kernel/old/*")
diff --git a/config.mk b/config.mk
new file mode 100644
index 0000000..c9cc9df
--- /dev/null
+++ b/config.mk
@@ -0,0 +1,20 @@
+
+AS ?= as
+AR ?= ar
+CC ?= cc
+LD ?= ld
+CPP ?= cpp
+
+CPPFLAGS += -Iinclude
+
+CFLAGS += -O2
+CFLAGS += -std=c11
+CFLAGS += -Wall -Wextra -pedantic
+CFLAGS += -no-pie -fno-stack-protector
+CFLAGS += -fno-omit-frame-pointer -ffreestanding
+CFLAGS += -nostdlib -fno-builtin -mno-red-zone
+CFLAGS += -D DEBUG -g
+CFLAGS += $(CPPFLAGS)
+
+LDFLAGS += -nmagic -nostdlib
+LDFLAGS += -z noexecstack
diff --git a/config/gdbinit b/config/gdbinit
index 30497c6..e253379 100644
--- a/config/gdbinit
+++ b/config/gdbinit
@@ -1,4 +1,4 @@
set architecture i386:x86-64
target remote localhost:1337
-symbol-file bin/kernel.bin
+symbol-file kernel/bin/kernel
display/i $pc
diff --git a/config/grub.cfg b/config/grub.cfg
index 76e28f3..62c9792 100644
--- a/config/grub.cfg
+++ b/config/grub.cfg
@@ -3,6 +3,6 @@ set default=0
insmod all_video
menuentry "kern" {
- multiboot2 /boot/kernel.bin
+ multiboot2 /boot/kernel
boot
}
diff --git a/kernel/Makefile b/kernel/Makefile
new file mode 100644
index 0000000..19051b9
--- /dev/null
+++ b/kernel/Makefile
@@ -0,0 +1,39 @@
+### Copyright (c) 2025 Freya Murphy <freya@freyacat.org>
+
+include ../config.mk
+
+.PHONY: build fmt clean qemu
+.SILENT:
+
+SRC=*
+BIN=bin
+KERNEL=kernel
+LINKER=../config/kernel.ld
+CONFIG=../config.mk
+
+H_SRC = $(shell find $(SRC) -type f -name "*.h")
+A_SRC = $(shell find $(SRC) -type f -name "*.S")
+A_OBJ = $(patsubst %.S,$(BIN)/%.S.o,$(A_SRC))
+C_SRC = $(shell find $(SRC) -type f -name "*.c")
+C_OBJ = $(patsubst %.c,$(BIN)/%.o,$(C_SRC))
+
+build: $(BIN)/$(KERNEL)
+
+clean:
+ rm -fr $(BIN)
+
+$(A_OBJ): $(BIN)/%.S.o : %.S $(H_SRC) $(CONFIG)
+ mkdir -p $(@D)
+ printf "\033[33m AS \033[0m%s\n" $<
+ $(CPP) $(CPPFLAGS) -o $@.cpp $<
+ $(AS) -o $@ $@.cpp
+
+$(C_OBJ): $(BIN)/%.o : %.c $(H_SRC) $(CONFIG)
+ mkdir -p $(@D)
+ printf "\033[34m CC \033[0m%s\n" $<
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+$(BIN)/$(KERNEL): $(A_OBJ) $(C_OBJ) $(LINKER)
+ mkdir -p $(@D)
+ printf "\033[32m LD \033[0m%s\n" $@
+ $(LD) $(LDFLAGS) -T $(LINKER) -o $(BIN)/$(KERNEL) $(A_OBJ) $(C_OBJ)
diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c
index 2eab7ec..7cbbb65 100644
--- a/kernel/cpu/idt.c
+++ b/kernel/cpu/idt.c
@@ -156,7 +156,8 @@ __attribute__((noreturn)) void idt_exception_handler(uint64_t exception,
void isr_save(struct cpu_regs *regs)
{
// make sure were in the kernel memory context
- mem_ctx_switch(kernel_mem_ctx);
+ if (kernel_mem_ctx)
+ mem_ctx_switch(kernel_mem_ctx);
// save pointer to registers
state = regs;
diff --git a/font/default8x16.psfu b/kernel/font/default8x16.psfu
index e789b77..e789b77 100644
--- a/font/default8x16.psfu
+++ b/kernel/font/default8x16.psfu
Binary files differ
diff --git a/kernel/font.S b/kernel/font/font.S
index 571876b..571876b 100644
--- a/kernel/font.S
+++ b/kernel/font/font.S
diff --git a/kernel/user.c b/kernel/user.c
index f9b541c..e22248a 100644
--- a/kernel/user.c
+++ b/kernel/user.c
@@ -107,37 +107,37 @@ static int validate_elf_hdr(struct pcb *pcb)
Elf64_Ehdr *ehdr = &pcb->elf_header;
if (strncmp((const char *)ehdr->e_ident, ELFMAG, SELFMAG)) {
- WARN("Invalid ELF File.\n");
+ WARN("Invalid ELF File.");
return 1;
}
if (ehdr->e_ident[EI_CLASS] != ELFCLASS64) {
- WARN("Unsupported ELF Class.\n");
+ WARN("Unsupported ELF Class.");
return 1;
}
if (ehdr->e_ident[EI_DATA] != ELFDATA2LSB) {
- ERROR("Unsupported ELF File byte order.\n");
+ ERROR("Unsupported ELF File byte order.");
return 1;
}
if (ehdr->e_machine != EM_X86_64) {
- WARN("Unsupported ELF File target.\n");
+ WARN("Unsupported ELF File target.");
return 1;
}
if (ehdr->e_ident[EI_VERSION] != EV_CURRENT) {
- WARN("Unsupported ELF File version.\n");
+ WARN("Unsupported ELF File version.");
return 1;
}
if (ehdr->e_phnum > N_ELF_SEGMENTS) {
- WARN("Too many ELF segments.\n");
+ WARN("Too many ELF segments.");
return 1;
}
if (ehdr->e_type != ET_EXEC) {
- ERROR("Unsupported ELF File type.\n");
+ ERROR("Unsupported ELF File type.");
return 1;
}
diff --git a/user/Makefile b/user/Makefile
index 2e57dc8..20afb9d 100644
--- a/user/Makefile
+++ b/user/Makefile
@@ -1,31 +1,18 @@
### Copyright (c) 2025 Freya Murphy <freya@freyacat.org>
+include ../config.mk
+
.PHONY: build clean
.SILENT:
-AS ?= as
-AR ?= ar
-CC ?= cc
-LD ?= ld
-CPP ?= cpp
-
-CPPFLAGS += -Iinclude
-
-CFLAGS += -O2
-CFLAGS += -std=c11
-CFLAGS += -Wall -Wextra -pedantic
-CFLAGS += -no-pie -fPIC -fno-stack-protector
-CFLAGS += -fno-omit-frame-pointer -ffreestanding
-CFLAGS += -fno-builtin -mcmodel=large
-CFLAGS += -D DEBUG -g
-CFLAGS += $(CPPFLAGS)
-
-LDFLAGS += -nmagic -nostdlib
-LDFLAGS += -z noexecstack
+CFLAGS += -fPIC -mcmodel=large
USER=*
LIB=lib
-BIN=../bin/user
+BIN=bin
+LINKER=../config/user.ld
+CONFIG=../config.mk
+TAR=initrd.tar
H_SRC = $(shell find include -type f -name "*.h")
LIBA_SRC = $(shell find $(LIB) -type f -name "*.S")
@@ -34,35 +21,42 @@ LIBC_SRC = $(shell find $(LIB) -type f -name "*.c")
LIBC_OBJ = $(patsubst %.c,$(BIN)/%.o,$(LIBC_SRC))
USER_SRC = $(shell find $(USER) -maxdepth 0 -type f -name "*.c")
USER_OBJ = $(patsubst %.c,$(BIN)/%.o,$(USER_SRC))
-USER_PROJ = $(patsubst %.o,%,$(USER_OBJ))
+USER_PROG = $(patsubst %.o,%,$(USER_OBJ))
-build: $(USER_PROJ)
+build: $(BIN)/$(TAR)
clean:
rm -fr $(BIN)
-$(LIBA_OBJ): $(BIN)/%.S.o : %.S $(H_SRC)
+$(BIN)/$(TAR): $(USER_PROG)
+ printf "\033[35m TAR \033[0m%s\n" $@
+ mkdir -p $(BIN)/initrd/bin
+ cp $(USER_PROG) $(BIN)/initrd/bin
+ tar cHf ustar $(BIN)/$(TAR) -C $(BIN)/initrd bin
+ rm -fr $(BIN)/initrd
+
+$(LIBA_OBJ): $(BIN)/%.S.o : %.S $(H_SRC) $(CONFIG)
mkdir -p $(@D)
- printf "\033[33m AS \033[0m%s\n" user/$<
+ printf "\033[33m AS \033[0m%s\n" $<
$(CPP) $(CPPFLAGS) -o $@.cpp $<
$(AS) -o $@ $@.cpp
-$(LIBC_OBJ): $(BIN)/%.o : %.c $(H_SRC)
+$(LIBC_OBJ): $(BIN)/%.o : %.c $(H_SRC) $(CONFIG)
mkdir -p $(@D)
- printf "\033[34m CC \033[0m%s\n" user/$<
+ printf "\033[34m CC \033[0m%s\n" $<
$(CC) -c $(CFLAGS) -o $@ $<
$(BIN)/libc.a: $(LIBA_OBJ) $(LIBC_OBJ)
@mkdir -p $(@D)
- printf "\033[35m AR \033[0m%s\n" $(shell echo $@ | cut -c 4-)
+ printf "\033[35m AR \033[0m%s\n" $@
$(AR) rcs $@ $(LIBA_OBJ) $(LIBC_OBJ)
-$(USER_OBJ): $(BIN)/%.o : %.c $(H_SRC)
+$(USER_OBJ): $(BIN)/%.o : %.c $(H_SRC) $(CONFIG)
mkdir -p $(@D)
- printf "\033[34m CC \033[0m%s\n" user/$<
+ printf "\033[34m CC \033[0m%s\n" $<
$(CC) -c $(CFLAGS) -o $@ $<
-$(USER_PROJ): % : %.o $(BIN)/libc.a
+$(USER_PROG): % : $(BIN)/libc.a %.o $(LINKER)
mkdir -p $(@D)
- printf "\033[32m LD \033[0m%s\n" $(shell echo $@ | cut -c 4-)
- $(LD) $(LDFLAGS) -T ../config/user.ld -o $@ $< $(BIN)/libc.a
+ printf "\033[32m LD \033[0m%s\n" $@
+ $(LD) $(LDFLAGS) -T $(LINKER) -o $@ $@.o $(BIN)/libc.a
diff --git a/user/include/incbin.h b/user/include/incbin.h
index 5a72345..700504e 100644
--- a/user/include/incbin.h
+++ b/user/include/incbin.h
@@ -8,7 +8,6 @@
*/
#ifndef INCBIN_HDR
#define INCBIN_HDR
-#include <limits.h>
#if defined(__AVX512BW__) || defined(__AVX512CD__) || defined(__AVX512DQ__) || \
defined(__AVX512ER__) || defined(__AVX512PF__) || defined(__AVX512VL__) || \
defined(__AVX512F__)