summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormrfoxygmfr <mrfoxygmfr@sch9.ru>2025-05-22 20:14:21 +0300
committermrfoxygmfr <mrfoxygmfr@sch9.ru>2025-05-22 20:14:21 +0300
commit067de7c721ad27d36500668dfb374fead08bc0d2 (patch)
treea4d7c23ab7982dc5a7ea897ee48a4db109787b50
parentac6f8f6de98ab5fe672a47a37441b729150fe629 (diff)
build: rebuild after any of param variables change
-rw-r--r--Makefile32
1 files changed, 25 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index 26c8a00..a2f7c83 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,9 @@
ifeq ($(LLVM),1)
+ LLVM = 1
CC = clang
LD = ld.lld
else
+ LLVM = 0
CC = gcc
LD = ld
endif
@@ -16,15 +18,18 @@ CFLAGS = \
LDFLAGS = -pthread -lrt
ifeq ($(DEBUG),1)
+ DEBUG = 1
CFLAGS += -g -fsanitize=address,leak,undefined
else
+ DEBUG = 0
CFLAGS += -flto
LDFLAGS += -flto
endif
ifeq ($(SECURITY),1)
+ SECURITY = 1
CFLAGS += \
- -fwrapv -fwrapv-pointer \
+ -fwrapv \
-fno-strict-aliasing \
-fno-delete-null-pointer-checks \
-D_FORTIFY_SOURCE=2 \
@@ -41,14 +46,21 @@ ifeq ($(SECURITY),1)
-fno-builtin-scwcpy -fno-builtin-wcsncat \
-fno-builtin-wcsncpy -fno-builtin-wmemcpy \
-fno-builtin-wmemmove -fno-builtin-wmemset \
- -Wclobbered \
-Warray-bounds \
-Wdiv-by-zero \
-Wshift-count-negative -Wshift-count-overflow \
-fstack-protector
+ ifeq ($(LLVM),0)
+ CFLAGS += -fwrapv-pointer \
+ -Wclobbered
+ endif
+else
+ SECURITY = 0
endif
-.PHONY: all clean controller worker test analyze
+ARGS = $(LLVM) $(DEBUG) $(SECURITY)
+
+.PHONY: all clean controller worker test analyze phony
all: build/controller build/worker
@@ -59,15 +71,21 @@ controller: build/controller
worker: build/worker
-build/%.o: %.c
+build/%.o: %.c build/ARGS
@mkdir -p $(@D)
- @$(CC) $(CFLAGS) -c $^ -o $@
+ @$(CC) $(CFLAGS) -c $(patsubst build/ARGS,,$^) -o $@
-build/%: %.c build/lib.o
+build/%: %.c build/lib.o build/ARGS
@mkdir -p $(@D)
- @$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
+ @$(CC) $(CFLAGS) $(LDFLAGS) $(patsubst build/ARGS,,$^) -o $@
build/lib.o: $(patsubst %.c,build/%.o,$(shell find lib -type f -name '*.c' -print))
@mkdir -p $(@D)
@$(LD) -r $^ -o $@
+build/ARGS: phony
+ @mkdir -p $(@D)
+ @if [[ `cat build/ARGS 2>&1` != '$(ARGS)' ]]; then \
+ echo -n $(ARGS) >build/ARGS; \
+ echo hi; \
+ fi