diff options
Diffstat (limited to 'nuttx/arch/arm/src/armv7-m/Toolchain.defs')
-rw-r--r-- | nuttx/arch/arm/src/armv7-m/Toolchain.defs | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/armv7-m/Toolchain.defs b/nuttx/arch/arm/src/armv7-m/Toolchain.defs new file mode 100644 index 000000000..e214ce8bd --- /dev/null +++ b/nuttx/arch/arm/src/armv7-m/Toolchain.defs @@ -0,0 +1,266 @@ +############################################################################ +# arch/arm/src/armv7-m/Toolchain.defs +# +# Copyright (C) 2012 Gregory Nutt. All rights reserved. +# Author: Gregory Nutt <gnutt@nuttx.org> +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name NuttX nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +# Setup for the selected toolchain + +# +# Handle old-style chip-specific toolchain names in the absence of +# a new-style toolchain specification, force the selection of a single +# toolchain and allow the selected toolchain to be overridden by a +# command-line selection. +# + +ifeq ($(filter y, \ + $(CONFIG_LPC43_ATOLLIC_LITE) \ + $(CONFIG_STM32_ATOLLIC_LITE) \ + $(CONFIG_LPC43_ATOLLIC_PRO) \ + $(CONFIG_STM32_ATOLLIC_PRO) \ + $(CONFIG_ARMV7M_TOOLCHAIN_ATOLLIC) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= ATOLLIC +endif +ifeq ($(filter y, \ + $(CONFIG_KINETIS_BUILDROOT) \ + $(CONFIG_LM3S_BUILDROOT) \ + $(CONFIG_LPC17_BUILDROOT) \ + $(CONFIG_LPC43_BUILDROOT) \ + $(CONFIG_SAM3U_BUILDROOT) \ + $(CONFIG_STM32_BUILDROOT) \ + $(CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= BUILDROOT +endif +ifeq ($(filter y, \ + $(CONFIG_LPC17_CODEREDL) \ + $(CONFIG_ARMV7M_TOOLCHAIN_CODEREDL) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= CODEREDL +endif +ifeq ($(filter y, \ + $(CONFIG_LPC17_CODEREDW) \ + $(CONFIG_LPC43_CODEREDW) \ + $(CONFIG_ARMV7M_TOOLCHAIN_CODEREDW) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= CODEREDW +endif +ifeq ($(filter y, \ + $(CONFIG_KINETIS_CODESOURCERYL) \ + $(CONFIG_LM3S_CODESOURCERYL) \ + $(CONFIG_LPC17_CODESOURCERYL) \ + $(CONFIG_LPC43_CODESOURCERYL) \ + $(CONFIG_SAM3U_CODESOURCERYL) \ + $(CONFIG_STM32_CODESOURCERYL) \ + $(CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYL) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= CODESOURCERYL +endif +ifeq ($(filter y, \ + $(CONFIG_KINETIS_CODESOURCERYW) \ + $(CONFIG_LM3S_CODESOURCERYW) \ + $(CONFIG_LPC17_CODESOURCERYW) \ + $(CONFIG_LPC43_CODESOURCERYW) \ + $(CONFIG_SAM3U_CODESOURCERYW) \ + $(CONFIG_STM32_CODESOURCERYW) \ + $(CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= CODESOURCERYW +endif +ifeq ($(filter y, \ + $(CONFIG_KINETIS_DEVKITARM) \ + $(CONFIG_LM3S_DEVKITARM) \ + $(CONFIG_LPC17_DEVKITARM) \ + $(CONFIG_LPC43_DEVKITARM) \ + $(CONFIG_SAM3U_DEVKITARM) \ + $(CONFIG_STM32_DEVKITARM) \ + $(CONFIG_ARMV7M_TOOLCHAIN_DEVKITARM) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= DEVKITARM +endif +ifeq ($(filter y, \ + $(CONFIG_ARMV7M_TOOLCHAIN_GNU_EABI) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= GNU_EABI +endif +ifeq ($(filter y, \ + $(CONFIG_STM32_RAISONANCE) \ + $(CONFIG_ARMV7M_TOOLCHAIN_RAISONANCE) \ + ),y) + CONFIG_ARMV7M_TOOLCHAIN ?= RAISONANCE +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) +# ARCROSSDEV If required, an alternative prefix used when +# invoking ar and nm. +# ARCHCPUFLAGS CPU-specific flags selecting the instruction set +# FPU options, etc. +# MAXOPTIMIZATION The maximum optimization level that results in +# reliable code generation. +# + +# Atollic toolchain under Windows + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),ATOLLIC) + CROSSDEV = arm-atollic-eabi- + ARCROSSDEV = arm-atollic-eabi- + ifneq ($(CONFIG_WINDOWS_NATIVE),y) + WINTOOL = y + endif + 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 +endif + +# NuttX buildroot under Linux or Cygwin + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),BUILDROOT) + # OABI + # CROSSDEV = arm-nuttx-elf- + # ARCROSSDEV = arm-nuttx-elf- + # ARCHCPUFLAGS = -mtune=cortex-m3 -march=armv7-m -mfloat-abi=soft + # EABI + CROSSDEV = arm-nuttx-eabi- + ARCROSSDEV = arm-nuttx-eabi- + ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft + MAXOPTIMIZATION = -Os +endif + +# Code Red RedSuite under Linux + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),CODEREDL) + CROSSDEV = arm-none-eabi- + ARCROSSDEV = arm-none-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 +endif + +# Code Red RedSuite under Windows + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),CODEREDW) + CROSSDEV = arm-none-eabi- + ARCROSSDEV = arm-none-eabi- + ifneq ($(CONFIG_WINDOWS_NATIVE),y) + WINTOOL = y + endif + 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 +endif + +# CodeSourcery under Linux + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),CODESOURCERYL) + CROSSDEV = arm-none-eabi- + ARCROSSDEV = arm-none-eabi- + ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft + MAXOPTIMIZATION = -O2 +endif + +# CodeSourcery under Windows + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),CODESOURCERYW) + CROSSDEV = arm-none-eabi- + ARCROSSDEV = arm-none-eabi- + ifneq ($(CONFIG_WINDOWS_NATIVE),y) + WINTOOL = y + endif + ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft +endif + +# devkitARM under Windows + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),DEVKITARM) + CROSSDEV = arm-eabi- + ARCROSSDEV = arm-eabi- + ifneq ($(CONFIG_WINDOWS_NATIVE),y) + WINTOOL = y + endif + ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft +endif + +# Generic GNU EABI toolchain on OS X, Linux or any typical Posix system + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),GNU_EABI) + CROSSDEV = arm-none-eabi- + ARCROSSDEV = arm-none-eabi- + MAXOPTIMIZATION = -O3 + 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 +endif + +# Raisonance RIDE7 under Windows + +ifeq ($(CONFIG_ARMV7M_TOOLCHAIN),RAISONANCE) + CROSSDEV = arm-none-eabi- + ARCROSSDEV = arm-none-eabi- + ifneq ($(CONFIG_WINDOWS_NATIVE),y) + WINTOOL = y + endif + ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft +endif |