From f060a856d382f5cf30831d60cc81691095b952de Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Tue, 16 Apr 2024 20:42:51 +0630 Subject: [PATCH] Fixed Makefile so it tracks dependencies better It now tracks main.cpp's dependencies and rebuilds them as needed. --- Makefile | 52 +++++++++++++++++------------------ {asm => src}/base.cpp | 0 {asm => src}/base.hpp | 0 {asm => src}/lexer.cpp | 0 {asm => src}/lexer.hpp | 0 {asm => src}/main.cpp | 0 {asm => src}/preprocesser.cpp | 0 {asm => src}/preprocesser.hpp | 0 8 files changed, 26 insertions(+), 26 deletions(-) rename {asm => src}/base.cpp (100%) rename {asm => src}/base.hpp (100%) rename {asm => src}/lexer.cpp (100%) rename {asm => src}/lexer.hpp (100%) rename {asm => src}/main.cpp (100%) rename {asm => src}/preprocesser.cpp (100%) rename {asm => src}/preprocesser.hpp (100%) diff --git a/Makefile b/Makefile index e2ef559..e95ea69 100644 --- a/Makefile +++ b/Makefile @@ -14,12 +14,10 @@ TERM_RESET:=$(shell echo -e "\e[0;0m") # Setup variables for source code, output, etc ## ASSEMBLY setup -ASM_DIST=$(DIST)/asm -ASM_SRC=asm -ASM_CODE:=$(addprefix $(ASM_SRC)/, base.cpp lexer.cpp preprocesser.cpp) -ASM_OBJECTS:=$(ASM_CODE:$(ASM_SRC)/%.cpp=$(ASM_DIST)/%.o) -ASM_CFLAGS=$(CPPFLAGS) -ASM_OUT=$(DIST)/asm.out +SRC=src +CODE:=$(addprefix $(SRC)/, base.cpp lexer.cpp preprocesser.cpp) +OBJECTS:=$(CODE:$(SRC)/%.cpp=$(DIST)/%.o) +OUT=$(DIST)/asm.out ## EXAMPLES setup EXAMPLES_DIST=$(DIST)/examples @@ -29,34 +27,35 @@ EXAMPLES=$(EXAMPLES_DIST)/instruction-test.out $(EXAMPLES_DIST)/fib.out $(EXAMPL ## Dependencies DEPDIR:=$(DIST)/dependencies DEPFLAGS = -MT $@ -MMD -MP -MF -DEPS:=$($(ASM_SRC):%.c=$(DEPDIR):%.o) +DEPS:=$(CODE:$(SRC)/%.cpp=$(DEPDIR)/%.o) ## AVM -AVM_ROOT_DIR:=$(shell pwd)/avm -AVM_DIR:=$(AVM_ROOT_DIR)/lib -AVM_DIST:=$(AVM_ROOT_DIR)/build/lib +AVM_ROOT_DIR=avm +AVM_DIR=$(AVM_ROOT_DIR)/lib +AVM_DIST=$(AVM_ROOT_DIR)/build/lib AVM_SOURCE:=$(shell find $(AVM_DIR) -name '*.c') AVM_OBJECTS:=$(AVM_SOURCE:$(AVM_DIR)/%.c=$(AVM_DIST)/%.o) +VM_OUT:=$(AVM_ROOT_DIR)/build/avm.out # Things you want to build on `make` all: $(DIST) asm examples -asm: $(ASM_OUT) +asm: $(OUT) examples: $(EXAMPLES) # Recipes ## ASSEMBLY Recipes -$(ASM_OUT): $(AVM_OBJECTS) $(ASM_OBJECTS) $(ASM_DIST)/main.o - @$(CPP) $(ASM_CFLAGS) $^ -o $@ $(LIBS) +$(OUT): $(AVM_OBJECTS) $(OBJECTS) $(DIST)/main.o + @$(CPP) $(CPPFLAGS) $^ -o $@ $(LIBS) @echo "$(TERM_GREEN)$@$(TERM_RESET): $^" -$(ASM_DIST)/%.o: $(ASM_SRC)/%.cpp | $(ASM_DIST) $(DEPDIR)/asm - @$(CPP) $(ASM_CFLAGS) $(DEPFLAGS) $(DEPDIR)/asm/$*.d -c $< -o $@ $(LIBS) +$(DIST)/%.o: $(SRC)/%.cpp | $(DIST) $(DEPDIR)/asm + @$(CPP) $(CPPFLAGS) $(DEPFLAGS) $(DEPDIR)/asm/$*.d -c $< -o $@ $(LIBS) @echo "$(TERM_YELLOW)$@$(TERM_RESET): $<" ## EXAMPLES recipes -$(EXAMPLES_DIST)/%.out: $(EXAMPLES_SRC)/%.asm $(ASM_OUT) | $(EXAMPLES_DIST) - @$(ASM_OUT) $< $@ +$(EXAMPLES_DIST)/%.out: $(EXAMPLES_SRC)/%.asm $(OUT) | $(EXAMPLES_DIST) + @$(OUT) $< $@ @echo "$(TERM_GREEN)$@$(TERM_RESET): $<" .PHONY: run-examples @@ -65,16 +64,20 @@ run-examples: $(EXAMPLES) ## libavm $(AVM_OBJECTS): libavm; +$(VM_OUT): avm.exe; .PHONY: libavm libavm: @$(MAKE) -C $(AVM_ROOT_DIR) lib -OUT= +.PHONY: avm.exe +avm.exe: + @$(MAKE) -C $(AVM_ROOT_DIR) vm + ARGS= .PHONY: run -run: $(DIST)/$(OUT) +run: $(OUT) ./$^ $(ARGS) .PHONY: clean @@ -85,25 +88,22 @@ clean: SOURCE= BYTECODE= .PHONY: assemble -assemble: $(ASM_OUT) - @$(ASM_OUT) $(SOURCE) $(BYTECODE) +assemble: $(OUT) + @$(OUT) $(SOURCE) $(BYTECODE) .PHONY: interpret interpret: $(VM_OUT) @$(VM_OUT) $(BYTECODE) .PHONY: exec -exec: $(ASM_OUT) $(VM_OUT) - @$(ASM_OUT) $(SOURCE) $(BYTECODE) +exec: $(OUT) $(VM_OUT) + @$(OUT) $(SOURCE) $(BYTECODE) @$(VM_OUT) $(BYTECODE) # Directories $(DIST): @mkdir -p $@ -$(ASM_DIST): - @mkdir -p $@ - $(EXAMPLES_DIST): @mkdir -p $@ diff --git a/asm/base.cpp b/src/base.cpp similarity index 100% rename from asm/base.cpp rename to src/base.cpp diff --git a/asm/base.hpp b/src/base.hpp similarity index 100% rename from asm/base.hpp rename to src/base.hpp diff --git a/asm/lexer.cpp b/src/lexer.cpp similarity index 100% rename from asm/lexer.cpp rename to src/lexer.cpp diff --git a/asm/lexer.hpp b/src/lexer.hpp similarity index 100% rename from asm/lexer.hpp rename to src/lexer.hpp diff --git a/asm/main.cpp b/src/main.cpp similarity index 100% rename from asm/main.cpp rename to src/main.cpp diff --git a/asm/preprocesser.cpp b/src/preprocesser.cpp similarity index 100% rename from asm/preprocesser.cpp rename to src/preprocesser.cpp diff --git a/asm/preprocesser.hpp b/src/preprocesser.hpp similarity index 100% rename from asm/preprocesser.hpp rename to src/preprocesser.hpp