Fixed Makefile so it tracks dependencies better

It now tracks main.cpp's dependencies and rebuilds them as needed.
This commit is contained in:
2024-04-16 20:42:51 +06:30
parent 190bb766cb
commit f060a856d3
8 changed files with 26 additions and 26 deletions

View File

@@ -14,12 +14,10 @@ TERM_RESET:=$(shell echo -e "\e[0;0m")
# Setup variables for source code, output, etc # Setup variables for source code, output, etc
## ASSEMBLY setup ## ASSEMBLY setup
ASM_DIST=$(DIST)/asm SRC=src
ASM_SRC=asm CODE:=$(addprefix $(SRC)/, base.cpp lexer.cpp preprocesser.cpp)
ASM_CODE:=$(addprefix $(ASM_SRC)/, base.cpp lexer.cpp preprocesser.cpp) OBJECTS:=$(CODE:$(SRC)/%.cpp=$(DIST)/%.o)
ASM_OBJECTS:=$(ASM_CODE:$(ASM_SRC)/%.cpp=$(ASM_DIST)/%.o) OUT=$(DIST)/asm.out
ASM_CFLAGS=$(CPPFLAGS)
ASM_OUT=$(DIST)/asm.out
## EXAMPLES setup ## EXAMPLES setup
EXAMPLES_DIST=$(DIST)/examples EXAMPLES_DIST=$(DIST)/examples
@@ -29,34 +27,35 @@ EXAMPLES=$(EXAMPLES_DIST)/instruction-test.out $(EXAMPLES_DIST)/fib.out $(EXAMPL
## Dependencies ## Dependencies
DEPDIR:=$(DIST)/dependencies DEPDIR:=$(DIST)/dependencies
DEPFLAGS = -MT $@ -MMD -MP -MF DEPFLAGS = -MT $@ -MMD -MP -MF
DEPS:=$($(ASM_SRC):%.c=$(DEPDIR):%.o) DEPS:=$(CODE:$(SRC)/%.cpp=$(DEPDIR)/%.o)
## AVM ## AVM
AVM_ROOT_DIR:=$(shell pwd)/avm AVM_ROOT_DIR=avm
AVM_DIR:=$(AVM_ROOT_DIR)/lib AVM_DIR=$(AVM_ROOT_DIR)/lib
AVM_DIST:=$(AVM_ROOT_DIR)/build/lib AVM_DIST=$(AVM_ROOT_DIR)/build/lib
AVM_SOURCE:=$(shell find $(AVM_DIR) -name '*.c') AVM_SOURCE:=$(shell find $(AVM_DIR) -name '*.c')
AVM_OBJECTS:=$(AVM_SOURCE:$(AVM_DIR)/%.c=$(AVM_DIST)/%.o) 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` # Things you want to build on `make`
all: $(DIST) asm examples all: $(DIST) asm examples
asm: $(ASM_OUT) asm: $(OUT)
examples: $(EXAMPLES) examples: $(EXAMPLES)
# Recipes # Recipes
## ASSEMBLY Recipes ## ASSEMBLY Recipes
$(ASM_OUT): $(AVM_OBJECTS) $(ASM_OBJECTS) $(ASM_DIST)/main.o $(OUT): $(AVM_OBJECTS) $(OBJECTS) $(DIST)/main.o
@$(CPP) $(ASM_CFLAGS) $^ -o $@ $(LIBS) @$(CPP) $(CPPFLAGS) $^ -o $@ $(LIBS)
@echo "$(TERM_GREEN)$@$(TERM_RESET): $^" @echo "$(TERM_GREEN)$@$(TERM_RESET): $^"
$(ASM_DIST)/%.o: $(ASM_SRC)/%.cpp | $(ASM_DIST) $(DEPDIR)/asm $(DIST)/%.o: $(SRC)/%.cpp | $(DIST) $(DEPDIR)/asm
@$(CPP) $(ASM_CFLAGS) $(DEPFLAGS) $(DEPDIR)/asm/$*.d -c $< -o $@ $(LIBS) @$(CPP) $(CPPFLAGS) $(DEPFLAGS) $(DEPDIR)/asm/$*.d -c $< -o $@ $(LIBS)
@echo "$(TERM_YELLOW)$@$(TERM_RESET): $<" @echo "$(TERM_YELLOW)$@$(TERM_RESET): $<"
## EXAMPLES recipes ## EXAMPLES recipes
$(EXAMPLES_DIST)/%.out: $(EXAMPLES_SRC)/%.asm $(ASM_OUT) | $(EXAMPLES_DIST) $(EXAMPLES_DIST)/%.out: $(EXAMPLES_SRC)/%.asm $(OUT) | $(EXAMPLES_DIST)
@$(ASM_OUT) $< $@ @$(OUT) $< $@
@echo "$(TERM_GREEN)$@$(TERM_RESET): $<" @echo "$(TERM_GREEN)$@$(TERM_RESET): $<"
.PHONY: run-examples .PHONY: run-examples
@@ -65,16 +64,20 @@ run-examples: $(EXAMPLES)
## libavm ## libavm
$(AVM_OBJECTS): libavm; $(AVM_OBJECTS): libavm;
$(VM_OUT): avm.exe;
.PHONY: libavm .PHONY: libavm
libavm: libavm:
@$(MAKE) -C $(AVM_ROOT_DIR) lib @$(MAKE) -C $(AVM_ROOT_DIR) lib
OUT= .PHONY: avm.exe
avm.exe:
@$(MAKE) -C $(AVM_ROOT_DIR) vm
ARGS= ARGS=
.PHONY: run .PHONY: run
run: $(DIST)/$(OUT) run: $(OUT)
./$^ $(ARGS) ./$^ $(ARGS)
.PHONY: clean .PHONY: clean
@@ -85,25 +88,22 @@ clean:
SOURCE= SOURCE=
BYTECODE= BYTECODE=
.PHONY: assemble .PHONY: assemble
assemble: $(ASM_OUT) assemble: $(OUT)
@$(ASM_OUT) $(SOURCE) $(BYTECODE) @$(OUT) $(SOURCE) $(BYTECODE)
.PHONY: interpret .PHONY: interpret
interpret: $(VM_OUT) interpret: $(VM_OUT)
@$(VM_OUT) $(BYTECODE) @$(VM_OUT) $(BYTECODE)
.PHONY: exec .PHONY: exec
exec: $(ASM_OUT) $(VM_OUT) exec: $(OUT) $(VM_OUT)
@$(ASM_OUT) $(SOURCE) $(BYTECODE) @$(OUT) $(SOURCE) $(BYTECODE)
@$(VM_OUT) $(BYTECODE) @$(VM_OUT) $(BYTECODE)
# Directories # Directories
$(DIST): $(DIST):
@mkdir -p $@ @mkdir -p $@
$(ASM_DIST):
@mkdir -p $@
$(EXAMPLES_DIST): $(EXAMPLES_DIST):
@mkdir -p $@ @mkdir -p $@