summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorNathan Lee <me@nwlee.tech>2026-09-20 21:12:49 -0500
committerNathan Lee <me@nwlee.tech>2026-09-20 21:12:49 -0500
commit50e526d72f1fd9cb895d743a1353b54505b48025 (patch)
tree3442b2bd7b3b6ba6db3d972f89cf575ce1201278 /Makefile
parent09be8ace254a7f8bb69542d09a6b2013636123a2 (diff)
add x86 supportHEADmaster
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile28
1 files changed, 16 insertions, 12 deletions
diff --git a/Makefile b/Makefile
index ad38c9a..3eae704 100644
--- a/Makefile
+++ b/Makefile
@@ -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 $@"