# # $Id: Makefile 11688 2012-08-12 20:58:26Z luigi $ # # GNUMakefile to build the userland part of ipfw on Linux and Windows # # Do not set with = or := so we can inherit from the caller include ../Makefile.inc TARGET := ipfw all: $(TARGET) #TCC=c:/path/to/tcc # common flags EXTRA_CFLAGS += -O1 EXTRA_CFLAGS += -Wall EXTRA_CFLAGS += -include ../glue.h EXTRA_CFLAGS += -I ./include_e -I ./include ifneq ($(VER),openwrt) ifeq ($(OSARCH),Linux) EXTRA_CFLAGS += -D__BSD_VISIBLE EXTRA_CFLAGS += -Werror # Required by GCC 4.6 EXTRA_CFLAGS += -Wno-unused-but-set-variable endif ifeq ($(OSARCH),FreeBSD) EXTRA_CFLAGS += -D__BSD_VISIBLE EXTRA_CFLAGS += -Werror endif ifeq ($(OSARCH),Darwin) EXTRA_CFLAGS += -D__BSD_VISIBLE EXTRA_CFLAGS += -Werror endif ifeq ($(OSARCH),Windows) # we only support Cygwin and tcc as compilers. ifeq ($(WIN64),1) EXTRA_CFLAGS += -D_X64EMU endif ifeq ($(TCC),) # cygwin EXTRA_CFLAGS += -I/cygdrive/c/$(DDKDIR)/inc/ddk EXTRA_CFLAGS += -I . EXTRA_CFLAGS += -pipe -Wall else #-- build with tcc # TCC points to the root of tcc tree CC=$(TCC)/tcc.exe EXTRA_CFLAGS += -DTCC -I.. EXTRA_CFLAGS += -I$(TCC)/include/winapi -I$(TCC)/include EXTRA_CFLAGS += -nostdinc EFILES_. += err.h grp.h netdb.h pwd.h sysexits.h EFILES_arpa += inet.h EFILES_net += if.h EFILES_netinet += in.h in_systm.h ip.h ip_icmp.h EFILES_sys += cdefs.h wait.h ioctl.h socket.h endif # EXTRA_CFLAGS += -D_WIN32 # see who defines it EXTRA_CFLAGS += -Dsetsockopt=wnd_setsockopt EXTRA_CFLAGS += -Dgetsockopt=wnd_getsockopt EXTRA_CFLAGS += -DEMULATE_SYSCTL EFILES_net += ethernet.h route.h EFILES_netinet += ether.h icmp6.h EFILES_sys += sysctl.h TARGET = ipfw.exe ipfw: $(TARGET) endif # windows endif # !openwrt CFLAGS += $(EXTRA_CFLAGS) # Location of OS headers and libraries. After our stuff. USRDIR?= /usr ifeq ($(TCC),) CFLAGS += -I$(USRDIR)/include LDFLAGS += -L$(USRDIR)/lib else LDFLAGS += -L. -L$(TCC)/lib -lws2_32 endif OBJS = ipfw2.o dummynet.o main.o ipv6.o qsort_r.o OBJS += expand_number.o humanize_number.o glue.o # we don't use ALTQ CFLAGS += -DNO_ALTQ #OBJS += altq.o $(TARGET): $(OBJS) $(MSG) " LD $@" $(HIDE)$(CC) $(LDFLAGS) -o $@ $^ $(OBJS) : ipfw2.h ../glue.h include_e # support to create empty dirs and files in include_e/ # EDIRS is the list of directories, EFILES is the list of files. EFILES_sys += sockio.h EFILES_. += libutil.h EFILES_netinet += __emtpy.h M ?= $(shell pwd) # first make a list of directories from variable names EDIRS= $(subst EFILES_,,$(filter EFILES_%,$(.VARIABLES))) # then prepend the directory name to individual files. # $(empty) serves to interpret the following space literally, # and the ": = " substitution packs spaces into one. EFILES = $(foreach i,$(EDIRS),$(subst $(empty) , $(i)/, $(EFILES_$(i): = ))) include_e: $(MSG) "building include_e in $M" -@rm -rf $(M)/include_e opt_* -@mkdir -p $(M)/include_e -@(cd $(M)/include_e; mkdir -p $(EDIRS); touch $(EFILES) ) -@(cd $(M)/include_e/netinet; \ for i in ip_fw.h ip_dummynet.h tcp.h; do \ cp ../../../sys/netinet/$$i .; done; ) clean distclean: -@rm -rf $(OBJS) $(TARGET) include_e diff: -@(diff -upr $(BSD_HEAD)/sbin/ipfw .)