diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 5c71847..d3b3229 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -16,5 +16,4 @@ jobs: run: sudo apt-get install -y clang-format - name: Run clang-format in dry-run mode - run: | - find src/ include/ -type f \( -name '*.c' -o -name '*.h' \) ! -name 'limine.h' -exec clang-format --Werror --dry-run {} + + run: make format diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7e56138 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +.PHONY: all kernel clean format + +all: kernel + +kernel: + @echo "Building Kernel..." + $(MAKE) -C kernel + +format: + @echo "Formatting Kernel..." + $(MAKE) -C kernel format + +clean: + @echo "Cleaning Kernel..." + $(MAKE) -C kernel clean diff --git a/build.sh b/build.sh index e712cc7..36e8d4f 100755 --- a/build.sh +++ b/build.sh @@ -113,7 +113,7 @@ echo -e "\e[1;33m\n$(heading "Building OS binaries")\n\e[0m" make -j$(nproc) -echo -e "\nentry.elf generated with size $(wc -c <"build/entry.elf") bytes" +echo -e "\nentry.elf generated with size $(wc -c <"build/kernel/entry.elf") bytes" echo -e "\e[1;33m\n$(heading "Building Limine-deploy")\n\e[0m" @@ -130,7 +130,7 @@ mkdir -p iso_root/boot/limine # Copy the relevant files over. cp -v limine.conf limine/limine-bios.sys limine/limine-bios-cd.bin limine/limine-uefi-cd.bin iso_root/boot/limine/ -cp -v build/entry.elf iso_root/boot/ +cp -v build/kernel/entry.elf iso_root/boot/ # Create the EFI boot tree and copy Limine's EFI executables over. mkdir -p iso_root/EFI/BOOT diff --git a/GNUmakefile b/kernel/GNUmakefile similarity index 83% rename from GNUmakefile rename to kernel/GNUmakefile index 595882a..90e6744 100644 --- a/GNUmakefile +++ b/kernel/GNUmakefile @@ -81,36 +81,40 @@ endif # 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' | grep -v 'limine/') -override ASFILES := $(shell find -L . -type f -name '*.s' | grep -v 'limine/') -override OBJ := $(patsubst %.c,build/%.c.o,$(CFILES)) $(patsubst %.s,build/%.s.o,$(ASFILES)) -override HEADER_DEPS := $(patsubst %.c,build/%.c.d,$(CFILES)) $(patsubst %.s,build/%.s.d,$(ASFILES)) +override CFILES := $(shell find -L . -type f -name '*.c') +override ASFILES := $(shell find -L . -type f -name '*.s') + +# Output directory for the build. Can be overridden. +override BUILD_DIR := ../build/kernel + +override OBJ := $(patsubst %.c,$(BUILD_DIR)/%.c.o,$(CFILES)) $(patsubst %.s,$(BUILD_DIR)/%.s.o,$(ASFILES)) +override HEADER_DEPS := $(patsubst %.c,$(BUILD_DIR)/%.c.d,$(CFILES)) $(patsubst %.s,$(BUILD_DIR)/%.s.d,$(ASFILES)) # Default target. .PHONY: all -all: build/$(KERNEL) +all: $(BUILD_DIR)/$(KERNEL) # Link rules for the final kernel executable. -build/$(KERNEL): $(OBJ) +$(BUILD_DIR)/$(KERNEL): $(OBJ) $(LD) $(OBJ) $(LDFLAGS) -o $@ # Include header dependencies. -include $(HEADER_DEPS) # Compilation rules for *.c files. -build/%.c.o: %.c | $(BUILD_DIR) +$(BUILD_DIR)/%.c.o: %.c @mkdir -p $(@D) $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ # Compilation rules for *.S files. -build/%.s.o: %.s +$(BUILD_DIR)/%.s.o: %.s @mkdir -p $(@D) $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ # Remove object files and the final executable. .PHONY: clean clean: - rm -rf $(KERNEL) $(OBJ) $(HEADER_DEPS) + rm -rf $(BUILD_DIR) # Format C source and header files (only touches src/ and main/) .PHONY: format diff --git a/include/kernel/console.h b/kernel/include/kernel/console.h similarity index 100% rename from include/kernel/console.h rename to kernel/include/kernel/console.h diff --git a/include/kernel/gdt.h b/kernel/include/kernel/gdt.h similarity index 100% rename from include/kernel/gdt.h rename to kernel/include/kernel/gdt.h diff --git a/include/kernel/graphics.h b/kernel/include/kernel/graphics.h similarity index 100% rename from include/kernel/graphics.h rename to kernel/include/kernel/graphics.h diff --git a/include/kernel/hardfonts/classic.h b/kernel/include/kernel/hardfonts/classic.h similarity index 100% rename from include/kernel/hardfonts/classic.h rename to kernel/include/kernel/hardfonts/classic.h diff --git a/include/kernel/hw/pic.h b/kernel/include/kernel/hw/pic.h similarity index 100% rename from include/kernel/hw/pic.h rename to kernel/include/kernel/hw/pic.h diff --git a/include/kernel/idt.h b/kernel/include/kernel/idt.h similarity index 100% rename from include/kernel/idt.h rename to kernel/include/kernel/idt.h diff --git a/include/kernel/io.h b/kernel/include/kernel/io.h similarity index 100% rename from include/kernel/io.h rename to kernel/include/kernel/io.h diff --git a/include/kernel/limine.h b/kernel/include/kernel/limine.h similarity index 100% rename from include/kernel/limine.h rename to kernel/include/kernel/limine.h diff --git a/include/kernel/memmgt.h b/kernel/include/kernel/memmgt.h similarity index 100% rename from include/kernel/memmgt.h rename to kernel/include/kernel/memmgt.h diff --git a/include/kernel/serial.h b/kernel/include/kernel/serial.h similarity index 100% rename from include/kernel/serial.h rename to kernel/include/kernel/serial.h diff --git a/include/kernel/stack.h b/kernel/include/kernel/stack.h similarity index 100% rename from include/kernel/stack.h rename to kernel/include/kernel/stack.h diff --git a/include/liballoc/liballoc.h b/kernel/include/liballoc/liballoc.h similarity index 100% rename from include/liballoc/liballoc.h rename to kernel/include/liballoc/liballoc.h diff --git a/include/memory.h b/kernel/include/memory.h similarity index 100% rename from include/memory.h rename to kernel/include/memory.h diff --git a/include/stdio.h b/kernel/include/stdio.h similarity index 100% rename from include/stdio.h rename to kernel/include/stdio.h diff --git a/include/string.h b/kernel/include/string.h similarity index 100% rename from include/string.h rename to kernel/include/string.h diff --git a/src/kernel/console.c b/kernel/src/kernel/console.c similarity index 100% rename from src/kernel/console.c rename to kernel/src/kernel/console.c diff --git a/src/kernel/entry.c b/kernel/src/kernel/entry.c similarity index 100% rename from src/kernel/entry.c rename to kernel/src/kernel/entry.c diff --git a/src/kernel/gdt.c b/kernel/src/kernel/gdt.c similarity index 100% rename from src/kernel/gdt.c rename to kernel/src/kernel/gdt.c diff --git a/src/kernel/gdt.s b/kernel/src/kernel/gdt.s similarity index 100% rename from src/kernel/gdt.s rename to kernel/src/kernel/gdt.s diff --git a/src/kernel/graphics.c b/kernel/src/kernel/graphics.c similarity index 100% rename from src/kernel/graphics.c rename to kernel/src/kernel/graphics.c diff --git a/src/kernel/hardfonts/classic.c b/kernel/src/kernel/hardfonts/classic.c similarity index 100% rename from src/kernel/hardfonts/classic.c rename to kernel/src/kernel/hardfonts/classic.c diff --git a/src/kernel/hw/pic.c b/kernel/src/kernel/hw/pic.c similarity index 100% rename from src/kernel/hw/pic.c rename to kernel/src/kernel/hw/pic.c diff --git a/src/kernel/idt.c b/kernel/src/kernel/idt.c similarity index 100% rename from src/kernel/idt.c rename to kernel/src/kernel/idt.c diff --git a/src/kernel/io.c b/kernel/src/kernel/io.c similarity index 100% rename from src/kernel/io.c rename to kernel/src/kernel/io.c diff --git a/src/kernel/isr_setup.s b/kernel/src/kernel/isr_setup.s similarity index 100% rename from src/kernel/isr_setup.s rename to kernel/src/kernel/isr_setup.s diff --git a/src/kernel/limine_requests.c b/kernel/src/kernel/limine_requests.c similarity index 100% rename from src/kernel/limine_requests.c rename to kernel/src/kernel/limine_requests.c diff --git a/src/kernel/memmgt.c b/kernel/src/kernel/memmgt.c similarity index 100% rename from src/kernel/memmgt.c rename to kernel/src/kernel/memmgt.c diff --git a/src/kernel/serial.c b/kernel/src/kernel/serial.c similarity index 100% rename from src/kernel/serial.c rename to kernel/src/kernel/serial.c diff --git a/src/kernel/stack.c b/kernel/src/kernel/stack.c similarity index 100% rename from src/kernel/stack.c rename to kernel/src/kernel/stack.c diff --git a/src/liballoc/liballoc.c b/kernel/src/liballoc/liballoc.c similarity index 100% rename from src/liballoc/liballoc.c rename to kernel/src/liballoc/liballoc.c diff --git a/src/linker.ld b/kernel/src/linker.ld similarity index 100% rename from src/linker.ld rename to kernel/src/linker.ld diff --git a/src/memory.c b/kernel/src/memory.c similarity index 100% rename from src/memory.c rename to kernel/src/memory.c diff --git a/src/stdio.c b/kernel/src/stdio.c similarity index 100% rename from src/stdio.c rename to kernel/src/stdio.c diff --git a/src/string.c b/kernel/src/string.c similarity index 100% rename from src/string.c rename to kernel/src/string.c