# $Id: Makefile.defs,v 1.296.2.30 2006/01/11 00:25:58 janakj Exp $
#
# makefile defs (CC, LD,a.s.o)
#
# Environment variables:
# PREFIX, LOCALBASE, BASEDIR
# INSTALL, TAR , CC, LEX, YACC,
# CPU, CC_EXTRA_OPTS,
# exclude_modules, skip_modules, include_modules
# extra_defs
#
# History:
# --------
# created by andrei
# 2003-02-24 added LOCALBASE, fixed doc-dir for freebsd - patch provided
# by Maxim Sobolev <sobomax@FreeBSD.org>
# 2003-02-25 added -DDISABLE_NAGLE (andrei)
# 2003-03-02 added -DDIGEST_DOMAIN (janakj)
# 2003-03-10 added -xcode=pic32 for module compilation w/ sun cc
# (too many symbols for pic13) (andrei)
# 2003-04-16 added CC_EXTRA_OPTS, s/march/mcpu, added CPU (cpu to optimize
# for, used only with gcc-3.x) (andrei)
# 2003-05-23 check if this makefile was already included (andrei)
# removed -DDIGEST_DOMAIN (andrei)
# 2003-05-30 added extra_defs (andrei)
# 2003-06-06 moved compiler detection before DEFS (andrei)
# 2003-06-10 removed -m32 for gcc 3.x/sparc64 -- it will use
# arch. default: -m32 on solaris, -m64 on *bsd (andrei)
# 2003-09-25 added -pthread into LIBS when compiling on FreeBSD/alpha
# and other FreeBSD arches for which no fast locking assembly
# code exists (sobomax)
# 2003-11-08 mips1 support introduced (andrei)
# 2003-11-24 openbsd 3.4 (elf) fixes (andrei)
# 2004-07-27 darwin (mac os x) port (andrei)
# 2004-09-12 mips2 & cobalt support introduced (andrei)
# 2004-09-28 x86_64 support introduced (andrei)
# 2004-12-14 gcc-3.4 special case added (andrei)
# 2004-12-15 HAVE_ALLOCA_H added (andrei)
# 2004-12-19 amd64 transformed in x86_64 (andrei)
# 2005-04-27 alpha support added (andrei)
# 2005-06-01 use $(LOCALBASE) instead of /usr/{local,pkg} (andrei)
# 2005-06-06 ppc64 support & missing ppc optimizations section added (andrei)
# 2005-07-06 gcc 4.0 optimizations support (andrei)
# 2005-07-25 better solaris arch detection (andrei)
# 2005-10-02 distcc get gcc version hack (andrei)
# check if already included/exported
ifeq ($(makefile_defs), 1)
else
makefile_defs=1
export makefile_defs
# main binary name
MAIN_NAME=ser
#version number
VERSION = 0
PATCHLEVEL = 9
SUBLEVEL = 6
EXTRAVERSION =
RELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
OS = $(shell uname -s | sed -e s/SunOS/solaris/ | tr "[A-Z]" "[a-z]")
ifeq ($(OS),solaris)
GETARCH=uname -p
else
GETARCH=uname -m
endif
ARCH := $(shell $(GETARCH) |sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/armv4l/arm/ -e "s/Power Macintosh/ppc/" \
-e "s/cobalt/mips2/" \
-e s/amd64/x86_64/ )
# fix sparc -> sparc64
ifeq ($(ARCH),sparc)
ifeq ($(shell uname -m),sun4u)
ARCH := sparc64
endif
endif
OSREL = $(shell uname -r)
# TLS support
TLS ?=
ifneq ($(TLS),)
RELEASE:=$(RELEASE)-tls
endif
# extra CC command line options (e.g -march=athlon-mp)
CC_EXTRA_OPTS ?=
# dirs
cfg-dir = etc/ser/
bin-dir = sbin/
modules-dir = lib/ser/modules/
ifeq ($(OS), linux)
doc-dir = share/doc/ser/
man-dir = share/man/
LOCALBASE ?= /usr/local
else
ifeq ($(OS), freebsd)
doc-dir = share/doc/ser/
man-dir = man/
LOCALBASE ?= /usr/local
else
ifeq ($(OS), openbsd)
doc-dir = share/doc/ser/
man-dir = man/
LOCALBASE ?= /usr/local
else
ifeq ($(OS), netbsd)
doc-dir = share/doc/ser
man-dir = man/
LOCALBASE ?= /usr/pkg
else
ifeq ($(OS), darwin)
doc-dir = share/doc/ser/
man-dir = man/
LOCALBASE ?= /usr/local
else
doc-dir = doc/ser/
man-dir = man/
LOCALBASE ?= /usr/local
endif
endif
endif
endif
endif
# install location
DESTDIR ?= $(LOCALBASE)
PREFIX ?= $(DESTDIR)
prefix = $(PREFIX)
# install path is $(basedir) $(prefix)
# example:
# creating a bin. archive in /tmp, which unpacks in /usr/local
# basedir=/tmp
# prefix=/usr/local
BASEDIR ?=
basedir = $(BASEDIR)
# install prefixes for various stuff
cfg-prefix = $(basedir)$(prefix)
bin-prefix = $(basedir)$(prefix)
modules-prefix = $(basedir)$(prefix)
doc-prefix = $(basedir)$(prefix)
man-prefix = $(basedir)$(prefix)
ut-prefix = $(basedir)$(prefix)
# target dirs for various stuff
cfg-target = $(prefix)/$(cfg-dir)
bin-target = $(prefix)/$(bin-dir)
modules-target = $(prefix)/$(modules-dir)
doc-target = $(prefix)/$(doc-dir)
ifeq ($(OS), solaris)
#use GNU versions
INSTALL ?= ginstall
TAR ?= gtar
else
INSTALL ?= install
TAR ?= tar
endif
INSTALL-TOUCH = touch # used to create the file first (good to
# make solaris install work)
INSTALL-CFG = $(INSTALL) -m 644
INSTALL-BIN = $(BSD_INSTALL_PROGRAM)
INSTALL-MODULES = $(BSD_INSTALL_PROGRAM)
INSTALL-DOC = $(BSD_INSTALL_MAN)
INSTALL-MAN = $(BSD_INSTALL_MAN)
INSTALL-SCRIPT = $(BSD_INSTALL_SCRIPT)
#set some vars from the environment (and not make builtins)
CC := $(shell echo "$${CC}")
LEX := $(shell echo "$${LEX}")
YACC := $(shell echo "$${YACC}")
# find compiler name & version
ifeq ($(CC),)
CC=gcc
endif
LD= $(CC)
CC_LONGVER=$(shell if $(CC) -v 2>/dev/null; then \
$(CC) -v 2>&1 ;\
else \
$(CC) -V 2>&1 ; \
fi )
MKTAGS=ctags -R .
#find-out the compiler's name
ifneq (,$(findstring gcc, $(CC_LONGVER)))
CC_NAME=gcc
CC_VER=$(word 1,$(CC)) $(shell $(CC) - --version|head -n 1|cut -d" " -f 3|\
sed -e 's/^.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/'\
-e 's/^[^0-9].*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/')
# sun sed is a little brain damaged => this complicated expression
MKDEP=$(CC) -MM
#transform gcc version into 2.9x or 3.0
CC_SHORTVER=$(shell echo "$(CC_VER)" | cut -d" " -f 2| \
sed -e 's/[^0-9]*-\(.*\)/\1/'| \
sed -e 's/2\.9.*/2.9x/' -e 's/3\.[0-3]\..*/3.0/' -e \
's/3\.[0-3]/3.0/' -e 's/3\.[4-9]\..*/3.4/' -e \
's/3\.[4-9]/3.4/' -e 's/4\.[0-9]\..*/4.x/' -e \
's/4\.[0-9]/4.x/' )
endif
ifneq (, $(findstring Sun, $(CC_LONGVER)))
CC_NAME=suncc
CC_SHORTVER=$(shell echo "$(CC_LONGVER)"|head -n 1| \
sed -e 's/.*\([0-9]\.[0-9]\).*/\1/g' )
CC_VER=$(CC) $(CC_SHORTVER)
MKDEP=$(CC) -xM1
endif
ifneq (, $(findstring Intel(R) C++ Compiler, $(CC_LONGVER)))
# very nice: gcc compatible
CC_NAME=icc
CC_FULLVER=$(shell echo "$(CC_LONGVER)"|head -n 1| \
sed -e 's/.*Version \([0-9]\.[0-9]\.[0-9]*\).*/\1/g' )
CC_SHORTVER=$(shell echo "$(CC_FULLVER)" | cut -d. -f1,2 )
CC_VER=$(CC) $(CC_FULLVER)
MKDEP=$(CC) -MM
endif
ifeq (,$(CC_NAME))
#not found
CC_NAME=$(CC)
CC_SHORTVER=unknown
CC_VER=unknown
MKDEP=gcc -MM
$(warning Unknown compiler $(CC)\; supported compilers: \
gcc, sun cc, intel icc )
endif
# compile-time options
#
# -DSTATS
# allows to print out number of packets processed on CTRL-C;
# implementation still nasty and reports per-process
# -DNO_DEBUG
# turns off some of the debug messages (DBG(...)).
# -DNO_LOG
# completely turns of all the logging (and DBG(...))
# -DEXTRA_DEBUG
# compiles in some extra debugging code
# -DDNS_IP_HACK
# faster ip address resolver for ip strings (e.g "127.0.0.1")
# -DSHM_MEM
# compiles in shared mem. support, needed by some modules and
# by USE_SHM_MEM
# -DSHM_MMAP
# use mmap instead of SYSV shared memory
# -DPKG_MALLOC
# uses a faster malloc (exclusive w/ USE_SHM_MEM)
# -DUSE_SHM_MEM
# all pkg_malloc => shm_malloc (most mallocs use a common sh.
# mem. segment); don't define PKG_MALLOC if you want this!
# -DDBG_QM_MALLOC
# qm_malloc debug code, will cause pkg_malloc and shm_malloc
# to keep and display lot of debuging information: file name,
# function, line number of malloc/free call for each block,
# extra error checking (trying to free the same pointer
# twice, trying to free a pointer alloc'ed with a different
# malloc etc.)
# -DVQ_MALLOC
# additional option to PKG_MALLOC which utilizes a fater then
# qm version
# (not true anymore, q_malloc performs approx. the same)
# -DF_MALLOC
# an even faster malloc, not recommended for debugging
# -DDBG_MALLOC
# issues additional debugging information if lock/unlock is called
# -DFAST_LOCK
# uses fast arhitecture specific locking (see the arh. specific section)
# -DUSE_SYSV_SEM
# uses sys v sems for locking (slower & limited number)
# -DUSE_PTHREAD_MUTEX
# uses pthread mutexes, faster than sys v or posix sems, but do not
# work on all systems inter-processes (e.g. linux)
# -DUSE_POSIX_SEM
# uses posix semaphores for locking (faster than sys v)
# -DBUSY_WAIT
# uses busy waiting on the lock (FAST_LOCK)
# -DADAPTIVE_WAIT
# try busy waiting for a while and if the lock is still held go to
# force reschedule (FAST_LOCK)
# -DADAPTIVE_WAIT_LOOPS=number
# number of loops we busy wait, after "number" loops have elapsed we
# force a reschedule (FAST_LOCK)
# -DNOSMP
# don't use smp compliant locking (faster but won't work on SMP machines)
# (not yet enabled) (FAST_LOCK)
# -DNO_PINGTEL_TAG_HACK
# if enabled, To-header-field will be less liberal and will not accept
# 'tag=' (tag parameter with equal sign and without value); it is called
# this way because such message was sighted from a Pingtel phone
# -DWITH_SNMP_MOD
# if enabled, allows forking of the snmp agent just before child
# forking (done at the top of main_loop). Needed if you want
# to use the snmp module.
# -DUSE_TCP
# compiles in tcp support
# -DDISABLE_NAGLE
# disable the tcp Nagle algorithm (lower delay)
# -DUSE_TLS
# compiles in tls support, requires -DUSE_TCP. Please use
# make TLS=1 instead. (tls support is highly experimental for now)
DEFS+= $(extra_defs) \
-DNAME='"$(MAIN_NAME)"' -DVERSION='"$(RELEASE)"' -DARCH='"$(ARCH)"' \
-DOS='"$(OS)"' -DCOMPILER='"$(CC_VER)"' -D__CPU_$(ARCH) -D__OS_$(OS) \
-DCFG_DIR='"$(cfg-target)"'\
-DSHM_MEM -DSHM_MMAP \
-DDNS_IP_HACK \
-DUSE_IPV6 \
-DUSE_MCAST \
-DUSE_TCP \
-DDISABLE_NAGLE \
#-DPKG_MALLOC \
#-DF_MALLOC \
#-DDBG_QM_MALLOC \
#-DDBG_F_MALLOC \
#-DNO_DEBUG \
#-DNO_LOG \
#-DVQ_MALLOC \
#-DCONTACT_BUG \
#-DDBG_LOCK \
#-DNOSMP \
#-DEXTRA_DEBUG \
#-DUSE_SHM_MEM \
#-DSTATS \
#-DNO_LOG
#PROFILE= -pg #set this if you want profiling
# WARNING: do not add mode=debug or mode=release anymore in the Makefile,
# use make mode=debug all instead. Anyway no by default ser is compiled w/
# debugging symbols in all cases (-g). --andrei
ifneq ($(TLS),)
DEFS+= -DUSE_TLS
endif
ifeq ($(mode),)
mode = release
endif
ifeq ($(mode),debug)
DEFS+= -DEXTRA_DEBUG
endif
# platform dependent settings
# find ld & as name (gnu or solaris)
ifeq ($(OS), solaris)
ifeq ($(CC_NAME), gcc)
LDGCC=$(shell $(CC) -v 2>&1 | grep with-ld| \
sed -e 's/.*--with-ld=\([^ ][^ ]*\).*/\1/' )
ASGCC=$(shell $(CC) -v 2>&1 | grep with-as| \
sed -e 's/.*--with-as=\([^ ][^ ]*\).*/\1/' )
LDPATH=$(shell if [ -z "$(LDGCC)" ] ; then echo "ld" ;\
else \
if $(LDGCC) -V 2>/dev/null 1>/dev/null; then \
echo $(LDGCC); \
else echo "ld" ; \
fi\
fi)
ASPATH=$(shell if [ -z "$(ASGCC)" ] ; then echo "as" ;\
else \
if $(ASGCC) -V 2>/dev/null 1>/dev/null; then \
echo $(ASGCC); \
else echo "as" ; \
fi\
fi)
LDTYPE=$(shell if $(LDPATH) -V 1>/dev/null 2>/dev/null; then \
if $(LDPATH) -V 2>&1|grep GNU >/dev/null; \
then echo gnu; \
else \
if $(LDPATH) -V 2>&1|grep Solaris >/dev/null;\
then echo solaris; \
else \
echo unknown ; \
fi \
fi \
fi)
ASTYPE=$(shell if $(ASPATH) -V 1>/dev/null 2>/dev/null </dev/null; \
then \
if $(ASPATH) -V 2>&1 </dev/null |grep GNU >/dev/null; \
then echo gnu; \
else \
if $(ASPATH) -V 2>&1 </dev/null |grep Sun >/dev/null;\
then echo solaris; \
else \
echo unknown ; \
fi \
fi \
fi)
#$(warning "using ld=$(LDPATH)/$(LDTYPE), as=$(ASPATH)/$(ASTYPE)")
endif
endif
# arh. specific definitions
ifeq ($(ARCH), i386)
use_fast_lock=yes
endif
ifeq ($(ARCH), x86_64)
use_fast_lock=yes
endif
ifeq ($(ARCH), sparc64)
ifeq ($(CC_NAME), gcc)
use_fast_lock=yes
endif
endif
ifeq ($(ARCH), sparc)
# smp no supported on sparc32
DEFS+= -DNOSMP
use_fast_lock=yes
endif
ifeq ($(ARCH), arm)
use_fast_lock=yes
endif
ifeq ($(ARCH), ppc)
use_fast_lock=yes
endif
ifeq ($(ARCH), ppc64)
use_fast_lock=yes
endif
ifeq ($(ARCH), mips)
# mips1 arch. (e.g. R3000) - no hardware locking support
use_fast_lock=no
endif
ifeq ($(ARCH), mips2)
# mips2 arch and newer (mips3=R4000, mips4=R5000 a.s.o)
use_fast_lock=yes
endif
ifeq ($(ARCH), alpha)
use_fast_lock=yes
endif
ifeq ($(use_fast_lock), yes)
DEFS+= -DFAST_LOCK -DADAPTIVE_WAIT -DADAPTIVE_WAIT_LOOPS=1024
found_lock_method=yes
endif
#CFLAGS=
#LDFLAGS=
# setting CFLAGS
ifeq ($(mode), release)
#if i386
ifeq ($(ARCH), i386)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS+=-funroll-loops -Wcast-align $(PROFILE) \
-Wall
#if gcc 4.0+
ifeq ($(CC_SHORTVER), 4.x)
CPU ?= athlon64
CFLAGS+=-minline-all-stringops -malign-double \
-falign-loops \
-ftree-vectorize
else
#if gcc 3.4+
ifeq ($(CC_SHORTVER), 3.4)
CPU ?= athlon
CFLAGS+=-minline-all-stringops -malign-double \
-falign-loops \
-mtune=$(CPU)
else
#if gcc 3.0+
ifeq ($(CC_SHORTVER), 3.0)
CPU ?= athlon
CFLAGS+=-minline-all-stringops -malign-double \
-falign-loops \
-mcpu=$(CPU)
else
ifeq ($(CC_SHORTVER), 2.9x) #older gcc version (2.9[1-5])
$(warning Old gcc detected ($(CC_SHORTVER)), use gcc >= 3.1 \
for better results)
CFLAGS+=-m486 \
-malign-loops=4
else
#really old version
$(warning You are using an old and unsupported gcc \
version ($(CC_SHORTVER)), compile at your own risk!)
endif # CC_SHORTVER, 2.9x
endif # CC_SHORTVER, 3.0
endif # CC_SHORTVER, 3.4
endif # CC_SHORTVER, 4.x
else # CC_NAME, gcc
ifeq ($(CC_NAME), icc)
CFLAGS+=-ipo -ipo_obj -unroll $(PROFILE) \
-tpp6 -xK #-openmp #optimize for PIII
# -prefetch doesn't seem to work
#( ty to inline acroos files, unroll loops,prefetch,
# optimize for PIII, use PIII instructions & vect.,
# mutlithread loops)
else
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, icc
endif #CC_NAME, gcc
endif #ARCH, i386
#x86_64
ifeq ($(ARCH), x86_64)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS+=-funroll-loops -Wcast-align $(PROFILE) \
-Wall
#if gcc 4.0+
ifeq ($(CC_SHORTVER), 4.x)
CPU ?= opteron
CFLAGS+=-minline-all-stringops \
-falign-loops \
-ftree-vectorize \
-mtune=$(CPU)
else
#if gcc 3.4
ifeq ($(CC_SHORTVER), 3.4)
CPU ?= athlon64
CFLAGS+=-minline-all-stringops \
-falign-loops
else
#if gcc 3.0
ifeq ($(CC_SHORTVER), 3.0)
CPU ?= athlon64
CFLAGS+=-minline-all-stringops \
-falign-loops
#-mcpu=$(CPU) \ # not working on all x86_64 gccs
#-mcpu=athlon
else
ifeq ($(CC_SHORTVER), 2.9x) #older gcc version (2.9[1-5])
$(warning Old gcc detected ($(CC_SHORTVER)), use gcc >= 3.1 \
for better results)
CFLAGS+=-m486 \
-malign-loops=4
else
#really old version
$(warning You are using an old and unsupported gcc \
version ($(CC_SHORTVER)), compile at your own risk!)
endif # CC_SHORTVER, 2.9x
endif # CC_SHORTVER, 3.0
endif # CC_SHORTVER, 3.4
endif # CC_SHORTVER, 4.x
else # CC_NAME, gcc
ifeq ($(CC_NAME), icc)
CFLAGS+=-ipo -ipo_obj -unroll $(PROFILE) \
-tpp6 -xK #-openmp #optimize for PIII
# -prefetch doesn't seem to work
#( ty to inline acroos files, unroll loops,prefetch,
# optimize for PIII, use PIII instructions & vect.,
# mutlithread loops)
else
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, icc
endif #CC_NAME, gcc
endif #ARCH, x86_64
#if sparc
ifeq ($(ARCH), sparc64)
#if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS+=-funroll-loops $(PROFILE) \
-Wall\
#-Wcast-align \
#-Wmissing-prototypes
#if gcc 4.x
ifeq ($(CC_SHORTVER), 4.x)
CPU ?= ultrasparc
#use 32bit for now
CFLAGS+=-mcpu=ultrasparc -minline-all-stringops \
-mtune=$(CPU) \
-ftree-vectorize
else
#if gcc 3.4
ifeq ($(CC_SHORTVER), 3.4)
CPU ?= ultrasparc
#use 32bit for now
CFLAGS+= -mcpu=ultrasparc -mtune=$(CPU)
else
#if gcc 3.0
ifeq ($(CC_SHORTVER), 3.0)
CPU ?= ultrasparc
#use 32bit for now
CFLAGS+= -mcpu=ultrasparc -mtune=$(CPU) \
# use -m64 to force 64 bit (but add it also to LDFLAGS),
# -m32 for 32 bit (default on solaris),
# nothing for arch. default
# -mcpu=v9 or ultrasparc? # -mtune implied by -mcpu
#-mno-epilogue #try to inline function exit code
#-mflat # omit save/restore
#-,faster-structs #faster non Sparc ABI structure copy ops
else # CC_SHORTVER, 3.0
ifeq ($(CC_SHORTVER), 2.9x) #older gcc version (2.9[1-5])
$(warning Old gcc detected ($(CC_SHORTVER)), use gcc >= 3.1 \
for better results)
ifneq ($(OS), netbsd)
# on netbsd/sparc64, gcc 2.95.3 does not compile
# ser with -mv8
CFLAGS+= -mv8
endif
ifeq ($(ASTYPE), solaris)
CFLAGS+= -Wa,-xarch=v8plus
endif
else #CC_SHORTVER, 2.9x
#really old version
$(warning You are using an old and unsupported gcc \
version ($(CC_SHORTVER)), compile at your own risk!)
CFLAGS+= -mv8
ifeq ($(ASTYPE), solaris)
CFLAGS+= -Wa,-xarch=v8plus
endif
endif #CC_SHORTVER, 2.9x
endif #CC_SHORTVER, 3.0
endif #CC_SHORTVER, 3.4
endif #CC_SHORTVER, 4.x
else #CC_NAME, gcc
ifeq ($(CC_NAME), suncc)
CFLAGS+=-g -xO5 -fast -native -xarch=v8plusa -xCC \
-xc99 # C99 support
# -Dinline="" # add this if cc < 5.3 (define inline as null)
else
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, suncc
endif #CC_NAME, gcc
endif #ARCH, sparc64
#if ipaq/netwinder
ifeq ($(ARCH), arm)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS+=-funroll-loops -Wcast-align $(PROFILE) \
-Wall
#if gcc 4.x+
ifeq ($(CC_SHORTVER), 4.x)
CFLAGS+=-mcpu=strongarm1100 -minline-all-stringops \
-ftree-vectorize
else
#if gcc 3.4+
ifeq ($(CC_SHORTVER), 3.4)
CFLAGS+= -mcpu=strongarm1100
else
#if gcc 3.0
ifeq ($(CC_SHORTVER), 3.0)
CFLAGS+= -mcpu=strongarm1100
#-mcpu=athlon
else
ifeq ($(CC_SHORTVER), 2.9x) #older gcc version (2.9[1-5])
$(warning Old gcc detected ($(CC_SHORTVER)), use gcc 3.0.x \
for better results)
CFLAGS+=
else
#really old version
$(warning You are using an old and unsupported gcc \
version ($(CC_SHORTVER)), compile at your own risk!)
endif # CC_SHORTVER, 2.9x
endif # CC_SHORTVER, 3.0
endif # CC_SHORTVER, 3.4
endif # CC_SHORTVER, 4.0
else # CC_NAME, gcc
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, gcc
endif #ARCH, arm
#if mips (R3000)
ifeq ($(ARCH), mips)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS+=-funroll-loops -Wcast-align $(PROFILE) \
-Wall
#if gcc 4.0+
ifeq ($(CC_SHORTVER), 4.x)
CFLAGS+=-mcpu=r3000 -minline-all-stringops \
-ftree-vectorize
else
#if gcc 3.4+
ifeq ($(CC_SHORTVER), 3.4)
CFLAGS+= -mcpu=r3000
else
#if gcc 3.0
ifeq ($(CC_SHORTVER), 3.0)
CFLAGS+= -mcpu=r3000
#-mcpu=athlon
else
ifeq ($(CC_SHORTVER), 2.9x) #older gcc version (2.9[1-5])
$(warning Old gcc detected ($(CC_SHORTVER)), use gcc 3.0.x \
for better results)
CFLAGS+=-mcpu=r3000
else
#really old version
$(warning You are using an old and unsupported gcc \
version ($(CC_SHORTVER)), compile at your own risk!)
endif # CC_SHORTVER, 2.9x
endif # CC_SHORTVER, 3.0
endif # CC_SHORTVER, 3.4
endif # CC_SHORTVER, 4.x
else # CC_NAME, gcc
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, gcc
endif #ARCH, mips
#if >=mips2 (R4000, R5000, R6000 ....)
ifeq ($(ARCH), mips2)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS+= -mips2 -funroll-loops $(PROFILE) \
-Wall
#if gcc 4.0+
ifeq ($(CC_SHORTVER), 4.x)
CFLAGS+=-minline-all-stringops -ftree-vectorize
else
#if gcc 3.4+
ifeq ($(CC_SHORTVER), 3.4)
CFLAGS+=
else
#if gcc 3.0
ifeq ($(CC_SHORTVER), 3.0)
CFLAGS+=
else
ifeq ($(CC_SHORTVER), 2.9x) #older gcc version (2.9[1-5])
$(warning Old gcc detected ($(CC_SHORTVER)), use gcc 3.0.x \
for better results)
CFLAGS+=
else
#really old version
$(warning You are using an old and unsupported gcc \
version ($(CC_SHORTVER)), compile at your own risk!)
endif # CC_SHORTVER, 2.9x
endif # CC_SHORTVER, 3.0
endif # CC_SHORTVER, 3.4
endif # CC_SHORTVER, 4.x
else # CC_NAME, gcc
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, gcc
endif #ARCH, mips2
#if alpha
ifeq ($(ARCH), alpha)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS= -O9 -funroll-loops $(PROFILE) -Wall
#if gcc 4.0+
ifeq ($(CC_SHORTVER), 4.x)
CFLAGS+=-minline-all-stringops
else
#if gcc 3.4+
ifeq ($(CC_SHORTVER), 3.4)
CFLAGS+=
else
#if gcc 3.0
ifeq ($(CC_SHORTVER), 3.0)
CFLAGS+=
else
ifeq ($(CC_SHORTVER), 2.9x) #older gcc version (2.9[1-5])
$(warning Old gcc detected ($(CC_SHORTVER)), use gcc 3.0.x \
for better results)
CFLAGS+=
else
#really old version
$(warning You are using an old and unsupported gcc \
version ($(CC_SHORTVER)), compile at your own risk!)
endif # CC_SHORTVER, 2.9x
endif # CC_SHORTVER, 3.0
endif # CC_SHORTVER, 3.4
endif # CC_SHORTVER, 4.x
else # CC_NAME, gcc
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, gcc
endif #ARCH, alpha
#if ppc
ifeq ($(ARCH), ppc)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS= -O9 -funroll-loops $(PROFILE) -Wall
#if gcc 4.0+
ifeq ($(CC_SHORTVER), 4.x)
CPU ?= powerpc
CFLAGS+=-ftree-vectorize \
-mtune=$(CPU) -maltivec
else
#if gcc 3.4+
ifeq ($(CC_SHORTVER), 3.4)
CFLAGS+=
else
#if gcc 3.0
ifeq ($(CC_SHORTVER), 3.0)
CFLAGS+=
else
ifeq ($(CC_SHORTVER), 2.9x) #older gcc version (2.9[1-5])
$(warning Old gcc detected ($(CC_SHORTVER)), use gcc 3.0.x \
for better results)
CFLAGS+=
else
#really old version
$(warning You are using an old and unsupported gcc \
version ($(CC_SHORTVER)), compile at your own risk!)
endif # CC_SHORTVER, 2.9x
endif # CC_SHORTVER, 3.0
endif # CC_SHORTVER, 3.4
endif # CC_SHORTVER, 4.x
else # CC_NAME, gcc
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, gcc
endif #ARCH, ppc
#if ppc64
ifeq ($(ARCH), ppc64)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS= -O9 -funroll-loops $(PROFILE) -Wall
ifeq ($(CC_SHORTVER), 4.x)
CPU ?= powerpc64
CFLAGS+=-ftree-vectorize \
-mtune=$(CPU) -maltivec
else
#if gcc 3.4+
ifeq ($(CC_SHORTVER), 3.4)
CFLAGS+=
else
#if gcc 3.0
ifeq ($(CC_SHORTVER), 3.0)
CFLAGS+=
else
ifeq ($(CC_SHORTVER), 2.9x) #older gcc version (2.9[1-5])
$(warning Old gcc detected ($(CC_SHORTVER)), use gcc 3.0.x \
for better results)
CFLAGS+=
else
#really old version
$(warning You are using an old and unsupported gcc \
version ($(CC_SHORTVER)), compile at your own risk!)
endif # CC_SHORTVER, 2.9x
endif # CC_SHORTVER, 3.0
endif # CC_SHORTVER, 3.4
endif # CC_SHORTVER, 4.x
else # CC_NAME, gcc
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, gcc
endif #ARCH, ppc
CFLAGS+= $(CC_EXTRA_OPTS)
# setting LDFLAGS
ifeq ($(CC_NAME), gcc)
ifeq ($(LDTYPE), solaris)
# solaris ld
LDFLAGS+=-O2 $(PROFILE)
MOD_LDFLAGS=-G $(LDFLAGS)
else
#gcc and maybe others, => gnu ld
LDFLAGS+=-Wl,-O2 -Wl,-E $(PROFILE)
MOD_LDFLAGS=-shared $(LDFLAGS)
endif
endif
ifeq ($(CC_NAME), icc)
#gcc and maybe others
LDFLAGS+=-Wl,-O2 -Wl,-E $(PROFILE)
MOD_LDFLAGS=-shared $(LDFLAGS)
endif
ifeq ($(CC_NAME), suncc)
LDFLAGS+=-xO5 $(PROFILE)
MOD_LDFLAGS=-G $(LDFLAGS)
endif
# we need -fPIC -DPIC only for shared objects, we don't need them for
# the executable file, because it's always loaded at a fixed address
# -andrei
else #mode,release
ifeq ($(CC_NAME), gcc)
CFLAGS+=-Wcast-align $(PROFILE)
ifeq ($(ARCH), sparc64)
CFLAGS+= -mcpu=ultrasparc
endif
ifeq ($(LDTYPE), solaris)
#solaris ld
LDFLAGS+=-g $(PROFILE)
MOD_LDFLAGS=-G $(LDFLAGS)
else
#gnu or other ld type
LDFLAGS+=-g -Wl,-E $(PROFILE)
MOD_LDFLAGS=-shared $(LDFLAGS)
endif
endif
ifeq ($(CC_NAME), icc)
CFLAGS+=$(PROFILE)
LDFLAGS+=-g -Wl,-E $(PROFILE)
MOD_LDFLAGS=-shared $(LDFLAGS)
endif
ifeq ($(CC_NAME), suncc)
CFLAGS+= $(PROFILE)
LDFLAGS+=-g $(PROFILE)
MOD_LDFLAGS=-G $(LDFLAGS)
endif
endif #mode=release
#*FLAGS used for compiling the modules
ifeq ($(CC_NAME), gcc)
MOD_CFLAGS=-fPIC -DPIC $(CFLAGS)
endif
ifeq ($(CC_NAME), icc)
MOD_CFLAGS=-Kpic $(CFLAGS)
endif
ifeq ($(CC_NAME), suncc)
MOD_CFLAGS=-xcode=pic32 $(CFLAGS)
endif
ifeq ($(LEX),)
LEX=flex
endif
ifeq ($(YACC),)
YACC=bison
endif
YACC_FLAGS=-d -b cfg
# on solaris add -lxnet (e.g. LIBS= -lxnet)
LIBS= -lfl -ldl -lresolv
#os specific stuff
ifeq ($(OS), linux)
DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_SYSV_SEM # try posix sems
found_lock_method=yes
endif
endif
ifeq ($(OS), solaris)
DEFS+= -DHAVE_GETIPNODEBYNAME -DHAVE_SYS_SOCKIO_H -DHAVE_SCHED_YIELD \
-DHAVE_ALLOCA_H -DUSE_SIGACTION
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_PTHREAD_MUTEX # try pthread sems
found_lock_method=yes
endif
ifeq ($(mode), release)
#use these only if you're using gcc with Solaris ld
#LDFLAGS=-O2 $(PROFILE)
#MOD_LDFLAGS=-O2 -G
else
#LDFLAGS=-g $(PROFILE)
#MOD_LDFLAGS=-g -G
endif
ifneq ($(TLS),)
DEFS+= -I/usr/local/ssl/include
endif
YACC=yacc
ifeq ($(CC_NAME), suncc)
LIBS= -lfast -ldl -lresolv
endif
OLD_SOLARIS= $(shell echo "$(OSREL)" | \
sed -e 's/^5\.[0-6][^0-9]*$$/yes/' )
LIBS+= -L$(LOCALBASE)/lib -lfl -lxnet -lnsl
ifeq ($(OLD_SOLARIS), yes)
LIBS+=-lposix4
else
LIBS+=-lrt
endif
# -lrt needed for sched_yield
endif
ifeq ($(OS), freebsd)
DEFS+=-DHAVE_SOCKADDR_SA_LEN -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN \
-DHAVE_SCHED_YIELD -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_CONNECT_ECONNRESET_BUG \
-I$(LOCALBASE)/include
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_PTHREAD_MUTEX # try pthread sems
found_lock_method=yes
LIBS= -pthread -lfl #dlopen is in libc
else
LIBS= -lfl -L$(LOCALBASE)/lib #dlopen is in libc
endif
YACC=yacc
endif
ifeq ($(OS), openbsd)
DEFS+=-DHAVE_SOCKADDR_SA_LEN -DHAVE_GETHOSTBYNAME2 \
-DHAVE_UNION_SEMUN -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_CONNECT_ECONNRESET_BUG
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_PTHREAD_MUTEX # try pthread sems
found_lock_method=yes
endif
# (symbols on openbsd are prefixed by "_")
YACC=yacc
# no sched_yield on openbsd unless linking with c_r (not recommended)
LIBS= -lfl
OPENBSD_IS_AOUT= $(shell echo "$(OSREL)" | \
sed -e 's/^3\.[0-3][^0-9]*$$/yes/' |sed -e 's/^[0-2]\..*/yes/')
# exception: on sparc openbsd 3.2 is elf and not aout
ifeq ($(OSREL), 3.2)
ifeq ($(ARCH), sparc)
OPENBSD_IS_AOUT:=no
endif
ifeq ($(ARCH), sparc64)
OPENBSD_IS_AOUT:=no
endif
endif
ifeq ($(OPENBSD_IS_AOUT), yes)
DEFS+=-DDLSYM_PREFIX='"_"'
LDFLAGS= # openbsd ld doesn't like -O2 or -E
endif
endif # if opensd
ifeq ($(OS), netbsd)
DEFS+=-DHAVE_SOCKADDR_SA_LEN -DHAVE_GETHOSTBYNAME2 \
-DHAVE_MSGHDR_MSG_CONTROL -DHAVE_CONNECT_ECONNRESET_BUG
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_SYSV_SEM # try pthread sems
found_lock_method=yes
endif
YACC=yacc
LIBS= -lfl
endif
# OS X support, same as freebsd
ifeq ($(OS), darwin)
DEFS+=-DHAVE_SOCKADDR_SA_LEN -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN \
-DHAVE_SCHED_YIELD -DHAVE_MSGHDR_MSG_CONTROL \
-DUSE_ANON_MMAP \
-DNDEBUG -DHAVE_CONNECT_ECONNRESET_BUG
# -DNDEBUG used to turn off assert (assert wants to call
# eprintf which doesn't seem to be defined in any shared lib
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_PTHREAD_MUTEX # try pthread sems
found_lock_method=yes
LIBS= -pthread -lfl -lresolv #dlopen is in libc
else
LIBS= -lfl -lresolv #dlopen is in libc
endif
LDFLAGS= # darwin doesn't like -O2 or -E
MOD_LDFLAGS= -bundle -bundle_loader ../../$(MAIN_NAME)
YACC=yacc
endif
ifneq (,$(findstring CYGWIN, $(OS)))
#cygwin is the same as common
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_SYSV_SEM # try sys v sems
found_lock_method=yes
endif
endif
#add libssl if needed
ifneq ($(TLS),)
DEFS+= -I$(LOCALBASE)/ssl/include
LIBS+= -L$(LOCALBASE)/lib -L$(LOCALBASE)/ssl/lib -lssl -lcrypto
endif
ifneq ($(found_lock_method), yes)
$(warning No locking method found so far, trying SYS V sems)
DEFS+= -DUSE_SYSV_SEM # try sys v sems
found_lock_method=yes
endif
endif # ifeq ($(makefile_defs, 1)
syntax highlighted by Code2HTML, v. 0.9.1