From 1175179058fa809c57d724cd2043c67edc511695 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Thu, 19 Aug 2021 22:58:57 +0300 Subject: New build system (WIP) --- Makefile | 70 +++++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 41 insertions(+), 29 deletions(-) (limited to 'Makefile') 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 -- cgit v1.3