|
| 1 | +# ====================================== |
| 2 | +# common.mk - shared compiler flags |
| 3 | +# ====================================== |
| 4 | + |
1 | 5 | CXX := g++ |
2 | | -CXXFLAGS := -std=c++20 -O2 -Wall -Wextra |
| 6 | +OPTFLAGS ?= -O1 -g # Safe for ASAN/TSAN (default) |
| 7 | + |
| 8 | +# -------------------------- |
| 9 | +# Sanitizer selection |
| 10 | +# -------------------------- |
| 11 | +# Default: AddressSanitizer |
| 12 | +SANITIZE ?= address |
| 13 | + |
| 14 | +ifeq ($(SANITIZE),address) |
| 15 | + SAN_FLAGS := -fsanitize=address |
| 16 | +else ifeq ($(SANITIZE),thread) |
| 17 | + SAN_FLAGS := -fsanitize=thread |
| 18 | +else ifeq ($(SANITIZE),undefined) |
| 19 | + SAN_FLAGS := -fsanitize=undefined |
| 20 | +else ifeq ($(SANITIZE),) |
| 21 | + SAN_FLAGS := |
| 22 | +else |
| 23 | + $(error Unknown SANITIZE=$(SANITIZE)) |
| 24 | +endif |
| 25 | + |
| 26 | +# -------------------------- |
| 27 | +# Compiler / Linker flags |
| 28 | +# -------------------------- |
| 29 | +CXXFLAGS := -std=c++20 -Wall -Wextra $(OPTFLAGS) $(SAN_FLAGS) |
| 30 | +LDFLAGS := $(SAN_FLAGS) |
| 31 | + |
| 32 | +# -------------------------- |
| 33 | +# Usage notes |
| 34 | +# -------------------------- |
| 35 | +# Local build (default): ASAN enabled |
| 36 | +# $ make |
| 37 | +# |
| 38 | +# Override for ThreadSanitizer: |
| 39 | +# $ make SANITIZE=thread |
| 40 | +# |
| 41 | +# Override for UBSAN: |
| 42 | +# $ make SANITIZE=undefined |
| 43 | +# |
| 44 | +# Disable sanitizers (rare): |
| 45 | +# $ make SANITIZE= |
| 46 | +# |
| 47 | +# LDFLAGS are automatically applied in example Makefiles: |
| 48 | +# $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS) |
0 commit comments