Skip to contentSkip to conversation

ARM: move -march=* and -mtune= options to arch/arm/Makefile

PATCH New Masahiro Yamada 5 participants 7 messages Feb 26, 2015 – Apr 11, 2015 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 ARM: move -march=* and -mtune= options to arch/arm/Makefile

My main motivations for this commit are:

[1] Follow the arch/arm/Makefile style of Linux Kernel

[2] Maintain compiler options systematically
Currently, we give -march=* and -mtune=* options inconsistently:
Only some of the CPUs pass -march=* and -mtune=* options. By collecting such options into the single place arch/arm/Makefile we can tell which options are missing at a glance.

[3] Prepare for deprecating arch/*/cpu/*/config.mk

Note:
This commit just moves the compiler options so as not to change the behavior at all. It does not care about the correctness of the given options. Fox example, "-march=armv5te" might be better than "-march=armv4" for ARM946EJS, but it is beyond the scope this commit. Also, filling the missing -march=* and -tune=* is left to follow-up patches.

---

Changes in v2:
- Rebased onto u-boot-arm/master (commit 419fa9ae)

 arch/arm/Makefile                | 32 ++++++++++++++++++++++++++++++++
 arch/arm/cpu/arm1136/config.mk   |  9 ---------
 arch/arm/cpu/arm1176/config.mk   |  9 ---------
 arch/arm/cpu/arm720t/config.mk   |  9 ---------
 arch/arm/cpu/arm920t/config.mk   |  8 --------
 arch/arm/cpu/arm926ejs/config.mk |  8 --------
 arch/arm/cpu/arm946es/config.mk  |  8 --------
 arch/arm/cpu/armv7/config.mk     |  5 -----
 arch/arm/cpu/armv8/config.mk     |  2 --
 arch/arm/cpu/pxa/config.mk       |  2 --
 arch/arm/cpu/sa1100/config.mk    |  9 ---------
 11 files changed, 32 insertions(+), 69 deletions(-)
 delete mode 100644 arch/arm/cpu/arm1136/config.mk
 delete mode 100644 arch/arm/cpu/arm1176/config.mk
 delete mode 100644 arch/arm/cpu/arm720t/config.mk
 delete mode 100644 arch/arm/cpu/arm920t/config.mk
 delete mode 100644 arch/arm/cpu/arm926ejs/config.mk
 delete mode 100644 arch/arm/cpu/arm946es/config.mk
 delete mode 100644 arch/arm/cpu/sa1100/config.mk
arch/arm/Makefile +32 -0
index 878ae26..275c817 100644
@@ -2,6 +2,38 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
+# This selects which instruction set is used.
+arch-$(CONFIG_CPU_ARM720T)	=-march=armv4
+arch-$(CONFIG_CPU_ARM920T)	=-march=armv4
+arch-$(CONFIG_CPU_ARM926EJS)	=-march=armv5te
+arch-$(CONFIG_CPU_ARM946ES)	=-march=armv4
+arch-$(CONFIG_CPU_SA1100)	=-march=armv4
+arch-$(CONFIG_CPU_PXA)		=
+arch-$(CONFIG_CPU_ARM1136)	=-march=armv5
+arch-$(CONFIG_CPU_ARM1176)	=-march=armv5t
+arch-$(CONFIG_CPU_V7)		=$(call cc-option, -march=armv7-a, -march=armv5)
+arch-$(CONFIG_ARM64)		=-march=armv8-a
+
+# Evaluate arch cc-option calls now
+arch-y := $(arch-y)
+
+# This selects how we optimise for the processor.
+tune-$(CONFIG_CPU_ARM720T)	=-mtune=arm7tdmi
+tune-$(CONFIG_CPU_ARM920T)	=
+tune-$(CONFIG_CPU_ARM926EJS)	=
+tune-$(CONFIG_CPU_ARM946ES)	=
+tune-$(CONFIG_CPU_SA1100)	=-mtune=strongarm1100
+tune-$(CONFIG_CPU_PXA)		=-mcpu=xscale
+tune-$(CONFIG_CPU_ARM1136)	=
+tune-$(CONFIG_CPU_ARM1176)	=
+tune-$(CONFIG_CPU_V7)		=
+tune-$(CONFIG_ARM64)		=
+
+# Evaluate tune cc-option calls now
+tune-y := $(tune-y)
+
+PLATFORM_CPPFLAGS += $(arch-y) $(tune-y)
+
 # Machine directory name.  This list is sorted alphanumerically
 # by CONFIG_* macro name.
 machine-$(CONFIG_ARCH_AT91)		+= at91
arch/arm/cpu/arm1136/config.mk deleted +0 -9
deleted file mode 100644
index a82c6ce..0000000
@@ -1,9 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-# Make ARMv5 to allow more compilers to work, even though its v6.
-PLATFORM_CPPFLAGS += -march=armv5
arch/arm/cpu/arm1176/config.mk deleted +0 -9
deleted file mode 100644
index 5dc2ebb..0000000
@@ -1,9 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-# Make ARMv5 to allow more compilers to work, even though its v6.
-PLATFORM_CPPFLAGS += -march=armv5t
arch/arm/cpu/arm720t/config.mk deleted +0 -9
deleted file mode 100644
index 772fb41..0000000
@@ -1,9 +0,0 @@
-#
-# (C) Copyright 2002
-# Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-# Marius Groeger <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS += -march=armv4 -mtune=arm7tdmi
arch/arm/cpu/arm920t/config.mk deleted +0 -8
deleted file mode 100644
index 799afff..0000000
@@ -1,8 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS += -march=armv4
arch/arm/cpu/arm926ejs/config.mk deleted +0 -8
deleted file mode 100644
index bdb3da1..0000000
@@ -1,8 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS += -march=armv5te
arch/arm/cpu/arm946es/config.mk deleted +0 -8
deleted file mode 100644
index 438668d..0000000
@@ -1,8 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS +=  -march=armv4
arch/arm/cpu/armv7/config.mk +0 -5
index 6c82c3b..63591d4 100644
@@ -5,11 +5,6 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
-# If armv7-a is not supported by GCC fall-back to armv5, which is
-# supported by more tool-chains
-PF_CPPFLAGS_ARMV7 := $(call cc-option, -march=armv7-a, -march=armv5)
-PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_ARMV7)
-
 # On supported platforms we set the bit which causes us to trap on unaligned
 # memory access.  This is the opposite of what the compiler expects to be
 # the default so we must pass in -mno-unaligned-access so that it is aware
arch/arm/cpu/armv8/config.mk +0 -2
index f5b9559..6850258 100644
@@ -6,7 +6,5 @@
 #
 PLATFORM_RELFLAGS += -fno-common -ffixed-x18
 
-PF_CPPFLAGS_ARMV8 := $(call cc-option, -march=armv8-a)
 PF_NO_UNALIGNED := $(call cc-option, -mstrict-align)
-PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_ARMV8)
 PLATFORM_CPPFLAGS += $(PF_NO_UNALIGNED)
arch/arm/cpu/pxa/config.mk +0 -2
index 525f5d3..7fb5316 100644
@@ -6,8 +6,6 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
-PLATFORM_CPPFLAGS += -mcpu=xscale
-
 #
 # !WARNING!
 # The PXA's OneNAND SPL uses .text.0 and .text.1 segments to allow booting from
arch/arm/cpu/sa1100/config.mk deleted +0 -9
deleted file mode 100644
index 3afa685..0000000
@@ -1,9 +0,0 @@
-#
-# (C) Copyright 2002
-# Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-# Marius Groeger <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS += -march=armv4 -mtune=strongarm1100
Signature · 1 line
1.9.1
#1 lore raw

PATCH v2 1/1 ARM: move -march=* and -mtune= options to arch/arm/Makefile

Hello Masahiro,

Quoted 237 lines · Masahiro Yamada

My main motivations for this commit are:

[1] Follow the arch/arm/Makefile style of Linux Kernel

[2] Maintain compiler options systematically
Currently, we give -march=* and -mtune=* options inconsistently:
Only some of the CPUs pass -march=* and -mtune=* options. By collecting such options into the single place arch/arm/Makefile we can tell which options are missing at a glance.

[3] Prepare for deprecating arch/*/cpu/*/config.mk

Note:
This commit just moves the compiler options so as not to change the behavior at all. It does not care about the correctness of the given options. Fox example, "-march=armv5te" might be better than "-march=armv4" for ARM946EJS, but it is beyond the scope this commit. Also, filling the missing -march=* and -tune=* is left to follow-up patches.

---

Changes in v2:
- Rebased onto u-boot-arm/master (commit 419fa9ae)

 arch/arm/Makefile                | 32 ++++++++++++++++++++++++++++++++
 arch/arm/cpu/arm1136/config.mk   |  9 ---------
 arch/arm/cpu/arm1176/config.mk   |  9 ---------
 arch/arm/cpu/arm720t/config.mk   |  9 ---------
 arch/arm/cpu/arm920t/config.mk   |  8 --------
 arch/arm/cpu/arm926ejs/config.mk |  8 --------
 arch/arm/cpu/arm946es/config.mk  |  8 --------
 arch/arm/cpu/armv7/config.mk     |  5 -----
 arch/arm/cpu/armv8/config.mk     |  2 --
 arch/arm/cpu/pxa/config.mk       |  2 --
 arch/arm/cpu/sa1100/config.mk    |  9 ---------
 11 files changed, 32 insertions(+), 69 deletions(-)
 delete mode 100644 arch/arm/cpu/arm1136/config.mk
 delete mode 100644 arch/arm/cpu/arm1176/config.mk
 delete mode 100644 arch/arm/cpu/arm720t/config.mk
 delete mode 100644 arch/arm/cpu/arm920t/config.mk
 delete mode 100644 arch/arm/cpu/arm926ejs/config.mk
 delete mode 100644 arch/arm/cpu/arm946es/config.mk
 delete mode 100644 arch/arm/cpu/sa1100/config.mk
arch/arm/Makefile +32 -0
index 878ae26..275c817 100644
@@ -2,6 +2,38 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
+# This selects which instruction set is used.
+arch-$(CONFIG_CPU_ARM720T)	=-march=armv4
+arch-$(CONFIG_CPU_ARM920T)	=-march=armv4
+arch-$(CONFIG_CPU_ARM926EJS)	=-march=armv5te
+arch-$(CONFIG_CPU_ARM946ES)	=-march=armv4
+arch-$(CONFIG_CPU_SA1100)	=-march=armv4
+arch-$(CONFIG_CPU_PXA)		=
+arch-$(CONFIG_CPU_ARM1136)	=-march=armv5
+arch-$(CONFIG_CPU_ARM1176)	=-march=armv5t
+arch-$(CONFIG_CPU_V7)		=$(call cc-option, -march=armv7-a, -march=armv5)
+arch-$(CONFIG_ARM64)		=-march=armv8-a
+
+# Evaluate arch cc-option calls now
+arch-y := $(arch-y)
+
+# This selects how we optimise for the processor.
+tune-$(CONFIG_CPU_ARM720T)	=-mtune=arm7tdmi
+tune-$(CONFIG_CPU_ARM920T)	=
+tune-$(CONFIG_CPU_ARM926EJS)	=
+tune-$(CONFIG_CPU_ARM946ES)	=
+tune-$(CONFIG_CPU_SA1100)	=-mtune=strongarm1100
+tune-$(CONFIG_CPU_PXA)		=-mcpu=xscale
+tune-$(CONFIG_CPU_ARM1136)	=
+tune-$(CONFIG_CPU_ARM1176)	=
+tune-$(CONFIG_CPU_V7)		=
+tune-$(CONFIG_ARM64)		=
+
+# Evaluate tune cc-option calls now
+tune-y := $(tune-y)
+
+PLATFORM_CPPFLAGS += $(arch-y) $(tune-y)
+
 # Machine directory name.  This list is sorted alphanumerically
 # by CONFIG_* macro name.
 machine-$(CONFIG_ARCH_AT91)		+= at91
arch/arm/cpu/arm1136/config.mk deleted +0 -9
deleted file mode 100644
index a82c6ce..0000000
@@ -1,9 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-# Make ARMv5 to allow more compilers to work, even though its v6.
-PLATFORM_CPPFLAGS += -march=armv5
arch/arm/cpu/arm1176/config.mk deleted +0 -9
deleted file mode 100644
index 5dc2ebb..0000000
@@ -1,9 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-# Make ARMv5 to allow more compilers to work, even though its v6.
-PLATFORM_CPPFLAGS += -march=armv5t
arch/arm/cpu/arm720t/config.mk deleted +0 -9
deleted file mode 100644
index 772fb41..0000000
@@ -1,9 +0,0 @@
-#
-# (C) Copyright 2002
-# Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-# Marius Groeger <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS += -march=armv4 -mtune=arm7tdmi
arch/arm/cpu/arm920t/config.mk deleted +0 -8
deleted file mode 100644
index 799afff..0000000
@@ -1,8 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS += -march=armv4
arch/arm/cpu/arm926ejs/config.mk deleted +0 -8
deleted file mode 100644
index bdb3da1..0000000
@@ -1,8 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS += -march=armv5te
arch/arm/cpu/arm946es/config.mk deleted +0 -8
deleted file mode 100644
index 438668d..0000000
@@ -1,8 +0,0 @@
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS +=  -march=armv4
arch/arm/cpu/armv7/config.mk +0 -5
index 6c82c3b..63591d4 100644
@@ -5,11 +5,6 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
-# If armv7-a is not supported by GCC fall-back to armv5, which is
-# supported by more tool-chains
-PF_CPPFLAGS_ARMV7 := $(call cc-option, -march=armv7-a, -march=armv5)
-PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_ARMV7)
-
 # On supported platforms we set the bit which causes us to trap on unaligned
 # memory access.  This is the opposite of what the compiler expects to be
 # the default so we must pass in -mno-unaligned-access so that it is aware
arch/arm/cpu/armv8/config.mk +0 -2
index f5b9559..6850258 100644
@@ -6,7 +6,5 @@
 #
 PLATFORM_RELFLAGS += -fno-common -ffixed-x18
 
-PF_CPPFLAGS_ARMV8 := $(call cc-option, -march=armv8-a)
 PF_NO_UNALIGNED := $(call cc-option, -mstrict-align)
-PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_ARMV8)
 PLATFORM_CPPFLAGS += $(PF_NO_UNALIGNED)
arch/arm/cpu/pxa/config.mk +0 -2
index 525f5d3..7fb5316 100644
@@ -6,8 +6,6 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
-PLATFORM_CPPFLAGS += -mcpu=xscale
-
 #
 # !WARNING!
 # The PXA's OneNAND SPL uses .text.0 and .text.1 segments to allow booting from
arch/arm/cpu/sa1100/config.mk deleted +0 -9
deleted file mode 100644
index 3afa685..0000000
@@ -1,9 +0,0 @@
-#
-# (C) Copyright 2002
-# Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-# Marius Groeger <[email protected]>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-PLATFORM_CPPFLAGS += -march=armv4 -mtune=strongarm1100
Signature · 1 line
1.9.1

Applied to u-boot-arm/master, thanks!

Amicalement,

Signature · 1 line
Albert.
#2 lore raw

PATCH v2 1/1 ARM: move -march=* and -mtune= options to arch/arm/Makefile

Quoted 20 lines · Albert ARIBAUD
Quoted 19 lines · Masahiro Yamada

My main motivations for this commit are:

[1] Follow the arch/arm/Makefile style of Linux Kernel

[2] Maintain compiler options systematically
Currently, we give -march=* and -mtune=* options inconsistently:
Only some of the CPUs pass -march=* and -mtune=* options. By collecting such options into the single place arch/arm/Makefile we can tell which options are missing at a glance.

[3] Prepare for deprecating arch/*/cpu/*/config.mk

Note:
This commit just moves the compiler options so as not to change the behavior at all. It does not care about the correctness of the given options. Fox example, "-march=armv5te" might be better than "-march=armv4" for ARM946EJS, but it is beyond the scope this commit. Also, filling the missing -march=* and -tune=* is left to follow-up patches.

...

Quoted 1 line

Applied to u-boot-arm/master, thanks!

