Use "-march=native" when possible.

Recent versions of GCC have a tuning option value of 'native', which causes
the compiler to optimize the build for the CPU the compile is performed on.
Since most people are building Asterisk on the machine they plan to run it on,
the configure script and build system will now use this value unless a different
value is specified by the user in CFLAGS when the configure script is executed.
In addition, this value will be used for building the GSM and LPC10 codecs as
well, in preference to the logic that has been in their Makefiles forever to
optimize for certain types of CPUs.



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@310332 65c4cc65-6c06-0410-ace0-fbb531ad65f3
10-digiumphones
Kevin P. Fleming 14 years ago
parent c7c0664bc4
commit 7cf70df999

@ -223,9 +223,13 @@ ifneq ($(findstring BSD,$(OSARCH)),)
endif endif
ifeq ($(findstring -march,$(_ASTCFLAGS) $(ASTCFLAGS)),) ifeq ($(findstring -march,$(_ASTCFLAGS) $(ASTCFLAGS)),)
ifneq ($(AST_MARCH_NATIVE),)
_ASTCFLAGS+=$(AST_MARCH_NATIVE)
else
ifneq ($(PROC),ultrasparc) ifneq ($(PROC),ultrasparc)
_ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi) _ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
endif endif
endif
endif endif
ifeq ($(PROC),ppc) ifeq ($(PROC),ppc)
@ -233,9 +237,11 @@ ifeq ($(PROC),ppc)
endif endif
ifeq ($(OSARCH),FreeBSD) ifeq ($(OSARCH),FreeBSD)
ifeq ($(findstring -march,$(_ASTCFLAGS) $(ASTCFLAGS)),)
ifeq ($(PROC),i386) ifeq ($(PROC),i386)
_ASTCFLAGS+=-march=i686 _ASTCFLAGS+=-march=i686
endif endif
endif
# -V is understood by BSD Make, not by GNU make. # -V is understood by BSD Make, not by GNU make.
BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk) BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
_ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi) _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)

