From 3b9e573c4a90e6c642bfdfaddbf568704b6eb944 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Tue, 16 Apr 2024 19:16:48 +0630 Subject: [PATCH] Made AVM a git submodule, updated the Makefile to build assembler Also updated dir-locals to make include path resolution accurate. --- .dir-locals.el | 10 ++----- .gitmodules | 3 ++ Makefile | 79 +++++++++++++++----------------------------------- avm | 1 + 4 files changed, 31 insertions(+), 62 deletions(-) create mode 100644 .gitmodules create mode 160000 avm diff --git a/.dir-locals.el b/.dir-locals.el index 1e8b181..2d2d00a 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -4,11 +4,7 @@ ((nil . ((projectile-project-compilation-cmd . "make") (projectile-project-configure-cmd . "make clean") (+license/license-choice . "GPLv2"))) - (c-mode . ((flycheck-gcc-include-path . ("..")) - (flycheck-clang-include-path . ("..")) - (company-clang-arguments . ("-I..")) - (eval . (clang-format-mode t)))) - (c++-mode . ((flycheck-gcc-include-path . ("..")) - (flycheck-clang-include-path . ("..")) - (company-clang-arguments . ("-I..")) + (c++-mode . ((flycheck-gcc-include-path . (".." "../avm")) + (flycheck-clang-include-path . (".." "../avm")) + (company-clang-arguments . ("-I.." "-I../avm")) (eval . (clang-format-mode t))))) diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..11258e8 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "avm"] + path = avm + url = git@github.com:aryadev-software/avm diff --git a/Makefile b/Makefile index de1dcd8..e2ef559 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,9 @@ -CC=gcc CPP=g++ VERBOSE=0 -GENERAL-FLAGS=-Wall -Wextra -Werror -Wswitch-enum -I$(shell pwd) +GENERAL-FLAGS=-Wall -Wextra -Werror -Wswitch-enum -std=c++17 -I$(shell pwd) -I$(shell pwd)/avm DEBUG-FLAGS=-ggdb -fsanitize=address RELEASE-FLAGS=-O3 -CFLAGS:=$(GENERAL-FLAGS) -std=c11 $(DEBUG-FLAGS) -D VERBOSE=$(VERBOSE) CPPFLAGS:=$(GENERAL-FLAGS) -std=c++17 $(DEBUG-FLAGS) -D VERBOSE=$(VERBOSE) LIBS=-lm @@ -15,21 +13,6 @@ 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 heap.c inst.c) -LIB_OBJECTS:=$(LIB_CODE:$(LIB_SRC)/%.c=$(LIB_DIST)/%.o) -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_CFLAGS:=$(CFLAGS) -VM_OUT=$(DIST)/ovm.out - ## ASSEMBLY setup ASM_DIST=$(DIST)/asm ASM_SRC=asm @@ -46,34 +29,24 @@ EXAMPLES=$(EXAMPLES_DIST)/instruction-test.out $(EXAMPLES_DIST)/fib.out $(EXAMPL ## Dependencies DEPDIR:=$(DIST)/dependencies DEPFLAGS = -MT $@ -MMD -MP -MF -DEPS:=$($(LIB_SRC):%.c=$(DEPDIR):%.o) $($(ASM_SRC):%.c=$(DEPDIR):%.o) $($(VM_SRC):%.c=$(DEPDIR):%.o) +DEPS:=$($(ASM_SRC):%.c=$(DEPDIR):%.o) + +## AVM +AVM_ROOT_DIR:=$(shell pwd)/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) # Things you want to build on `make` -all: $(DIST) lib vm asm examples +all: $(DIST) asm examples -lib: $(LIB_OBJECTS) -vm: $(VM_OUT) asm: $(ASM_OUT) examples: $(EXAMPLES) # Recipes -## LIB Recipes - -$(LIB_DIST)/%.o: $(LIB_SRC)/%.c | $(LIB_DIST) $(DEPDIR)/lib - @$(CC) $(LIB_CFLAGS) $(DEPFLAGS) $(DEPDIR)/lib/$*.d -c $< -o $@ $(LIBS) - @echo "$(TERM_YELLOW)$@$(TERM_RESET): $<" - -## VM Recipes -$(VM_OUT): $(LIB_OBJECTS) $(VM_OBJECTS) $(VM_DIST)/main.o - @$(CC) $(VM_CFLAGS) $^ -o $@ $(LIBS) - @echo "$(TERM_GREEN)$@$(TERM_RESET): $^" - -$(VM_DIST)/%.o: $(VM_SRC)/%.c | $(VM_DIST) $(DEPDIR)/vm - @$(CC) $(VM_CFLAGS) $(DEPFLAGS) $(DEPDIR)/vm/$*.d -c $< -o $@ $(LIBS) - @echo "$(TERM_YELLOW)$@$(TERM_RESET): $<" - ## ASSEMBLY Recipes -$(ASM_OUT): $(LIB_OBJECTS) $(ASM_OBJECTS) $(ASM_DIST)/main.o +$(ASM_OUT): $(AVM_OBJECTS) $(ASM_OBJECTS) $(ASM_DIST)/main.o @$(CPP) $(ASM_CFLAGS) $^ -o $@ $(LIBS) @echo "$(TERM_GREEN)$@$(TERM_RESET): $^" @@ -90,6 +63,13 @@ $(EXAMPLES_DIST)/%.out: $(EXAMPLES_SRC)/%.asm $(ASM_OUT) | $(EXAMPLES_DIST) run-examples: $(EXAMPLES) @$(foreach example,$(EXAMPLES), echo "$(TERM_YELLOW)$(example)$(TERM_RESET)"; $(MAKE) -s interpret BYTECODE=$(example);) +## libavm +$(AVM_OBJECTS): libavm; + +.PHONY: libavm +libavm: + @$(MAKE) -C $(AVM_ROOT_DIR) lib + OUT= ARGS= @@ -99,7 +79,8 @@ run: $(DIST)/$(OUT) .PHONY: clean clean: - rm -rfv $(DIST)/* + @rm -rfv $(DIST)/* + @$(MAKE) -C $(AVM_ROOT_DIR) clean SOURCE= BYTECODE= @@ -118,27 +99,15 @@ exec: $(ASM_OUT) $(VM_OUT) # Directories $(DIST): - mkdir -p $@ - -$(LIB_DIST): - mkdir -p $@ - -$(VM_DIST): - mkdir -p $@ + @mkdir -p $@ $(ASM_DIST): - mkdir -p $@ + @mkdir -p $@ $(EXAMPLES_DIST): - mkdir -p $@ - -$(DEPDIR)/lib: - mkdir -p $@ + @mkdir -p $@ $(DEPDIR)/asm: - mkdir -p $@ - -$(DEPDIR)/vm: - mkdir -p $@ + @mkdir -p $@ -include $(wildcard $(DEPS)) diff --git a/avm b/avm new file mode 160000 index 0000000..c833f49 --- /dev/null +++ b/avm @@ -0,0 +1 @@ +Subproject commit c833f4946b5344e6b95c4dc8d7e98b551dd4dc5a