f2ef8c50b9
It's now as easy as passing "DLMALLOC_SRC=<path_to_dlmalloc.c>" to build with support for dlmalloc. The dlmalloc source is not provided with haproxy in order to ensure that people will use either the most recent, or the most suited version for their platform. The minimal mmap size is specified in DLMALLOC_THRES, which defaults to 4096. It should be increased on platforms with larger pages (eg: 8 kB on some 64 bit systems).
259 lines
6.8 KiB
Makefile
259 lines
6.8 KiB
Makefile
# This makefile supports different OS and CPU setups.
|
|
# You should use it this way :
|
|
# make TARGET=os CPU=cpu REGEX=lib
|
|
#
|
|
# Some external components may be build with it, such dlmalloc :
|
|
#
|
|
# make DLMALLOC_SRC=/usr/local/src/dlmalloc.c
|
|
|
|
# Select target OS. TARGET must match a system for which COPTS and LIBS are
|
|
# correctly defined below.
|
|
#TARGET = linux26
|
|
TARGET = linux24
|
|
#TARGET = linux24e
|
|
#TARGET = linux22
|
|
#TARGET = solaris
|
|
|
|
USE_POLL = 1
|
|
|
|
ifeq ($(TARGET),linux24e)
|
|
USE_EPOLL = 1
|
|
USE_SEPOLL = 1
|
|
endif
|
|
|
|
ifeq ($(TARGET),linux26)
|
|
USE_EPOLL = 1
|
|
USE_SEPOLL = 1
|
|
endif
|
|
|
|
# pass CPU=<cpu_name> to make to optimize for a particular CPU
|
|
CPU = generic
|
|
#CPU = i586
|
|
#CPU = i686
|
|
#CPU = ultrasparc
|
|
|
|
# By default, we use libc's regex. WARNING! On Solaris 8/Sparc, group
|
|
# references seem broken using libc ! Use pcre instead.
|
|
REGEX=libc
|
|
#REGEX=pcre
|
|
#REGEX=static-pcre
|
|
|
|
# tools options
|
|
CC = gcc
|
|
LD = gcc
|
|
|
|
# This is the directory hosting include/pcre.h and lib/libpcre.* when REGEX=pcre
|
|
PCREDIR := $(shell pcre-config --prefix 2>/dev/null || :)
|
|
#PCREDIR=/usr/local
|
|
|
|
# This is the directory hosting libtcpsplice.[ah] when USE_TCPSPLICE is set
|
|
TCPSPLICEDIR :=
|
|
|
|
# This is for standard Linux 2.6 with netfilter and epoll()
|
|
COPTS.linux26 = -DNETFILTER
|
|
LIBS.linux26 =
|
|
|
|
# This is for enhanced Linux 2.4 with netfilter and epoll() patch.
|
|
# Warning! If kernel is 2.4 with epoll-lt <= 0.21, then you must add
|
|
# -DEPOLL_CTL_MOD_WORKAROUND to workaround a very rare bug.
|
|
#COPTS.linux24e = -DNETFILTER -DUSE_MY_EPOLL -DEPOLL_CTL_MOD_WORKAROUND
|
|
COPTS.linux24e = -DNETFILTER -DUSE_MY_EPOLL
|
|
LIBS.linux24e =
|
|
|
|
# This is for standard Linux 2.4 with netfilter but without epoll()
|
|
COPTS.linux24 = -DNETFILTER
|
|
LIBS.linux24 =
|
|
|
|
# This is for Linux 2.2
|
|
COPTS.linux22 = -DUSE_GETSOCKNAME
|
|
LIBS.linux22 =
|
|
|
|
# This is for Solaris 8
|
|
COPTS.solaris = -fomit-frame-pointer -DFD_SETSIZE=65536
|
|
LIBS.solaris = -lnsl -lsocket
|
|
|
|
# CPU dependant optimizations
|
|
COPTS.generic = -O2
|
|
COPTS.i586 = -O2 -march=i586 -DCONFIG_HAP_USE_REGPARM
|
|
COPTS.i686 = -O2 -march=i686 -DCONFIG_HAP_USE_REGPARM
|
|
COPTS.ultrasparc = -O6 -mcpu=v9 -mtune=ultrasparc
|
|
|
|
# options for standard regex library
|
|
COPTS.libc=
|
|
LIBS.libc=
|
|
|
|
# options for libpcre
|
|
COPTS.pcre=-DUSE_PCRE -I$(PCREDIR)/include
|
|
LIBS.pcre=-L$(PCREDIR)/lib -lpcreposix -lpcre
|
|
|
|
# options for static libpcre
|
|
COPTS.static-pcre=-DUSE_PCRE -I$(PCREDIR)/include
|
|
LIBS.static-pcre=-L$(PCREDIR)/lib -Wl,-Bstatic -lpcreposix -lpcre -Wl,-Bdynamic
|
|
|
|
# you can enable debug arguments with "DEBUG=-g" or disable them with "DEBUG="
|
|
#DEBUG = -g -DDEBUG_MEMORY -DDEBUG_FULL
|
|
DEBUG = -g
|
|
|
|
# if small memory footprint is required, you can reduce the buffer size. There
|
|
# are 2 buffers per concurrent session, so 16 kB buffers will eat 32 MB memory
|
|
# with 1000 concurrent sessions. Putting it slightly lower than a page size
|
|
# will avoid the additionnal paramters to overflow a page. 8030 bytes is
|
|
# exactly 5.5 TCP segments of 1460 bytes.
|
|
#SMALL_OPTS = -DBUFSIZE=8030 -DMAXREWRITE=1030 -DSYSTEM_MAXCONN=1024
|
|
SMALL_OPTS =
|
|
|
|
# redefine this if you want to add some special PATH to include/libs
|
|
ADDINC =
|
|
ADDLIB =
|
|
|
|
# set some defines when needed.
|
|
# - use -DTPROXY to compile with transparent proxy support.
|
|
DEFINE = -DTPROXY
|
|
|
|
# Now let's determine the version, sub-version and release date.
|
|
# If we're in the GIT tree, we can use the last commit's version and date.
|
|
ifeq ($(IGNOREGIT),)
|
|
VERSION := $(shell [ -d .git/. ] && ref=`git-describe --tags 2>/dev/null` && ref=$${ref%-g*} && echo "$${ref\#v}" )
|
|
endif
|
|
|
|
ifneq ($(VERSION),)
|
|
# OK git is there and works.
|
|
SUBVERS := $(shell comms=`git-log --no-merges v$(VERSION).. 2>/dev/null |grep -c ^commit `; [ $$comms -gt 0 ] && echo "-$$comms" )
|
|
VERDATE := $(shell date +%Y/%m/%d -d "`git-log HEAD^.. 2>/dev/null | grep -m 1 ^Date: | cut -f2- -d: | cut -f1 -d+`" )
|
|
else
|
|
# Otherwise, use the hard-coded version of last tag, number of changes
|
|
# since last tag, and release date.
|
|
VERSION := 1.3.12
|
|
SUBVERS :=
|
|
VERDATE := 2007/06/17
|
|
endif
|
|
|
|
#### build options
|
|
|
|
# do not change this one, enable USE_* variables instead.
|
|
OPTIONS =
|
|
OPT_OBJS =
|
|
|
|
ifneq ($(USE_TCPSPLICE),)
|
|
OPTIONS += -DCONFIG_HAP_TCPSPLICE
|
|
endif
|
|
|
|
# - set USE_CTTPROXY to enable full transparent proxy support
|
|
ifneq ($(USE_CTTPROXY),)
|
|
OPTIONS += -DCONFIG_HAP_CTTPROXY
|
|
OPT_OBJS += src/cttproxy.o
|
|
endif
|
|
|
|
ifneq ($(USE_TPROXY),)
|
|
OPTIONS += -DTPROXY
|
|
endif
|
|
|
|
ifneq ($(USE_POLL),)
|
|
OPTIONS += -DENABLE_POLL
|
|
OPT_OBJS += src/ev_poll.o
|
|
endif
|
|
|
|
ifneq ($(USE_EPOLL),)
|
|
OPTIONS += -DENABLE_EPOLL
|
|
OPT_OBJS += src/ev_epoll.o
|
|
endif
|
|
|
|
ifneq ($(USE_SEPOLL),)
|
|
OPTIONS += -DENABLE_SEPOLL
|
|
OPT_OBJS += src/ev_sepoll.o
|
|
endif
|
|
|
|
ifneq ($(USE_MY_EPOLL),)
|
|
OPTIONS += -DUSE_MY_EPOLL
|
|
endif
|
|
|
|
ifneq ($(USE_NETFILTER),)
|
|
OPTIONS += -DNETFILTER
|
|
endif
|
|
|
|
ifneq ($(USE_EPOLL_WORKAROUND),)
|
|
OPTIONS += -DEPOLL_CTL_MOD_WORKAROUND
|
|
endif
|
|
|
|
ifneq ($(USE_GETSOCKNAME),)
|
|
OPTIONS += -DUSE_GETSOCKNAME
|
|
endif
|
|
|
|
ifneq ($(USE_REGPARM),)
|
|
OPTIONS += -DCONFIG_HAP_USE_REGPARM
|
|
endif
|
|
|
|
ifneq ($(DLMALLOC_SRC),)
|
|
# May be changed to patch PAGE_SIZE on every platform
|
|
DLMALLOC_THRES=4096
|
|
OPT_OBJS += src/dlmalloc.o
|
|
endif
|
|
|
|
ifneq ($(VERSION),)
|
|
OPTIONS += -DCONFIG_HAPROXY_VERSION=\"$(VERSION)$(SUBVERS)\"
|
|
endif
|
|
|
|
ifneq ($(VERDATE),)
|
|
OPTIONS += -DCONFIG_HAPROXY_DATE=\"$(VERDATE)\"
|
|
endif
|
|
|
|
#### end of build options
|
|
|
|
|
|
# global options
|
|
TARGET_OPTS=$(COPTS.$(TARGET))
|
|
REGEX_OPTS=$(COPTS.$(REGEX))
|
|
CPU_OPTS=$(COPTS.$(CPU))
|
|
|
|
COPTS = -Iinclude $(CPU_OPTS) $(TARGET_OPTS) $(REGEX_OPTS) $(SMALL_OPTS) $(DEFINE) $(OPTIONS)
|
|
LIBS=$(LIBS.$(TARGET)) $(LIBS.$(REGEX))
|
|
|
|
ifneq ($(USE_TCPSPLICE),)
|
|
COPTS += -I$(TCPSPLICEDIR)
|
|
LIBS += -L$(TCPSPLICEDIR) -ltcpsplice
|
|
endif
|
|
|
|
COPTS += $(ADDINC)
|
|
LIBS += $(ADDLIB)
|
|
|
|
CFLAGS = -Wall $(COPTS) $(DEBUG)
|
|
LDFLAGS = -g
|
|
|
|
all: haproxy
|
|
|
|
OBJS = src/haproxy.o src/list.o src/chtbl.o src/hashpjw.o src/base64.o \
|
|
src/uri_auth.o src/standard.o src/buffers.o src/log.o src/task.o \
|
|
src/time.o src/fd.o src/regex.o src/cfgparse.o src/server.o \
|
|
src/checks.o src/queue.o src/client.o src/proxy.o \
|
|
src/proto_http.o src/stream_sock.o src/appsession.o src/backend.o \
|
|
src/session.o src/hdr_idx.o src/ev_select.o src/acl.o src/memory.o
|
|
|
|
haproxy: $(OBJS) $(OPT_OBJS)
|
|
$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
|
|
objsize: haproxy
|
|
@objdump -t $^|grep ' g '|grep -F '.text'|awk '{print $$5 FS $$6}'|sort
|
|
|
|
%.o: %.c
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
|
|
src/dlmalloc.o: $(DLMALLOC_SRC)
|
|
$(CC) $(CFLAGS) -DDEFAULT_MMAP_THRESHOLD=$(DLMALLOC_THRES) -c -o $@ $<
|
|
|
|
clean:
|
|
rm -f *.[oas] src/*.[oas] core haproxy test
|
|
for dir in . src include/* doc; do rm -f $$dir/*~ $$dir/*.rej;done
|
|
rm -f haproxy-$(VERSION).tar.gz haproxy-$(VERSION)$(SUBVERS).tar.gz
|
|
rm -f haproxy-$(VERSION) nohup.out gmon.out
|
|
|
|
tar: clean
|
|
ln -s . haproxy-$(VERSION)
|
|
tar --exclude=haproxy-$(VERSION)/.git \
|
|
--exclude=haproxy-$(VERSION)/haproxy-$(VERSION) \
|
|
--exclude=haproxy-$(VERSION)/haproxy-$(VERSION).tar.gz \
|
|
-cf - haproxy-$(VERSION)/* | gzip -c9 >haproxy-$(VERSION).tar.gz
|
|
rm -f haproxy-$(VERSION)
|
|
|
|
git-tar: clean
|
|
git-tar-tree HEAD haproxy-$(VERSION) | gzip -9 > haproxy-$(VERSION)$(SUBVERS).tar.gz
|