# # $Id$ # # gnu Makefile to build linux module for ipfw+dummynet # Unless specified otherwise, variable names are arbitrary. # Exceptions are the following: # # ccflags-y additional $(CC) flags # M used by Kbuild, we must set it to `pwd` # obj-m list of .o modules to build # $(MOD)-y for each $MOD in obj-m, the list of objects # obj-y same as above, for openwrt # O_TARGET the link target, for openwrt # EXTRA_CFLAGS as the name says... in openwrt # EXTRA_CFLAGS are used in 2.6.22 module kernel compilation too #--- $(warning including dummynet/Makefile) # lets default for 2.6 for planetlab builds VER ?= 2.6 ifeq ($(VER),openwrt) $(warning dummynet/Makefile doing openwrt) obj-m := ipfw_mod.o obj-y := ipfw2_mod.o bsd_compat.o \ in_cksum.o ip_dummynet.o ip_fw2.o ip_fw_pfil.o O_TARGET := ipfw_mod.o xcflags-y += -O1 -DLINUX_24 xcflags-y += -DIPFIREWALL_DEFAULT_TO_ACCEPT xcflags-y += -g xcflags-y += -D_BSD_SOURCE # enable __FAVOR_BSD (udp/tcp bsd struct over posix) xcflags-y += -DKERNEL_MODULE # linux kernel module xcflags-y += -I include_e -I include xcflags-y += -include ../glue.h # headers EXTRA_CFLAGS := $(xcflags-y) # we should not export anything #export-objs := ipfw2_mod.o -include $(TOPDIR)/Rules.make else # !openwrt obj-m := ipfw_mod.o ifneq ($(shell echo $(VER)|grep '2.4'),) $(warning "---- Building for Version $(VER)") KERNELDIR := -isystem /usr/src/linux-2.4.35.4/include # replace the system include directory WARN += -nostdinc -isystem /usr/lib/gcc/i486-linux-gnu/4.2.4/include #WARN = -Wp,-MD,/home/luigi/ports-luigi/dummynet-branches/ipfw_mod/dummynet/.ipfw2_mod.o.d #WARN += -Iinclude -include include/linux/autoconf.h WARN += -Wall -Wundef WARN += -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing WARN += -fno-common -Werror-implicit-function-declaration # WARN += -O2 -fno-stack-protector -m32 -msoft-float -mregparm=3 # -mregparm=3 gives a printk error WARN += -m32 -msoft-float # -mregparm=3 #WARN += -freg-struct-return -mpreferred-stack-boundary=2 WARN += -Wno-sign-compare WARN += -Wdeclaration-after-statement -Wno-pointer-sign ccflags-y += -O1 -DLINUX_24 CFLAGS = -DMODULE -D__KERNEL__ ${KERNELDIR} ${ccflags-y} # The Main target all: mod24 else # KERNELDIR is where the kernel headers reside # XXX on Planetlab, KERNELDIR must be same as KERNELPATH KERNELDIR ?= $(KERNELPATH) # KERNELDIR := /home/luigi/linux-2.6.25.17/ # test on rock #KERNELDIR := /usr/src/linux-2.6.24 # not with v.2237 #KERNELDIR := /usr/src/linux-2.6.26 #KERNELDIR := /usr/src/linux-2.6.22 #KERNELDIR := /usr/src/linux-source-2.6.26 #KERNELDIR := /lib/modules/`uname -r`/build $(warning "---- Building Version 2.6 $(VER) in $(KERNELDIR)") WARN := -O1 -Wall -Werror -DDEBUG_SPINLOCK -DDEBUG_MUTEXES # The main target # Required by kernel <= 2.6.22, ccflags-y is used on newer version LINUX_VERSION_CODE := $(shell grep LINUX_VERSION_CODE $(KERNELDIR)/include/linux/version.h|cut -d " " -f3) ifeq ($(LINUX_VERSION_CODE),132630) EXTRA_CFLAGS += $(ccflags-y) endif all: include_e $(MAKE) -C $(KERNELDIR) V=1 M=`pwd` modules endif # the list of object use to build the module ipfw_mod-y = $(IPFW_SRCS:%.c=%.o) # Original ipfw + dummynet + FreeBSD stuff, IPFW_SRCS = ip_fw2.c ip_dummynet.c ip_fw_pfil.c in_cksum.c # module glue and functions missing in linux IPFW_SRCS += ipfw2_mod.c bsd_compat.c # additional $(CC) flags ccflags-y += $(WARN) ccflags-y += -DIPFIREWALL_DEFAULT_TO_ACCEPT ccflags-y += -g ccflags-y += -D_BSD_SOURCE # enable __FAVOR_BSD (udp/tcp bsd structure over posix) ccflags-y += -DKERNEL_MODULE # linux kernel module ccflags-y += -I $(M)/include_e -I $(M)/include ccflags-y += -include $(M)/../glue.h # headers mod24: include_e $(obj-m) $(obj-m): $(ipfw_mod-y) $(LD) $(LDFLAGS) -m elf_i386 -r -o $@ $^ clean: -rm -f *.o *.ko Module.symvers *.mod.c distclean: clean -rm -f .*cmd modules.order opt_* -rm -rf .tmp_versions include_e # support to create empty dirs and files in include_e/ # EDIRS is the list of directories, EFILES is the list of files. EDIRS= altq arpa machine net netinet netinet6 sys EFILES += opt_inet6.h opt_ipfw.h opt_ipsec.h opt_mac.h EFILES += opt_mbuf_stress_test.h opt_param.h EFILES += altq/if_altq.h EFILES += arpa/inet.h EFILES += machine/in_cksum.h EFILES += net/ethernet.h net/netisr.h net/pf_mtag.h net/radix.h EFILES += netinet/ether.h netinet/icmp6.h netinet/if_ether.h EFILES += netinet/in.h netinet/in_pcb.h netinet/in_var.h EFILES += netinet/ip_carp.h netinet/ip_var.h netinet/pim.h EFILES += netinet/sctp.h netinet/tcp_timer.h netinet/tcpip.h EFILES += netinet/udp_var.h EFILES += netinet6/ip6_var.h EFILES += sys/_lock.h sys/_mutex.h sys/jail.h EFILES += sys/limits.h sys/lock.h sys/mutex.h sys/priv.h EFILES += sys/proc.h sys/rwlock.h sys/socket.h sys/socketvar.h EFILES += sys/sysctl.h sys/time.h sys/ucred.h M ?= $(shell pwd) include_e: echo "running in $M" -@rm -rf $(M)/include_e opt_* -@mkdir -p $(M)/include_e -@(cd $(M)/include_e; mkdir -p $(EDIRS); touch $(EFILES) ) endif # !openwrt