summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-01-01 22:16:45 +0000
committerEric Andersen <andersen@codepoet.org>2002-01-01 22:16:45 +0000
commit06d634eab66c7ebce0fe02d87b2c0b48ac4fa72b (patch)
treeb2b74e4d34b78b42775b329bfa0c07403638570e
parent4643b181bdf1d9121f9d6d4214e991e7b9f52d30 (diff)
downloaduClibc-alpine-06d634eab66c7ebce0fe02d87b2c0b48ac4fa72b.tar.bz2
uClibc-alpine-06d634eab66c7ebce0fe02d87b2c0b48ac4fa72b.tar.xz
Support arch specific optimizations (examples shown for x86 and ARM).
Autodetect target architecture by asking the compiler. -Erik
-rw-r--r--Rules.mak21
-rw-r--r--extra/Configs/Config.arm11
-rw-r--r--extra/Configs/Config.cross.arm.uclinux11
-rw-r--r--extra/Configs/Config.i38611
-rw-r--r--extra/Configs/Config.m68k11
-rw-r--r--extra/Configs/Config.m68k.coff11
-rw-r--r--extra/Configs/Config.mips12
-rw-r--r--extra/Configs/Config.mipsel12
-rw-r--r--extra/Configs/Config.powerpc11
-rw-r--r--extra/Configs/Config.sh11
-rw-r--r--extra/Configs/Config.v850e6
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