Makefile: Allow define overrides by prepending, not appending, CFLAGS
If we append CFLAGS to the ones passed via command line (if any), -D options we append will override -D options passed on command line (if any). For example, OpenSUSE build flags include -D_FORTIFY_SOURCE=3, and we want to have -D_FORTIFY_SOURCE=2, if and only if not overridden. The current behaviour implies we redefine _FORTIFY_SOURCE as 2, though. Instead of appending CFLAGS, prepend them by adding all the default build flags to another variable, a simply expanded one (defined with :=), named FLAGS, and pass that *before* CFLAGS in targets, so that defines from command line can override default flags. Reported-by: Dario Faggioli <dfaggioli@suse.com> Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Tested-by: Dario Faggioli <dfaggioli@suse.com>
This commit is contained in:
parent
b323e5f439
commit
512f5b1aab
1 changed files with 25 additions and 24 deletions
49
Makefile
49
Makefile
|
@ -23,13 +23,13 @@ AUDIT_ARCH := $(shell echo $(AUDIT_ARCH) | sed 's/I[456]86/I386/')
|
||||||
AUDIT_ARCH := $(shell echo $(AUDIT_ARCH) | sed 's/PPC64/PPC/')
|
AUDIT_ARCH := $(shell echo $(AUDIT_ARCH) | sed 's/PPC64/PPC/')
|
||||||
AUDIT_ARCH := $(shell echo $(AUDIT_ARCH) | sed 's/PPCLE/PPC64LE/')
|
AUDIT_ARCH := $(shell echo $(AUDIT_ARCH) | sed 's/PPCLE/PPC64LE/')
|
||||||
|
|
||||||
CFLAGS += -Wall -Wextra -pedantic -std=c99 -D_XOPEN_SOURCE=700 -D_GNU_SOURCE
|
FLAGS := -Wall -Wextra -pedantic -std=c99 -D_XOPEN_SOURCE=700 -D_GNU_SOURCE
|
||||||
CFLAGS += -D_FORTIFY_SOURCE=2 -O2 -pie -fPIE
|
FLAGS += -D_FORTIFY_SOURCE=2 -O2 -pie -fPIE
|
||||||
CFLAGS += -DPAGE_SIZE=$(shell getconf PAGE_SIZE)
|
FLAGS += -DPAGE_SIZE=$(shell getconf PAGE_SIZE)
|
||||||
CFLAGS += -DNETNS_RUN_DIR=\"/run/netns\"
|
FLAGS += -DNETNS_RUN_DIR=\"/run/netns\"
|
||||||
CFLAGS += -DPASST_AUDIT_ARCH=AUDIT_ARCH_$(AUDIT_ARCH)
|
FLAGS += -DPASST_AUDIT_ARCH=AUDIT_ARCH_$(AUDIT_ARCH)
|
||||||
CFLAGS += -DRLIMIT_STACK_VAL=$(RLIMIT_STACK_VAL)
|
FLAGS += -DRLIMIT_STACK_VAL=$(RLIMIT_STACK_VAL)
|
||||||
CFLAGS += -DARCH=\"$(TARGET_ARCH)\"
|
FLAGS += -DARCH=\"$(TARGET_ARCH)\"
|
||||||
|
|
||||||
PASST_SRCS = arch.c arp.c checksum.c conf.c dhcp.c dhcpv6.c icmp.c igmp.c \
|
PASST_SRCS = arch.c arp.c checksum.c conf.c dhcp.c dhcpv6.c icmp.c igmp.c \
|
||||||
isolation.c lineread.c mld.c ndp.c netlink.c packet.c passt.c pasta.c \
|
isolation.c lineread.c mld.c ndp.c netlink.c packet.c passt.c pasta.c \
|
||||||
|
@ -50,36 +50,36 @@ HEADERS = $(PASST_HEADERS)
|
||||||
# from the pointer arithmetic used from the tcp_tap_handler() path to get the
|
# from the pointer arithmetic used from the tcp_tap_handler() path to get the
|
||||||
# remote connection address.
|
# remote connection address.
|
||||||
ifeq ($(shell $(CC) -dumpversion),11)
|
ifeq ($(shell $(CC) -dumpversion),11)
|
||||||
ifneq (,$(filter -flto%,$(CFLAGS)))
|
ifneq (,$(filter -flto%,$(FLAGS) $(CFLAGS)))
|
||||||
ifneq (,$(filter -O2,$(CFLAGS)))
|
ifneq (,$(filter -O2,$(FLAGS) $(CFLAGS)))
|
||||||
CFLAGS += -DTCP_HASH_NOINLINE
|
FLAGS += -DTCP_HASH_NOINLINE
|
||||||
CFLAGS += -DSIPHASH_20B_NOINLINE
|
FLAGS += -DSIPHASH_20B_NOINLINE
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
C := \#include <linux/tcp.h>\nstruct tcp_info x = { .tcpi_snd_wnd = 0 };
|
C := \#include <linux/tcp.h>\nstruct tcp_info x = { .tcpi_snd_wnd = 0 };
|
||||||
ifeq ($(shell printf "$(C)" | $(CC) -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
ifeq ($(shell printf "$(C)" | $(CC) -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
||||||
CFLAGS += -DHAS_SND_WND
|
FLAGS += -DHAS_SND_WND
|
||||||
endif
|
endif
|
||||||
|
|
||||||
C := \#include <linux/tcp.h>\nstruct tcp_info x = { .tcpi_bytes_acked = 0 };
|
C := \#include <linux/tcp.h>\nstruct tcp_info x = { .tcpi_bytes_acked = 0 };
|
||||||
ifeq ($(shell printf "$(C)" | $(CC) -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
ifeq ($(shell printf "$(C)" | $(CC) -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
||||||
CFLAGS += -DHAS_BYTES_ACKED
|
FLAGS += -DHAS_BYTES_ACKED
|
||||||
endif
|
endif
|
||||||
|
|
||||||
C := \#include <linux/tcp.h>\nstruct tcp_info x = { .tcpi_min_rtt = 0 };
|
C := \#include <linux/tcp.h>\nstruct tcp_info x = { .tcpi_min_rtt = 0 };
|
||||||
ifeq ($(shell printf "$(C)" | $(CC) -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
ifeq ($(shell printf "$(C)" | $(CC) -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
||||||
CFLAGS += -DHAS_MIN_RTT
|
FLAGS += -DHAS_MIN_RTT
|
||||||
endif
|
endif
|
||||||
|
|
||||||
C := \#include <sys/random.h>\nint main(){int a=getrandom(0, 0, 0);}
|
C := \#include <sys/random.h>\nint main(){int a=getrandom(0, 0, 0);}
|
||||||
ifeq ($(shell printf "$(C)" | $(CC) -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
ifeq ($(shell printf "$(C)" | $(CC) -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
||||||
CFLAGS += -DHAS_GETRANDOM
|
FLAGS += -DHAS_GETRANDOM
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(shell :|$(CC) -fstack-protector-strong -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
ifeq ($(shell :|$(CC) -fstack-protector-strong -S -xc - -o - >/dev/null 2>&1; echo $$?),0)
|
||||||
CFLAGS += -fstack-protector-strong
|
FLAGS += -fstack-protector-strong
|
||||||
endif
|
endif
|
||||||
|
|
||||||
prefix ?= /usr/local
|
prefix ?= /usr/local
|
||||||
|
@ -98,18 +98,19 @@ endif
|
||||||
|
|
||||||
all: $(BIN) $(MANPAGES) docs
|
all: $(BIN) $(MANPAGES) docs
|
||||||
|
|
||||||
static: CFLAGS += -static -DGLIBC_NO_STATIC_NSS
|
static: FLAGS += -static -DGLIBC_NO_STATIC_NSS
|
||||||
static: clean all
|
static: clean all
|
||||||
|
|
||||||
seccomp.h: $(PASST_SRCS) $(PASST_HEADERS)
|
seccomp.h: $(PASST_SRCS) $(PASST_HEADERS)
|
||||||
@ EXTRA_SYSCALLS=$(EXTRA_SYSCALLS) ./seccomp.sh $^
|
@ EXTRA_SYSCALLS=$(EXTRA_SYSCALLS) ./seccomp.sh $^
|
||||||
|
|
||||||
passt: $(PASST_SRCS) $(PASST_HEADERS) seccomp.h
|
passt: $(PASST_SRCS) $(PASST_HEADERS) seccomp.h
|
||||||
$(CC) $(CFLAGS) $(PASST_SRCS) -o passt $(LDFLAGS)
|
$(CC) $(FLAGS) $(CFLAGS) $(PASST_SRCS) -o passt $(LDFLAGS)
|
||||||
|
|
||||||
passt.avx2: CFLAGS += -Ofast -mavx2 -ftree-vectorize -funroll-loops
|
passt.avx2: FLAGS += -Ofast -mavx2 -ftree-vectorize -funroll-loops
|
||||||
passt.avx2: $(PASST_SRCS) $(PASST_HEADERS) seccomp.h
|
passt.avx2: $(PASST_SRCS) $(PASST_HEADERS) seccomp.h
|
||||||
$(CC) $(filter-out -O2,$(CFLAGS)) $(PASST_SRCS) -o passt.avx2 $(LDFLAGS)
|
$(CC) $(filter-out -O2,$(FLAGS) $(CFLAGS)) \
|
||||||
|
$(PASST_SRCS) -o passt.avx2 $(LDFLAGS)
|
||||||
|
|
||||||
passt.avx2: passt
|
passt.avx2: passt
|
||||||
|
|
||||||
|
@ -117,12 +118,12 @@ pasta.avx2 pasta.1 pasta: pasta%: passt%
|
||||||
ln -s $< $@
|
ln -s $< $@
|
||||||
|
|
||||||
qrap: $(QRAP_SRCS) passt.h
|
qrap: $(QRAP_SRCS) passt.h
|
||||||
$(CC) $(CFLAGS) $(QRAP_SRCS) -o qrap $(LDFLAGS)
|
$(CC) $(FLAGS) $(CFLAGS) $(QRAP_SRCS) -o qrap $(LDFLAGS)
|
||||||
|
|
||||||
valgrind: EXTRA_SYSCALLS="rt_sigprocmask rt_sigtimedwait rt_sigaction \
|
valgrind: EXTRA_SYSCALLS="rt_sigprocmask rt_sigtimedwait rt_sigaction \
|
||||||
getpid gettid kill clock_gettime mmap munmap open \
|
getpid gettid kill clock_gettime mmap munmap open \
|
||||||
unlink gettimeofday futex"
|
unlink gettimeofday futex"
|
||||||
valgrind: CFLAGS:=-g -O0 $(filter-out -O%,$(CFLAGS))
|
valgrind: FLAGS:=-g -O0 $(filter-out -O%,$(FLAGS))
|
||||||
valgrind: all
|
valgrind: all
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
@ -261,7 +262,7 @@ clang-tidy: $(SRCS) $(HEADERS)
|
||||||
-altera-struct-pack-align,\
|
-altera-struct-pack-align,\
|
||||||
-concurrency-mt-unsafe \
|
-concurrency-mt-unsafe \
|
||||||
-config='{CheckOptions: [{key: bugprone-suspicious-string-compare.WarnOnImplicitComparison, value: "false"}]}' \
|
-config='{CheckOptions: [{key: bugprone-suspicious-string-compare.WarnOnImplicitComparison, value: "false"}]}' \
|
||||||
--warnings-as-errors=* $(SRCS) -- $(filter-out -pie,$(CFLAGS))
|
--warnings-as-errors=* $(SRCS) -- $(filter-out -pie,$(FLAGS) $(CFLAGS))
|
||||||
|
|
||||||
ifeq ($(shell $(CC) -v 2>&1 | grep -c "gcc version"),1)
|
ifeq ($(shell $(CC) -v 2>&1 | grep -c "gcc version"),1)
|
||||||
TARGET := $(shell ${CC} -v 2>&1 | sed -n 's/Target: \(.*\)/\1/p')
|
TARGET := $(shell ${CC} -v 2>&1 | sed -n 's/Target: \(.*\)/\1/p')
|
||||||
|
@ -304,5 +305,5 @@ cppcheck: $(SRCS) $(HEADERS)
|
||||||
--suppress=unmatchedSuppression:udp.c \
|
--suppress=unmatchedSuppression:udp.c \
|
||||||
--suppress=unmatchedSuppression:util.c \
|
--suppress=unmatchedSuppression:util.c \
|
||||||
--suppress=unmatchedSuppression:util.h \
|
--suppress=unmatchedSuppression:util.h \
|
||||||
$(filter -D%,$(CFLAGS)) \
|
$(filter -D%,$(FLAGS) $(CFLAGS)) \
|
||||||
.
|
.
|
||||||
|
|
Loading…
Reference in a new issue