From 0c17393a4c293608385343b2729d633bf499edfd Mon Sep 17 00:00:00 2001 From: mintsuki Date: Fri, 1 Sep 2023 15:00:14 -0500 Subject: [PATCH 1/3] zealbooter: Drop -mabi=sysv cc argument for clang 16 --- zealbooter/GNUmakefile | 1 - 1 file changed, 1 deletion(-) diff --git a/zealbooter/GNUmakefile b/zealbooter/GNUmakefile index 54eca6ed..6752229c 100644 --- a/zealbooter/GNUmakefile +++ b/zealbooter/GNUmakefile @@ -54,7 +54,6 @@ override CFLAGS += \ -fno-PIC \ -m64 \ -march=x86-64 \ - -mabi=sysv \ -mno-80387 \ -mno-mmx \ -mno-sse \ From 4f0cdcd55188f287022377af716880cb7dbd209a Mon Sep 17 00:00:00 2001 From: mintsuki Date: Sun, 3 Sep 2023 18:53:54 -0500 Subject: [PATCH 2/3] zealbooter: Have kernel makefile targets depend on GNUmakefile and linker.ld appropriately --- zealbooter/GNUmakefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/zealbooter/GNUmakefile b/zealbooter/GNUmakefile index 6752229c..2c784260 100644 --- a/zealbooter/GNUmakefile +++ b/zealbooter/GNUmakefile @@ -15,8 +15,8 @@ define DEFAULT_VAR = endif endef -# It is highly recommended to use a custom built cross toolchain to build a kernel. -# We are only using "cc" as a placeholder here. It may work by using +# It is suggested to use a custom built cross toolchain to build a kernel. +# We are using the standard "cc" here, it may work by using # the host system's toolchain, but this is not guaranteed. override DEFAULT_CC := cc $(eval $(call DEFAULT_VAR,CC,$(DEFAULT_CC))) @@ -103,22 +103,22 @@ limine.h: curl -Lo $@ https://github.com/limine-bootloader/limine/raw/trunk/limine.h || cp ../build/limine/limine.h limine.h || echo "ERROR" # Link rules for the final kernel executable. -$(KERNEL): $(OBJ) +$(KERNEL): GNUmakefile linker.ld $(OBJ) $(LD) $(OBJ) $(LDFLAGS) -o $@ # Include header dependencies. -include $(HEADER_DEPS) # Compilation rules for *.c files. -%.c.o: %.c limine.h +%.c.o: %.c GNUmakefile limine.h $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ # Compilation rules for *.S files. -%.S.o: %.S limine.h +%.S.o: %.S GNUmakefile limine.h $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ # Compilation rules for *.asm (nasm) files. -%.asm.o: %.asm +%.asm.o: %.asm GNUmakefile nasm $(NASMFLAGS) $< -o $@ # Remove object files and the final executable. From cca870c0596a7bec26365ae4a7f348db48b8f8a6 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Thu, 28 Sep 2023 02:31:52 -0500 Subject: [PATCH 3/3] zealbooter: Backport build system improvements from limine-barebones --- .gitignore | 4 ++- build/build-iso.sh | 2 +- zealbooter/GNUmakefile | 38 ++++++++++++++------------ zealbooter/{ => src}/lib.c | 0 zealbooter/{ => src}/lib.h | 0 zealbooter/{ => src}/lib/memcmp.c | 0 zealbooter/{ => src}/lib/memcmp.h | 0 zealbooter/{ => src}/lib/memcpy.c | 0 zealbooter/{ => src}/lib/memcpy.h | 0 zealbooter/{ => src}/lib/memmove.c | 0 zealbooter/{ => src}/lib/memmove.h | 0 zealbooter/{ => src}/lib/memset.c | 0 zealbooter/{ => src}/lib/memset.h | 0 zealbooter/{ => src}/lib/print.c | 0 zealbooter/{ => src}/lib/print.h | 0 zealbooter/{ => src}/lib/stb_sprintf.h | 0 zealbooter/{ => src}/lib/strcmp.c | 0 zealbooter/{ => src}/lib/strcmp.h | 0 zealbooter/{ => src}/lib/strcpy.c | 0 zealbooter/{ => src}/lib/strcpy.h | 0 zealbooter/{ => src}/lib/strlen.c | 0 zealbooter/{ => src}/lib/strlen.h | 0 zealbooter/{ => src}/lib/strncmp.c | 0 zealbooter/{ => src}/lib/strncmp.h | 0 zealbooter/{ => src}/lib/strncpy.c | 0 zealbooter/{ => src}/lib/strncpy.h | 0 zealbooter/{ => src}/trampoline.S | 0 zealbooter/{ => src}/zealbooter.c | 0 28 files changed, 25 insertions(+), 19 deletions(-) rename zealbooter/{ => src}/lib.c (100%) rename zealbooter/{ => src}/lib.h (100%) rename zealbooter/{ => src}/lib/memcmp.c (100%) rename zealbooter/{ => src}/lib/memcmp.h (100%) rename zealbooter/{ => src}/lib/memcpy.c (100%) rename zealbooter/{ => src}/lib/memcpy.h (100%) rename zealbooter/{ => src}/lib/memmove.c (100%) rename zealbooter/{ => src}/lib/memmove.h (100%) rename zealbooter/{ => src}/lib/memset.c (100%) rename zealbooter/{ => src}/lib/memset.h (100%) rename zealbooter/{ => src}/lib/print.c (100%) rename zealbooter/{ => src}/lib/print.h (100%) rename zealbooter/{ => src}/lib/stb_sprintf.h (100%) rename zealbooter/{ => src}/lib/strcmp.c (100%) rename zealbooter/{ => src}/lib/strcmp.h (100%) rename zealbooter/{ => src}/lib/strcpy.c (100%) rename zealbooter/{ => src}/lib/strcpy.h (100%) rename zealbooter/{ => src}/lib/strlen.c (100%) rename zealbooter/{ => src}/lib/strlen.h (100%) rename zealbooter/{ => src}/lib/strncmp.c (100%) rename zealbooter/{ => src}/lib/strncmp.h (100%) rename zealbooter/{ => src}/lib/strncpy.c (100%) rename zealbooter/{ => src}/lib/strncpy.h (100%) rename zealbooter/{ => src}/trampoline.S (100%) rename zealbooter/{ => src}/zealbooter.c (100%) diff --git a/.gitignore b/.gitignore index 127eb5d8..b44a7db6 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,6 @@ *.hdd *.o *.d -/zealbooter/limine.h +/zealbooter/src/limine.h +/zealbooter/bin +/zealbooter/obj diff --git a/build/build-iso.sh b/build/build-iso.sh index 2c62dc60..2868c9db 100755 --- a/build/build-iso.sh +++ b/build/build-iso.sh @@ -105,7 +105,7 @@ sudo cp limine/BOOTX64.EFI $TMPISODIR/EFI/BOOT/BOOTX64.EFI sudo cp limine/limine-uefi-cd.bin $TMPISODIR/Boot/Limine-UEFI-CD.BIN sudo cp limine/limine-bios-cd.bin $TMPISODIR/Boot/Limine-BIOS-CD.BIN sudo cp limine/limine-bios.sys $TMPISODIR/Boot/Limine-BIOS.SYS -sudo cp ../zealbooter/zealbooter.elf $TMPISODIR/Boot/ZealBooter.ELF +sudo cp ../zealbooter/bin/kernel $TMPISODIR/Boot/ZealBooter.ELF sudo cp ../zealbooter/Limine.CFG $TMPISODIR/Boot/Limine.CFG echo "Copying DVDKernel.ZXE over ISO Boot/Kernel.ZXE ..." sudo mv $TMPMOUNT/Tmp/DVDKernel.ZXE $TMPISODIR/Boot/Kernel.ZXE diff --git a/zealbooter/GNUmakefile b/zealbooter/GNUmakefile index 2c784260..33ca7959 100644 --- a/zealbooter/GNUmakefile +++ b/zealbooter/GNUmakefile @@ -3,7 +3,7 @@ override MAKEFLAGS += -rR # This is the name that our final kernel executable will have. # Change as needed. -override KERNEL := zealbooter.elf +override KERNEL := kernel # Convenience macro to reliably declare user overridable variables. define DEFAULT_VAR = @@ -63,8 +63,8 @@ override CFLAGS += \ # Internal C preprocessor flags that should not be changed by the user. override CPPFLAGS := \ - -I. \ - -I./lib \ + -I src \ + -I src/lib \ $(CPPFLAGS) \ -MMD \ -MP @@ -89,43 +89,47 @@ override NASMFLAGS += \ # Use "find" to glob all *.c, *.S, and *.asm files in the tree and obtain the # object and header dependency file names. -override CFILES := $(shell find -L . -type f -name '*.c') -override ASFILES := $(shell find -L . -type f -name '*.S') -override NASMFILES := $(shell find -L . -type f -name '*.asm') -override OBJ := $(CFILES:.c=.c.o) $(ASFILES:.S=.S.o) $(NASMFILES:.asm=.asm.o) -override HEADER_DEPS := $(CFILES:.c=.c.d) $(ASFILES:.S=.S.d) +override CFILES := $(shell cd src && find -L . -type f -name '*.c') +override ASFILES := $(shell cd src && find -L . -type f -name '*.S') +override NASMFILES := $(shell cd src && find -L . -type f -name '*.asm') +override OBJ := $(addprefix obj/,$(CFILES:.c=.c.o) $(ASFILES:.S=.S.o) $(NASMFILES:.asm=.asm.o)) +override HEADER_DEPS := $(addprefix obj/,$(CFILES:.c=.c.d) $(ASFILES:.S=.S.d)) # Default target. .PHONY: all -all: $(KERNEL) +all: bin/$(KERNEL) -limine.h: - curl -Lo $@ https://github.com/limine-bootloader/limine/raw/trunk/limine.h || cp ../build/limine/limine.h limine.h || echo "ERROR" +src/limine.h: + curl -Lo $@ https://github.com/limine-bootloader/limine/raw/trunk/limine.h || cp ../build/limine/limine.h src/limine.h || echo "ERROR" # Link rules for the final kernel executable. -$(KERNEL): GNUmakefile linker.ld $(OBJ) +bin/$(KERNEL): GNUmakefile linker.ld $(OBJ) + mkdir -p "$$(dirname $@)" $(LD) $(OBJ) $(LDFLAGS) -o $@ # Include header dependencies. -include $(HEADER_DEPS) # Compilation rules for *.c files. -%.c.o: %.c GNUmakefile limine.h +obj/%.c.o: src/%.c GNUmakefile src/limine.h + mkdir -p "$$(dirname $@)" $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ # Compilation rules for *.S files. -%.S.o: %.S GNUmakefile limine.h +obj/%.S.o: src/%.S GNUmakefile src/limine.h + mkdir -p "$$(dirname $@)" $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ # Compilation rules for *.asm (nasm) files. -%.asm.o: %.asm GNUmakefile +obj/%.asm.o: src/%.asm GNUmakefile + mkdir -p "$$(dirname $@)" nasm $(NASMFLAGS) $< -o $@ # Remove object files and the final executable. .PHONY: clean clean: - rm -rf $(KERNEL) $(OBJ) $(HEADER_DEPS) + rm -rf bin obj .PHONY: distclean distclean: clean - rm -f limine.h + rm -f src/limine.h diff --git a/zealbooter/lib.c b/zealbooter/src/lib.c similarity index 100% rename from zealbooter/lib.c rename to zealbooter/src/lib.c diff --git a/zealbooter/lib.h b/zealbooter/src/lib.h similarity index 100% rename from zealbooter/lib.h rename to zealbooter/src/lib.h diff --git a/zealbooter/lib/memcmp.c b/zealbooter/src/lib/memcmp.c similarity index 100% rename from zealbooter/lib/memcmp.c rename to zealbooter/src/lib/memcmp.c diff --git a/zealbooter/lib/memcmp.h b/zealbooter/src/lib/memcmp.h similarity index 100% rename from zealbooter/lib/memcmp.h rename to zealbooter/src/lib/memcmp.h diff --git a/zealbooter/lib/memcpy.c b/zealbooter/src/lib/memcpy.c similarity index 100% rename from zealbooter/lib/memcpy.c rename to zealbooter/src/lib/memcpy.c diff --git a/zealbooter/lib/memcpy.h b/zealbooter/src/lib/memcpy.h similarity index 100% rename from zealbooter/lib/memcpy.h rename to zealbooter/src/lib/memcpy.h diff --git a/zealbooter/lib/memmove.c b/zealbooter/src/lib/memmove.c similarity index 100% rename from zealbooter/lib/memmove.c rename to zealbooter/src/lib/memmove.c diff --git a/zealbooter/lib/memmove.h b/zealbooter/src/lib/memmove.h similarity index 100% rename from zealbooter/lib/memmove.h rename to zealbooter/src/lib/memmove.h diff --git a/zealbooter/lib/memset.c b/zealbooter/src/lib/memset.c similarity index 100% rename from zealbooter/lib/memset.c rename to zealbooter/src/lib/memset.c diff --git a/zealbooter/lib/memset.h b/zealbooter/src/lib/memset.h similarity index 100% rename from zealbooter/lib/memset.h rename to zealbooter/src/lib/memset.h diff --git a/zealbooter/lib/print.c b/zealbooter/src/lib/print.c similarity index 100% rename from zealbooter/lib/print.c rename to zealbooter/src/lib/print.c diff --git a/zealbooter/lib/print.h b/zealbooter/src/lib/print.h similarity index 100% rename from zealbooter/lib/print.h rename to zealbooter/src/lib/print.h diff --git a/zealbooter/lib/stb_sprintf.h b/zealbooter/src/lib/stb_sprintf.h similarity index 100% rename from zealbooter/lib/stb_sprintf.h rename to zealbooter/src/lib/stb_sprintf.h diff --git a/zealbooter/lib/strcmp.c b/zealbooter/src/lib/strcmp.c similarity index 100% rename from zealbooter/lib/strcmp.c rename to zealbooter/src/lib/strcmp.c diff --git a/zealbooter/lib/strcmp.h b/zealbooter/src/lib/strcmp.h similarity index 100% rename from zealbooter/lib/strcmp.h rename to zealbooter/src/lib/strcmp.h diff --git a/zealbooter/lib/strcpy.c b/zealbooter/src/lib/strcpy.c similarity index 100% rename from zealbooter/lib/strcpy.c rename to zealbooter/src/lib/strcpy.c diff --git a/zealbooter/lib/strcpy.h b/zealbooter/src/lib/strcpy.h similarity index 100% rename from zealbooter/lib/strcpy.h rename to zealbooter/src/lib/strcpy.h diff --git a/zealbooter/lib/strlen.c b/zealbooter/src/lib/strlen.c similarity index 100% rename from zealbooter/lib/strlen.c rename to zealbooter/src/lib/strlen.c diff --git a/zealbooter/lib/strlen.h b/zealbooter/src/lib/strlen.h similarity index 100% rename from zealbooter/lib/strlen.h rename to zealbooter/src/lib/strlen.h diff --git a/zealbooter/lib/strncmp.c b/zealbooter/src/lib/strncmp.c similarity index 100% rename from zealbooter/lib/strncmp.c rename to zealbooter/src/lib/strncmp.c diff --git a/zealbooter/lib/strncmp.h b/zealbooter/src/lib/strncmp.h similarity index 100% rename from zealbooter/lib/strncmp.h rename to zealbooter/src/lib/strncmp.h diff --git a/zealbooter/lib/strncpy.c b/zealbooter/src/lib/strncpy.c similarity index 100% rename from zealbooter/lib/strncpy.c rename to zealbooter/src/lib/strncpy.c diff --git a/zealbooter/lib/strncpy.h b/zealbooter/src/lib/strncpy.h similarity index 100% rename from zealbooter/lib/strncpy.h rename to zealbooter/src/lib/strncpy.h diff --git a/zealbooter/trampoline.S b/zealbooter/src/trampoline.S similarity index 100% rename from zealbooter/trampoline.S rename to zealbooter/src/trampoline.S diff --git a/zealbooter/zealbooter.c b/zealbooter/src/zealbooter.c similarity index 100% rename from zealbooter/zealbooter.c rename to zealbooter/src/zealbooter.c