diff options
| author | Nathan Lee <me@nwlee.tech> | 2026-09-20 21:12:49 -0500 |
|---|---|---|
| committer | Nathan Lee <me@nwlee.tech> | 2026-09-20 21:12:49 -0500 |
| commit | 50e526d72f1fd9cb895d743a1353b54505b48025 (patch) | |
| tree | 3442b2bd7b3b6ba6db3d972f89cf575ce1201278 /Makefile | |
| parent | 09be8ace254a7f8bb69542d09a6b2013636123a2 (diff) | |
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 28 |
1 files changed, 16 insertions, 12 deletions
@@ -7,14 +7,9 @@ OBJCOPY = llvm-objcopy COMPILER = $(shell $(CC) --version | head -n 1) LINKER = $(shell $(LD) --version | head -n 1) +ARCH_NAME := $(shell grep '^arch:' BuildConfig | sed 's/^arch://' | awk '{$$1=$$1; print}') -ARCH_FLAG = \ - --target=riscv32-unknown-elf \ - -march=rv32g \ - -mabi=ilp32 \ - -D__SYS_LITTLE_ENDIAN__ - - +ARCH_FLAG := $(shell grep '^arch_flag:' BuildConfig | sed 's/^arch_flag://' | awk '{$$1=$$1; print}') COMMON_FLAGS = \ -ffreestanding \ -fno-builtin \ @@ -29,6 +24,7 @@ COMMON_FLAGS = \ -DVERSION='"$(VERSION)"' \ -DCOMPILER_NAME='"$(COMPILER)"' \ -DLINKER_NAME='"$(LINKER)"' \ + -DARCH_NAME='"$(ARCH_NAME)"' KERNEL_FLAG = $(COMMON_FLAGS) -static MODULE_FLAG = $(COMMON_FLAGS) -fPIC -fpie @@ -38,13 +34,10 @@ SECTION_FLAG = \ -fdata-sections \ -fno-common -INCLUDE_FLAG = -Iinclude -Ikernel +INCLUDE_FLAG = -Iinclude OPT_FLAG = -O2 -g3 WARN_FLAG = -Wall -Wextra -Werror -Wundef -KERNEL_LD_FLAG = -T $(KERNEL_LD) -nostdlib -m elf32lriscv --gc-sections -MODULE_LD_FLAG = -nostdlib -shared -m elf32lriscv --gc-sections - KERNEL_OBJCOPY_FLAG = -O binary \ --strip-all \ --remove-section=.comment \ @@ -95,6 +88,10 @@ $(foreach module,$(MODULES),$(eval $(call module_template,$(module)))) KERNEL_SRCS = $(wildcard $(shell grep '^kernel:' BuildConfig | sed 's/^kernel://' | awk '{$$1=$$1; print}')) KERNEL_LD := $(shell grep '^linker_script:' BuildConfig | sed 's/^linker_script://' | awk '{$$1=$$1; print}') + +KERNEL_LD_FLAG = $(shell grep '^link_flag:' BuildConfig | sed 's/^link_flag://' | awk '{$$1=$$1; print}') +MODULE_LD_FLAG = -nostdlib -shared -m $(shell grep '^module_link_arch:' BuildConfig | sed 's/^module_link_arch://' | awk '{$$1=$$1; print}') --gc-sections + KERNEL_TARGET := $(shell grep '^kernel_target:' BuildConfig | sed 's/^kernel_target://' | awk '{$$1=$$1; print}') KERNEL_OBJS = $(KERNEL_SRCS:.c=.o) KERNEL_OBJS := $(KERNEL_OBJS:.S=.o) @@ -117,8 +114,15 @@ GENERATED = \ .PHONY: all kernel kassemble clean modules $(MODULES) $(V).SILENT: + +ifeq ($(shell grep '^needs_kassemble:' BuildConfig | sed 's/^needs_kassemble://' | awk '{$$1=$$1; print}'), yes) all: kassemble kernel modules kernel: $(KERNEL_IMAGE) +else +all: kernel modules +kernel: $(KERNEL_ELF) +endif + modules: $(MODULES) kassemble: $(KASSEMBLE_BIN) $(MODULES): $(MODULE_OBJECTS) @@ -136,7 +140,7 @@ $(KASSEMBLE_BIN): $(KASSEMBLE_SRC) $(KERNEL_ELF): $(KERNEL_OBJS) $(KERNEL_LD) | $(KERNEL_OUTDIR)/ @echo " LD $@" - $(LD) $(KERNEL_LD_FLAG) $(KERNEL_OBJS) -o $@ + $(LD) $(KERNEL_LD_FLAG) $(KERNEL_OBJS) $(KERNEL_BIN): $(KERNEL_ELF) | $(KERNEL_OUTDIR)/ @echo " OBJCOPY $@" |
