Optimize make build system

Author Mitja Felicijan <mitja.felicijan@gmail.com> 2026-01-22 11:55:43 +0100
Committer Mitja Felicijan <mitja.felicijan@gmail.com> 2026-01-22 11:55:43 +0100
Commit a4b604c0f7ea0927d40274e6ae15fa710b68aa3e (patch)
-rw-r--r-- Makefile 58
1 files changed, 23 insertions, 35 deletions
diff --git a/Makefile b/Makefile
...
7
CFLAGS = $(EXTRA_FLAGS) -Wall -Wextra -std=gnu99 -pedantic -O3
7
CFLAGS = $(EXTRA_FLAGS) -Wall -Wextra -std=gnu99 -pedantic -O3
8
LIBS = -I./vendor/tree-sitter/lib/include -lpthread
8
LIBS = -I./vendor/tree-sitter/lib/include -lpthread
9
  
9
  
  
10
LANGS = c cpp python php go rust javascript lua zig
  
11
QUERY_HEADERS = $(patsubst %, queries/%.h, $(LANGS))
  
12
TS_SUBDIRS = tree-sitter $(patsubst %, tree-sitter-%, $(LANGS))
  
13
  
10
$(info VENDOR_DIRS: $(VENDOR_DIRS))
14
$(info VENDOR_DIRS: $(VENDOR_DIRS))
  
15
$(info LANGS: $(LANGS))
  
16
$(info QUERY_HEADERS: $(QUERY_HEADERS))
  
17
$(info TS_SUBDIRS: $(TS_SUBDIRS))
11
$(info SOURCES: $(SOURCES))
18
$(info SOURCES: $(SOURCES))
12
$(info TS_ALIBS: $(TS_ALIBS))
19
$(info TS_ALIBS: $(TS_ALIBS))
13
$(info CFLAGS: $(CFLAGS))
20
$(info CFLAGS: $(CFLAGS))
14
$(info LIBS: $(LIBS))
21
$(info LIBS: $(LIBS))
15
  
22
  
16
$(TARGET):
23
all: $(QUERY_HEADERS) tsbuild $(TARGET)
17
	$(CC) $(CFLAGS) $(SOURCES) $(LIBS) -o $(TARGET) $(TS_ALIBS)
  
18
  
24
  
19
all: queries tsbuild $(TARGET)
25
tsbuild:
  
26
	$(MAKE) -C vendor/tree-sitter libtree-sitter.a
  
27
	@for lang in $(LANGS); do \
  
28
		$(MAKE) -C vendor/tree-sitter-$$lang libtree-sitter-$$lang.a || true; \
  
29
	done
20
  
30
  
21
queries:
31
$(TARGET): $(SOURCES) tsbuild
22
	xxd -i -n query_c queries/c.scm > queries/c.h
32
	$(CC) $(CFLAGS) $(SOURCES) $(LIBS) -o $(TARGET) $(shell find vendor -name "*.a")
23
	xxd -i -n query_cpp queries/cpp.scm > queries/cpp.h
  
24
	xxd -i -n query_python queries/python.scm > queries/python.h
  
25
	xxd -i -n query_php queries/php.scm > queries/php.h
  
26
	xxd -i -n query_go queries/go.scm > queries/go.h
  
27
	xxd -i -n query_rust queries/rust.scm > queries/rust.h
  
28
	xxd -i -n query_javascript queries/javascript.scm > queries/javascript.h
  
29
	xxd -i -n query_lua queries/lua.scm > queries/lua.h
  
30
	xxd -i -n query_zig queries/zig.scm > queries/zig.h
  
31
  
33
  
32
tsbuild:
34
queries/%.h: queries/%.scm
33
	-$(MAKE) -C vendor/tree-sitter -B
35
	xxd -i -n query_$* $< > $@
34
	-$(MAKE) -C vendor/tree-sitter-c -B
36
  
35
	-$(MAKE) -C vendor/tree-sitter-cpp -B
37
queries: $(QUERY_HEADERS)
36
	-$(MAKE) -C vendor/tree-sitter-python -B
  
37
	-$(MAKE) -C vendor/tree-sitter-php -B
  
38
	-$(MAKE) -C vendor/tree-sitter-go -B
  
39
	-$(MAKE) -C vendor/tree-sitter-rust -B
  
40
	-$(MAKE) -C vendor/tree-sitter-javascript -B
  
41
	-$(MAKE) -C vendor/tree-sitter-lua -B
  
42
	-$(MAKE) -C vendor/tree-sitter-zig -B
  
43
  
38
  
44
valgrind:
39
valgrind:
45
	valgrind -s --leak-check=full ./$(TARGET)
40
	valgrind -s --leak-check=full ./$(TARGET)
...
51
	clang-format -i *.c *.h
46
	clang-format -i *.c *.h
52
  
47
  
53
clean:
48
clean:
54
	rm -f *.o $(TARGET) callgrind.out.*
49
	rm -f *.o $(TARGET) callgrind.out.* queries/*.h
55
	$(MAKE) -C vendor/tree-sitter -B clean
50
	@for dir in $(TS_SUBDIRS); do \
56
	$(MAKE) -C vendor/tree-sitter-c -B clean
51
		$(MAKE) -C vendor/$$dir clean; \
57
	$(MAKE) -C vendor/tree-sitter-cpp -B clean
52
	done
58
	$(MAKE) -C vendor/tree-sitter-python -B clean
  
59
	$(MAKE) -C vendor/tree-sitter-php -B clean
  
60
	$(MAKE) -C vendor/tree-sitter-go -B clean
  
61
	$(MAKE) -C vendor/tree-sitter-rust -B clean
  
62
	$(MAKE) -C vendor/tree-sitter-javascript -B clean
  
63
	$(MAKE) -C vendor/tree-sitter-lua -B clean
  
64
	$(MAKE) -C vendor/tree-sitter-zig -B clean