diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 37 |
1 files changed, 20 insertions, 17 deletions
@@ -8,7 +8,7 @@ ifeq ($(PYTHON3),) endif # Base flags -CFLAGS_BASE = -std=c11 -Wall -Wextra -Wshadow -Wdouble-promotion -Wnull-dereference -Wimplicit-fallthrough -Wmisleading-indentation -pedantic -O2 -I. -Ilib -MMD -MP +CFLAGS_BASE = -std=c11 -Wall -Wextra -Wshadow -Wdouble-promotion -Wnull-dereference -Wimplicit-fallthrough -Wmisleading-indentation -Wstrict-aliasing=2 -pedantic -O2 -I. -Ilib -MMD -MP # Platform-specific UNAME_S := $(shell uname -s) @@ -18,13 +18,14 @@ else ifeq ($(UNAME_S),Darwin) CFLAGS_BASE += -D_DARWIN_C_SOURCE else # BSD and others - CFLAGS_BASE += -D_BSD_SOURCE + CFLAGS_BASE += -D_DEFAULT_SOURCE endif # Security hardening (optimized builds only) CFLAGS_HARDENING = -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Wformat-security -fno-common CFLAGS := $(CFLAGS_BASE) $(CFLAGS_HARDENING) +LDFLAGS ?= LDLIBS = -lm SRCDIR = lib @@ -72,7 +73,7 @@ else endif $(SHLIB): $(SHARED_OBJS) $(SHARED_TS_OBJ) $(FLAT_OBJ) $(REG_OBJ) | $(BUILDDIR) - $(CC) -shared $(SHLIB_SONAME) -Wl,-rpath,'$$ORIGIN' -o $@ $^ $(LDLIBS) + $(CC) $(LDFLAGS) -shared $(SHLIB_SONAME) -Wl,-rpath,'$$ORIGIN' -o $@ $^ $(LDLIBS) $(BUILDDIR): @mkdir -p $@ @@ -90,25 +91,25 @@ $(BUILDDIR)/ts.so.o: ts.c | $(BUILDDIR) $(CC) $(CFLAGS) -fPIC -c ts.c -o $@ ts_generated.h: $(SCRIPTDIR)/gen_all.py $(filter-out $(SRCDIR)/ts_flat_generated.c $(SRCDIR)/ts_registry_generated.c,$(wildcard $(SRCDIR)/*.c)) - python3 $< || (echo "ERROR: gen_all.py failed" && exit 1) + $(PYTHON3) $< || (echo "ERROR: gen_all.py failed" && exit 1) test/main_generated.c: ts_generated.h - @touch $@ + $(PYTHON3) $(SCRIPTDIR)/gen_all.py || (echo "ERROR: gen_all.py failed" && exit 1) $(SRCDIR)/ts_flat_generated.c: $(SCRIPTDIR)/gen_flat.py $(filter-out $(SRCDIR)/ts_flat_generated.c $(SRCDIR)/ts_registry_generated.c,$(wildcard $(SRCDIR)/*.c)) - python3 $< || (echo "ERROR: gen_flat.py failed" && exit 1) + $(PYTHON3) $< || (echo "ERROR: gen_flat.py failed" && exit 1) $(FLAT_OBJ): $(SRCDIR)/ts_flat_generated.c ts.h | $(BUILDDIR) $(CC) $(CFLAGS) -fPIC -c $< -o $@ $(SRCDIR)/ts_registry_generated.c: $(SCRIPTDIR)/gen_registry.py $(filter-out $(SRCDIR)/ts_registry_generated.c $(SRCDIR)/ts_flat_generated.c,$(wildcard $(SRCDIR)/*.c)) - python3 $< || (echo "ERROR: gen_registry.py failed" && exit 1) + $(PYTHON3) $< || (echo "ERROR: gen_registry.py failed" && exit 1) $(REG_OBJ): $(SRCDIR)/ts_registry_generated.c ts.h | $(BUILDDIR) $(CC) $(CFLAGS) -fPIC -c $< -o $@ $(TESTDIR)/fuzz_table_generated.c: $(SCRIPTDIR)/gen_fuzz.py $(filter-out $(SRCDIR)/ts_flat_generated.c $(SRCDIR)/ts_registry_generated.c,$(wildcard $(SRCDIR)/*.c)) - python3 $< || (echo "ERROR: gen_fuzz.py failed" && exit 1) + $(PYTHON3) $< || (echo "ERROR: gen_fuzz.py failed" && exit 1) $(BUILDDIR)/test/fuzz.o: $(TESTDIR)/fuzz.c $(TESTDIR)/fuzz_table_generated.c ts.h | $(TEST_BUILDDIR) $(CC) $(CFLAGS) -DTS_IMPLEMENTATION -c $< -o $@ @@ -117,34 +118,34 @@ $(TEST_BUILDDIR): @mkdir -p $@ $(BUILDDIR)/test/%.o: $(TESTDIR)/%.c ts.h | $(TEST_BUILDDIR) - $(CC) $(CFLAGS) -DTS_IMPLEMENTATION -c $< -o $@ + $(CC) $(CFLAGS) -DTS_IMPLEMENTATION -Wno-strict-aliasing -c $< -o $@ $(MAIN): $(OBJS) $(TS_OBJ) main.c | $(BUILDDIR) - $(CC) $(CFLAGS) main.c $(OBJS) $(TS_OBJ) -o $@ $(LDLIBS) + $(CC) $(CFLAGS) main.c $(OBJS) $(TS_OBJ) $(LDFLAGS) -o $@ $(LDLIBS) $(TEST_BIN): $(OBJS) $(TEST_OBJS) $(TS_OBJ) | $(BUILDDIR) - $(CC) $(CFLAGS) $(TEST_OBJS) $(OBJS) $(TS_OBJ) -o $@ $(LDLIBS) + $(CC) $(CFLAGS) $(TEST_OBJS) $(OBJS) $(TS_OBJ) $(LDFLAGS) -o $@ $(LDLIBS) test: $(TEST_BIN) ./$(TEST_BIN) $(BENCH_BIN): $(OBJS) $(TS_OBJ) test/bench.c | $(BUILDDIR) - $(CC) $(CFLAGS) test/bench.c $(OBJS) $(TS_OBJ) -o $@ $(LDLIBS) + $(CC) $(CFLAGS) test/bench.c $(OBJS) $(TS_OBJ) $(LDFLAGS) -o $@ $(LDLIBS) bench: $(BENCH_BIN) ./$(BENCH_BIN) python/ts/__init__.py: $(SCRIPTDIR)/gen_bindings.py $(SCRIPTDIR)/ts_parser.py $(filter-out $(SRCDIR)/ts_flat_generated.c $(SRCDIR)/ts_registry_generated.c,$(wildcard $(SRCDIR)/*.c)) - python3 $(SCRIPTDIR)/gen_bindings.py || (echo "ERROR: gen_bindings.py failed" && exit 1) + $(PYTHON3) $(SCRIPTDIR)/gen_bindings.py || (echo "ERROR: gen_bindings.py failed" && exit 1) gen-bindings: python/ts/__init__.py test-python: shared gen-bindings - LD_LIBRARY_PATH=$(BUILDDIR):$$LD_LIBRARY_PATH python3 $(TESTDIR)/test_python.py + LD_LIBRARY_PATH=$(BUILDDIR):$$LD_LIBRARY_PATH $(PYTHON3) $(TESTDIR)/test_python.py check: $(MAKE) clean - $(MAKE) test CFLAGS="$(CFLAGS_BASE) $(CFLAGS_HARDENING) -Werror" + $(MAKE) test CFLAGS="$(CFLAGS_BASE) $(CFLAGS_HARDENING) -Werror -Wno-error=strict-aliasing" test-one: $(OBJS) $(TS_OBJ) ifndef TEST @@ -153,8 +154,8 @@ endif @echo "$(TEST)" | grep -qE '^[a-z0-9_]+$$' || { echo "ERROR: TEST must match [a-z0-9_]+"; exit 1; } @mkdir -p $(BUILDDIR) @printf '#include <stdbool.h>\nextern bool ts_test_$(TEST)(void);\nint main(void){return ts_test_$(TEST)() ? 0 : 1;}\n' > $(BUILDDIR)/stub.c - $(CC) $(CFLAGS) -DTS_IMPLEMENTATION $(BUILDDIR)/stub.c $(TESTDIR)/$(TEST).c $(OBJS) $(TS_OBJ) -o $(BUILDDIR)/test_$(TEST) $(LDLIBS) - ./$(BUILDDIR)/test_$(TEST) + $(CC) $(CFLAGS) -DTS_IMPLEMENTATION $(BUILDDIR)/stub.c $(TESTDIR)/$(TEST).c $(OBJS) $(TS_OBJ) $(LDFLAGS) -o $(BUILDDIR)/test_$(TEST) $(LDLIBS) + @RET=0; ./$(BUILDDIR)/test_$(TEST) || RET=$$?; rm -f $(BUILDDIR)/stub.c $(BUILDDIR)/test_$(TEST); exit $$RET valgrind: $(TEST_BIN) valgrind --leak-check=full --error-exitcode=1 ./$(TEST_BIN) @@ -196,7 +197,9 @@ clean: distclean: clean rm -f $(SRCDIR)/ts_flat_generated.c + rm -f $(SRCDIR)/ts_registry_generated.c rm -f $(TESTDIR)/fuzz_table_generated.c + rm -f $(TESTDIR)/main_generated.c rm -f ts_generated.h rm -f python/ts/__init__.py |