aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2021-08-19 22:58:57 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2021-08-19 22:58:57 +0300
commit1175179058fa809c57d724cd2043c67edc511695 (patch)
treefd01aba45ff6e4c676bac5c369b8f4983163c800 /Makefile
parent565724db3b73ee67fa996dab511dc52df586cee1 (diff)
downloadkmi-1175179058fa809c57d724cd2043c67edc511695.tar.gz
kmi-1175179058fa809c57d724cd2043c67edc511695.zip
New build system (WIP)
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile70
1 files changed, 41 insertions, 29 deletions
diff --git a/Makefile b/Makefile
index 56369f6..ecfecec 100644
--- a/Makefile
+++ b/Makefile
@@ -1,41 +1,53 @@
-CFLAGS := -fno-pie -g -ffreestanding -nostdlib
-INCLUDE_DIRS := include
+DO != echo > deps.mk
+CFLAGS := -fno-pie -ggdb3 -ffreestanding -nostdlib
+INCLUDE_DIRS := include
-all: kernel.bin
+all: apos.bin
-KERNEL_SOURCES :=
-INIT_SOURCES :=
-LINKER_SOURCE :=
-TARGET ?= riscv
-CROSS_COMPILER ?= riscv64-unknown-elf-
-CC := gcc
-AR := ar
-CPP := cpp
-OBJCOPY := objcopy
-OBJCOPY_FLAGS := -Obinary
+ARCH ?= riscv
+CROSS_COMPILE ?= riscv64-unknown-elf-
-include arch/source.mk
+# Common programs
+CC := gcc
+AR := ar
+CPP := cpp
+OBJCOPY ?= objcopy
+OBJCOPY_FLAGS ?= -Obinary
-INCLUDE_FLAGS := $(addprefix -I,$(INCLUDE_DIRS))
-KERNEL_OBJECTS := $(patsubst %.c,%.o,$(KERNEL_SOURCES))
-KERNEL_OBJECTS := $(patsubst %.S,%.o,$(KERNEL_OBJECTS))
+KERNEL_SOURCES :=
+KERNEL_LINK :=
+INIT_SOURCES :=
+INIT_LINK :=
+INCLUDE_DIRS := include
-LINKER_FILE := $(patsubst %.S,%.ld,$(LINKER_SOURCE))
+include arch/$(ARCH)/source.mk
-kernel.bin: kernel.elf
- $(CROSS_COMPILER)$(OBJCOPY) $(OBJCOPY_FLAGS) $< $@
+INCLUDE_FLAGS != ./scripts/prepend -I $(INCLUDE_DIRS)
-kernel.elf: $(KERNEL_OBJECTS) | $(LINKER_FILE)
- $(CROSS_COMPILER)$(CC) -T$(LINKER_FILE) $(CFLAGS) $(INCLUDE_FLAGS) $^ -o $@
+KERNEL_OBJECTS != ./scripts/mkobjs $(CROSS_COMPILE)$(CC) $(CFLAGS)\
+ $(INCLUDE_FLAGS) --kern-files $(KERNEL_SOURCES)
-%.o: %.c
- $(CROSS_COMPILER)$(CC) $(CFLAGS) $(INCLUDE_FLAGS) -c $< -o $@
+KERNEL_LD != ./scripts/mkobjs $(CROSS_COMPILE)$(CPP)\
+ $(INCLUDE_FLAGS) --kern-lds $(KERNEL_LINK)
-%.o: %.S
- $(CROSS_COMPILER)$(CC) $(CFLAGS) $(INCLUDE_FLAGS) -c $< -o $@
+INIT_OBJECTS != ./scripts/mkobjs $(CROSS_COMPILE)$(CC) $(CFLAGS)\
+ $(INCLUDE_FLAGS) --init-files $(INIT_SOURCES)
-$(LINKER_FILE): $(LINKER_SOURCE)
- $(CROSS_COMPILER)$(CPP) $(INCLUDE_FLAGS) $< | sed -n '/^[^#]/p' > $@
+INIT_LD != ./scripts/mkobjs $(CROSS_COMPILE)$(CPP)\
+ $(INCLUDE_FLAGS) --init-lds $(INIT_LINK)
+
+include deps.mk
+
+apos.bin: kernel.elf init.elf
+ $(CROSS_COMPILE)$(OBJCOPY) $(OBJCOPY_FLAGS) kernel.elf kernel.bin
+ $(CROSS_COMPILE)$(OBJCOPY) $(OBJCOPY_FLAGS) init.elf init.bin
+ cat init.bin kernel.bin > $@
+
+kernel.elf: $(KERNEL_OBJECTS) $(KERNEL_LD)
+ $(CROSS_COMPILE)$(CC) -T$(KERNEL_LD) $(CFLAGS) $(INCLUDE_FLAGS) $(KERNEL_OBJECTS) -o $@
+
+init.elf: $(INIT_OBJECTS) $(INIT_LD)
+ $(CROSS_COMPILE)$(CC) -T$(INIT_LD) $(CFLAGS) $(INCLUDE_FLAGS) $(INIT_OBJECTS) -o $@
clean:
- rm $(KERNEL_OBJECTS) $(INIT_OBJECTS) $(LINKER_FILE) kernel.bin kernel.elf
+ rm $(KERNEL_OBJECTS) $(INIT_OBJECTS) $(INIT_LD) $(KERNEL_LD) kernel.bin kernel.elf init.bin init.elf apos.bin