diff --git a/common.mk b/common.mk index b20e18f4..b9456a65 100644 --- a/common.mk +++ b/common.mk @@ -28,9 +28,9 @@ ifeq ($(V), 1) 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) + 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 255f680c..0c945eee 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -18,9 +18,10 @@ CLEAN_DEPS := $(shell find . -name '*.d') 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 $(BUILD_DIR)/boot.o,$(addprefix $(BUILD_DIR)/,$(notdir $(OBJ)))) -DEP := $(C_SRC:.c=.d) $(ASM_SRC:.S=.d) $(CPP_SRC:.cpp=.d) +OBJ := $(C_SRC:%.c=$(BUILD_DIR)/%.o) $(ASM_SRC:%.S=$(BUILD_DIR)/%.o) $(CPP_SRC:%.cpp=$(BUILD_DIR)/%.o) +DEP := $(C_SRC:%.c=$(BUILD_DIR)/%.d) $(ASM_SRC:%.S=$(BUILD_DIR)/%.d) $(CPP_SRC:%.cpp=$(BUILD_DIR)/%.d) + +OBJL := $(filter-out $(BUILD_DIR)/./boot.o,$(OBJ)) ELF := ../kernel.elf TARGET := ../kernel.img @@ -35,15 +36,19 @@ $(TARGET): ../shared/libshared.a prepare $(OBJ) $(VLD) $(LDFLAGS) -o $(ELF) $(OBJL) ../shared/libshared.a $(BUILD_DIR)/boot.o $(OBJCOPY) -O binary $(ELF) $@ -%.o: %.S - $(VAS) $(CFLAGS) -c $< -o $(BUILD_DIR)/$(notdir $@) +$(BUILD_DIR)/%.o: %.S + @mkdir -p $(dir $@) + $(VAS) $(CFLAGS) -c $< -o $@ -%.o: %.c - $(VCC) $(CFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) +$(BUILD_DIR)/%.o: %.c + @mkdir -p $(dir $@) + $(VCC) $(CFLAGS) -c -MMD -MP $< -o $@ -%.o: %.cpp - $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) +$(BUILD_DIR)/%.o: %.cpp + @mkdir -p $(dir $@) + $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@ +# Might want to also delete the directories created inside BUILD_DIR clean: $(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(ELF) $(TARGET) diff --git a/shared/Makefile b/shared/Makefile index 364c0f63..96d80111 100644 --- a/shared/Makefile +++ b/shared/Makefile @@ -11,8 +11,8 @@ CLEAN_DEPS := $(shell find . -name '*.d') C_SRC := $(shell find . -name '*.c') CPP_SRC := $(shell find . -name '*.cpp') ASM_SRC := $(shell find . -name '*.S') -OBJ := $(C_SRC:.c=.o) $(ASM_SRC:.S=.o) $(CPP_SRC:.cpp=.o) -DEP := $(C_SRC:.c=.d) $(ASM_SRC:.S=.d) $(CPP_SRC:.cpp=.d) +OBJ := $(C_SRC:%.c=$(BUILD_DIR)/%.o) $(ASM_SRC:%.S=$(BUILD_DIR)/%.o) $(CPP_SRC:%.cpp=$(BUILD_DIR)/%.o) +DEP := $(C_SRC:%.c=$(BUILD_DIR)/%.d) $(ASM_SRC:%.S=$(BUILD_DIR)/%.d) $(CPP_SRC:%.cpp=$(BUILD_DIR)/%.d) TARGET := libshared.a @@ -26,17 +26,21 @@ prepare: $(TARGET): $(OBJ) echo "Finishing build" echo $(addprefix $(BUILD_DIR)/,$(notdir $(OBJ))) - $(VAR) rcs $@ $(addprefix $(BUILD_DIR)/,$(notdir $(OBJ))) + $(VAR) rcs $@ $(OBJ) -%.o: %.S - $(VAS) $(CFLAGS) -c $< -o $(BUILD_DIR)/$(notdir $@) +$(BUILD_DIR)/%.o: %.S + @mkdir -p $(dir $@) + $(VAS) $(CFLAGS) -c $< -o $@ -%.o: %.c - $(VCC) $(CFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) +$(BUILD_DIR)/%.o: %.c + @mkdir -p $(dir $@) + $(VCC) $(CFLAGS) -c -MMD -MP $< -o $@ -%.o: %.cpp - $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) +$(BUILD_DIR)/%.o: %.cpp + @mkdir -p $(dir $@) + $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@ +# Might want to also delete the directories created inside BUILD_DIR clean: $(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET) diff --git a/user/Makefile b/user/Makefile index 5546d5ce..8d442b70 100644 --- a/user/Makefile +++ b/user/Makefile @@ -11,8 +11,8 @@ CLEAN_OBJS := $(shell find . -name '*.o') CLEAN_DEPS := $(shell find . -name '*.d') C_SRC := $(shell find . -name '*.c') CPP_SRC := $(shell find . -name '*.cpp') -OBJ := $(C_SRC:.c=.o) $(CPP_SRC:.cpp=.o) -DEP := $(C_SRC:.c=.d) $(CPP_SRC:.cpp=.d) +OBJ := $(C_SRC:%.c=$(BUILD_DIR)/%.o) $(CPP_SRC:%.cpp=.$(BUILD_DIR)/%.o) +DEP := $(C_SRC:%.c=$(BUILD_DIR)/%.d) $(CPP_SRC:%.cpp=.$(BUILD_DIR)/%.d) NAME := $(notdir $(CURDIR)) ELF := $(NAME).elf @@ -31,15 +31,19 @@ $(LOCATION)$(TARGET): ../shared/libshared.a $(OBJ) $(VLD) $(LDFLAGS) -o $(LOCATION)$(ELF) $(addprefix $(BUILD_DIR)/,$(notdir $(OBJ))) ../shared/libshared.a $(OBJCOPY) -O binary $(LOCATION)$(ELF) $@ -%.o: %.S - $(VAS) $(CFLAGS) -c $< -o $(BUILD_DIR)/$(notdir $@) +$(BUILD_DIR)/%.o: %.S + @mkdir -p $(dir $@) + $(VAS) $(CFLAGS) -c $< -o $@ -%.o: %.c - $(VCC) $(CFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) +$(BUILD_DIR)/%.o: %.c + @mkdir -p $(dir $@) + $(VCC) $(CFLAGS) -c -MMD -MP $< -o $@ -%.o: %.cpp - $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $(BUILD_DIR)/$(notdir $@) +$(BUILD_DIR)/%.o: %.cpp + @mkdir -p $(dir $@) + $(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@ +# Might want to also delete the directories created inside BUILD_DIR clean: $(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET)