Hi,
arch/mips/Makefile uses gcc's -mcpu= flag to pass subarchitecture
selection choices to gcc. -mcpu= was deprecated in gcc 3.1, and has
been removed as of gcc 3.3. We need to use -march= for gcc 3.x (where
x >= 3), but some versions of gcc don't understand -march= (namely
2.95.x, which some people still use.)
This patch introduces a variable in arch/mips/makefile, gcc-tune-flag,
which is "cpu" if gcc understands -mcpu and "arch" if it doesn't, and
uses it to build the -mcpu=/-march= bits in CFLAGS for each processor
type.
Matt
diff -puN arch/mips/Makefile~mips-arch arch/mips/Makefile
--- linux-2.6.2-rc1-mm2_mips/arch/mips/Makefile~mips-arch 2004-01-25 00:13:03.295170984 -0600
+++ linux-2.6.2-rc1-mm2_mips-arashi/arch/mips/Makefile 2004-01-25 00:23:39.594438792 -0600
@@ -38,6 +38,8 @@ ifdef CONFIG_CROSSCOMPILE
CROSS_COMPILE := $(tool-prefix)
endif
+gcc-tune-flag = $(shell if $(CC) -dumpspecs | grep mcpu; then echo cpu; else echo arch; fi)
+
#
# GCC uses -G 0 -mabicalls -fpic as default. We don't want PIC in the kernel
# code since it only slows down the whole thing. At some point we might make
@@ -75,49 +77,49 @@ check_warning = $(shell if $(CC) $(1) -c
# A kernel built those options will only work on hardware which
# actually supports this ISA.
#
-cflags-$(CONFIG_CPU_R3000) += -mcpu=r3000
+cflags-$(CONFIG_CPU_R3000) += -$(gcc-tune-flag)=r3000
32bit-isa-$(CONFIG_CPU_R3000) += -mips1
64bit-isa-$(CONFIG_CPU_R3000) += -mboom
-cflags-$(CONFIG_CPU_TX39XX) += -mcpu=r3000
+cflags-$(CONFIG_CPU_TX39XX) += -$(gcc-tune-flag)=r3000
32bit-isa-$(CONFIG_CPU_TX39XX) += -mips1
64bit-isa-$(CONFIG_CPU_TX39XX) += -mboom
-cflags-$(CONFIG_CPU_R6000) += -mcpu=r6000
+cflags-$(CONFIG_CPU_R6000) += -$(gcc-tune-flag)=r6000
32bit-isa-$(CONFIG_CPU_R6000) += -mips2 -Wa,--trap
64bit-isa-$(CONFIG_CPU_R6000) += -mboom -Wa,--trap
-cflags-$(CONFIG_CPU_R4300) += -mcpu=r4300
+cflags-$(CONFIG_CPU_R4300) += -$(gcc-tune-flag)=r4300
32bit-isa-$(CONFIG_CPU_R4300) += -mips2 -Wa,--trap
64bit-isa-$(CONFIG_CPU_R4300) += -mips3 -Wa,--trap
-cflags-$(CONFIG_CPU_VR41XX) += -mcpu=r4600
+cflags-$(CONFIG_CPU_VR41XX) += -$(gcc-tune-flag)=r4600
32bit-isa-$(CONFIG_CPU_VR41XX) += -mips2 -Wa,--trap
64bit-isa-$(CONFIG_CPU_VR41XX) += -mips3 -Wa,--trap
-cflags-$(CONFIG_CPU_R4X00) += -mcpu=r4600
+cflags-$(CONFIG_CPU_R4X00) += -$(gcc-tune-flag)=r4600
32bit-isa-$(CONFIG_CPU_R4X00) += -mips2 -Wa,--trap
64bit-isa-$(CONFIG_CPU_R4X00) += -mips3 -Wa,--trap
-cflags-$(CONFIG_CPU_MIPS32) += $(call check_gcc, -mtune=mips32, -mcpu=r4600)
+cflags-$(CONFIG_CPU_MIPS32) += $(call check_gcc, -mtune=mips32, -$(gcc-tune-flag)=r4600)
32bit-isa-$(CONFIG_CPU_MIPS32) += $(call check_gcc, -mips32 -mabi=32, -mips2) -Wa,--trap
64bit-isa-$(CONFIG_CPU_MIPS32) += -mboom
cflags-$(CONFIG_CPU_MIPS64) +=
32bit-isa-$(CONFIG_CPU_MIPS64) += $(call check_gcc, -mips32, -mips2) -Wa,--trap
64bit-isa-$(CONFIG_CPU_MIPS64) += $(call check_gcc, -mips64, -mips4) -Wa,--trap
-cflags-$(CONFIG_CPU_R5000) += -mcpu=r8000
+cflags-$(CONFIG_CPU_R5000) += -$(gcc-tune-flag)=r8000
32bit-isa-$(CONFIG_CPU_R5000) += -mips2 -Wa,--trap
64bit-isa-$(CONFIG_CPU_R5000) += -mips4 -Wa,--trap
-cflags-$(CONFIG_CPU_R5432) += -mcpu=r5000
+cflags-$(CONFIG_CPU_R5432) += -$(gcc-tune-flag)=r5000
32bit-isa-$(CONFIG_CPU_R5432) += -mips1 -Wa,--trap
64bit-isa-$(CONFIG_CPU_R5432) += -mips3 -Wa,--trap
-cflags-$(CONFIG_CPU_NEVADA) += -mcpu=r8000 -mmad
+cflags-$(CONFIG_CPU_NEVADA) += -$(gcc-tune-flag)=r8000 -mmad
32bit-isa-$(CONFIG_CPU_NEVADA) += -mips2 -Wa,--trap
64bit-isa-$(CONFIG_CPU_NEVADA) += -mips3 -Wa,--trap
-cflags-$(CONFIG_CPU_RM7000) += $(call check_gcc, -mcpu=r7000, -mcpu=r5000)
+cflags-$(CONFIG_CPU_RM7000) += $(call check_gcc, -$(gcc-tune-flag)=r7000, -$(gcc-tune-flag)=r5000)
32bit-isa-$(CONFIG_CPU_RM7000) += -mips2 -Wa,--trap
64bit-isa-$(CONFIG_CPU_RM7000) += -mips4 -Wa,--trap
-cflags-$(CONFIG_CPU_SB1) += $(call check_gcc, -mcpu=sb1, -mcpu=r8000)
+cflags-$(CONFIG_CPU_SB1) += $(call check_gcc, -$(gcc-tune-flag)=sb1, -$(gcc-tune-flag)=r8000)
32bit-isa-$(CONFIG_CPU_SB1) += $(call check_gcc, -mips32, -mips2) -Wa,--trap
64bit-isa-$(CONFIG_CPU_SB1) += $(call check_gcc, -mips64, -mips4) -Wa,--trap
-cflags-$(CONFIG_CPU_R8000) += -mcpu=r8000
+cflags-$(CONFIG_CPU_R8000) += -$(gcc-tune-flag)=r8000
32bit-isa-$(CONFIG_CPU_R8000) += -mips2 -Wa,--trap
64bit-isa-$(CONFIG_CPU_R8000) += -mips4 -Wa,--trap
-cflags-$(CONFIG_CPU_R10000) += -mcpu=r8000
+cflags-$(CONFIG_CPU_R10000) += -$(gcc-tune-flag)=r8000
32bit-isa-$(CONFIG_CPU_R10000) += -mips2 -Wa,--trap
64bit-isa-$(CONFIG_CPU_R10000) += -mips4 -Wa,--trap
_