@ -45,28 +45,33 @@ ifeq ($(shell $(CC) -v 2>&1 | awk '/^gcc version/ { split($$3, v, "."); printf "
OPTIMIZE=-O2 OPTIMIZE=-O2
endif endif
ifeq (,$(findstring $(shell uname -s),Darwin SunOS)) # If the compiler's '-march' flag has been specified already, then assume it's a value
# that is what the user wants (or has been determined by the configure script). If not,
# do some simple logic to set a decent value
ifeq ($(findstring -march,$(_ASTCFLAGS) $(ASTCFLAGS)),)
ifeq (,$(findstring $(shell uname -s),Darwin SunOS))
ifeq (,$(strip $(findstring $(PROC) ,"x86_64 amd64 ultrasparc sparc64 arm armv5b armeb ppc powerpc ppc64 ia64 s390 bfin mipsel mips "))) ifeq (,$(strip $(findstring $(PROC) ,"x86_64 amd64 ultrasparc sparc64 arm armv5b armeb ppc powerpc ppc64 ia64 s390 bfin mipsel mips ")))
ifeq (,$(strip $(findstring $(shell uname -m) ,"ppc ppc64 alpha armv4l s390 "))) ifeq (,$(strip $(findstring $(shell uname -m) ,"ppc ppc64 alpha armv4l s390 ")))
OPTIMIZE+=-march=$(PROC) OPTIMIZE+=-march=$(PROC)
endif endif
endif endif
else else
ifneq (,$(findstring $(OSARCH),Darwin)) ifneq (,$(findstring $(OSARCH),Darwin))
ifeq ($(shell /usr/bin/sw_vers -productVersion | cut -c1-4),10.6) ifeq ($(shell /usr/bin/sw_vers -productVersion | cut -c1-4),10.6)
# Snow Leopard reports i386, even though it's really x86_64 # Snow Leopard reports i386, even though it's really x86_64
OPTIMIZE+=-mtune=native OPTIMIZE+=-mtune=native
endif endif
endif endif
endif endif
#The problem with sparc is the best stuff is in newer versions of gcc (post 3.0) only. #The problem with sparc is the best stuff is in newer versions of gcc (post 3.0) only.
#This works for even old (2.96) versions of gcc and provides a small boost either way. #This works for even old (2.96) versions of gcc and provides a small boost either way.
#A ultrasparc cpu is really v9 but the stock debian stable 3.0 gcc doesn't support it. #A ultrasparc cpu is really v9 but the stock debian stable 3.0 gcc doesn't support it.
#So we go lowest common available by gcc and go a step down, still a step up from #So we go lowest common available by gcc and go a step down, still a step up from
#the default as we now have a better instruction set to work with. - Belgarath #the default as we now have a better instruction set to work with. - Belgarath
ifeq ($(PROC),ultrasparc) ifeq ($(PROC),ultrasparc)
OPTIMIZE+=-mcpu=v8 -mtune=$(PROC) -O3 OPTIMIZE+=-mcpu=v8 -mtune=$(PROC) -O3
endif
endif endif
PG = PG =

@ -27,23 +27,28 @@ CFLAGS+= -fPIC -Wno-comment
# fails miserably. Remove it for the time being. # fails miserably. Remove it for the time being.
_ASTCFLAGS:=$(_ASTCFLAGS:-Werror=) _ASTCFLAGS:=$(_ASTCFLAGS:-Werror=)
#fix for PPC processors and ALPHA, And UltraSparc too # If the compiler's '-march' flag has been specified already, then assume it's a value
ifneq ($(OSARCH),Darwin) # that is what the user wants (or has been determined by the configure script). If not,
# do some simple logic to set a decent value
ifeq ($(findstring -march,$(_ASTCFLAGS) $(ASTCFLAGS)),)
#fix for PPC processors and ALPHA, And UltraSparc too
ifneq ($(OSARCH),Darwin)
ifneq ($(findstring BSD,${OSARCH}),BSD) ifneq ($(findstring BSD,${OSARCH}),BSD)
ifneq ($(PROC),ppc) ifneq ($(PROC),ppc)
ifneq ($(PROC),x86_64) ifneq ($(PROC),x86_64)
ifneq ($(PROC),alpha) ifneq ($(PROC),alpha)
#The problem with sparc is the best stuff is in newer versions of gcc (post 3.0) only. #The problem with sparc is the best stuff is in newer versions of gcc (post 3.0) only.
#This works for even old (2.96) versions of gcc and provides a small boost either way. #This works for even old (2.96) versions of gcc and provides a small boost either way.
#A ultrasparc cpu is really v9 but the stock debian stable 3.0 gcc doesn.t support it. #A ultrasparc cpu is really v9 but the stock debian stable 3.0 gcc doesn.t support it.
#So we go lowest common available by gcc and go a step down, still a step up from #So we go lowest common available by gcc and go a step down, still a step up from
#the default as we now have a better instruction set to work with. - Belgarath #the default as we now have a better instruction set to work with. - Belgarath
ifeq ($(PROC),ultrasparc) ifeq ($(PROC),ultrasparc)
CFLAGS+= -mtune=$(PROC) -mcpu=v8 -O3 -fomit-frame-pointer CFLAGS+= -mtune=$(PROC) -mcpu=v8 -O3 -fomit-frame-pointer
else else
ifneq ($(OSARCH),SunOS) ifneq ($(OSARCH),SunOS)
ifneq ($(OSARCH),arm) ifneq ($(OSARCH),arm)
# CFLAGS+= -march=$(PROC) # CFLAGS+= -march=$(PROC)
endif
endif endif
endif endif
endif endif

905
configure vendored

File diff suppressed because it is too large Load Diff

@ -918,6 +918,16 @@ else
fi fi
AC_SUBST(AST_SHADOW_WARNINGS) AC_SUBST(AST_SHADOW_WARNINGS)
AC_MSG_CHECKING(for -march=native)
if $(${CC} -march=native -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
AC_MSG_RESULT(yes)
AST_MARCH_NATIVE="-march=native"
else
AC_MSG_RESULT(no)
AST_MARCH_NATIVE=
fi
AC_SUBST(AST_MARCH_NATIVE)
AC_MSG_CHECKING(for sysinfo) AC_MSG_CHECKING(for sysinfo)
AC_LINK_IFELSE( AC_LINK_IFELSE(
AC_LANG_PROGRAM([#include <sys/sysinfo.h>], AC_LANG_PROGRAM([#include <sys/sysinfo.h>],

@ -100,6 +100,7 @@ AST_DECLARATION_AFTER_STATEMENT=@AST_DECLARATION_AFTER_STATEMENT@
AST_NO_STRICT_OVERFLOW=@AST_NO_STRICT_OVERFLOW@ AST_NO_STRICT_OVERFLOW=@AST_NO_STRICT_OVERFLOW@
AST_SHADOW_WARNINGS=@AST_SHADOW_WARNINGS@ AST_SHADOW_WARNINGS=@AST_SHADOW_WARNINGS@
AST_FORTIFY_SOURCE=@AST_FORTIFY_SOURCE@ AST_FORTIFY_SOURCE=@AST_FORTIFY_SOURCE@
AST_MARCH_NATIVE=@AST_MARCH_NATIVE@
ALSA_INCLUDE=@ALSA_INCLUDE@ ALSA_INCLUDE=@ALSA_INCLUDE@
ALSA_LIB=@ALSA_LIB@ ALSA_LIB=@ALSA_LIB@

Loading…
Cancel
Save