about summary refs log tree commit diff stats
path: root/js/scripting-lang/c/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'js/scripting-lang/c/Makefile')
-rw-r--r--js/scripting-lang/c/Makefile81
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