diff --git a/Makefile b/Makefile index 3255c719..be11cc62 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ endif .PHONY: all shared user kernel clean raspi virt run debug dump prepare-fs help install -all: shared user kernel +all: shared kernel user @echo "Build complete." ./createfs diff --git a/common.mk b/common.mk index 676b839e..d888122a 100644 --- a/common.mk +++ b/common.mk @@ -5,6 +5,8 @@ LD := $(ARCH)-ld AR := $(ARCH)-ar OBJCOPY := $(ARCH)-objcopy +BUILD_DIR := ./build + 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 \ diff --git a/virt.dtb b/dtbs/virt.dtb similarity index 100% rename from virt.dtb rename to dtbs/virt.dtb diff --git a/kernel/Makefile b/kernel/Makefile index db1c553c..255f680c 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -19,7 +19,7 @@ C_SRC := $(shell find . -name '*.c') ASM_SRC := $(shell find . -name '*.S') CPP_SRC := $(shell find . -name '*.cpp') OBJ := $(C_SRC:.c=.o) $(ASM_SRC:.S=.o) $(CPP_SRC:.cpp=.o) -OBJL := $(filter-out ./boot.o,$(OBJ)) +OBJL := $(filter-out $(BUILD_DIR)/boot.o,$(addprefix $(BUILD_DIR)/,$(notdir $(OBJ)))) DEP := $(C_SRC:.c=.d) $(ASM_SRC:.S=.d) $(CPP_SRC:.cpp=.d) ELF := ../kernel.elf @@ -27,18 +27,22 @@ TARGET := ../kernel.img all: $(TARGET) -$(TARGET): ../shared/libshared.a $(OBJ) - $(VLD) $(LDFLAGS) -o $(ELF) $(OBJL) ../shared/libshared.a +prepare: + mkdir -p $(BUILD_DIR) + +$(TARGET): ../shared/libshared.a prepare $(OBJ) + echo $(LDFLAGS) + $(VLD) $(LDFLAGS) -o $(ELF) $(OBJL) ../shared/libshared.a $(BUILD_DIR)/boot.o $(OBJCOPY) -O binary $(ELF) $@ %.o: %.S - $(VAS) $(CFLAGS) -c $< -o $@ + $(VAS) $(CFLAGS) -c $< -o $(BUILD_DIR)/$(notdir $@) %.o: %.c - $(VCC) $(CFLAGS) -c -MMD -MP $< -o $@ + $(VCC) $(CFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) %.o: %.cpp - $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@ + $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) clean: $(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(ELF) $(TARGET) diff --git a/kernel/linker.ld b/kernel/linker.ld index 8c7f977a..6a52f4e4 100644 --- a/kernel/linker.ld +++ b/kernel/linker.ld @@ -3,7 +3,7 @@ ENTRY(_start) SECTIONS { . = LOAD_ADDR; kernel_start = .; - .boot . : { boot.o(.text) } + .boot . : { ./build/boot.o(.text) } .text : { *(EXCLUDE_FILE(shared/*.o) .text .text.[!p]*) } diff --git a/shared/Makefile b/shared/Makefile index cd1b61bc..364c0f63 100644 --- a/shared/Makefile +++ b/shared/Makefile @@ -16,21 +16,26 @@ DEP := $(C_SRC:.c=.d) $(ASM_SRC:.S=.d) $(CPP_SRC:.cpp=.d) TARGET := libshared.a -.PHONY: all clean +.PHONY: all clean prepare -all: $(TARGET) +all: prepare $(TARGET) + +prepare: + mkdir -p $(BUILD_DIR) $(TARGET): $(OBJ) - $(VAR) rcs $@ $^ + echo "Finishing build" + echo $(addprefix $(BUILD_DIR)/,$(notdir $(OBJ))) + $(VAR) rcs $@ $(addprefix $(BUILD_DIR)/,$(notdir $(OBJ))) %.o: %.S - $(VAS) $(CFLAGS) -c $< -o $@ + $(VAS) $(CFLAGS) -c $< -o $(BUILD_DIR)/$(notdir $@) %.o: %.c - $(VCC) $(CFLAGS) -c -MMD -MP $< -o $@ + $(VCC) $(CFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) %.o: %.cpp - $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@ + $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) clean: $(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET) diff --git a/user/Makefile b/user/Makefile index 5e5cabf1..90e3b3de 100644 --- a/user/Makefile +++ b/user/Makefile @@ -19,22 +19,26 @@ ELF := $(NAME).elf TARGET := $(NAME).bin LOCATION := ../fs/redos/user/ -.PHONY: all clean +.PHONY: prepare all clean -all: $(LOCATION)$(TARGET) +all: prepare $(LOCATION)$(TARGET) + +prepare: + mkdir -p $(BUILD_DIR) $(LOCATION)$(TARGET): $(OBJ) - $(VLD) $(LDFLAGS) -o $(LOCATION)$(ELF) $(OBJ) ../shared/libshared.a + echo $(LDFLAGS) -o $(LOCATION)$(ELF) $(addprefix $(BUILD_DIR)/,$(notdir $(OBJ))) ../shared/libshared.a + $(VLD) $(LDFLAGS) -o $(LOCATION)$(ELF) $(addprefix $(BUILD_DIR)/,$(notdir $(OBJ))) ../shared/libshared.a $(OBJCOPY) -O binary $(LOCATION)$(ELF) $@ %.o: %.S - $(VAS) $(CFLAGS) -c $< -o $@ + $(VAS) $(CFLAGS) -c $< -o $(BUILD_DIR)/$(notdir $@) %.o: %.c - $(VCC) $(CFLAGS) -c -MMD -MP $< -o $@ + $(VCC) $(CFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) %.o: %.cpp - $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@ + $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) clean: $(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET)