# use this to disable flto optimizations:
#   make NO_FLTO=1
# and this to enable verbose mode:
#   make V=1

TARGET=eoip

ifndef NO_FLTO
CFLAGS?=-O3 -fno-stack-protector -flto
LDFLAGS+=-O3 -fno-stack-protector -flto
else
CFLAGS?=-O3 -fno-stack-protector
endif

STRIP?=strip
PREFIX?=$(DESTDIR)/

MYCFLAGS:=$(CPPFLAGS) $(CFLAGS) -std=gnu90 -Wall -Wextra
MYLDFLAGS=$(LDFLAGS)

ifeq ("$(V)","1")
Q:=
E:=@true
else
Q:=@
E:=@echo
endif

all: $(TARGET)

eoip: eoipcr.o libnetlink.o
	$(E) LD $@
	$(Q)$(CC) -o $@ $^ $(MYLDFLAGS)

libnetlink.o: libnetlink.c libnetlink.h
	$(E) CC $@
	$(Q)$(CC) $(MYCFLAGS) -c -o $@ $<

eoipcr.o: eoipcr.c libnetlink.h eoip_version.h unified/eoip_proto.h
	$(E) CC $@
	$(Q)$(CC) $(MYCFLAGS) -c -o $@ $<

install: $(TARGET)
	$(E) STRIP $(TARGET)
	$(Q)$(STRIP) $(TARGET)
	$(E) INSTALL $(TARGET)
	$(Q)install -TD -m 0755 $(TARGET) $(PREFIX)sbin/$(TARGET)

uninstall:
	$(E) UNINSTALL $(TARGET)
	$(Q)rm $(PREFIX)sbin/$(TARGET)

clean:
	rm -f eoip eoipcr.o libnetlink.o

# the unified source builds on any supported kernel (3.2 .. 7.0+);
# override KDIR to build for a kernel other than the running one
modules:
	$(MAKE) -C unified $(if $(KDIR),KDIR=$(KDIR))
	cp unified/eoip.ko .
	test ! -f unified/eoipv6.ko || cp unified/eoipv6.ko .

mclean:
	$(MAKE) -C unified clean $(if $(KDIR),KDIR=$(KDIR))
	rm -f eoip.ko
	rm -f eoipv6.ko

minstall:
	$(MAKE) -C unified modules_install $(if $(KDIR),KDIR=$(KDIR))

VER:=$(shell ./version.sh)
mkotar:
	$(MAKE) clean
	-dh_clean
	tar \
		--xform 's,^[.],eoip-$(VER),' \
		--exclude ./.git \
		--exclude ./.gitignore \
		--exclude ./debian \
		-Jcvf ../eoip_$(VER).orig.tar.xz .
	-rm -f ../eoip_$(VER).orig.tar.xz.asc
	gpg -a --detach-sign ../eoip_$(VER).orig.tar.xz
	cp -fa ../eoip_$(VER).orig.tar.xz ../eoip-$(VER).tar.xz
	cp -fa ../eoip_$(VER).orig.tar.xz.asc ../eoip-$(VER).tar.xz.asc
