1FLAGS += -DSCIP_ROUNDING_FE 2OFLAGS += -O0 -g 3CFLAGS += $(GCCWARN) -funit-at-a-time 4CXXFLAGS += $(GXXWARN) -funit-at-a-time 5 6 7# enable sanitizers if GCC >= 5.0 8# the default is to only enable the UndefinedBehaviorSanitizer (SANITIZE=true) 9# if user specifies SANITIZE=full, then also other sanitizers are enabled 10GCCVERSION := $(shell $(CC) -dumpversion | cut -f1 -d.) 11SANITIZE = $(word $(shell expr \( $(GCCVERSION) \>= 5 \) + 1), false, true) 12 13ifeq ($(SANITIZE),full) 14 15# -fsanitize=address does not work together with -fsanitize=thread 16# -fsanitize=leak is included in -fsanitize=address, but works together with -fsanitize=thread 17 18ifeq ($(PARASCIP),true) 19# enable ThreadSanitizer (https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual) 20SANITIZERFLAGS = -fsanitize=thread 21 22# enable LeakSanitizer (https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer) 23SANITIZERFLAGS += -fsanitize=leak 24 25else 26# enable AddressSanitizer (https://github.com/google/sanitizers/wiki/AddressSanitizer) 27SANITIZERFLAGS = -fsanitize=address 28 29endif 30 31# enable UndefinedBehaviorSanitizer 32SANITIZERFLAGS += -fsanitize=undefined -fsanitize=float-cast-overflow -fsanitize=float-divide-by-zero 33 34endif 35 36ifeq ($(SANITIZE),true) 37 38# enable UndefinedBehaviorSanitizer 39SANITIZERFLAGS = -fsanitize=undefined -fsanitize=float-cast-overflow -fsanitize=float-divide-by-zero 40 41# do not enable LeakSanitizer (https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer) 42# this does not seem to work well together with Criterion 43# also it may prevents usage of valgrind while also not replacing it 44#SANITIZERFLAGS += -fsanitize=leak 45 46endif 47 48CFLAGS += $(SANITIZERFLAGS) 49CXXFLAGS += $(SANITIZERFLAGS) 50LDFLAGS += $(SANITIZERFLAGS) 51ifeq ($(SHARED),true) 52 LIBBUILDFLAGS += $(SANITIZERFLAGS) 53endif 54 55# deprecated 56SANITZERFLAGS = $(SANITIZERFLAGS) 57