1
0
Fork 0

feat/kernel: Added support for Kconfig and flanterm if needed

This commit is contained in:
Kevin Alavik 2025-05-15 20:47:52 +02:00
parent 65ba98a089
commit 89795c4ad8
Signed by: cmpsb
GPG key ID: 10D1CC0526FDC6D7
9 changed files with 179 additions and 16 deletions

View file

@ -8,19 +8,34 @@ BINDIR := bin
TARGET := $(BINDIR)/emk.elf
KCONFIG ?= kconfig-mconf
CONFIG := .config
ifneq ("$(wildcard $(CONFIG))","")
include $(CONFIG)
endif
CC := gcc
AS := gcc
NASM := nasm
# Build mode configuration
BUILD_MODE ?= dev
ifeq ($(BUILD_MODE),)
ifeq ($(CONFIG_BUILD_MODE_DEBUG),y)
BUILD_MODE := debug
else ifeq ($(CONFIG_BUILD_MODE_RELEASE),y)
BUILD_MODE := release
else
BUILD_MODE := debug
endif
endif
ifeq ($(BUILD_MODE),release)
CFLAGS := -Os -pipe -Wall -Wextra -Werror -std=gnu11 -ffreestanding \
-fno-stack-protector -fno-stack-check -fno-PIC \
-ffunction-sections -fdata-sections -m64 -march=x86-64 \
-mno-80387 -mno-mmx -mno-sse -mno-sse2 -mno-red-zone \
-mcmodel=kernel -fno-unwind-tables -fno-asynchronous-unwind-tables \
-s -Wno-unused-variable
-s -Wno-unused-variable -DBUILD_MODE=\"release\"
NASMFLAGS :=
LDFLAGS := -nostdlib -static -z max-page-size=0x1000 -Wl,--gc-sections \
-T linker.ld -Wl,-m,elf_x86_64 -Wl,--strip-all
@ -29,7 +44,7 @@ else
-fno-stack-protector -fno-stack-check -fno-PIC \
-ffunction-sections -fdata-sections -m64 -march=x86-64 \
-mno-80387 -mno-mmx -mno-sse -mno-sse2 -mno-red-zone \
-mcmodel=kernel -Wno-unused-variable
-mcmodel=kernel -Wno-unused-variable -DBUILD_MODE=\"dev\"
NASMFLAGS := -F dwarf -g
LDFLAGS := -nostdlib -static -z max-page-size=0x1000 -Wl,--gc-sections \
-T linker.ld -Wl,-m,elf_x86_64
@ -37,14 +52,48 @@ endif
CPPFLAGS := -I../external -I$(SRCDIR) -MMD -MP -DLIMINE_API_REVISION=3
SRCS := $(shell find $(SRCDIR) -type f \( -name '*.c' -o -name '*.S' -o -name '*.asm' \))
OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(filter %.c,$(SRCS))) \
$(patsubst %.S,$(OBJDIR)/%.o,$(filter %.S,$(SRCS))) \
$(patsubst %.asm,$(OBJDIR)/%.o,$(filter %.asm,$(SRCS)))
IMPLICIT_SRCS :=
ifeq ($(CONFIG_KERNEL_HEAP_FF),y)
IMPLICIT_SRCS += src/mm/heap/ff.c
else
$(error Error: No heap algorithm was defined. Please run "make menuconfig" and select one.)
endif
ifeq ($(CONFIG_ENABLE_FLANTERM),y)
IMPLICIT_SRCS += ../external/flanterm/flanterm.c
IMPLICIT_SRCS += ../external/flanterm/backends/fb.c
CFLAGS += -I../external/flanterm/ -DFLANTERM_SUPPORT=1
endif
EXCLUDE_SRCS := \
src/mm/heap/ff.c \
../external/flanterm/flanterm.c \
../external/flanterm/backends/fb.c
EXCLUDE_PATTERNS := $(foreach file,$(EXCLUDE_SRCS),! -path "$(file)")
SRCS := $(IMPLICIT_SRCS) \
$(shell find $(SRCDIR) -type f \( -name '*.c' -o -name '*.S' -o -name '*.asm' \) $(EXCLUDE_PATTERNS))
define src_to_obj
$(OBJDIR)/$(patsubst ../%,%,$(1:.c=.o))
endef
define src_to_obj_s
$(OBJDIR)/$(patsubst ../%,%,$(1:.S=.o))
endef
define src_to_obj_asm
$(OBJDIR)/$(patsubst ../%,%,$(1:.asm=.o))
endef
OBJS :=
OBJS += $(foreach f,$(filter %.c,$(SRCS)),$(call src_to_obj,$(f)))
OBJS += $(foreach f,$(filter %.S,$(SRCS)),$(call src_to_obj_s,$(f)))
OBJS += $(foreach f,$(filter %.asm,$(SRCS)),$(call src_to_obj_asm,$(f)))
DEPS := $(OBJS:.o=.d)
.PHONY: all clean distclean
.PHONY: all clean distclean menuconfig
all: $(TARGET)
$(OBJDIR) $(BINDIR):
@ -54,16 +103,31 @@ $(TARGET): $(OBJS) | $(BINDIR)
@echo " LD $@"
@$(CC) $(LDFLAGS) -o $@ $(OBJS)
$(OBJDIR)/%.o: ../%.c | $(OBJDIR)
@mkdir -p $(dir $@)
@echo " CC ../$*"
@$(CC) $(CPPFLAGS) $(CFLAGS) -c ../$*.c -o $@
$(OBJDIR)/%.o: %.c | $(OBJDIR)
@mkdir -p $(dir $@)
@echo " CC $<"
@$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
$(OBJDIR)/%.o: ../%.S | $(OBJDIR)
@mkdir -p $(dir $@)
@echo " AS ../$*"
@$(AS) $(CPPFLAGS) $(CFLAGS) -c ../$*.S -o $@
$(OBJDIR)/%.o: %.S | $(OBJDIR)
@mkdir -p $(dir $@)
@echo " AS $<"
@$(AS) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
$(OBJDIR)/%.o: ../%.asm | $(OBJDIR)
@mkdir -p $(dir $@)
@echo " NASM ../$*"
@$(NASM) $(NASMFLAGS) ../$*.asm -o $@
$(OBJDIR)/%.o: %.asm | $(OBJDIR)
@mkdir -p $(dir $@)
@echo " NASM $<"
@ -77,4 +141,7 @@ distclean: clean
@echo " DISTCLEAN"
@rm -rf $(BINDIR)
-include $(DEPS)
menuconfig: clean
@$(KCONFIG) Kconfig
-include $(DEPS)