From 53388718ec9d35349f6c195ee0dd6700588cf376 Mon Sep 17 00:00:00 2001 From: Karma Riuk Date: Sat, 28 Jun 2025 11:04:17 +0200 Subject: [PATCH] Added makefile --- Makefile | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2fa5cf4 --- /dev/null +++ b/Makefile @@ -0,0 +1,69 @@ +# ──────────────────────────────────── +# Compiler and flags +CXX := g++ +CXXFLAGS := -Wall -WError -I./include + +# ──────────────────────────────────── +# Paths +SRC_DIR := src +TEST_SRC := test/test.cpp +REPL_SRC := $(SRC_DIR)/main.cpp + +OBJ_DIR := build/obj +BIN_DIR := build/bin + +# ──────────────────────────────────── +# Source listings +# All .cpp under src/, but exclude your REPL main +LIB_SRCS := $(filter-out $(REPL_SRC),$(shell find $(SRC_DIR) -name '*.cpp')) + +# Mirror src/.../*.cpp → build/obj/src/.../*.o +LIB_OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/$(SRC_DIR)/%.o,$(LIB_SRCS)) + +# Binaries +TEST_BIN := $(BIN_DIR)/tests +REPL_BIN := $(BIN_DIR)/repl + +# ──────────────────────────────────── +# Default target: build & run tests +all: test + +# ─ Link test runner (test.cpp defines main via DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN) +$(TEST_BIN): $(LIB_OBJS) | $(BIN_DIR) + @echo "⏳ Linking tests..." + $(CXX) $(CXXFLAGS) $(TEST_SRC) $(LIB_OBJS) -o $@ + +# ─ Link REPL +$(REPL_BIN): $(LIB_OBJS) | $(BIN_DIR) + @echo "🚀 Linking REPL..." + $(CXX) $(CXXFLAGS) $(REPL_SRC) $(LIB_OBJS) -o $@ + +# ─ Compile each library .cpp → mirrored .o +$(OBJ_DIR)/$(SRC_DIR)/%.o: $(SRC_DIR)/%.cpp + @echo "🛠 Compiling $<" + @mkdir -p $(dir $@) + $(CXX) $(CXXFLAGS) -c $< -o $@ + +# ──────────────────────────────────── +# Run or launch targets +.PHONY: test repl clean all + +test: $(TEST_BIN) + @echo "\n✅ Running tests..." + @$(TEST_BIN) + # @$(TEST_BIN) $(if $(TESTCASE),--test-case=$(TESTCASE)) + +repl: $(REPL_BIN) + @echo "\n🔧 Starting REPL..." + @$(REPL_BIN) + +# ──────────────────────────────────── +# Ensure bin/ exists before linking +$(BIN_DIR): + @mkdir -p $@ + +# ──────────────────────────────────── +# Clean up everything +clean: + @echo "🧹 Cleaning build artifacts" + @rm -rf $(OBJ_DIR) $(BIN_DIR)