trafgen: fix packet socket initialization with multiple CPUs
[netsniff-ng.git] / Makefile
blob367e4a884308d9c1bdda3a20187a2168e16d34d0
1 # netsniff-ng build system
2 # Copyright 2012 - 2013 Daniel Borkmann <borkmann@gnumaniacs.org>
3 # Copyright 2013 - 2015 Tobias Klauser <tklauser@distanz.ch>
4 # Subject to the GNU GPL, version 2.
6 -include Config
7 -include Cmds
8 -include Extra
9 -include Template
10 -include Misc
12 ifndef CONFIG_OK
13 $(error "Please run `./configure' before `make'")
14 endif
16 VERSION = 0
17 PATCHLEVEL = 6
18 SUBLEVEL = 3
19 EXTRAVERSION =
20 NAME = Mookid
22 TOOLS ?= $(CONFIG_TOOLS)
24 # For packaging purposes, prefix can define a different path.
25 PREFIX ?= $(CONFIG_PREFIX)
27 # Set to use ccache for compilation
28 CCACHE ?=
30 # Location of an alternative destination directory for installation
31 # Useful when cross-compiling and installing in a dedicated target directory
32 DESTDIR=
34 # Location of installation paths.
35 SBINDIR = $(PREFIX)/sbin
36 INCDIR = $(PREFIX)/include
37 ETCDIR ?= $(CONFIG_ETCDIR)
38 ETCDIRE = $(ETCDIR)/netsniff-ng
39 MAN8DIR = $(PREFIX)/share/man/man8
41 # Shut up make, helper warnings, parallel compilation!
42 MAKEFLAGS += --no-print-directory
43 MAKEFLAGS += -rR
44 MAKEFLAGS += --warn-undefined-variables
45 MAKEFLAGS += --jobs=$(shell grep "^processor" /proc/cpuinfo | wc -l)
47 # Debugging option
48 ifeq ("$(origin DEBUG)", "command line")
49 DEBUG := 1
50 else
51 ifeq ($(CONFIG_DEBUG), 1)
52 DEBUG := 1
53 else
54 DEBUG := 0
55 endif
56 endif
58 # Compiler detection
59 ifneq ($(CC),)
60 ifeq ($(shell $(CC) -v 2>&1 | grep -c "clang version"), 1)
61 COMPILER := clang
62 else
63 COMPILER := gcc
64 endif
65 export COMPILER
66 endif
68 # For packaging purposes, you might want to call your own:
69 # make CFLAGS="<flags>"
70 CFLAGS_DEF = -std=gnu99
71 CFLAGS_DEF += -pipe
73 ifeq ($(DEBUG), 1)
74 CFLAGS_DEF += -g
75 CFLAGS_DEF += -O0
76 CFLAGS_DEF += -fno-omit-frame-pointer
77 else
78 CFLAGS_DEF += -O2
79 CFLAGS_DEF += -fomit-frame-pointer
80 CFLAGS_DEF += -fno-strict-aliasing
81 CFLAGS_DEF += -fasynchronous-unwind-tables
82 ifneq ($(COMPILER), clang)
83 CFLAGS_DEF += -fno-delete-null-pointer-checks
84 endif
85 endif
87 ifeq ($(HARDENING), 1)
88 CFLAGS_DEF += -fPIE -pie
89 CFLAGS_DEF += -Wl,-z,relro,-z,now
90 CFLAGS_DEF += -fstack-protector-all
91 CFLAGS_DEF += -Wstack-protector
92 CFLAGS_DEF += --param=ssp-buffer-size=4
93 CFLAGS_DEF += -ftrapv
94 CFLAGS_DEF += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
95 CFLAGS_DEF += -fexceptions
96 endif
98 CFLAGS_MIN = -D_REENTRANT
99 CFLAGS_MIN += -D_LARGEFILE_SOURCE
100 CFLAGS_MIN += -D_LARGEFILE64_SOURCE
101 CFLAGS_MIN += -D_FILE_OFFSET_BITS=64
102 CFLAGS_MIN += -DVERSION_STRING=\"$(VERSION_STRING)\"
103 CFLAGS_MIN += -DVERSION_LONG=\"$(VERSION_LONG)\"
104 CFLAGS_MIN += -DETCDIRE_STRING=\"$(ETCDIRE)\"
106 WFLAGS_DEF = -Wall
108 CPPFLAGS ?=
109 CFLAGS ?= $(CFLAGS_DEF) $(WFLAGS_DEF) $(CPPFLAGS)
110 override CFLAGS += $(CFLAGS_MIN) -I.
112 LEX_FLAGS =
113 YAAC_FLAGS =
115 LDFLAGS ?=
116 ifeq ("$(origin CROSS_LD_LIBRARY_PATH)", "command line")
117 LDFLAGS += -L$(CROSS_LD_LIBRARY_PATH)
118 endif
120 CHECKFLAGS = -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix \
121 -Wbitwise -Wnoreturn-void
123 VERSION_SHORT = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
124 VERSION_STRING = "$(VERSION_SHORT)$(CONFIG_RC)"
125 VERSION_LONG = "$(VERSION_SHORT)$(CONFIG_RC) ($(NAME))"
127 export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION
128 export DEBUG HARDENING
130 ifneq ("$(TERM)", "")
131 bold = $(shell tput bold)
132 normal = $(shell tput sgr0)
133 else
134 bold =
135 normal =
136 endif
138 ifneq ("$(CROSS_COMPILE)", "")
139 WHAT := Cross-compiling
140 else
141 WHAT := Building
142 endif
144 build_showinfo:
145 $(Q)echo "$(bold)$(WHAT) netsniff-ng toolkit ($(VERSION_STRING)) for" \
146 $(shell $(CCNQ) -dumpmachine)":$(normal)"
147 clean_showinfo:
148 $(Q)echo "$(bold)Cleaning netsniff-ng toolkit ($(VERSION_STRING)):$(normal)"
150 .PHONY: all toolkit $(TOOLS) clean %_prehook %_clean %_install %_uninstall tag tags cscope
151 .IGNORE: %_clean_custom %_install_custom
152 .NOTPARALLEL: $(TOOLS)
153 .DEFAULT_GOAL := all
154 .DEFAULT:
155 .FORCE:
157 all: build_showinfo toolkit
158 allbutcurvetun: $(filter-out curvetun,$(TOOLS))
159 allbutmausezahn: $(filter-out mausezahn,$(TOOLS))
160 toolkit: $(TOOLS)
161 clean: $(foreach tool,$(TOOLS),$(tool)_clean)
162 distclean: clean
163 $(Q)$(call RM,Config)
164 $(Q)$(call RM,config.h)
165 $(Q)$(call RM,config.log)
166 $(Q)$(call RM,cov-int)
167 $(Q)$(call RM,netsniff-ng-coverity.tgz)
168 mrproper: distclean
169 $(Q)$(GIT_REM)
171 install: install_all
172 install_all: $(foreach tool,$(TOOLS),$(tool)_install)
173 install_allbutcurvetun: $(foreach tool,$(filter-out curvetun,$(TOOLS)),$(tool)_install)
174 install_allbutmausezahn: $(foreach tool,$(filter-out mausezahn,$(TOOLS)),$(tool)_install)
175 uninstall: $(foreach tool,$(TOOLS),$(tool)_uninstall)
177 %.yy.o: %.l
178 $(LEXQ) -P $(shell sed -rn 's/.*lex-func-prefix:\s([a-z]+).*/\1/gp' $<) \
179 -o $(BUILD_DIR)/$(shell basename $< .l).yy.c $(LEX_FLAGS) $<
180 %.tab.o: %.y
181 $(YACCQ) -p $(shell sed -rn 's/.*yacc-func-prefix:\s([a-z]+).*/\1/gp' $<) \
182 -o $(BUILD_DIR)/$(shell basename $< .y).tab.c $(YAAC_FLAGS) -d $<
184 $(foreach tool,$(TOOLS),$(eval $(call TOOL_templ,$(tool))))
186 %:: ;
188 $(TOOLS):
189 $(LDQ) $(LDFLAGS) -o $@/$@ $(shell LC_ALL=C ls $@/*.o) $($@-libs)