about summary refs log tree commit diff stats
path: root/js/scripting-lang/baba-yaga-c/Makefile
blob: 3cffe4f9232b3058cb2a2d1c44e34b772959e056 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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