This patch breaks Tegra (at least Seaboard, and I'd guess all Tegra boards). Reverting it solves the problem.

It causes the SPL to be build for ARMv7 even though it should be built for an earlier architecture. I added a $(warning) to arch/arm/Makefile, and it prints:

arch/arm/Makefile:37: SPL_BUILD FLAGS -D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux -mword-relocations -mno-unaligned-access -ffunction-sections -fdata-sections -fno-common -ffixed-r9 -msoft-float -pipe -march=armv7-a

arch/arm/Makefile:37: SPL_BUILD y FLAGS -D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux -ffunction-sections -fdata-sections -fno-common -ffixed-r9 -msoft-float -pipe -march=armv7-a

Note the second line says ARMv7, even though CONFIG_SPL_BUILD is set, so it shouldn't.

#3 lore raw

PATCH v2 1/1 ARM: move -march=* and -mtune= options to arch/arm/Makefile

Quoted 21 lines · Stephen Warren
Quoted 13 lines · Albert ARIBAUD
Quoted 12 lines · Masahiro Yamada

My main motivations for this commit are:

[1] Follow the arch/arm/Makefile style of Linux Kernel

[2] Maintain compiler options systematically
Currently, we give -march=* and -mtune=* options inconsistently:
Only some of the CPUs pass -march=* and -mtune=* options. By collecting such options into the single place arch/arm/Makefile we can tell which options are missing at a glance.

[3] Prepare for deprecating arch/*/cpu/*/config.mk

Quoted 7 lines
Quoted 7 lines

Note:
This commit just moves the compiler options so as not to change the behavior at all. It does not care about the correctness of the given options. Fox example, "-march=armv5te" might be better than "-march=armv4" for ARM946EJS, but it is beyond the scope this commit. Also, filling the missing -march=* and -tune=* is left to follow-up patches.

Quoted 5 lines

...

Quoted 1 line

Applied to u-boot-arm/master, thanks!

This patch breaks Tegra (at least Seaboard, and I'd guess all Tegra boards). Reverting it solves the problem.

Yes, just bisected the same problem on the TK1 down to this commit.

Quoted 14 lines

It causes the SPL to be build for ARMv7 even though it should be built for an earlier architecture. I added a $(warning) to arch/arm/Makefile, and it prints:

arch/arm/Makefile:37: SPL_BUILD FLAGS -D__ARM__ -marm

(quoted diff) +0 -3
-mno-thumb-interwork  -mabi=aapcs-linux  -mword-relocations
-mno-unaligned-access  -ffunction-sections -fdata-sections -fno-common
-ffixed-r9  -msoft-float  -pipe  -march=armv7-a

arch/arm/Makefile:37: SPL_BUILD y FLAGS -D__ARM__ -marm

(quoted diff) +0 -2
-mno-thumb-interwork  -mabi=aapcs-linux  -ffunction-sections
-fdata-sections -fno-common -ffixed-r9  -msoft-float  -pipe  -march=armv7-a
Quoted 3 lines

Note the second line says ARMv7, even though CONFIG_SPL_BUILD is set, so it shouldn't.

Tegra seems to be the only target so far that changes the target CPU for the SPL build:

#config.mk
...
ARCH := $(CONFIG_SYS_ARCH:"%"=%)
CPU := $(CONFIG_SYS_CPU:"%"=%)
ifdef CONFIG_SPL_BUILD
ifdef CONFIG_TEGRA
CPU := arm720t
endif
endif
...

How to model this with that new compiler switch setup?

Jan

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150411/1d7e679c/attachment.sig>

#4 lore raw

PATCH v2 1/1 ARM: move -march=* and -mtune= options to arch/arm/Makefile

Stephen, Jan,

2015-04-11 15:18 GMT+09:00 Jan Kiszka <[email protected]>:

Quoted 5 lines
Quoted 2 lines

This patch breaks Tegra (at least Seaboard, and I'd guess all Tegra boards). Reverting it solves the problem.

Yes, just bisected the same problem on the TK1 down to this commit.

I will take a look right away.

Signature · 2 lines
Best Regards
Masahiro Yamada
#5 lore raw

PATCH v2 1/1 ARM: move -march=* and -mtune= options to arch/arm/Makefile

Hi, Stephen, Jan,

2015-04-11 21:53 GMT+09:00 Masahiro Yamada <[email protected]>:

Quoted 7 lines

Stephen, Jan,

2015-04-11 15:18 GMT+09:00 Jan Kiszka <[email protected]>:

Quoted 9 lines
Quoted 5 lines
Quoted 2 lines

This patch breaks Tegra (at least Seaboard, and I'd guess all Tegra boards). Reverting it solves the problem.

Yes, just bisected the same problem on the TK1 down to this commit.

I will take a look right away.

Could you check this patch?
http://patchwork.ozlabs.org/patch/460382/

Signature · 2 lines
Best Regards
Masahiro Yamada
#6 lore raw

PATCH v2 1/1 ARM: move -march=* and -mtune= options to arch/arm/Makefile

In reply to Stephen Warren

Hi Stephen,

2015-04-11 12:49 GMT+09:00 Stephen Warren <[email protected]>:

Quoted 38 lines · Albert ARIBAUD
Quoted 20 lines · Masahiro Yamada
Quoted 19 lines

My main motivations for this commit are:

[1] Follow the arch/arm/Makefile style of Linux Kernel

[2] Maintain compiler options systematically
Currently, we give -march=* and -mtune=* options inconsistently:
Only some of the CPUs pass -march=* and -mtune=* options. By collecting such options into the single place arch/arm/Makefile we can tell which options are missing at a glance.

[3] Prepare for deprecating arch/*/cpu/*/config.mk

Note:
This commit just moves the compiler options so as not to change the behavior at all. It does not care about the correctness of the given options. Fox example, "-march=armv5te" might be better than "-march=armv4" for ARM946EJS, but it is beyond the scope this commit. Also, filling the missing -march=* and -tune=* is left to follow-up patches.

...

Quoted 1 line

Applied to u-boot-arm/master, thanks!

This patch breaks Tegra (at least Seaboard, and I'd guess all Tegra boards). Reverting it solves the problem.

It causes the SPL to be build for ARMv7 even though it should be built for an earlier architecture. I added a $(warning) to arch/arm/Makefile, and it prints:

arch/arm/Makefile:37: SPL_BUILD FLAGS -D__ARM__ -marm

(quoted diff) +0 -3
-mno-thumb-interwork  -mabi=aapcs-linux  -mword-relocations
-mno-unaligned-access  -ffunction-sections -fdata-sections -fno-common
-ffixed-r9  -msoft-float  -pipe  -march=armv7-a

arch/arm/Makefile:37: SPL_BUILD y FLAGS -D__ARM__ -marm

Review

Quoted 2 lines
(quoted diff) +0 -2
-mno-thumb-interwork  -mabi=aapcs-linux  -ffunction-sections
-fdata-sections -fno-common -ffixed-r9  -msoft-float  -pipe  -march=armv7-a

Just a tip:

You can also check it by ".*.cmd" files.

After I fixed this problem, I confirmed it as follows:

For U-boot proper, for example,

$ head common/.stdio.o.cmd
cmd_common/stdio.o := arm-linux-gnueabi-gcc -Wp,-MD,common/.stdio.o.d
-nostdinc -isystem /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include
-Iinclude  -I./arch/arm/include -include ./include/linux/kconfig.h
-D__KERNEL__ -D__UBOOT__ -DCONFIG_SYS_TEXT_BASE=0x0010E000 -Wall
-Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding
-Os -fno-stack-protector -g -fstack-usage -Wno-format-nonliteral
-D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux
-mword-relocations -mno-unaligned-access -ffunction-sections
-fdata-sections -fno-common -ffixed-r9 -msoft-float -pipe
-march=armv7-a -I./arch/arm/mach-tegra/include
-D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(stdio)"
-D"KBUILD_MODNAME=KBUILD_STR(stdio)" -c -o common/stdio.o
common/stdio.c
[ snip ]

For SPL,

$ head spl/common/.stdio.o.cmd
cmd_spl/common/stdio.o := arm-linux-gnueabi-gcc
-Wp,-MD,spl/common/.stdio.o.d  -nostdinc -isystem
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include -Iinclude
-I./arch/arm/include -include ./include/linux/kconfig.h -D__KERNEL__
-D__UBOOT__ -DCONFIG_SYS_TEXT_BASE=0x0010E000 -DCONFIG_SPL_BUILD -Wall
-Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding
-Os -fno-stack-protector -g -fstack-usage -Wno-format-nonliteral
-ffunction-sections -fdata-sections -D__ARM__ -marm
-mno-thumb-interwork -mabi=aapcs-linux -ffunction-sections
-fdata-sections -fno-common -ffixed-r9 -msoft-float -pipe -march=armv4
-mtune=arm7tdmi -I./arch/arm/mach-tegra/include
-D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(stdio)"
-D"KBUILD_MODNAME=KBUILD_STR(stdio)" -c -o spl/common/stdio.o
common/stdio.c
[ snip ]
Signature · 2 lines
Best Regards
Masahiro Yamada