# src/Makefile for irqtune

# NOTE: remake from the top directory -- not here
ifndef IRQTUNE_VERSION
# the next line is designed to cause an error
_run_from_the_top_directory_as_irqtune_version_is_not_defined_
endif

# sub-directories
SDIR = $(IRQTUNE_HOME)/src
PROTO = $(IRQTUNE_HOME)/include/P

# modules
MODTAG = irqtune_mod
MODULES = irqtune_mod.o irqtune_npr.o
KOBJS = load_mod.o load_npr.o kvers.o
KDEFS = \
	-DIRQTUNE_VERSION=\"$(IRQTUNE_VERSION)\"

CDEFS = -DMODTAG=\"$(MODTAG)\" \
	$(KDEFS)

# things to install
TARGETLIST = $(MODULES) irqtune

WARN = -Wall -Werror -Wno-format
CFLAGS_COM = -O \
	-I$(IRQTUNE_HOME)/include -I$(IRQTUNE_HOME)/include/P -I$(IRQTUNE_HOME) \
	$(WARN) $(CFLAGS_EXTRA)
CKFLAGS = $(CFLAGS_COM) -D__KERNEL__ $(KDEFS)
CFLAGS = $(CFLAGS_COM) $(CDEBUG)
ifeq "$(CDEBUG)" ""
STRIP = -s
endif

LIBSFILES := $(shell find $(IRQTUNE_HOME)/lib -name '*.c' -print)

# -----------------------------------------------------------------
sbin: $(TARGETLIST)

# make kernel version (only valid revision and syntax are required)
kvers:
	echo 'char kernel_version[] = "'1.0.0'";' > kvers.c

# WARNING: if you think this will fix any genuine error other than the warning
# message, you should RTFM!  if it does, file a bug report!
kvers_stop_insmod_pedantic_rev_warning:
	echo 'char kernel_version[] = "'`uname -r`'";' > kvers.c

# compile the local site version
kvers.o: kvers.c
	cc -c kvers.c

# -----------------------------------------------------------------
# standard loader
load_mod.o: $(SDIR)/load.c $(SDIR)/irqhigh.c
	cc -c $(CKFLAGS) -o $@ $(SDIR)/load.c

# loader without printk's
load_npr.o: $(SDIR)/load.c $(SDIR)/irqhigh.c
	cc -c $(CKFLAGS) -DNPR -o $@ $(SDIR)/load.c

# standard module
irqtune_mod.o: load_mod.o kvers.o
	ld -r -o $@ load_mod.o kvers.o

# module without printk's
irqtune_npr.o: load_npr.o kvers.o
	ld -r -o $@ load_npr.o kvers.o

# -----------------------------------------------------------------
irqtune.o: $(SDIR)/irqtune.c $(SDIR)/irqhigh.c $(LIBSFILES)
	cc -c $(CFLAGS) $(CDEFS) $(SDIR)/irqtune.c

irqtune: irqtune.o kvers.o
	cc $(STRIP) -o irqtune irqtune.o kvers.o

# -----------------------------------------------------------------
install:
	$(INSTALLER) -i $(INSTALL) $(SBIN) $(IRQTUNE_HOME)

uninstall:
	/bin/sh -c "cd $(SBIN) ; rm -f $(TARGETLIST)"

clean:
	rm -f $(TARGETLIST) $(KOBJS) irqtune.o

# -----------------------------------------------------------------
# remake function prototypes (needs the prototype program)
# this will fail for lack of it
proto:
	cp $(XI)/softnet/{types,macros}.h \
		$(XI)/softnet/{zprt,zprtdef,zprtundef}.h \
		$(IRQTUNE_HOME)/include/softnet
	cp $(GEN)/comlib/zprt.c $(IRQTUNE_HOME)/lib
	rawtype -C$(IRQTUNE_HOME) -I$(PROTO)
