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