Fixed Makefile so it tracks dependencies better
It now tracks main.cpp's dependencies and rebuilds them as needed.
This commit is contained in:
52
Makefile
52
Makefile
@@ -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 $@
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user