diff --git a/Makefile b/Makefile index 282b54e6..3255c719 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,4 @@ -ARCH ?= aarch64-none-elf -CC := $(ARCH)-gcc -LD := $(ARCH)-ld -AR := $(ARCH)-ar -OBJCOPY := $(ARCH)-objcopy - -CFLAGS_BASE ?= -g -O0 -nostdlib -ffreestanding \ - -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables \ - -Wall -Wextra -Wno-unused-parameter -Wno-address-of-packed-member -mcpu=cortex-a72 -CONLY_FLAGS_BASE ?= -std=c17 -LDFLAGS_BASE ?= - -LOAD_ADDR ?= 0x41000000 -XHCI_CTX_SIZE ?= 32 -QEMU ?= true -MODE ?= virt - -export ARCH CC LD AR OBJCOPY CFLAGS_BASE CONLY_FLAGS_BASE LDFLAGS_BASE LOAD_ADDR XHCI_CTX_SIZE QEMU +include common.mk OS := $(shell uname) FS_DIRS := fs/redos/user @@ -42,13 +25,13 @@ kernel: $(MAKE) -C kernel LOAD_ADDR=$(LOAD_ADDR) XHCI_CTX_SIZE=$(XHCI_CTX_SIZE) QEMU=$(QEMU) clean: - $(MAKE) -C shared clean - $(MAKE) -C user clean - $(MAKE) -C kernel clean + $(MAKE) -C shared $@ + $(MAKE) -C user $@ + $(MAKE) -C kernel $@ @echo "removing fs dirs" - rm -rf $(FS_DIRS) + $(RM) -r $(FS_DIRS) @echo "removing images" - rm -f kernel.img kernel.elf disk.img dump + $(RM) kernel.img kernel.elf disk.img dump raspi: $(MAKE) LOAD_ADDR=0x80000 XHCI_CTX_SIZE=64 QEMU=true all @@ -63,11 +46,11 @@ run: debug: $(MAKE) $(MODE) ./rundebug MODE=$(MODE) $(ARGS) - + dump: $(OBJCOPY) -O binary kernel.elf kernel.img - aarch64-none-elf-objdump -D kernel.elf > dump - + $(ARCH)-objdump -D kernel.elf > dump + install: $(MAKE) clean $(MAKE) LOAD_ADDR=0x80000 XHCI_CTX_SIZE=64 QEMU=false all @@ -89,4 +72,6 @@ help: make debug build and run with debugger\n\ make dump disassemble kernel.elf\n\ make install create raspi kernel and mount it on a bootable partition\n\ - make prepare-fs create directories for the filesystem\n\n" + make prepare-fs create directories for the filesystem\n\n"\ + \n\ + Use 'make V=1' for verbose build output. diff --git a/common.mk b/common.mk new file mode 100644 index 00000000..676b839e --- /dev/null +++ b/common.mk @@ -0,0 +1,34 @@ +ARCH ?= aarch64-none-elf +CC := $(ARCH)-gcc +CXX := $(ARCH)-g++ +LD := $(ARCH)-ld +AR := $(ARCH)-ar +OBJCOPY := $(ARCH)-objcopy + +COMMON_FLAGS ?= -ffreestanding -nostdlib -fno-exceptions -fno-unwind-tables \ + -fno-asynchronous-unwind-tables -g -O0 -Wall -Wextra \ + -Wno-unused-parameter -Wno-address-of-packed-member \ + -mcpu=cortex-a72 + +CFLAGS_BASE ?= $(COMMON_FLAGS) -std=c17 +CXXFLAGS_BASE ?= $(COMMON_FLAGS) -fno-rtti +LDFLAGS_BASE ?= + +LOAD_ADDR ?= 0x41000000 +XHCI_CTX_SIZE ?= 32 +QEMU ?= true +MODE ?= virt + +ifeq ($(V), 1) + VAR = $(AR) + VAS = $(CC) + VCC = $(CC) + VCXX = $(CXX) + VLD = $(LD) +else + VAR = @echo " [AR] $@" && $(AR) + VAS = @echo " [AS] $@" && $(CC) + VCC = @echo " [CC] $@" && $(CC) + VCXX = @echo " [CXX] $@" && $(CXX) + VLD = @echo " [LD] $@" && $(LD) +endif diff --git a/kernel/Makefile b/kernel/Makefile index 8d936996..db1c553c 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -1,12 +1,17 @@ #kernel # toolchain (inherited from top-level) -CFLAGS := $(CFLAGS_BASE) -I. -I../shared -I../user -DXHCI_CTX_SIZE=$(XHCI_CTX_SIZE) +include ../common.mk + +CPPFLAGS := -I. -I../shared -I../user -DXHCI_CTX_SIZE=$(XHCI_CTX_SIZE) + ifeq ($(QEMU),true) - CFLAGS += -DQEMU + CPPFLAGS += -DQEMU endif -LDFLAGS := $(LDFLAGS_BASE) -T $(shell ls *.ld) --defsym=LOAD_ADDR=$(LOAD_ADDR) +CFLAGS := $(CFLAGS_BASE) $(CPPFLAGS) +CXXFLAGS := $(CXXFLAGS_BASE) $(CPPFLAGS) +LDFLAGS := $(LDFLAGS_BASE) -T $(shell ls *.ld) --defsym=LOAD_ADDR=$(LOAD_ADDR) CLEAN_OBJS := $(shell find . -name '*.o') CLEAN_DEPS := $(shell find . -name '*.d') @@ -23,17 +28,19 @@ TARGET := ../kernel.img all: $(TARGET) $(TARGET): ../shared/libshared.a $(OBJ) - $(LD) $(LDFLAGS) -o $(ELF) $(OBJL) ../shared/libshared.a + $(VLD) $(LDFLAGS) -o $(ELF) $(OBJL) ../shared/libshared.a $(OBJCOPY) -O binary $(ELF) $@ %.o: %.S - $(CC) $(CFLAGS) -c -MMD -MP $< -o $@ + $(VAS) $(CFLAGS) -c $< -o $@ + %.o: %.c - $(CC) $(CFLAGS) $(CONLY_FLAGS_BASE) -c -MMD -MP $< -o $@ + $(VCC) $(CFLAGS) -c -MMD -MP $< -o $@ + %.o: %.cpp - $(CC) $(CFLAGS) -fno-rtti -c -MMD -MP $< -o $@ + $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@ clean: - rm -f $(CLEAN_OBJS) $(CLEAN_DEPS) $(ELF) $(TARGET) + $(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(ELF) $(TARGET) -include $(DEP) diff --git a/shared/Makefile b/shared/Makefile index d815120d..cd1b61bc 100644 --- a/shared/Makefile +++ b/shared/Makefile @@ -1,5 +1,10 @@ #shared -CFLAGS := $(CFLAGS_BASE) -I. -I../kernel -Wno-unused-parameter + +include ../common.mk + +CPPFLAGS := -I. -I../kernel +CFLAGS := $(CFLAGS_BASE) $(CPPFLAGS) +CXXFLAGS := $(CXXFLAGS_BASE) $(CPPFLAGS) CLEAN_OBJS := $(shell find . -name '*.o') CLEAN_DEPS := $(shell find . -name '*.d') @@ -16,18 +21,18 @@ TARGET := libshared.a all: $(TARGET) $(TARGET): $(OBJ) - $(AR) rcs $@ $^ + $(VAR) rcs $@ $^ %.o: %.S - $(CC) $(CFLAGS) -c -MMD -MP $< -o $@ + $(VAS) $(CFLAGS) -c $< -o $@ %.o: %.c - $(CC) $(CFLAGS) $(CONLY_FLAGS_BASE) -c -MMD -MP $< -o $@ + $(VCC) $(CFLAGS) -c -MMD -MP $< -o $@ %.o: %.cpp - $(CC) $(CFLAGS) -fno-rtti -c -MMD -MP $< -o $@ + $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@ clean: - rm -f $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET) + $(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET) -include $(DEP) diff --git a/user/Makefile b/user/Makefile index 3f9ce25e..5e5cabf1 100644 --- a/user/Makefile +++ b/user/Makefile @@ -1,6 +1,11 @@ #user -CFLAGS := $(CFLAGS_BASE) -I. -I../shared -Wno-unused-parameter -LDFLAGS := -T $(shell ls *.ld) + +include ../common.mk + +CPPFLAGS := -I. -I../shared +CFLAGS := $(CFLAGS_BASE) $(CPPFLAGS) +CXXFLAGS := $(CXXFLAGS_BASE) $(CPPFLAGS) +LDFLAGS := -T $(shell ls *.ld) CLEAN_OBJS := $(shell find . -name '*.o') CLEAN_DEPS := $(shell find . -name '*.d') @@ -19,19 +24,19 @@ LOCATION := ../fs/redos/user/ all: $(LOCATION)$(TARGET) $(LOCATION)$(TARGET): $(OBJ) - $(LD) $(LDFLAGS) -o $(LOCATION)$(ELF) $(OBJ) ../shared/libshared.a + $(VLD) $(LDFLAGS) -o $(LOCATION)$(ELF) $(OBJ) ../shared/libshared.a $(OBJCOPY) -O binary $(LOCATION)$(ELF) $@ %.o: %.S - $(CC) $(CFLAGS) -c -MMD -MP $< -o $@ + $(VAS) $(CFLAGS) -c $< -o $@ %.o: %.c - $(CC) $(CFLAGS) $(CONLY_FLAGS_BASE) -c -MMD -MP $< -o $@ + $(VCC) $(CFLAGS) -c -MMD -MP $< -o $@ %.o: %.cpp - $(CC) $(CFLAGS) -fno-rtti -c -MMD -MP $< -o $@ + $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@ clean: - rm -f $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET) + $(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET) -include $(DEP)