Browse Source

Support arch specific optimizations (examples shown for x86 and ARM).
Autodetect target architecture by asking the compiler.
-Erik

Eric Andersen 22 years ago
parent
commit
06d634eab6

+ 19 - 2
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))

+ 2 - 9
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

+ 2 - 9
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

+ 2 - 9
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

+ 2 - 9
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

+ 2 - 9
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

+ 2 - 10
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

+ 2 - 10
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

+ 2 - 9
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

+ 2 - 9
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

+ 2 - 4
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