diff options
Diffstat (limited to 'js/scripting-lang/c/Makefile')
-rw-r--r-- | js/scripting-lang/c/Makefile | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/js/scripting-lang/c/Makefile b/js/scripting-lang/c/Makefile new file mode 100644 index 0000000..5f0187d --- /dev/null +++ b/js/scripting-lang/c/Makefile @@ -0,0 +1,81 @@ +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 + +# Sanitizer flags for memory error detection (valgrind replacement) +SANITIZER_CFLAGS = -Wall -Wextra -Werror -std=gnu99 -g -O1 -fsanitize=address -fno-omit-frame-pointer +SANITIZER_LDFLAGS = -lm -fsanitize=address + +# Static analysis tools +CLANG_TIDY = clang-tidy +CPPCHECK = cppcheck + +# Memory checking +SANITIZE = ASAN_OPTIONS=abort_on_error=1 + +# 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 sanitize + +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) + +# Sanitizer build for memory checking (valgrind replacement) +sanitize: CFLAGS = $(SANITIZER_CFLAGS) +sanitize: LDFLAGS = $(SANITIZER_LDFLAGS) +sanitize: clean $(TARGET) + +# Quality checks +check: style memcheck + +style: + $(CLANG_TIDY) $(SOURCES) -- -I$(INCDIR) + $(CPPCHECK) --enable=all --std=c99 $(SRCDIR) + +memcheck: sanitize + $(SANITIZE) $(TARGET) -t $(TESTDIR) + +test: $(TARGET) + @echo "Running Baba Yaga test suite..." + $(TARGET) -t $(TESTDIR) + +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 |