diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2015-03-05 11:25:27 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2015-03-05 11:25:27 -0600 |
commit | 78f8e63386207359cee46dadd69e92018a77fe9a (patch) | |
tree | 5bd966093eacaa1c03c82c74098a77609e434b58 | |
parent | cc521bd3af16039c01242c21bd77892f4a74fa75 (diff) |
Make ARM build system Cortex-M7 ready
-rw-r--r-- | nuttx/arch/arm/src/Makefile | 20 | ||||
-rw-r--r-- | nuttx/arch/arm/src/armv7-m/Toolchain.defs | 123 |
2 files changed, 50 insertions, 93 deletions
diff --git a/nuttx/arch/arm/src/Makefile b/nuttx/arch/arm/src/Makefile index 70fac87d69..40e7973ca8 100644 --- a/nuttx/arch/arm/src/Makefile +++ b/nuttx/arch/arm/src/Makefile @@ -1,7 +1,7 @@ ############################################################################ # arch/arm/src/Makefile # -# Copyright (C) 2007-2009, 2011-2012, 2014 Gregory Nutt. All rights reserved. +# Copyright (C) 2007-2009, 2011-2012, 2014-2015 Gregory Nutt. All rights reserved. # Author: Gregory Nutt <gnutt@nuttx.org> # # Redistribution and use in source and binary forms, with or without @@ -38,25 +38,19 @@ ifeq ($(CONFIG_ARCH_CORTEXA5),y) # Cortex-A5 is ARMv7-A ARCH_SUBDIR = armv7-a -else -ifeq ($(CONFIG_ARCH_CORTEXA8),y) # Cortex-A8 is ARMv7-A +else ifeq ($(CONFIG_ARCH_CORTEXA8),y) # Cortex-A8 is ARMv7-A ARCH_SUBDIR = armv7-a -else -ifeq ($(CONFIG_ARCH_CORTEXM3),y) # Cortex-M3 is ARMv7-M +else ifeq ($(CONFIG_ARCH_CORTEXM3),y) # Cortex-M3 is ARMv7-M ARCH_SUBDIR = armv7-m -else -ifeq ($(CONFIG_ARCH_CORTEXM4),y) # Cortex-M4 is ARMv7E-M +else ifeq ($(CONFIG_ARCH_CORTEXM4),y) # Cortex-M4 is ARMv7E-M ARCH_SUBDIR = armv7-m -else -ifeq ($(CONFIG_ARCH_CORTEXM0),y) # Cortex-M0 is ARMv6-M +else ifeq ($(CONFIG_ARCH_CORTEXM7),y) # Cortex-M4 is ARMv7E-M +ARCH_SUBDIR = armv7-m +else ifeq ($(CONFIG_ARCH_CORTEXM0),y) # Cortex-M0 is ARMv6-M ARCH_SUBDIR = armv6-m else ARCH_SUBDIR = arm endif -endif -endif -endif -endif ifeq ($(CONFIG_WINDOWS_NATIVE),y) ARCH_SRCDIR = $(TOPDIR)\arch\$(CONFIG_ARCH)\src diff --git a/nuttx/arch/arm/src/armv7-m/Toolchain.defs b/nuttx/arch/arm/src/armv7-m/Toolchain.defs index c2c40c33dc..1015a8598d 100644 --- a/nuttx/arch/arm/src/armv7-m/Toolchain.defs +++ b/nuttx/arch/arm/src/armv7-m/Toolchain.defs @@ -1,7 +1,7 @@ ############################################################################ # arch/arm/src/armv7-m/Toolchain.defs # -# Copyright (C) 2012-2013 Gregory Nutt. All rights reserved. +# Copyright (C) 2012-2013, 2015 Gregory Nutt. All rights reserved. # Author: Gregory Nutt <gnutt@nuttx.org> # # Redistribution and use in source and binary forms, with or without @@ -105,10 +105,6 @@ endif # # Supported toolchains # -# TODO - It's likely that all of these toolchains now support the -# CortexM4. Since they are all GCC-based, we could almost -# certainly simplify this further. -# # Each toolchain definition should set: # # CROSSDEV The GNU toolchain triple (command prefix) @@ -124,21 +120,44 @@ ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y) MAXOPTIMIZATION := $(CONFIG_DEBUG_OPTLEVEL) endif +# Parametrization for ARCHCPUFLAGS + +ifeq ($(CONFIG_ARCH_CORTEXM4),y) + TOOLCHAIN_ARM7EM := y + TOOLCHAIN_MCPU := -mcpu=cortex-m4 + TOOLCHAIN_MTUNE := -mtune=cortex-m4 + TOOLCHAIN_MARCH := -march=armv7e-m + ifeq ($(CONFIG_ARCH_FPU),y) + TOOLCHAIN_MFLOAT := -mfpu=fpv4-sp-d16 -mfloat-abi=hard + else + TOOLCHAIN_MFLOAT := -mfloat-abi=soft + endif +else ifeq ($(CONFIG_ARCH_CORTEXM7),y) + TOOLCHAIN_ARM7EM := y + TOOLCHAIN_MCPU := -mcpu=cortex-m7 + TOOLCHAIN_MTUNE := -mtune=cortex-m7 + TOOLCHAIN_MARCH := -march=armv7e-m + ifeq ($(CONFIG_ARCH_FPU),y) + #TOOLCHAIN_MFLOAT := -mfpu=fpv5-sp-d16 -mfloat-abi=hard # Single precision + TOOLCHAIN_MFLOAT := -mfpu=fpv5-d16 -mfloat-abi=hard + else + TOOLCHAIN_MFLOAT := -mfloat-abi=soft + endif +else # ifeq ($(CONFIG_ARCH_CORTEXM3),y) + TOOLCHAIN_ARM7EM := n + TOOLCHAIN_MCPU := -mcpu=cortex-m3 + TOOLCHAIN_MTUNE := -mtune=cortex-m3 + TOOLCHAIN_MARCH := -march=armv7-m + TOOLCHAIN_MFLOAT := -mfloat-abi=soft +endif + # Atollic toolchain under Windows ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),ATOLLIC) CROSSDEV ?= arm-atollic-eabi- ARCROSSDEV ?= arm-atollic-eabi- MAXOPTIMIZATION ?= -Os - ifeq ($(CONFIG_ARCH_CORTEXM4),y) - ifeq ($(CONFIG_ARCH_FPU),y) - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard - else - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfloat-abi=soft - endif - else ifeq ($(CONFIG_ARCH_CORTEXM3),y) - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft - endif + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MFLOAT) ifneq ($(CONFIG_WINDOWS_NATIVE),y) WINTOOL = y endif @@ -150,19 +169,11 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),BUILDROOT) ifeq ($(CONFIG_ARMV7M_OABI_TOOLCHAIN),y) CROSSDEV ?= arm-nuttx-elf- ARCROSSDEV ?= arm-nuttx-elf- - ARCHCPUFLAGS = -mtune=cortex-m3 -march=armv7-m -mfloat-abi=soft + ARCHCPUFLAGS = $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MFLOAT) else CROSSDEV ?= arm-nuttx-eabi- ARCROSSDEV ?= arm-nuttx-eabi- - ifeq ($(CONFIG_ARCH_CORTEXM4),y) - ifeq ($(CONFIG_ARCH_FPU),y) - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard - else - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfloat-abi=soft - endif - else ifeq ($(CONFIG_ARCH_CORTEXM3),y) - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft - endif + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MFLOAT) endif MAXOPTIMIZATION ?= -Os endif @@ -173,15 +184,7 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),CODEREDL) CROSSDEV ?= arm-none-eabi- ARCROSSDEV ?= arm-none-eabi- MAXOPTIMIZATION ?= -Os - ifeq ($(CONFIG_ARCH_CORTEXM4),y) - ifeq ($(CONFIG_ARCH_FPU),y) - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard - else - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfloat-abi=soft - endif - else ifeq ($(CONFIG_ARCH_CORTEXM3),y) - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft - endif + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MFLOAT) endif # Code Red RedSuite under Windows @@ -190,15 +193,7 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),CODEREDW) CROSSDEV ?= arm-none-eabi- ARCROSSDEV ?= arm-none-eabi- MAXOPTIMIZATION ?= -Os - ifeq ($(CONFIG_ARCH_CORTEXM4),y) - ifeq ($(CONFIG_ARCH_FPU),y) - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard - else - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfloat-abi=soft - endif - else ifeq ($(CONFIG_ARCH_CORTEXM3),y) - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft - endif + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MFLOAT) ifneq ($(CONFIG_WINDOWS_NATIVE),y) WINTOOL = y endif @@ -210,15 +205,7 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),CODESOURCERYL) CROSSDEV ?= arm-none-eabi- ARCROSSDEV ?= arm-none-eabi- MAXOPTIMIZATION ?= -O2 - ifeq ($(CONFIG_ARCH_CORTEXM4),y) - ifeq ($(CONFIG_ARCH_FPU),y) - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard - else - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfloat-abi=soft - endif - else ifeq ($(CONFIG_ARCH_CORTEXM3),y) - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft - endif + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MFLOAT) endif # CodeSourcery under Windows @@ -227,15 +214,7 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),CODESOURCERYW) CROSSDEV ?= arm-none-eabi- ARCROSSDEV ?= arm-none-eabi- MAXOPTIMIZATION ?= -Os - ifeq ($(CONFIG_ARCH_CORTEXM4),y) - ifeq ($(CONFIG_ARCH_FPU),y) - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard - else - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfloat-abi=soft - endif - else ifeq ($(CONFIG_ARCH_CORTEXM3),y) - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft - endif + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MFLOAT) ifneq ($(CONFIG_WINDOWS_NATIVE),y) WINTOOL = y endif @@ -249,7 +228,7 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),DEVKITARM) ifneq ($(CONFIG_WINDOWS_NATIVE),y) WINTOOL = y endif - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MFLOAT) endif # Generic GNU EABI toolchain on OS X, Linux or any typical Posix system @@ -258,15 +237,7 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),GNU_EABIL) CROSSDEV ?= arm-none-eabi- ARCROSSDEV ?= arm-none-eabi- MAXOPTIMIZATION ?= -Os - ifeq ($(CONFIG_ARCH_CORTEXM4),y) - ifeq ($(CONFIG_ARCH_FPU),y) - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard - else - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfloat-abi=soft - endif - else ifeq ($(CONFIG_ARCH_CORTEXM3),y) - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft - endif + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MFLOAT) endif # Generic GNU EABI toolchain under Windows @@ -275,15 +246,7 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),GNU_EABIW) CROSSDEV ?= arm-none-eabi- ARCROSSDEV ?= arm-none-eabi- MAXOPTIMIZATION ?= -Os - ifeq ($(CONFIG_ARCH_CORTEXM4),y) - ifeq ($(CONFIG_ARCH_FPU),y) - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard - else - ARCHCPUFLAGS = -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfloat-abi=soft - endif - else ifeq ($(CONFIG_ARCH_CORTEXM3),y) - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft - endif + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MFLOAT) ifneq ($(CONFIG_WINDOWS_NATIVE),y) WINTOOL = y endif @@ -297,5 +260,5 @@ ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),RAISONANCE) ifneq ($(CONFIG_WINDOWS_NATIVE),y) WINTOOL = y endif - ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft + ARCHCPUFLAGS = $(TOOLCHAIN_MCPU) -mthumb $(TOOLCHAIN_MFLOAT) endif |