# $Id: Makefile.defs 2610 2007-08-16 14:21:47Z miconda $
#
# makefile defs (CC, LD,a.s.o)
#
# Environment variables:
# PREFIX, LOCALBASE, SYSBASE, BASEDIR
# INSTALL, TAR , CC, LEX, YACC,
# CPU, CC_EXTRA_OPTS, LD_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)
# 2006-10-19 gcc-3.4 and gcc-3.0 cases merged as they proved to be identical;
# CC_CLASS replaces CC_SHORTVER while CC_SHORTVER is keept without
# any wildcards (bogdan)
# 2007-02-12 use $(SYSBASE) instead of /usr - easy to switch to another
# root for cross compiling (bogdan)
# 2007-02-12 CPU replaced with CPU_TYPE to avoid overlapping with system
# env. variables on some OS. (bogdan)
# check if already included/exported
ifeq ($(makefile_defs), 1)
else
makefile_defs=1
export makefile_defs
# main binary name
MAIN_NAME=openser
#version number
VERSION = 1
PATCHLEVEL = 2
SUBLEVEL = 2
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/sun4v/sparc64/ -e "s/cobalt/mips2/" \
-e s/amd64/x86_64/ )
# fix sparc -> sparc64
ifeq ($(ARCH),sparc)
ifeq ($(shell uname -m),sun4u)
ARCH := sparc64
endif
ifeq ($(shell uname -m),sun4v)
ARCH := sparc64
endif
endif
SMP_STR = $(shell uname -v | grep -i "SMP")
ifeq (,$(SMP_STR))
ISSMP=no
else
ISSMP=yes
endif
OSREL = $(shell uname -r)
# numerical version (good for comparisons: A.B.C => A*1000000+B*1000+C)
OSREL_N= $(shell echo $(OSREL) | sed -e 's/^[^0-9]*//' \
-e 's/^\([0-9][0-9]*\(\.[0-9][0-9]*\)*\).*$$/\1/g' | \
(IFS=. read A B C D; R=0; \
[ -n "$$A" ] && R=`expr $$R \* 1000 + $$A` && \
[ -n "$$B" ] && R=`expr $$R \* 1000 + $$B` && \
[ -n "$$C" ] && R=`expr $$R \* 1000 + $$C`; echo $$R ) )
# nicer compilation?
Q=
NICER ?=
ifneq ($(NICER),)
export Q=@
endif
# TLS support
TLS ?=
ifneq ($(TLS),)
RELEASE:=$(RELEASE)-tls
else
RELEASE:=$(RELEASE)-notls
endif
# extra CC command line options (e.g -march=athlon-mp)
CC_EXTRA_OPTS ?=
# system base
SYSBASE ?= /usr
# dirs
cfg-dir = etc/$(MAIN_NAME)/
bin-dir = sbin/
ARCH_B= $(shell echo $(ARCH) | sed -e 's/.*64.*/64b/')
ifeq ($(ARCH_B),64b)
LIBDIR ?= lib64
else
LIBDIR = lib
# assume 32b - it is not really used further
ARCH_B=32b
endif
lib-dir = $(LIBDIR)/$(MAIN_NAME)
modules-dir = $(LIBDIR)/$(MAIN_NAME)/modules/
ifeq ($(OS), linux)
doc-dir = share/doc/$(MAIN_NAME)/
man-dir = share/man/
LOCALBASE ?= $(SYSBASE)/local
else
ifeq ($(OS), freebsd)
doc-dir = share/doc/$(MAIN_NAME)/
man-dir = man/
LOCALBASE ?= $(SYSBASE)/local
else
ifeq ($(OS), openbsd)
doc-dir = share/doc/$(MAIN_NAME)/
man-dir = man/
LOCALBASE ?= $(SYSBASE)/local
else
ifeq ($(OS), netbsd)
doc-dir = share/doc/$(MAIN_NAME)
man-dir = man/
LOCALBASE ?= $(SYSBASE)/pkg
else
ifeq ($(OS), darwin)
doc-dir = share/doc/$(MAIN_NAME)/
man-dir = man/
LOCALBASE ?= $(SYSBASE)/local
else
doc-dir = doc/$(MAIN_NAME)/
man-dir = man/
LOCALBASE ?= $(SYSBASE)/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)
lib-target = $(prefix)/$(lib-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 = : # used to create the file first (good to
# make solaris install work)
INSTALL_CFG = $(BSD_INSTALL_DATA)
INSTALL_BIN = $(BSD_INSTALL_PROGRAM)
INSTALL_MODULES = $(BSD_INSTALL_PROGRAM)
INSTALL_DOC = $(BSD_INSTALL_DATA)
INSTALL_MAN = $(BSD_INSTALL_MAN)
#set some vars from the environment (and not make builtins)
CC := $(shell echo "$${CC}")
LEX := $(shell echo "$${LEX}")
YACC := $(shell echo "$${YACC}")
ifeq ($(SVNVERSION),)
SVNVERSION = $(shell which svnversion)
endif
ifeq ($(OLDSVNREVISION),)
OLDSVNREVISION = $(shell if [ -f ".svnrevision" ] ; then \
cat .svnrevision ;\
fi )
endif
ifeq ($(SVNREVISION),)
SVNREVISION = $(shell if [ -d .svn -a -f main.c -a -f Makefile.defs ] ; then \
if [ -x "$(SVNVERSION)" ] ; then \
$(SVNVERSION) -n -c . ;\
fi ;\
fi )
endif
ifneq ($(SVNREVISION),)
NEWSVNREVISION = $(shell if [ "$(SVNREVISION)" != "$(OLDSVNREVISION)" ] ; then \
echo "dosvnrev" ; \
fi )
endif
# 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
CC_SHORTVER=$(shell echo "$(CC_VER)" | cut -d" " -f 2| \
sed -e 's/[^0-9]*-\(.*\)/\1/'| \
sed -e 's/\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/' )
#transform gcc version into 2.9x, 3.x or 4.x
CC_CLASS=$(shell echo "$(CC_SHORTVER)" | \
sed -e 's/2\.9.*/2.9x/' -e 's/3\.[0-9]/3.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
#
# -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
# -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)
# -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)
# -DHAVE_RESOLV_RES
# support for changing some of the resolver parameters present
# (_res structure in <resolv.h>)
# -DSTATISTICS
# enables statistics manager - support for collecting statistics
# from core and all modules; all info may be fetch via FIFO/UNIX_SOCK
DEFS+= $(extra_defs) \
-DNAME='"$(MAIN_NAME)"' -DVERSION='"$(RELEASE)"' -DARCH='"$(ARCH)"' \
-DOS='"$(OS)"' -DCOMPILER='"$(CC_VER)"' -D__CPU_$(ARCH) -D__OS_$(OS) \
-D__SMP_$(ISSMP) -DCFG_DIR='"$(cfg-target)"'\
-DPKG_MALLOC \
-DSHM_MEM -DSHM_MMAP \
-DUSE_IPV6 \
-DUSE_MCAST \
-DUSE_TCP \
-DDISABLE_NAGLE \
-DHAVE_RESOLV_RES \
-DSTATISTICS \
-DF_MALLOC \
#-DDBG_QM_MALLOC \
#-DDBG_F_MALLOC \
#-DNO_DEBUG \
#-DNO_LOG \
#-DVQ_MALLOC \
#-DDBG_LOCK \
#-DNOSMP \
#-DEXTRA_DEBUG \
#-DUSE_SHM_MEM
#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 openser
# is compiled w/ debugging symbols in all cases (-g). --andrei
ifneq ($(SVNREVISION),)
DEFS+= -DSVNREVISION='"$(SVNREVISION)"'
endif
ifneq ($(FREERADIUS),)
DEFS+= -DUSE_FREERADIUS
RADIUS_LIB= -lfreeradius-client
else
RADIUS_LIB= -lradiusclient-ng
endif
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=$(shell echo "$${CFLAGS}")
LDFLAGS+=
ifeq (,$(CFLAGS))
# setting CFLAGS
ifeq ($(mode), release)
#if i386
ifeq ($(ARCH), i386)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS+=-g -O9 -funroll-loops -Wcast-align $(PROFILE) \
-Wall
#if gcc 4.0+
ifeq ($(CC_CLASS), 4.x)
CPU_TYPE ?= athlon64
CFLAGS+=-minline-all-stringops \
-falign-loops \
-ftree-vectorize \
-mtune=$(CPU_TYPE)
else
#if gcc 3.0+
ifeq ($(CC_CLASS), 3.x)
CPU_TYPE ?= athlon
CFLAGS+=-minline-all-stringops \
-falign-loops \
-march=$(CPU_TYPE)
else
ifeq ($(CC_CLASS), 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_CLASS, 2.9x
endif # CC_CLASS, 3.x
endif # CC_CLASS, 4.x
else # CC_NAME, gcc
ifeq ($(CC_NAME), icc)
CFLAGS+=-g -O3 -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 #CC_NAME, icc
ifeq ($(CC_NAME), suncc)
CFLAGS+=-g -xO5 -fast -native -xCC \
-xc99=no_lib # 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, icc
endif #CC_NAME, gcc
endif #ARCH, i386
#x86_64
ifeq ($(ARCH), x86_64)
# if gcc
ifeq ($(CC_NAME), gcc)
#common stuff
CFLAGS+=-g -O9 -funroll-loops -Wcast-align $(PROFILE) \
-Wall
#if gcc 4.0+
ifeq ($(CC_CLASS), 4.x)
CPU_TYPE ?= opteron
CFLAGS+=-minline-all-stringops \
-falign-loops \
-ftree-vectorize \
-mtune=$(CPU_TYPE)
else
#if gcc 3.0+
ifeq ($(CC_CLASS), 3.x)
CPU_TYPE ?= athlon64
CFLAGS+=-minline-all-stringops \
-falign-loops
else
ifeq ($(CC_CLASS), 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_CLASS, 2.9x
endif # CC_CLASS, 3.x
endif # CC_CLASS, 4.x
else # CC_NAME, gcc
ifeq ($(CC_NAME), icc)
CFLAGS+=-g -O3 -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+=-g -O9 -funroll-loops $(PROFILE) \
-Wall\
#-Wcast-align \
#-Wmissing-prototypes
#if gcc 4.x
ifeq ($(CC_CLASS), 4.x)
CPU_TYPE ?= ultrasparc
#use 32bit for now
CFLAGS+=-mcpu=ultrasparc \
-mtune=$(CPU_TYPE) \
-ftree-vectorize
else
#if gcc 3.0+
ifeq ($(CC_CLASS), 3.x)
CPU_TYPE ?= ultrasparc
#use 32bit for now
CFLAGS+= -mcpu=ultrasparc -mtune=$(CPU_TYPE) \
# 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_CLASS, 3.0
ifeq ($(CC_CLASS), 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_CLASS, 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_CLASS, 2.9x
endif #CC_CLASS, 3.x
endif #CC_CLASS, 4.x
else #CC_NAME, gcc
ifeq ($(CC_NAME), suncc)
CFLAGS+=-g -xO5 -fast -native -xarch=v8plusa -xCC \
-xc99=no_lib # 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+=-O9 -funroll-loops -Wcast-align $(PROFILE) \
-Wall
#if gcc 4.x+
ifeq ($(CC_CLASS), 4.x)
CFLAGS+=-mcpu=strongarm1100 -minline-all-stringops \
-ftree-vectorize
else
#if gcc 3.0+
ifeq ($(CC_CLASS), 3.x)
CFLAGS+= -mcpu=strongarm1100
else
ifeq ($(CC_CLASS), 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_CLASS, 2.9x
endif # CC_CLASS, 3.x
endif # CC_CLASS, 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+=-O9 -funroll-loops -Wcast-align $(PROFILE) \
-Wall
#if gcc 4.0+
ifeq ($(CC_CLASS), 4.x)
CFLAGS+=-mcpu=r3000 -minline-all-stringops \
-ftree-vectorize
else
#if gcc 3.0+
ifeq ($(CC_CLASS), 3.x)
CFLAGS+= -mcpu=r3000
#-mcpu=athlon
else
ifeq ($(CC_CLASS), 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_CLASS, 2.9x
endif # CC_CLASS, 3.x
endif # CC_CLASS, 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 -O9 -funroll-loops $(PROFILE) \
-Wall
#if gcc 4.0+
ifeq ($(CC_CLASS), 4.x)
CFLAGS+=-minline-all-stringops -ftree-vectorize
else
#if gcc 3.0+
ifeq ($(CC_CLASS), 3.x)
CFLAGS+=
else
ifeq ($(CC_CLASS), 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_CLASS, 2.9x
endif # CC_CLASS, 3.x
endif # CC_CLASS, 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_CLASS), 4.x)
CFLAGS+=-minline-all-stringops
else
#if gcc 3.0+
ifeq ($(CC_CLASS), 3.x)
CFLAGS+=
else
ifeq ($(CC_CLASS), 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_CLASS, 2.9x
endif # CC_CLASS, 3.x
endif # CC_CLASS, 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_CLASS), 4.x)
CPU_TYPE ?= powerpc
CFLAGS+=-ftree-vectorize \
-mtune=$(CPU_TYPE) -maltivec
else
#if gcc 3.0+
ifeq ($(CC_CLASS), 3.x)
CFLAGS+=
else
ifeq ($(CC_CLASS), 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_CLASS, 2.9x
endif # CC_CLASS, 3.x
endif # CC_CLASS, 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_CLASS), 4.x)
CPU_TYPE ?= powerpc64
CFLAGS+=-ftree-vectorize \
-mtune=$(CPU_TYPE) -maltivec
else
#if gcc 3.0+
ifeq ($(CC_CLASS), 3.x)
CFLAGS+=
else
ifeq ($(CC_CLASS), 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_CLASS, 2.9x
endif # CC_CLASS, 3.x
endif # CC_CLASS, 4.x
else # CC_NAME, gcc
#other compilers
$(error Unsupported compiler ($(CC):$(CC_NAME)), try gcc)
endif #CC_NAME, gcc
endif #ARCH, ppc
endif # CFLAGS not set
CFLAGS+= $(CC_EXTRA_OPTS)
LD_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 += -g -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+=-g $(PROFILE)
LDFLAGS+=-g -Wl,-E $(PROFILE)
MOD_LDFLAGS=-shared $(LDFLAGS)
endif
ifeq ($(CC_NAME), suncc)
CFLAGS+= -g $(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=-Kpic $(CFLAGS)
endif
DEFAULT_YACC=bison
# on solaris add -lxnet (e.g. LIBS= -lxnet)
LIBS= -ldl -lresolv
ifeq ($(tinfo),yes)
DEFS+= -DTIMING_INFO
LIBS+= -lrt
endif
#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 \
-DHAVE_TIMEGM
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_SYSV_SEM # try posix sems
found_lock_method=yes
endif
# check for >= 2.5.44
ifeq ($(shell [ $(OSREL_N) -ge 2005044 ] && echo has_epoll), has_epoll)
ifeq ($(NO_EPOLL),)
DEFS+=-DHAVE_EPOLL
# linux + gcc >= 3.0 + -malign-double + epoll => problems
CFLAGS:=$(filter-out -malign-double, $(CFLAGS))
endif
endif
# check for >= 2.2.0
ifeq ($(shell [ $(OSREL_N) -ge 2002000 ] && echo has_sigio), has_sigio)
ifeq ($(NO_SIGIO),)
DEFS+=-DHAVE_SIGIO_RT
endif
endif
ifeq ($(NO_SELECT),)
DEFS+=-DHAVE_SELECT
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
# check for ver >= 5.7
ifeq ($(shell [ $(OSREL_N) -gt 5007 ] && echo has_devpoll), has_devpoll)
ifeq ($(NO_DEVPOLL),)
DEFS+=-DHAVE_DEVPOLL
endif
endif
ifeq ($(NO_SELECT),)
DEFS+=-DHAVE_SELECT
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
DEFAULT_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 -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 -DHAVE_TIMEGM \
-DHAVE_NETINET_IN_SYSTM
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_PTHREAD_MUTEX # try pthread sems
found_lock_method=yes
LIBS= -pthread #dlopen is in libc
else
LIBS= #dlopen is in libc
endif
# check for ver >= 4.1
ifeq ($(shell [ $(OSREL_N) -gt 4001 ] && echo has_kqueue), has_kqueue)
ifeq ($(NO_KQUEUE),)
DEFS+=-DHAVE_KQUEUE
endif
endif
ifeq ($(NO_SELECT),)
DEFS+=-DHAVE_SELECT
endif
DEFAULT_YACC=yacc
endif
ifeq ($(OS), openbsd)
DEFS+=-DHAVE_SOCKADDR_SA_LEN -DHAVE_GETHOSTBYNAME2 \
-DHAVE_UNION_SEMUN -DHAVE_MSGHDR_MSG_CONTROL \
-DHAVE_CONNECT_ECONNRESET_BUG -DHAVE_TIMEGM
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_PTHREAD_MUTEX # try pthread sems
found_lock_method=yes
endif
# check for ver >=2 9
ifeq ($(shell [ $(OSREL_N) -ge 2009 ] && echo has_kqueue), has_kqueue)
ifeq ($(NO_KQUEUE),)
DEFS+=-DHAVE_KQUEUE
endif
endif
ifeq ($(NO_SELECT),)
DEFS+=-DHAVE_SELECT
endif
# (symbols on openbsd are prefixed by "_")
DEFAULT_YACC=yacc
# no sched_yield on openbsd unless linking with c_r (not recommended)
LIBS=
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 openbsd
ifeq ($(OS), netbsd)
DEFS+=-DHAVE_SOCKADDR_SA_LEN -DHAVE_GETHOSTBYNAME2 \
-DHAVE_MSGHDR_MSG_CONTROL -DHAVE_CONNECT_ECONNRESET_BUG -DHAVE_TIMEGM
ifneq ($(found_lock_method), yes)
DEFS+= -DUSE_SYSV_SEM # try pthread sems
found_lock_method=yes
endif
# check for ver >= 2.0.0
ifeq ($(shell [ $(OSREL_N) -ge 2000000 ] && echo has_kqueue), has_kqueue)
ifeq ($(NO_KQUEUE),)
DEFS+=-DHAVE_KQUEUE
# netbsd + kqueue and -malign-double don't work
CFLAGS:=$(filter-out -malign-double, $(CFLAGS))
endif
endif
ifeq ($(NO_SELECT),)
DEFS+=-DHAVE_SELECT
endif
DEFAULT_YACC=yacc
LIBS=
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 -DHAVE_TIMEGM
# -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 -lresolv #dlopen is in libc
else
LIBS= -lresolv #dlopen is in libc
endif
ifeq ($(NO_KQUEUE),)
DEFS+=-DHAVE_KQUEUE
endif
ifeq ($(NO_SELECT),)
DEFS+=-DHAVE_SELECT
endif
LDFLAGS= # darwin doesn't like -O2 or -E
MOD_LDFLAGS= -bundle -bundle_loader ../../$(MAIN_NAME)
DEFAULT_YACC=yacc
endif
ifeq ($(LEX),)
LEX=flex
endif
ifeq ($(YACC),)
YACC=$(DEFAULT_YACC)
endif
YACC_FLAGS=-d -b cfg
LDFLAGS+= $(LD_EXTRA_OPTS)
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$(OPENSSLINC)
LIBS+= -L$(OPENSSLLIB) -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