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.
13 $(error
"Please run `./configure' before `make'")
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
30 # Location of an alternative destination directory for installation
31 # Useful when cross-compiling and installing in a dedicated target directory
34 # Location of installation paths.
35 SBINDIR
= $(PREFIX
)/sbin
36 INCDIR
= $(PREFIX
)/include
37 ETCDIR ?
= $(CONFIG_ETCDIR
)
38 ETCDIRE
= $(ETCDIR
)/netsniff-ng
39 DATDIR
= $(PREFIX
)/share
/netsniff-ng
40 MAN8DIR
= $(PREFIX
)/share
/man
/man8
42 # Shut up make, helper warnings, parallel compilation!
43 MAKEFLAGS
+= --no-print-directory
45 MAKEFLAGS
+= --warn-undefined-variables
46 MAKEFLAGS
+= --jobs
=$(shell grep
"^processor" /proc
/cpuinfo | wc
-l
)
49 ifeq ("$(origin DEBUG)", "command line")
52 ifeq ($(CONFIG_DEBUG
), 1)
61 ifeq ($(shell $(CC
) -v
2>&1 | grep
-c
"clang version"), 1)
69 # For packaging purposes, you might want to call your own:
70 # make CFLAGS="<flags>"
71 CFLAGS_DEF
= -std
=gnu99
77 CFLAGS_DEF
+= -fno-omit-frame-pointer
80 CFLAGS_DEF
+= -fomit-frame-pointer
81 CFLAGS_DEF
+= -fno-strict-aliasing
82 CFLAGS_DEF
+= -fasynchronous-unwind-tables
83 ifneq ($(COMPILER
), clang
)
84 CFLAGS_DEF
+= -fno-delete-null-pointer-checks
88 ifeq ($(HARDENING
), 1)
89 CFLAGS_DEF
+= -fPIE
-pie
90 CFLAGS_DEF
+= -Wl
,-z
,relro
,-z
,now
91 CFLAGS_DEF
+= -fstack-protector-all
92 CFLAGS_DEF
+= -Wstack-protector
93 CFLAGS_DEF
+= --param
=ssp-buffer-size
=4
95 CFLAGS_DEF
+= -U_FORTIFY_SOURCE
-D_FORTIFY_SOURCE
=2
96 CFLAGS_DEF
+= -fexceptions
99 CFLAGS_MIN
= -D_REENTRANT
100 CFLAGS_MIN
+= -D_LARGEFILE_SOURCE
101 CFLAGS_MIN
+= -D_LARGEFILE64_SOURCE
102 CFLAGS_MIN
+= -D_FILE_OFFSET_BITS
=64
103 CFLAGS_MIN
+= -DVERSION_STRING
=\"$(VERSION_STRING
)\"
104 CFLAGS_MIN
+= -DVERSION_LONG
=\"$(VERSION_LONG
)\"
105 CFLAGS_MIN
+= -DETCDIRE_STRING
=\"$(ETCDIRE
)\"
106 CFLAGS_MIN
+= -DDATDIR_STRING
=\"$(DATDIR
)\"
111 CFLAGS ?
= $(CFLAGS_DEF
) $(WFLAGS_DEF
) $(CPPFLAGS
)
112 override CFLAGS
+= $(CFLAGS_MIN
) -I.
118 ifeq ("$(origin CROSS_LD_LIBRARY_PATH)", "command line")
119 LDFLAGS
+= -L
$(CROSS_LD_LIBRARY_PATH
)
122 CHECKFLAGS
= -D__linux__
-Dlinux
-D__STDC__
-Dunix
-D__unix \
123 -Wbitwise
-Wnoreturn-void
125 VERSION_SHORT
= $(VERSION
).
$(PATCHLEVEL
).
$(SUBLEVEL
)$(EXTRAVERSION
)
126 VERSION_STRING
= "$(VERSION_SHORT)$(CONFIG_RC)"
127 VERSION_LONG
= "$(VERSION_SHORT)$(CONFIG_RC) ($(NAME))"
129 export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION
130 export DEBUG HARDENING
132 ifneq ("$(TERM)", "")
133 bold
= $(shell tput bold
)
134 normal
= $(shell tput sgr0
)
140 ifneq ("$(CROSS_COMPILE)", "")
141 WHAT
:= Cross-compiling
147 $(Q
)echo
"$(bold)$(WHAT) netsniff-ng toolkit ($(VERSION_STRING)) for" \
148 $(shell $(CCNQ
) -dumpmachine
)":$(normal)"
150 $(Q
)echo
"$(bold)Cleaning netsniff-ng toolkit ($(VERSION_STRING)):$(normal)"
152 .PHONY
: all toolkit
$(TOOLS
) clean %_prehook
%_clean
%_install
%_uninstall tag
tags cscope
153 .IGNORE
: %_clean_custom
%_install_custom
154 .NOTPARALLEL
: $(TOOLS
)
159 all: build_showinfo toolkit
160 allbutcurvetun
: $(filter-out curvetun
,$(TOOLS
))
161 allbutmausezahn
: $(filter-out mausezahn
,$(TOOLS
))
163 clean: $(foreach tool
,$(TOOLS
),$(tool
)_clean
)
165 $(Q
)$(call RM
,Config
)
166 $(Q
)$(call RM
,config.h
)
167 $(Q
)$(call RM
,config.log
)
168 $(Q
)$(call RM
,cov-int
)
169 $(Q
)$(call RM
,netsniff-ng-coverity.tgz
)
174 install_all
: $(foreach tool
,$(TOOLS
),$(tool
)_install
)
175 $(Q
)$(call INSTD
,$(DESTDIR
)$(DATDIR
))
176 install_allbutcurvetun
: $(foreach tool
,$(filter-out curvetun
,$(TOOLS
)),$(tool
)_install
)
177 install_allbutmausezahn
: $(foreach tool
,$(filter-out mausezahn
,$(TOOLS
)),$(tool
)_install
)
178 uninstall: $(foreach tool
,$(TOOLS
),$(tool
)_uninstall
)
181 $(LEXQ
) -P
$(shell sed
-rn
's/.*lex-func-prefix:\s([a-z]+).*/\1/gp' $<) \
182 -o
$(BUILD_DIR
)/$(shell basename $< .l
).yy.c
$(LEX_FLAGS
) $<
184 $(YACCQ
) -p
$(shell sed
-rn
's/.*yacc-func-prefix:\s([a-z]+).*/\1/gp' $<) \
185 -o
$(BUILD_DIR
)/$(shell basename $< .y
).tab.c
$(YAAC_FLAGS
) -d
$<
187 $(foreach tool
,$(TOOLS
),$(eval
$(call TOOL_templ
,$(tool
))))
192 $(LDQ
) $(LDFLAGS
) -o
$@
/$@
$(shell LC_ALL
=C ls
$@
/*.o
) $($@
-libs
)