From 06d634eab66c7ebce0fe02d87b2c0b48ac4fa72b Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 1 Jan 2002 22:16:45 +0000 Subject: Support arch specific optimizations (examples shown for x86 and ARM). Autodetect target architecture by asking the compiler. -Erik --- Rules.mak | 21 +++++++++++++++++++-- extra/Configs/Config.arm | 11 ++--------- extra/Configs/Config.cross.arm.uclinux | 11 ++--------- extra/Configs/Config.i386 | 11 ++--------- extra/Configs/Config.m68k | 11 ++--------- extra/Configs/Config.m68k.coff | 11 ++--------- extra/Configs/Config.mips | 12 ++---------- extra/Configs/Config.mipsel | 12 ++---------- extra/Configs/Config.powerpc | 11 ++--------- extra/Configs/Config.sh | 11 ++--------- extra/Configs/Config.v850e | 6 ++---- 11 files changed, 39 insertions(+), 89 deletions(-) diff --git a/Rules.mak b/Rules.mak index 534a97843..6dbc96fcf 100644 --- a/Rules.mak +++ b/Rules.mak @@ -38,11 +38,28 @@ BUILDTIME = ${shell TZ=UTC date --utc "+%Y.%m.%d-%H:%M%z"} GCCINCDIR = ${shell $(CC) -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp"} NATIVE_ARCH = ${shell uname -m | sed -e 's/i.86/i386/' -e 's/sparc.*/sparc/' \ -e 's/arm.*/arm/g' -e 's/m68k.*/m68k/' -e 's/ppc/powerpc/g'} +TARGET_ARCH=${shell $(CC) -dumpmachine | sed -e s'/-linux//' -e 's/i.86/i386/' -e 's/sparc.*/sparc/' \ + -e 's/arm.*/arm/g' -e 's/m68k.*/m68k/' -e 's/ppc/powerpc/g'} -# use '-Os' optimization if available, else use -O2, allow Config to override +# Some nice architecture specific optimizations ifndef OPTIMIZATION +# use '-Os' optimization if available, else use -O2, allow Config to override OPTIMIZATION = ${shell if $(CC) -Os -S -o /dev/null -xc /dev/null >/dev/null 2>&1; \ then echo "-Os"; else echo "-O2" ; fi} +ifeq ($(strip $(TARGET_ARCH)),arm) + OPTIMIZATION+=-fstrict-aliasing +endif +ifeq ($(strip $(TARGET_ARCH)),i386) + OPTIMIZATION+=-march=i386 + OPTIMIZATION += ${shell if $(CC) -mpreferred-stack-boundary=2 -S -o /dev/null -xc \ + /dev/null >/dev/null 2>&1; then echo "-mpreferred-stack-boundary=2"; fi} + OPTIMIZATION += ${shell if $(CC) -malign-functions=0 -malign-jumps=0 -malign-loops=0 \ + -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo \ + "-malign-functions=0 -malign-jumps=0 -malign-loops=0"; fi} + CPUFLAGS+=-pipe +else + CPUFLAGS+=-pipe +endif endif ARFLAGS=r @@ -75,7 +92,7 @@ ifeq ($(strip $(HAVE_SHARED)),true) ifeq ($(strip $(BUILD_UCLIBC_LDSO)),true) LDSO=$(TOPDIR)lib/$(UCLIBC_LDSO) DYNAMIC_LINKER=$(SHARED_LIB_LOADER_PATH)/$(UCLIBC_LDSO) - BUILD_DYNAMIC_LINKER=$(shell cd $(TOPDIR)lib; pwd)/$(UCLIBC_LDSO) + BUILD_DYNAMIC_LINKER=${shell cd $(TOPDIR)lib && pwd}/$(UCLIBC_LDSO) else LDSO=$(SYSTEM_LDSO) DYNAMIC_LINKER=/lib/$(notdir $(SYSTEM_LDSO)) diff --git a/extra/Configs/Config.arm b/extra/Configs/Config.arm index d68a3e2a5..95ebe8489 100644 --- a/extra/Configs/Config.arm +++ b/extra/Configs/Config.arm @@ -25,16 +25,9 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -# What arch do you want to compile for... -TARGET_ARCH=arm -#TARGET_ARCH=i386 -#TARGET_ARCH=m68k -#TARGET_ARCH=powerpc -#TARGET_ARCH=sh -#TARGET_ARCH=sparc - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc CROSS = #arm-linux- CC = $(CROSS)gcc diff --git a/extra/Configs/Config.cross.arm.uclinux b/extra/Configs/Config.cross.arm.uclinux index 5058c4e59..d90c1ee42 100644 --- a/extra/Configs/Config.cross.arm.uclinux +++ b/extra/Configs/Config.cross.arm.uclinux @@ -25,16 +25,9 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -# What arch do you want to compile for... -TARGET_ARCH=arm -#TARGET_ARCH=i386 -#TARGET_ARCH=m68k -#TARGET_ARCH=powerpc -#TARGET_ARCH=sh -#TARGET_ARCH=sparc - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc CROSS = arm-elf- CC = $(CROSS)gcc diff --git a/extra/Configs/Config.i386 b/extra/Configs/Config.i386 index 11e3566c5..c7c202583 100644 --- a/extra/Configs/Config.i386 +++ b/extra/Configs/Config.i386 @@ -25,16 +25,9 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -# What arch do you want to compile for... -#TARGET_ARCH=arm -TARGET_ARCH=i386 -#TARGET_ARCH=m68k -#TARGET_ARCH=powerpc -#TARGET_ARCH=sh -#TARGET_ARCH=sparc - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc CROSS = #$(TARGET_ARCH)-linux- CC = $(CROSS)gcc diff --git a/extra/Configs/Config.m68k b/extra/Configs/Config.m68k index 1ebe7b097..b6bb64de0 100644 --- a/extra/Configs/Config.m68k +++ b/extra/Configs/Config.m68k @@ -25,16 +25,9 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -# What arch do you want to compile for... -#TARGET_ARCH=arm -#TARGET_ARCH=i386 -TARGET_ARCH=m68k -#TARGET_ARCH=powerpc -#TARGET_ARCH=sh -#TARGET_ARCH=sparc - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc #CROSS = m68k-elf- CC = $(CROSS)gcc diff --git a/extra/Configs/Config.m68k.coff b/extra/Configs/Config.m68k.coff index c45243315..0794431f7 100644 --- a/extra/Configs/Config.m68k.coff +++ b/extra/Configs/Config.m68k.coff @@ -25,16 +25,9 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -# What arch do you want to compile for... -#TARGET_ARCH=arm -#TARGET_ARCH=i386 -TARGET_ARCH=m68k -#TARGET_ARCH=powerpc -#TARGET_ARCH=sh -#TARGET_ARCH=sparc - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc CROSS = m68k-coff- CC = $(CROSS)gcc diff --git a/extra/Configs/Config.mips b/extra/Configs/Config.mips index 817a6083a..d2ba47266 100644 --- a/extra/Configs/Config.mips +++ b/extra/Configs/Config.mips @@ -25,17 +25,9 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -# What arch do you want to compile for... -#TARGET_ARCH=arm -#TARGET_ARCH=i386 -#TARGET_ARCH=m68k -#TARGET_ARCH=powerpc -#TARGET_ARCH=sh -#TARGET_ARCH=sparc -TARGET_ARCH=mipsel - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc CROSS = mipsel-linux- CC = $(CROSS)gcc diff --git a/extra/Configs/Config.mipsel b/extra/Configs/Config.mipsel index 817a6083a..d2ba47266 100644 --- a/extra/Configs/Config.mipsel +++ b/extra/Configs/Config.mipsel @@ -25,17 +25,9 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -# What arch do you want to compile for... -#TARGET_ARCH=arm -#TARGET_ARCH=i386 -#TARGET_ARCH=m68k -#TARGET_ARCH=powerpc -#TARGET_ARCH=sh -#TARGET_ARCH=sparc -TARGET_ARCH=mipsel - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc CROSS = mipsel-linux- CC = $(CROSS)gcc diff --git a/extra/Configs/Config.powerpc b/extra/Configs/Config.powerpc index 7022dfd45..fe20607d6 100644 --- a/extra/Configs/Config.powerpc +++ b/extra/Configs/Config.powerpc @@ -25,16 +25,9 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -# What arch do you want to compile for... -#TARGET_ARCH=arm -#TARGET_ARCH=i386 -#TARGET_ARCH=m68k -TARGET_ARCH=powerpc -#TARGET_ARCH=sh -#TARGET_ARCH=sparc - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc CROSS = #$(TARGET_ARCH)-linux- CC = $(CROSS)gcc diff --git a/extra/Configs/Config.sh b/extra/Configs/Config.sh index 5b5645727..4e337e6f1 100644 --- a/extra/Configs/Config.sh +++ b/extra/Configs/Config.sh @@ -25,16 +25,9 @@ # other sundry sources. Files within this library are copyright by their # respective copyright holders. -# What arch do you want to compile for... -#TARGET_ARCH=arm -#TARGET_ARCH=i386 -#TARGET_ARCH=m68k -#TARGET_ARCH=powerpc -TARGET_ARCH=sh -#TARGET_ARCH=sparc - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc CROSS = /usr/cygnus/yapp-001013/H-i686-pc-linux-gnulibc2.1/bin/sh-linux-gnu- CC = $(CROSS)gcc diff --git a/extra/Configs/Config.v850e b/extra/Configs/Config.v850e index 25031dd5e..d7d93e596 100644 --- a/extra/Configs/Config.v850e +++ b/extra/Configs/Config.v850e @@ -30,11 +30,9 @@ PROJ_UCLINUX=/proj/soft2/uclinux # Cross compile on i386-pc-linux-gnu DESTDIR=$(PROJ_UCLINUX)/i386-pc-linux-gnu/v850e-linux -# What arch do you want to compile for... -TARGET_ARCH = v850 - # If you are running a cross compiler, you may want to set this -# to something more interesting... +# to something more interesting... Target architecture is determined +# by asking this compiler what arch it compiles stuff for. NATIVE_CC = gcc CROSS = v850e-elf- CC = $(CROSS)gcc -- cgit v1.2.3