1# SPDX-License-Identifier: GPL-2.0 2# Top level Makefile for iproute2 3 4-include config.mk 5 6ifeq ("$(origin V)", "command line") 7VERBOSE = $(V) 8endif 9ifndef VERBOSE 10VERBOSE = 0 11endif 12 13ifeq ($(VERBOSE),0) 14MAKEFLAGS += --no-print-directory 15endif 16 17PREFIX?=/usr 18SBINDIR?=/sbin 19NETNS_RUN_DIR?=/var/run/netns 20NETNS_ETC_DIR?=/etc/netns 21DATADIR?=$(PREFIX)/share 22HDRDIR?=$(PREFIX)/include/iproute2 23CONF_ETC_DIR?=/etc/iproute2 24CONF_USR_DIR?=$(DATADIR)/iproute2 25DOCDIR?=$(DATADIR)/doc/iproute2 26MANDIR?=$(DATADIR)/man 27ARPDDIR?=/var/lib/arpd 28KERNEL_INCLUDE?=/usr/include 29BASH_COMPDIR?=$(DATADIR)/bash-completion/completions 30 31# Path to db_185.h include 32DBM_INCLUDE:=$(DESTDIR)/usr/include 33 34SHARED_LIBS = y 35 36DEFINES= -DRESOLVE_HOSTNAMES -DLIBDIR=\"$(LIBDIR)\" 37ifneq ($(SHARED_LIBS),y) 38DEFINES+= -DNO_SHARED_LIBS 39endif 40 41DEFINES+=-DCONF_USR_DIR=\"$(CONF_USR_DIR)\" \ 42 -DCONF_ETC_DIR=\"$(CONF_ETC_DIR)\" \ 43 -DNETNS_RUN_DIR=\"$(NETNS_RUN_DIR)\" \ 44 -DNETNS_ETC_DIR=\"$(NETNS_ETC_DIR)\" \ 45 -DARPDDIR=\"$(ARPDDIR)\" \ 46 -DCONF_COLOR=$(CONF_COLOR) 47 48#options for AX.25 49ADDLIB+=ax25_ntop.o 50 51#options for AX.25 52ADDLIB+=rose_ntop.o 53 54#options for mpls 55ADDLIB+=mpls_ntop.o mpls_pton.o 56 57#options for NETROM 58ADDLIB+=netrom_ntop.o 59 60CC := gcc 61HOSTCC ?= $(CC) 62DEFINES += -D_GNU_SOURCE 63# Turn on transparent support for LFS 64DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE 65CCOPTS = -O2 -pipe 66WFLAGS := -Wall -Wstrict-prototypes -Wmissing-prototypes 67WFLAGS += -Wmissing-declarations -Wold-style-definition -Wformat=2 68 69CFLAGS := $(WFLAGS) $(CCOPTS) -I../include -I../include/uapi $(DEFINES) $(CFLAGS) 70YACCFLAGS = -d -t -v 71 72SUBDIRS=lib ip tc bridge misc netem genl man 73ifeq ($(HAVE_MNL),y) 74SUBDIRS += tipc devlink rdma dcb vdpa 75endif 76 77LIBNETLINK=../lib/libutil.a ../lib/libnetlink.a 78LDLIBS += $(LIBNETLINK) 79 80all: config.mk 81 @set -e; \ 82 for i in $(SUBDIRS); \ 83 do echo; echo $$i; $(MAKE) -C $$i; done 84 85.PHONY: clean clobber distclean check cscope version 86 87help: 88 @echo "Make Targets:" 89 @echo " all - build binaries" 90 @echo " clean - remove products of build" 91 @echo " distclean - remove configuration and build" 92 @echo " install - install binaries on local machine" 93 @echo " check - run tests" 94 @echo " cscope - build cscope database" 95 @echo " version - update version" 96 @echo "" 97 @echo "Make Arguments:" 98 @echo " V=[0|1] - set build verbosity level" 99 100config.mk: 101 @if [ ! -f config.mk -o configure -nt config.mk ]; then \ 102 sh configure $(KERNEL_INCLUDE); \ 103 fi 104 105install: all 106 install -m 0755 -d $(DESTDIR)$(SBINDIR) 107 install -m 0755 -d $(DESTDIR)$(CONF_USR_DIR) 108 install -m 0755 -d $(DESTDIR)$(HDRDIR) 109 @for i in $(SUBDIRS); do $(MAKE) -C $$i install; done 110 install -m 0644 $(shell find etc/iproute2 -maxdepth 1 -type f) $(DESTDIR)$(CONF_USR_DIR) 111 install -m 0755 -d $(DESTDIR)$(BASH_COMPDIR) 112 install -m 0644 bash-completion/tc $(DESTDIR)$(BASH_COMPDIR) 113 install -m 0644 bash-completion/devlink $(DESTDIR)$(BASH_COMPDIR) 114 install -m 0644 include/bpf_elf.h $(DESTDIR)$(HDRDIR) 115 116version: 117 echo "static const char version[] = \""`git describe --tags --long`"\";" \ 118 > include/version.h 119 120clean: 121 @for i in $(SUBDIRS) testsuite; \ 122 do $(MAKE) -C $$i clean; done 123 124clobber: 125 touch config.mk 126 $(MAKE) clean 127 rm -f config.mk cscope.* 128 129distclean: clobber 130 131check: all 132 $(MAKE) -C testsuite 133 $(MAKE) -C testsuite alltests 134 @if command -v man >/dev/null 2>&1; then \ 135 echo "Checking manpages for syntax errors..."; \ 136 $(MAKE) -C man check; \ 137 else \ 138 echo "man not installed, skipping checks for syntax errors."; \ 139 fi 140 141cscope: 142 cscope -b -q -R -Iinclude -sip -slib -smisc -snetem -stc 143 144.EXPORT_ALL_VARIABLES: 145

