summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-01-22 11:55:43 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-01-22 11:55:43 +0100
commita4b604c0f7ea0927d40274e6ae15fa710b68aa3e (patch)
tree13aaa171435e8f3629edd4ca9e011d72e1bddf89 /Makefile
parenta218a52d3627974aa106463670f2ce4bed7555fd (diff)
downloadcrep-a4b604c0f7ea0927d40274e6ae15fa710b68aa3e.tar.gz
Optimize make build system
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile58
1 files changed, 23 insertions, 35 deletions
diff --git a/Makefile b/Makefile
index cce2c26..c32deef 100644
--- a/Makefile
+++ b/Makefile
@@ -7,39 +7,34 @@ VENDOR_DIRS = $(wildcard vendor/*)
CFLAGS = $(EXTRA_FLAGS) -Wall -Wextra -std=gnu99 -pedantic -O3
LIBS = -I./vendor/tree-sitter/lib/include -lpthread
+LANGS = c cpp python php go rust javascript lua zig
+QUERY_HEADERS = $(patsubst %, queries/%.h, $(LANGS))
+TS_SUBDIRS = tree-sitter $(patsubst %, tree-sitter-%, $(LANGS))
+
$(info VENDOR_DIRS: $(VENDOR_DIRS))
+$(info LANGS: $(LANGS))
+$(info QUERY_HEADERS: $(QUERY_HEADERS))
+$(info TS_SUBDIRS: $(TS_SUBDIRS))
$(info SOURCES: $(SOURCES))
$(info TS_ALIBS: $(TS_ALIBS))
$(info CFLAGS: $(CFLAGS))
$(info LIBS: $(LIBS))
-$(TARGET):
- $(CC) $(CFLAGS) $(SOURCES) $(LIBS) -o $(TARGET) $(TS_ALIBS)
+all: $(QUERY_HEADERS) tsbuild $(TARGET)
+
+tsbuild:
+ $(MAKE) -C vendor/tree-sitter libtree-sitter.a
+ @for lang in $(LANGS); do \
+ $(MAKE) -C vendor/tree-sitter-$$lang libtree-sitter-$$lang.a || true; \
+ done
-all: queries tsbuild $(TARGET)
+$(TARGET): $(SOURCES) tsbuild
+ $(CC) $(CFLAGS) $(SOURCES) $(LIBS) -o $(TARGET) $(shell find vendor -name "*.a")
-queries:
- xxd -i -n query_c queries/c.scm > queries/c.h
- xxd -i -n query_cpp queries/cpp.scm > queries/cpp.h
- xxd -i -n query_python queries/python.scm > queries/python.h
- xxd -i -n query_php queries/php.scm > queries/php.h
- xxd -i -n query_go queries/go.scm > queries/go.h
- xxd -i -n query_rust queries/rust.scm > queries/rust.h
- xxd -i -n query_javascript queries/javascript.scm > queries/javascript.h
- xxd -i -n query_lua queries/lua.scm > queries/lua.h
- xxd -i -n query_zig queries/zig.scm > queries/zig.h
+queries/%.h: queries/%.scm
+ xxd -i -n query_$* $< > $@
-tsbuild:
- -$(MAKE) -C vendor/tree-sitter -B
- -$(MAKE) -C vendor/tree-sitter-c -B
- -$(MAKE) -C vendor/tree-sitter-cpp -B
- -$(MAKE) -C vendor/tree-sitter-python -B
- -$(MAKE) -C vendor/tree-sitter-php -B
- -$(MAKE) -C vendor/tree-sitter-go -B
- -$(MAKE) -C vendor/tree-sitter-rust -B
- -$(MAKE) -C vendor/tree-sitter-javascript -B
- -$(MAKE) -C vendor/tree-sitter-lua -B
- -$(MAKE) -C vendor/tree-sitter-zig -B
+queries: $(QUERY_HEADERS)
valgrind:
valgrind -s --leak-check=full ./$(TARGET)
@@ -51,14 +46,7 @@ format:
clang-format -i *.c *.h
clean:
- rm -f *.o $(TARGET) callgrind.out.*
- $(MAKE) -C vendor/tree-sitter -B clean
- $(MAKE) -C vendor/tree-sitter-c -B clean
- $(MAKE) -C vendor/tree-sitter-cpp -B clean
- $(MAKE) -C vendor/tree-sitter-python -B clean
- $(MAKE) -C vendor/tree-sitter-php -B clean
- $(MAKE) -C vendor/tree-sitter-go -B clean
- $(MAKE) -C vendor/tree-sitter-rust -B clean
- $(MAKE) -C vendor/tree-sitter-javascript -B clean
- $(MAKE) -C vendor/tree-sitter-lua -B clean
- $(MAKE) -C vendor/tree-sitter-zig -B clean
+ rm -f *.o $(TARGET) callgrind.out.* queries/*.h
+ @for dir in $(TS_SUBDIRS); do \
+ $(MAKE) -C vendor/$$dir clean; \
+ done