This repository has been archived on 2025-11-10. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
avm/Makefile
Aryadev Chavali 5d800d4366 Moved inst module to lib
As it has no dependencies on vm specifically, and it's more necessary
for any vendors who wish to target the virtual machine, it makes more
sense for inst to be a lib module rather than a vm module.
2023-10-31 21:14:14 +00:00

118 lines
2.7 KiB
Makefile

CC=gcc
VERBOSE=0
GENERAL-FLAGS=-Wall -Wextra -Werror -Wswitch-enum -std=c11 -I.
DEBUG-FLAGS=-ggdb -fsanitize=address
RELEASE-FLAGS=-O3
CFLAGS:=$(GENERAL-FLAGS) $(DEBUG-FLAGS) -D VERBOSE=$(VERBOSE)
LIBS=
DIST=build
TERM_YELLOW:=$(shell echo -e "\e[0;33m")
TERM_GREEN:=$(shell echo -e "\e[0;32m")
TERM_RESET:=$(shell echo -e "\e[0;0m")
# Setup variables for source code, output, etc
## Lib setup
LIB_DIST=$(DIST)/lib
LIB_SRC=lib
LIB_CODE:=$(addprefix $(LIB_SRC)/, base.c darr.c inst.c)
LIB_OBJECTS:=$(LIB_CODE:$(LIB_SRC)/%.c=$(LIB_DIST)/%.o)
LIB_DEPS:=$(LIB_OBJECTS:%.o=%.d)
LIB_CFLAGS=$(CFLAGS)
## VM setup
VM_DIST=$(DIST)/vm
VM_SRC=vm
VM_CODE:=$(addprefix $(VM_SRC)/, runtime.c)
VM_OBJECTS:=$(VM_CODE:$(VM_SRC)/%.c=$(VM_DIST)/%.o)
VM_DEPS:=$(VM_OBJECTS:%.o=%.d) $(VM_DIST)/main.d
VM_CFLAGS:=$(CFLAGS)
VM_OUT=$(DIST)/ovm.out
## ASSEMBLY setup
ASM_DIST=$(DIST)/asm
ASM_SRC=asm
ASM_CODE:=$(addprefix $(ASM_SRC)/, lexer.c parser.c)
ASM_OBJECTS:=$(ASM_CODE:$(ASM_SRC)/%.c=$(ASM_DIST)/%.o)
ASM_DEPS:=$(ASM_OBJECTS:%.o=%.d) $(ASM_DIST)/main.d
ASM_CFLAGS=$(CFLAGS)
ASM_OUT=$(DIST)/asm.out
## EXAMPLES setup
EXAMPLES_DIST=$(DIST)/examples
EXAMPLES_SRC=examples
EXAMPLES_CFLAGS=$(CFLAGS)
EXAMPLES=$(DIST)/fib.out
# Things you want to build on `make`
all: $(DIST) lib vm asm examples
lib: $(LIB_DIST) $(LIB_OBJECTS)
vm: $(VM_DIST) $(VM_OUT)
asm: $(ASM_DIST) $(ASM_OUT)
examples: $(EXAMPLES_DIST) $(EXAMPLES)
# Recipes
## LIB Recipes
-include $(LIB_DEPS)
$(LIB_DIST)/%.o: $(LIB_SRC)/%.c
@$(CC) $(LIB_CFLAGS) -MMD -c $< -o $@ $(LIBS)
@echo -e "$(TERM_GREEN)$@$(TERM_RESET): $<"
## VM Recipes
$(VM_OUT): $(LIB_OBJECTS) $(VM_OBJECTS) $(VM_DIST)/main.o
@$(CC) $(VM_CFLAGS) $^ -o $@ $(LIBS)
@echo -e "$(TERM_GREEN)$@$(TERM_RESET): $^"
-include $(VM_DEPS)
$(VM_DIST)/%.o: $(VM_SRC)/%.c
@$(CC) $(VM_CFLAGS) -MMD -c $< -o $@ $(LIBS)
@echo -e "$(TERM_GREEN)$@$(TERM_RESET): $<"
## ASSEMBLY Recipes
$(ASM_OUT): $(LIB_OBJECTS) $(ASM_OBJECTS) $(ASM_DIST)/main.o
@$(CC) $(ASM_CFLAGS) $^ -o $@ $(LIBS)
@echo -e "$(TERM_GREEN)$@$(TERM_RESET): $^"
-include $(ASM_DEPS)
$(ASM_DIST)/%.o: $(ASM_SRC)/%.c
@$(CC) $(ASM_CFLAGS) -MMD -c $< -o $@ $(LIBS)
@echo -e "$(TERM_GREEN)$@$(TERM_RESET): $<"
## EXAMPLES recipes
$(DIST)/fib.out: $(LIB_OBJECTS) $(VM_OBJECTS) $(ASM_OBJECTS) $(EXAMPLES_DIST)/fib.o
@$(CC) $(EXAMPLES_CFLAGS) $^ -o $@ $(LIBS)
@echo -e "$(TERM_GREEN)$@$(TERM_RESET): $^"
$(EXAMPLES_DIST)/%.o: $(EXAMPLES_SRC)/%.c
@$(CC) $(EXAMPLES_CFLAGS) -MMD -c $< -o $@ $(LIBS)
@echo -e "$(TERM_GREEN)$@$(TERM_RESET): $<"
OUT=
ARGS=
.PHONY: run
run: $(DIST)/$(OUT)
./$^ $(ARGS)
.PHONY:
clean:
rm -rfv $(DIST)/*
# Directories
$(DIST):
mkdir -p $(DIST)
$(LIB_DIST):
mkdir -p $(LIB_DIST)
$(VM_DIST):
mkdir -p $(VM_DIST)
$(ASM_DIST):
mkdir -p $(ASM_DIST)
$(EXAMPLES_DIST):
mkdir -p $(EXAMPLES_DIST)