build: split build system into smaller manageable pieces
[netsniff-ng.git] / Makefile
blob76434c06376a3e90a02231b760984a67f1ab087d
1 # netsniff-ng build system
2 # Copyright 2012 - 2013 Daniel Borkmann <borkmann@gnumaniacs.org>
3 # Copyright 2013 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 = 5
18 SUBLEVEL = 8
19 EXTRAVERSION = -rc1+
20 NAME = Ziggomatic
22 TOOLS ?= $(CONFIG_TOOLS)
23 TOOLS ?= netsniff-ng trafgen astraceroute flowtop ifpps bpfc curvetun mausezahn
25 # For packaging purposes, prefix can define a different path.
26 PREFIX ?=
28 # Disable if you don't want it
29 CCACHE ?= $(CONFIG_CCACHE)
31 # Location of installation paths.
32 SBINDIR = $(PREFIX)/usr/sbin
33 INCDIR = $(PREFIX)/usr/include
34 ETCDIR = $(PREFIX)/etc
35 ETCDIRE = $(ETCDIR)/netsniff-ng
36 MAN8DIR = $(PREFIX)/usr/share/man/man8
38 # Shut up make, helper warnings, parallel compilation!
39 MAKEFLAGS += --no-print-directory
40 MAKEFLAGS += -rR
41 MAKEFLAGS += --warn-undefined-variables
42 MAKEFLAGS += --jobs=$(shell grep "^processor" /proc/cpuinfo | wc -l)
44 # Debugging option
45 ifeq ("$(origin DEBUG)", "command line")
46 DEBUG := 1
47 else
48 DEBUG := 0
49 endif
51 # For packaging purposes, you might want to call your own:
52 # make CFLAGS="<flags>"
53 CFLAGS_DEF = -std=gnu99
54 CFLAGS_DEF += -pipe
56 ifeq ($(DEBUG), 1)
57 CFLAGS_DEF += -O2
58 CFLAGS_DEF += -g
59 else
60 ifeq ($(DISTRO), 1)
61 CFLAGS_DEF += -O2
62 else
63 CFLAGS_DEF += -march=native
64 CFLAGS_DEF += -mtune=native
65 CFLAGS_DEF += -O3
66 endif
67 endif
68 ifeq ($(HARDENING), 1)
69 CFLAGS_DEF += -fPIE -pie
70 CFLAGS_DEF += -Wl,-z,relro,-z,now
71 CFLAGS_DEF += -fstack-protector-all
72 CFLAGS_DEF += -Wstack-protector
73 CFLAGS_DEF += --param=ssp-buffer-size=4
74 CFLAGS_DEF += -ftrapv
75 CFLAGS_DEF += -D_FORTIFY_SOURCE=2
76 CFLAGS_DEF += -fexceptions
77 endif
79 CFLAGS_DEF += -fomit-frame-pointer
80 CFLAGS_DEF += -fno-strict-aliasing
81 CFLAGS_DEF += -fasynchronous-unwind-tables
82 CFLAGS_DEF += -fno-delete-null-pointer-checks
84 CFLAGS_DEF += -D_REENTRANT
85 CFLAGS_DEF += -D_LARGEFILE_SOURCE
86 CFLAGS_DEF += -D_LARGEFILE64_SOURCE
87 CFLAGS_DEF += -D_FILE_OFFSET_BITS=64
88 CFLAGS_DEF += -DVERSION_STRING=\"$(VERSION_STRING)\"
89 CFLAGS_DEF += -DVERSION_LONG=\"$(VERSION_LONG)\"
90 CFLAGS_DEF += -DPREFIX_STRING=\"$(PREFIX)\"
92 WFLAGS_DEF = -Wall
94 CPPFLAGS ?=
95 CFLAGS ?= $(CFLAGS_DEF) $(WFLAGS_DEF) $(CPPFLAGS) -I.
97 LEX_FLAGS =
98 YAAC_FLAGS =
100 LDFLAGS ?=
101 ifeq ("$(origin CROSS_LD_LIBRARY_PATH)", "command line")
102 LDFLAGS += -L$(CROSS_LD_LIBRARY_PATH)
103 endif
105 VERSION_STRING = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
106 VERSION_LONG = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)~$(NAME)
108 export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION
109 export CROSS_COMPILE
111 bold = $(shell tput bold)
112 normal = $(shell tput sgr0)
114 ifeq ("$(origin CROSS_COMPILE)", "command line")
115 WHAT := Cross compiling
116 else
117 WHAT := Building
118 endif
120 build_showinfo:
121 $(Q)echo "$(bold)$(WHAT) netsniff-ng toolkit ($(VERSION_STRING)) for" \
122 $(shell $(CCNQ) -dumpmachine)":$(normal)"
123 clean_showinfo:
124 $(Q)echo "$(bold)Cleaning netsniff-ng toolkit ($(VERSION_STRING)):$(normal)"
126 .PHONY: all toolkit $(TOOLS) clean %_prehook %_clean %_install %_uninstall tag tags cscope
127 .IGNORE: %_clean_custom %_install_custom
128 .NOTPARALLEL: $(TOOLS)
129 .DEFAULT_GOAL := all
130 .DEFAULT:
131 .FORCE:
133 NCONF_FILES = ether.conf tcp.conf udp.conf oui.conf geoip.conf
135 all: build_showinfo toolkit
136 allbutcurvetun: $(filter-out curvetun,$(TOOLS))
137 allbutmausezahn: $(filter-out mausezahn,$(TOOLS))
138 toolkit: $(TOOLS)
139 clean: $(foreach tool,$(TOOLS),$(tool)_clean)
140 distclean: clean
141 $(Q)$(call RM,Config)
142 $(Q)$(call RM,config.h)
143 $(Q)$(call RM,config.log)
144 mrproper: distclean
145 $(Q)$(GIT_REM)
147 install: install_all
148 install_all: $(foreach tool,$(TOOLS),$(tool)_install)
149 install_allbutcurvetun: $(foreach tool,$(filter-out curvetun,$(TOOLS)),$(tool)_install)
150 install_allbutmausezahn: $(foreach tool,$(filter-out mausezahn,$(TOOLS)),$(tool)_install)
151 uninstall: $(foreach tool,$(TOOLS),$(tool)_uninstall)
152 $(Q)$(call RMDIR,$(ETCDIRE))
154 %.yy.o: %.l
155 $(LEX) -P $(shell perl -wlne 'print $$1 if /lex-func-prefix:\s([a-z]+)/' $<) \
156 -o $(BUILD_DIR)/$(shell basename $< .l).yy.c $(LEX_FLAGS) $<
157 %.tab.o: %.y
158 $(YAAC) -p $(shell perl -wlne 'print $$1 if /yaac-func-prefix:\s([a-z]+)/' $<) \
159 -o $(BUILD_DIR)/$(shell basename $< .y).tab.c $(YAAC_FLAGS) -d $<
161 $(foreach tool,$(TOOLS),$(eval $(call TOOL_templ,$(tool))))
163 %:: ;
165 $(TOOLS):
166 $(LD) $(LDFLAGS) -o $@/$@ $@/*.o $($@-libs)
167 $(STRIP) $@/$@