1
1
# compiler flags
2
- CFLAGS := -std=gnu11 -Wall -Wextra -Wshadow -g $(DEFS ) $(CFLAGS )
2
+ CFLAGS := -std=gnu2x -Wall -Wextra -Wshadow -g $(DEFS ) $(CFLAGS )
3
3
CXXFLAGS := -std=gnu++2a -Wall -Wextra -Wshadow -g $(DEFS ) $(CXXFLAGS )
4
4
5
5
O ?= -O3
@@ -19,6 +19,14 @@ ifeq ($(PIE),0)
19
19
LDFLAGS += -no-pie
20
20
endif
21
21
22
+ # skip x86 versions in ARM Docker
23
+ X86 ?= 1
24
+ ifneq ($(X86 ) ,1)
25
+ ifneq ($(findstring /usr/x86_64-linux-gnu/bin :,$(PATH ) ),)
26
+ PATH := $(subst /usr/x86_64-linux-gnu/bin:,,$(PATH ) )
27
+ endif
28
+ endif
29
+
22
30
# compiler variant
23
31
ifeq ($(COMPILER ) ,clang)
24
32
ifeq ($(origin CC),default)
@@ -69,12 +77,10 @@ endif
69
77
70
78
# sanitizer arguments
71
79
ifndef SAN
72
- SAN := $(SANITIZE )
80
+ SAN := $(or $( SANITIZE ) , $( ASAN ) , $( UBSAN ) )
73
81
endif
74
- ifeq ($(SAN ) ,1)
75
- ifndef ASAN
76
- ASAN := $(if $(strip $(shell $(CC ) -v 2>&1 | grep 'build=aarch.* target=x86') ) ,,1)
77
- endif
82
+ ifndef ASAN
83
+ ASAN := $(if $(strip $(shell $(CC ) -v 2>&1 | grep 'build=aarch.* target=x86') ) ,0,1)
78
84
endif
79
85
ifndef TSAN
80
86
ifeq ($(WANT_TSAN),1)
@@ -83,38 +89,46 @@ TSAN := $(SAN)
83
89
endif
84
90
85
91
check_for_sanitizer = $(if $(strip $(shell $(CC ) -fsanitize=$(1 ) -x c -E /dev/null 2>&1 | grep sanitize=) ) ,$(info ** WARNING: The `$(CC ) ` compiler does not support `-fsanitize=$(1 ) `.) ,1)
92
+ SANFLAGS :=
86
93
ifeq ($(TSAN ) ,1)
87
94
ifeq ($(call check_for_sanitizer,thread),1)
88
- CFLAGS += -fsanitize=thread
89
- CXXFLAGS += -fsanitize=thread
95
+ SANFLAGS += -fsanitize=thread
90
96
endif
91
97
else
92
- ifeq ($(or $( ASAN),$(LSAN),$(LEAKSAN)),1 )
98
+ ifneq ($(ASAN),0 )
93
99
ifeq ($(call check_for_sanitizer,address),1)
94
- CFLAGS += -fsanitize=address
95
- CXXFLAGS += -fsanitize=address
100
+ SANFLAGS += -fsanitize=address
96
101
endif
97
102
endif
98
103
ifeq ($(or $(LSAN),$(LEAKSAN)),1)
99
104
ifeq ($(call check_for_sanitizer,leak),1)
100
- CFLAGS += -fsanitize=leak
101
- CXXFLAGS += -fsanitize=leak
105
+ SANFLAGS += -fsanitize=leak
102
106
endif
103
107
endif
104
108
endif
105
- ifeq ($(or $( UBSAN ) ,$( SAN ) ) ,1 )
109
+ ifneq ($(UBSAN ) ,0 )
106
110
ifeq ($(call check_for_sanitizer,undefined),1)
107
- CFLAGS += -fsanitize=undefined -fno-sanitize-recover=undefined
108
- CXXFLAGS += -fsanitize=undefined -fno-sanitize-recover=undefined
111
+ SANFLAGS += -fsanitize=undefined -fno-sanitize-recover=undefined
109
112
endif
110
113
endif
114
+ ifeq ($(or $(TSAN ) ,$(LSAN ) ,$(LEAKSAN ) ,$(SAN ) ) ,1)
115
+ CFLAGS += $(SANFLAGS )
116
+ CXXFLAGS += $(SANFLAGS )
117
+ endif
111
118
112
119
# profiling
113
120
ifeq ($(or $(PROFILE ) ,$(PG ) ) ,1)
114
121
CFLAGS += -pg
115
122
CXXFLAGS += -pg
116
123
endif
117
124
125
+ # NDEBUG
126
+ ifeq ($(NDEBUG ) ,1)
127
+ CPPFLAGS += -DNDEBUG=1
128
+ CFLAGS += -Wno-unused
129
+ CXXFLAGS += -Wno-unused
130
+ endif
131
+
118
132
# these rules ensure dependencies are created
119
133
DEPCFLAGS = -MD -MF $(DEPSDIR ) /$(patsubst % .o,% ,$(@F ) ) .d -MP
120
134
DEPSDIR := .deps
@@ -125,11 +139,11 @@ include $(DEPFILES)
125
139
endif
126
140
127
141
# when the C compiler or optimization flags change, rebuild all objects
128
- ifneq ($(strip $(DEP_CC ) ) ,$(strip $(CC ) $(CPPFLAGS ) $(CFLAGS ) $(O ) ) )
129
- DEP_CC := $(shell mkdir -p $(DEPSDIR ) ; echo >$(BUILDSTAMP ) ; echo "DEP_CC:=$(CC ) $(CPPFLAGS ) $(CFLAGS ) $(O ) " >$(DEPSDIR ) /_cc.d)
142
+ ifneq ($(strip $(DEP_CC ) ) ,$(strip $(CC ) $(CPPFLAGS ) $(CFLAGS ) $(O ) X86= $( X86 ) ) )
143
+ DEP_CC := $(shell mkdir -p $(DEPSDIR ) ; echo >$(BUILDSTAMP ) ; echo "DEP_CC:=$(CC ) $(CPPFLAGS ) $(CFLAGS ) $(O ) X86= $( X86 ) " >$(DEPSDIR ) /_cc.d)
130
144
endif
131
- ifneq ($(strip $(DEP_CXX ) ) ,$(strip $(CXX ) $(CPPFLAGS ) $(CXXFLAGS ) $(O ) $(LDFLAGS ) ) )
132
- DEP_CXX := $(shell mkdir -p $(DEPSDIR ) ; echo >$(BUILDSTAMP ) ; echo "DEP_CXX:=$(CXX ) $(CPPFLAGS ) $(CXXFLAGS ) $(O ) $(LDFLAGS ) " >$(DEPSDIR ) /_cxx.d)
145
+ ifneq ($(strip $(DEP_CXX ) ) ,$(strip $(CXX ) $(CPPFLAGS ) $(CXXFLAGS ) $(O ) X86= $( X86 ) $(LDFLAGS ) ) )
146
+ DEP_CXX := $(shell mkdir -p $(DEPSDIR ) ; echo >$(BUILDSTAMP ) ; echo "DEP_CXX:=$(CXX ) $(CPPFLAGS ) $(CXXFLAGS ) $(O ) X86= $( X86 ) $(LDFLAGS ) " >$(DEPSDIR ) /_cxx.d)
133
147
endif
134
148
135
149
0 commit comments