diff options
Diffstat (limited to 'js/scripting-lang/baba-yaga-c/Makefile')
-rw-r--r-- | js/scripting-lang/baba-yaga-c/Makefile | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/js/scripting-lang/baba-yaga-c/Makefile b/js/scripting-lang/baba-yaga-c/Makefile new file mode 100644 index 0000000..3cffe4f --- /dev/null +++ b/js/scripting-lang/baba-yaga-c/Makefile @@ -0,0 +1,78 @@ +CC = gcc +CFLAGS = -Wall -Wextra -Werror -std=gnu99 -g -O2 +LDFLAGS = -lm + +# Debug flags +DEBUG_CFLAGS = -Wall -Wextra -Werror -std=gnu99 -g -O0 -DDEBUG +RELEASE_CFLAGS = -Wall -Wextra -Werror -std=gnu99 -g -O2 + +# Static analysis tools +CLANG_TIDY = clang-tidy +CPPCHECK = cppcheck + +# Memory checking +VALGRIND = valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes + +# Directories +SRCDIR = src +INCDIR = include +OBJDIR = obj +BINDIR = bin +TESTDIR = tests + +# Files +SOURCES = $(wildcard $(SRCDIR)/*.c) +OBJECTS = $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) +TARGET = $(BINDIR)/baba-yaga + +.PHONY: all clean test check style memcheck coverage docs debug release + +all: $(TARGET) + +$(TARGET): $(OBJECTS) | $(BINDIR) + $(CC) $(OBJECTS) -o $@ $(LDFLAGS) + +$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR) + $(CC) $(CFLAGS) -I$(INCDIR) -c $< -o $@ + +$(BINDIR) $(OBJDIR): + mkdir -p $@ + +clean: + rm -rf $(OBJDIR) $(BINDIR) + +# Debug and release builds +debug: CFLAGS = $(DEBUG_CFLAGS) +debug: clean $(TARGET) + +release: CFLAGS = $(RELEASE_CFLAGS) +release: clean $(TARGET) + +# Quality checks +check: style memcheck + +style: + $(CLANG_TIDY) $(SOURCES) -- -I$(INCDIR) + $(CPPCHECK) --enable=all --std=c99 $(SRCDIR) + +memcheck: $(TARGET) + $(VALGRIND) $(TARGET) --test $(TESTDIR) + +test: $(TARGET) + @echo "Running tests..." + @for test_file in $(TESTDIR)/*.txt; do \ + if [ -f "$$test_file" ]; then \ + echo "Testing $$(basename $$test_file)"; \ + $(TARGET) -t "$$test_file" || exit 1; \ + fi; \ + done + @echo "All tests passed!" + +coverage: CFLAGS += -fprofile-arcs -ftest-coverage +coverage: LDFLAGS += -lgcov +coverage: clean $(TARGET) + $(TARGET) --test $(TESTDIR) + gcov $(SOURCES) + +docs: + doxygen Doxyfile \ No newline at end of file |