
DIR_BIN = /home/xiay/exp/bin
IPROUTE = /opt/packages/iproute2
CC = gcc

# tc shared lib
CFLAGS_TC = -fPIC -c
INCLUDES_TC = -I. -I$(IPROUTE)/include -I$(IPROUTE)/tc
OBJ_TC     = q_delay.o
TCLIB      = q_delay.so
MAJOR_VER  = 1
MINOR_VER  = 0
LDFLAGS_TC += -shared -Wl,-soname,$(TCLIB).$(MAJOR_VER)

# kernel module
OBJ_KERNEL      = sch_delay.o
INCLUDES_KERNEL = -I/usr/src/linux/include
CFLAGS_KERNEL   = -Wall -Wstrict-prototypes -O2 \
-fomit-frame-pointer -pipe -fno-strength-reduce -m486 -malign-loops=2 \
-malign-jumps=2 -malign-functions=2
DEFINES_KERNEL  = -D__KERNEL__ -DMODULE -DLINUX

.PHONY: all kernel tc clean install

all: kernel tc
	@echo "===================================================================="
	@echo "To use delay qdisc:"
	@echo "1. run make install to create soft link for the dynamic link library"
	@echo "2. set TC_PATH (LD_LIBRARY_PATH ?) to your q_delay.so directory"
	@echo "3. insmod sch_delay.o"
	@echo "4. now you can use your tc to operate delay queue"
	@echo "===================================================================="

install: 
	cp $(OBJ_KERNEL) $(DIR_BIN)
	cp $(TCLIB).$(MAJOR_VER).$(MINOR_VER) $(DIR_BIN)
	ln -s  $(DIR_BIN)/$(TCLIB).$(MAJOR_VER).$(MINOR_VER)  $(DIR_BIN)/$(TCLIB).$(MAJOR_VER)
	ln -s  $(DIR_BIN)/$(TCLIB).$(MAJOR_VER)  $(DIR_BIN)/$(TCLIB)

kernel: $(OBJ_KERNEL)

tc: $(TCLIB).$(MAJOR_VER).$(MINOR_VER)

$(OBJ_TC): %.o: %.c
	$(CC) -c $(CFLAGS_TC) $(INCLUDES_TC) -o $@ $<

$(TCLIB).$(MAJOR_VER).$(MINOR_VER): $(OBJ_TC)
	$(CC) $(LDFLAGS_TC) -o $@ $(OBJ_TC)

$(OBJ_KERNEL): %.o: %.c
	$(CC) -c $(DEFINES_KERNEL) $(INCLUDES_KERNEL) $(CFLAGS_KERNEL) $(INCLUDES_KERNEL) -o $@ $<

clean:
	rm -f $(OBJ_TC) $(OBJ_KERNEL) $(TCLIB).$(MAJOR_VER).$(MINOR_VER)

realclean: clean
	rm -f $(TCLIB).$(MAJOR_VER) $(TCLIB)
