This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 54aa91f02b59e67c19c0c74692e6c3369bf6c260 Author: chao an <anc...@xiaomi.com> AuthorDate: Thu Sep 15 22:06:54 2022 +0800 arch/arm: unify compile flags to common/Toolchain.defs Signed-off-by: chao an <anc...@xiaomi.com> --- arch/arm/src/arm/Toolchain.defs | 165 +--------------- arch/arm/src/armv6-m/Toolchain.defs | 208 +------------------ arch/arm/src/armv7-a/Toolchain.defs | 167 +--------------- arch/arm/src/armv7-m/Toolchain.defs | 219 +-------------------- arch/arm/src/armv7-r/Toolchain.defs | 167 +--------------- arch/arm/src/armv8-m/Toolchain.defs | 219 +-------------------- arch/arm/src/{armv6-m => common}/Toolchain.defs | 111 +++++------ arch/arm/src/tlsr82/Toolchain.defs | 172 +--------------- boards/arm/eoss3/quickfeather/scripts/Make.defs | 2 +- .../arm/stm32/stm32f4discovery/scripts/Make.defs | 2 +- 10 files changed, 66 insertions(+), 1366 deletions(-) diff --git a/arch/arm/src/arm/Toolchain.defs b/arch/arm/src/arm/Toolchain.defs index 702990b5ce..6a2c34afe9 100644 --- a/arch/arm/src/arm/Toolchain.defs +++ b/arch/arm/src/arm/Toolchain.defs @@ -1,5 +1,5 @@ ############################################################################ -# arch/arm/src/armv/Toolchain.defs +# arch/arm/src/arm/Toolchain.defs # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with @@ -18,165 +18,4 @@ # ############################################################################ -# 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_ARM_TOOLCHAIN_BUILDROOT) \ - ),y) - CONFIG_TOOLCHAIN ?= BUILDROOT -endif - -ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_GNU_EABI) \ - ),y) - CONFIG_TOOLCHAIN ?= GNU_EABI -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) -# ARCHCPUFLAGS CPU-specific flags selecting the instruction set -# FPU options, etc. -# ARCHOPTIMIZATION The optimization level that results in -# reliable code generation. -# - -ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y) - ARCHOPTIMIZATION += $(CONFIG_DEBUG_OPTLEVEL) -else ifeq ($(CONFIG_DEBUG_FULLOPT),y) - ARCHOPTIMIZATION += -Os -endif - -ifneq ($(CONFIG_DEBUG_NOOPT),y) - ARCHOPTIMIZATION += -fno-strict-aliasing -endif - -ifeq ($(CONFIG_FRAME_POINTER),y) - ARCHOPTIMIZATION += -fno-omit-frame-pointer -fno-optimize-sibling-calls -else - ARCHOPTIMIZATION += -fomit-frame-pointer -endif - -ifeq ($(CONFIG_STACK_CANARIES),y) - ARCHOPTIMIZATION += -fstack-protector-all -endif - -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - -ifeq ($(CONFIG_MM_KASAN_ALL),y) - ARCHOPTIMIZATION += -fsanitize=kernel-address -endif - -ifeq ($(CONFIG_MM_UBSAN_ALL),y) - ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) -endif - -ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y) - ARCHOPTIMIZATION += -fsanitize-undefined-trap-on-error -endif - -# NuttX buildroot under Linux or Cygwin - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT),y) - CROSSDEV ?= arm-nuttx-eabi- -endif - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT_OABI),y) - CROSSDEV ?= arm-nuttx-elf- -endif - -# Generic GNU EABI toolchain - -ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - CROSSDEV ?= arm-none-eabi- -endif - -ARCHCFLAGS += -fno-common -ARCHCXXFLAGS += -fno-common -nostdinc++ - -ARCHCFLAGS += -Wall -Wstrict-prototypes -Wshadow -Wundef -ARCHCXXFLAGS += -Wall -Wshadow -Wundef - -ifneq ($(CONFIG_CXX_EXCEPTION),y) - ARCHCXXFLAGS += -fno-exceptions -fcheck-new -endif - -ifneq ($(CONFIG_CXX_RTTI),y) - ARCHCXXFLAGS += -fno-rtti -endif - -LDFLAGS += -nostdlib - -# Optimization of unused sections - -ifeq ($(CONFIG_DEBUG_OPT_UNUSED_SECTIONS),y) - LDFLAGS += --gc-sections - ARCHOPTIMIZATION += -ffunction-sections -fdata-sections -endif - -# Debug link map - -ifeq ($(CONFIG_DEBUG_LINK_MAP),y) - LDFLAGS += --cref -Map=$(call CONVERT_PATH,$(TOPDIR)$(DELIM)nuttx.map) -endif - -ifeq ($(CONFIG_DEBUG_SYMBOLS),y) - ARCHOPTIMIZATION += -g -endif - -# Default toolchain - -CC = $(CROSSDEV)gcc -CXX = $(CROSSDEV)g++ -CPP = $(CROSSDEV)gcc -E -P -x c -STRIP = $(CROSSDEV)strip --strip-unneeded -OBJCOPY = $(CROSSDEV)objcopy -OBJDUMP = $(CROSSDEV)objdump -LD = $(CROSSDEV)ld -AR = $(CROSSDEV)ar rcs -NM = $(CROSSDEV)nm - -# Link Time Optimization - -ifeq ($(CONFIG_LTO_FULL),y) - ARCHOPTIMIZATION += -flto - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - LD := $(CROSSDEV)gcc - AR := $(CROSSDEV)gcc-ar rcs - NM := $(CROSSDEV)gcc-nm - ARCHOPTIMIZATION += -fuse-linker-plugin - ARCHOPTIMIZATION += -fno-builtin - endif -endif - -# Add the builtin library - -EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-libgcc-file-name)) - -ifneq ($(CONFIG_LIBM),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libm.a)) -endif - -ifeq ($(CONFIG_LIBSUPCXX),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) -endif - -ifeq ($(CONFIG_ARCH_COVERAGE),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) -endif +include $(TOPDIR)/arch/arm/src/common/Toolchain.defs diff --git a/arch/arm/src/armv6-m/Toolchain.defs b/arch/arm/src/armv6-m/Toolchain.defs index 102f803219..e3bcd7daef 100644 --- a/arch/arm/src/armv6-m/Toolchain.defs +++ b/arch/arm/src/armv6-m/Toolchain.defs @@ -18,71 +18,6 @@ # ############################################################################ -# 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_ARM_TOOLCHAIN_BUILDROOT)),y) - CONFIG_TOOLCHAIN ?= BUILDROOT -endif - -ifeq ($(filter y, $(CONFIG_ARM_TOOLCHAIN_GNU_EABI)),y) - CONFIG_TOOLCHAIN ?= GNU_EABI -endif - -ifeq ($(filter y, $(CONFIG_ARM_TOOLCHAIN_CLANG)),y) - CONFIG_TOOLCHAIN ?= CLANG -endif - -# -# Supported toolchains -# -# TODO - It's likely that all of these toolchains now support the -# CortexM0. 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) -# ARCHCPUFLAGS CPU-specific flags selecting the instruction set -# options, etc. -# ARCHOPTIMIZATION The optimization level that results in -# reliable code generation. -# - -ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y) - ARCHOPTIMIZATION += $(CONFIG_DEBUG_OPTLEVEL) -else ifeq ($(CONFIG_DEBUG_FULLOPT),y) - ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ARCHOPTIMIZATION += -Oz - else - ARCHOPTIMIZATION += -Os - endif -endif - -ifneq ($(CONFIG_DEBUG_NOOPT),y) - ARCHOPTIMIZATION += -fno-strict-aliasing -endif - -ifeq ($(CONFIG_FRAME_POINTER),y) - ARCHOPTIMIZATION += -fno-omit-frame-pointer -fno-optimize-sibling-calls -else - ARCHOPTIMIZATION += -fomit-frame-pointer -endif - -ifeq ($(CONFIG_STACK_CANARIES),y) - ARCHOPTIMIZATION += -fstack-protector-all -endif - -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - # Parametrization for ARCHCPUFLAGS TOOLCHAIN_MTUNE := -mcpu=cortex-m0 -mthumb @@ -90,147 +25,8 @@ TOOLCHAIN_MFLOAT := -mfloat-abi=soft # Clang Configuration files -ifeq ($(CONFIG_TOOLCHAIN),CLANG) +ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) TOOLCHAIN_MARCH := --config armv6m_soft_nofp_nosys endif -# Link Time Optimization - -ifeq ($(CONFIG_LTO_THIN),y) - ARCHOPTIMIZATION += -flto=thin -else ifeq ($(CONFIG_LTO_FULL),y) - ARCHOPTIMIZATION += -flto - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - ARCHOPTIMIZATION += -fuse-linker-plugin - endif -endif - -# NuttX buildroot under Linux or Cygwin - -ifeq ($(CONFIG_TOOLCHAIN),BUILDROOT) - CROSSDEV ?= arm-nuttx-eabi- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) -endif - -# Generic GNU EABI toolchain - -ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - CROSSDEV ?= arm-none-eabi- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) -endif - -# Clang toolchain - -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) - - CC = clang - CXX = clang++ - CPP = clang -E -P -x c - LD = ld.lld -m armelf - STRIP = llvm-strip --strip-unneeded - AR = llvm-ar rcs - NM = llvm-nm - OBJCOPY = llvm-objcopy - OBJDUMP = llvm-objdump - - # Since the no_builtin attribute is not fully supported on Clang - # disable the built-in functions, refer: - # https://github.com/apache/incubator-nuttx/pull/5971 - - ARCHOPTIMIZATION += -fno-builtin - -# Default toolchain - -else - CC = $(CROSSDEV)gcc - CXX = $(CROSSDEV)g++ - CPP = $(CROSSDEV)gcc -E -P -x c - STRIP = $(CROSSDEV)strip --strip-unneeded - OBJCOPY = $(CROSSDEV)objcopy - OBJDUMP = $(CROSSDEV)objdump - LD = $(CROSSDEV)ld - AR = $(CROSSDEV)ar rcs - NM = $(CROSSDEV)nm - - ifeq ($(CONFIG_LTO_FULL),y) - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - LD := $(CROSSDEV)gcc - AR := $(CROSSDEV)gcc-ar rcs - NM := $(CROSSDEV)gcc-nm - ARCHOPTIMIZATION += -fno-builtin - endif - endif -endif - -# Architecture flags - -ifeq ($(CONFIG_MM_KASAN_ALL),y) - ARCHOPTIMIZATION += -fsanitize=kernel-address -endif - -ifeq ($(CONFIG_MM_UBSAN_ALL),y) - ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) -endif - -ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y) - ARCHOPTIMIZATION += -fsanitize-undefined-trap-on-error -endif - -ARCHCFLAGS += -fno-common -ARCHCXXFLAGS += -fno-common -nostdinc++ - -ARCHCFLAGS += -Wall -Wstrict-prototypes -Wshadow -Wundef -ARCHCXXFLAGS += -Wall -Wshadow -Wundef - -ifneq ($(CONFIG_CXX_EXCEPTION),y) - ARCHCXXFLAGS += -fno-exceptions -fcheck-new -endif - -ifneq ($(CONFIG_CXX_RTTI),y) - ARCHCXXFLAGS += -fno-rtti -endif - -LDFLAGS += -nostdlib - -# Optimization of unused sections - -ifeq ($(CONFIG_DEBUG_OPT_UNUSED_SECTIONS),y) - LDFLAGS += --gc-sections - ARCHOPTIMIZATION += -ffunction-sections -fdata-sections -endif - -# Debug link map - -ifeq ($(CONFIG_DEBUG_LINK_MAP),y) - LDFLAGS += --cref -Map=$(call CONVERT_PATH,$(TOPDIR)$(DELIM)nuttx.map) -endif - -ifeq ($(CONFIG_DEBUG_SYMBOLS),y) - ARCHOPTIMIZATION += -g -endif - -# Add the builtin library - -COMPILER_RT_LIB = $(shell $(CC) $(ARCHCPUFLAGS) --print-libgcc-file-name) -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ifeq ($(wildcard $(COMPILER_RT_LIB)),) - # if "--print-libgcc-file-name" unable to find the correct libgcc PATH - # then go ahead and try "--print-file-name" - COMPILER_RT_LIB := $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name $(notdir $(COMPILER_RT_LIB)))) - endif -endif - -EXTRA_LIBS += $(COMPILER_RT_LIB) - -ifneq ($(CONFIG_LIBM),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libm.a)) -endif - -ifeq ($(CONFIG_LIBSUPCXX),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) -endif - -ifeq ($(CONFIG_ARCH_COVERAGE),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) -endif +include $(TOPDIR)/arch/arm/src/common/Toolchain.defs diff --git a/arch/arm/src/armv7-a/Toolchain.defs b/arch/arm/src/armv7-a/Toolchain.defs index 9cb0273223..1d44918a10 100644 --- a/arch/arm/src/armv7-a/Toolchain.defs +++ b/arch/arm/src/armv7-a/Toolchain.defs @@ -18,41 +18,6 @@ # ############################################################################ -# Setup for the selected toolchain - -# -# Select and allow the selected toolchain to be overridden by a command-line -#selection. -# - -ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_BUILDROOT) \ - ),y) - CONFIG_TOOLCHAIN ?= BUILDROOT -endif - -ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_GNU_EABI) \ - ),y) - CONFIG_TOOLCHAIN ?= GNU_EABI -endif - -# -# Supported toolchains -# -# Each toolchain definition should set: -# -# CROSSDEV The GNU toolchain triple (command prefix) -# ARCHCPUFLAGS CPU-specific flags selecting the instruction set -# FPU options, etc. -# ARCHOPTIMIZATION The optimization level that results in -# reliable code generation. -# - -ifeq ($(CONFIG_ARM_THUMB),y) - ARCHCPUFLAGS += -mthumb -endif - ifeq ($(CONFIG_ARCH_CORTEXA5),y) ARCHCPUFLAGS += -mcpu=cortex-a5 else ifeq ($(CONFIG_ARCH_CORTEXA7),y) @@ -96,134 +61,4 @@ else ARCHCPUFLAGS += -mfloat-abi=soft endif -ifeq ($(CONFIG_MM_KASAN_ALL),y) - ARCHOPTIMIZATION += -fsanitize=kernel-address -endif - -ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y) - ARCHOPTIMIZATION += $(CONFIG_DEBUG_OPTLEVEL) -else ifeq ($(CONFIG_DEBUG_FULLOPT),y) - ARCHOPTIMIZATION += -Os -endif - -ifneq ($(CONFIG_DEBUG_NOOPT),y) - ARCHOPTIMIZATION += -fno-strict-aliasing -endif - -ifeq ($(CONFIG_FRAME_POINTER),y) - ARCHOPTIMIZATION += -fno-omit-frame-pointer -fno-optimize-sibling-calls -else - ARCHOPTIMIZATION += -fomit-frame-pointer -endif - -ifeq ($(CONFIG_STACK_CANARIES),y) - ARCHOPTIMIZATION += -fstack-protector-all -endif - -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - -ifeq ($(CONFIG_MM_UBSAN_ALL),y) - ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) -endif - -ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y) - ARCHOPTIMIZATION += -fsanitize-undefined-trap-on-error -endif - -ifeq ($(CONFIG_ENDIAN_BIG),y) - TARGET_ARCH := armeb -else - TARGET_ARCH := arm -endif - -ARCHCFLAGS += -fno-common -ARCHCXXFLAGS += -fno-common -nostdinc++ - -ARCHCFLAGS += -Wall -Wstrict-prototypes -Wshadow -Wundef -ARCHCXXFLAGS += -Wall -Wshadow -Wundef - -ifneq ($(CONFIG_CXX_EXCEPTION),y) - ARCHCXXFLAGS += -fno-exceptions -fcheck-new -endif - -ifneq ($(CONFIG_CXX_RTTI),y) - ARCHCXXFLAGS += -fno-rtti -endif - -LDFLAGS += -nostdlib - -# Optimization of unused sections - -ifeq ($(CONFIG_DEBUG_OPT_UNUSED_SECTIONS),y) - LDFLAGS += --gc-sections - ARCHOPTIMIZATION += -ffunction-sections -fdata-sections -endif - -# Debug link map - -ifeq ($(CONFIG_DEBUG_LINK_MAP),y) - LDFLAGS += --cref -Map=$(call CONVERT_PATH,$(TOPDIR)$(DELIM)nuttx.map) -endif - -ifeq ($(CONFIG_DEBUG_SYMBOLS),y) - ARCHOPTIMIZATION += -g -endif - -# NuttX buildroot under Linux or Cygwin - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT),y) - CROSSDEV ?= $(TARGET_ARCH)-nuttx-eabi- -endif - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT_OABI),y) - CROSSDEV ?= $(TARGET_ARCH)-nuttx-elf- -endif - -# Generic GNU EABI toolchain - -ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - CROSSDEV ?= $(TARGET_ARCH)-none-eabi- -endif - -# Default toolchain - -CC = $(CROSSDEV)gcc -CXX = $(CROSSDEV)g++ -CPP = $(CROSSDEV)gcc -E -P -x c -STRIP = $(CROSSDEV)strip --strip-unneeded -OBJCOPY = $(CROSSDEV)objcopy -OBJDUMP = $(CROSSDEV)objdump -LD = $(CROSSDEV)ld -AR = $(CROSSDEV)ar rcs -NM = $(CROSSDEV)nm - -# Link Time Optimization - -ifeq ($(CONFIG_LTO_FULL),y) - ARCHOPTIMIZATION += -flto - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - LD := $(CROSSDEV)gcc - AR := $(CROSSDEV)gcc-ar rcs - NM := $(CROSSDEV)gcc-nm - ARCHOPTIMIZATION += -fuse-linker-plugin - ARCHOPTIMIZATION += -fno-builtin - endif -endif - -# Add the builtin library - -EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-libgcc-file-name)) - -ifneq ($(CONFIG_LIBM),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libm.a)) -endif - -ifeq ($(CONFIG_LIBSUPCXX),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) -endif - -ifeq ($(CONFIG_ARCH_COVERAGE),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) -endif +include $(TOPDIR)/arch/arm/src/common/Toolchain.defs diff --git a/arch/arm/src/armv7-m/Toolchain.defs b/arch/arm/src/armv7-m/Toolchain.defs index 5e7f6c63b5..07f939ec38 100644 --- a/arch/arm/src/armv7-m/Toolchain.defs +++ b/arch/arm/src/armv7-m/Toolchain.defs @@ -18,85 +18,6 @@ # ############################################################################ -# 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_ARM_TOOLCHAIN_BUILDROOT) \ - ),y) - CONFIG_TOOLCHAIN ?= BUILDROOT -endif - -ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_GNU_EABI) \ - ),y) - CONFIG_TOOLCHAIN ?= GNU_EABI -endif - -ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_CLANG) \ - ),y) - CONFIG_TOOLCHAIN ?= CLANG -endif - -# -# Supported toolchains -# -# Each toolchain definition should set: -# -# CROSSDEV The GNU toolchain triple (command prefix) -# ARCHCPUFLAGS CPU-specific flags selecting the instruction set -# FPU options, etc. -# ARCHOPTIMIZATION The optimization level that results in -# reliable code generation. -# - -ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y) - ARCHOPTIMIZATION += $(CONFIG_DEBUG_OPTLEVEL) -else ifeq ($(CONFIG_DEBUG_FULLOPT),y) - ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ARCHOPTIMIZATION += -Oz - else - ARCHOPTIMIZATION += -Os - endif -endif - -ifneq ($(CONFIG_DEBUG_NOOPT),y) - ARCHOPTIMIZATION += -fno-strict-aliasing -endif - -ifeq ($(CONFIG_FRAME_POINTER),y) - ARCHOPTIMIZATION += -fno-omit-frame-pointer -fno-optimize-sibling-calls -else - ARCHOPTIMIZATION += -fomit-frame-pointer -endif - -ifeq ($(CONFIG_STACK_CANARIES),y) - ARCHOPTIMIZATION += -fstack-protector-all -endif - -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - -ifeq ($(CONFIG_ARMV7M_STACKCHECK),y) - ARCHOPTIMIZATION += -finstrument-functions -ffixed-r10 -endif - -ifeq ($(CONFIG_MM_UBSAN_ALL),y) - ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) -endif - -ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y) - ARCHOPTIMIZATION += -fsanitize-undefined-trap-on-error -endif - # Parametrization for ARCHCPUFLAGS ifeq ($(CONFIG_ARCH_CORTEXM4),y) @@ -136,7 +57,7 @@ endif # Clang Configuration files -ifeq ($(CONFIG_TOOLCHAIN),CLANG) +ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) ifeq ($(CONFIG_ARCH_CORTEXM4),y) ifeq ($(CONFIG_ARCH_FPU),y) @@ -156,140 +77,8 @@ ifeq ($(CONFIG_TOOLCHAIN),CLANG) endif -# Link Time Optimization - -ifeq ($(CONFIG_LTO_THIN),y) - ARCHOPTIMIZATION += -flto=thin -else ifeq ($(CONFIG_LTO_FULL),y) - ARCHOPTIMIZATION += -flto - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - ARCHOPTIMIZATION += -fuse-linker-plugin - endif -endif - -# NuttX buildroot under Linux or Cygwin - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT),y) - CROSSDEV ?= arm-nuttx-eabi- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) -mthumb $(TOOLCHAIN_MFLOAT) -endif - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT_OABI),y) - CROSSDEV ?= arm-nuttx-elf- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) -endif - -ifeq ($(CONFIG_MM_KASAN_ALL),y) - ARCHOPTIMIZATION += -fsanitize=kernel-address -endif - -# Generic GNU EABI toolchain - -ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - CROSSDEV ?= arm-none-eabi- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) -mthumb $(TOOLCHAIN_MFLOAT) -endif - -# Clang toolchain - -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) - - CC = clang - CXX = clang++ - CPP = clang -E -P -x c - LD = ld.lld -m armelf - STRIP = llvm-strip --strip-unneeded - AR = llvm-ar rcs - NM = llvm-nm - OBJCOPY = llvm-objcopy - OBJDUMP = llvm-objdump - - # Since the no_builtin attribute is not fully supported on Clang - # disable the built-in functions, refer: - # https://github.com/apache/incubator-nuttx/pull/5971 - - ARCHOPTIMIZATION += -fno-builtin - -# Default toolchain - -else - CC = $(CROSSDEV)gcc - CXX = $(CROSSDEV)g++ - CPP = $(CROSSDEV)gcc -E -P -x c - STRIP = $(CROSSDEV)strip --strip-unneeded - OBJCOPY = $(CROSSDEV)objcopy - OBJDUMP = $(CROSSDEV)objdump - LD = $(CROSSDEV)ld - AR = $(CROSSDEV)ar rcs - NM = $(CROSSDEV)nm - - ifeq ($(CONFIG_LTO_FULL),y) - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - LD := $(CROSSDEV)gcc - AR := $(CROSSDEV)gcc-ar rcs - NM := $(CROSSDEV)gcc-nm - ARCHOPTIMIZATION += -fno-builtin - endif - endif -endif - -# Architecture flags - -ARCHCFLAGS += -fno-common -ARCHCXXFLAGS += -fno-common -nostdinc++ - -ARCHCFLAGS += -Wall -Wstrict-prototypes -Wshadow -Wundef -ARCHCXXFLAGS += -Wall -Wshadow -Wundef - -ifneq ($(CONFIG_CXX_EXCEPTION),y) - ARCHCXXFLAGS += -fno-exceptions -fcheck-new -endif - -ifneq ($(CONFIG_CXX_RTTI),y) - ARCHCXXFLAGS += -fno-rtti -endif - -LDFLAGS += -nostdlib - -# Optimization of unused sections - -ifeq ($(CONFIG_DEBUG_OPT_UNUSED_SECTIONS),y) - LDFLAGS += --gc-sections - ARCHOPTIMIZATION += -ffunction-sections -fdata-sections -endif - -# Debug link map - -ifeq ($(CONFIG_DEBUG_LINK_MAP),y) - LDFLAGS += --cref -Map=$(call CONVERT_PATH,$(TOPDIR)$(DELIM)nuttx.map) -endif - -ifeq ($(CONFIG_DEBUG_SYMBOLS),y) - ARCHOPTIMIZATION += -g -endif - -# Add the builtin library - -COMPILER_RT_LIB = $(shell $(CC) $(ARCHCPUFLAGS) --print-libgcc-file-name) -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ifeq ($(wildcard $(COMPILER_RT_LIB)),) - # if "--print-libgcc-file-name" unable to find the correct libgcc PATH - # then go ahead and try "--print-file-name" - COMPILER_RT_LIB := $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name $(notdir $(COMPILER_RT_LIB)))) - endif -endif - -EXTRA_LIBS += $(COMPILER_RT_LIB) - -ifneq ($(CONFIG_LIBM),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libm.a)) -endif - -ifeq ($(CONFIG_LIBSUPCXX),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) +ifeq ($(CONFIG_ARMV7M_STACKCHECK),y) + ARCHOPTIMIZATION += -finstrument-functions -ffixed-r10 endif -ifeq ($(CONFIG_ARCH_COVERAGE),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) -endif +include $(TOPDIR)/arch/arm/src/common/Toolchain.defs diff --git a/arch/arm/src/armv7-r/Toolchain.defs b/arch/arm/src/armv7-r/Toolchain.defs index 627f50556d..6ee10178f3 100644 --- a/arch/arm/src/armv7-r/Toolchain.defs +++ b/arch/arm/src/armv7-r/Toolchain.defs @@ -18,61 +18,6 @@ # ############################################################################ -# Setup for the selected toolchain - -# -# Select and allow the selected toolchain to be overridden by a command-line -#selection. -# - -ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_BUILDROOT) \ - ),y) - CONFIG_TOOLCHAIN ?= BUILDROOT -endif - -ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_GNU_EABI) \ - ),y) - CONFIG_TOOLCHAIN ?= GNU_EABI -endif - -# -# Supported toolchains -# -# Each toolchain definition should set: -# -# CROSSDEV The GNU toolchain triple (command prefix) -# ARCHCPUFLAGS CPU-specific flags selecting the instruction set -# FPU options, etc. -# ARCHOPTIMIZATION The optimization level that results in -# reliable code generation. -# - -ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y) - ARCHOPTIMIZATION += $(CONFIG_DEBUG_OPTLEVEL) -else ifeq ($(CONFIG_DEBUG_FULLOPT),y) - ARCHOPTIMIZATION += -Os -endif - -ifneq ($(CONFIG_DEBUG_NOOPT),y) - ARCHOPTIMIZATION += -fno-strict-aliasing -endif - -ifeq ($(CONFIG_FRAME_POINTER),y) - ARCHOPTIMIZATION += -fno-omit-frame-pointer -fno-optimize-sibling-calls -else - ARCHOPTIMIZATION += -fomit-frame-pointer -endif - -ifeq ($(CONFIG_STACK_CANARIES),y) - ARCHOPTIMIZATION += -fstack-protector-all -endif - -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - ifeq ($(CONFIG_ARCH_CORTEXR4),y) ARCHCPUFLAGS += -mcpu=cortex-r4 else ifeq ($(CONFIG_ARCH_CORTEXR5),y) @@ -92,114 +37,4 @@ else ARCHCPUFLAGS += -mfloat-abi=soft endif -ifeq ($(CONFIG_ENDIAN_BIG),y) - ARCHCPUFLAGS += -mbig-endian -endif - -ifeq ($(CONFIG_MM_KASAN_ALL),y) - ARCHOPTIMIZATION += -fsanitize=kernel-address -endif - -ifeq ($(CONFIG_MM_UBSAN_ALL),y) - ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) -endif - -ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y) - ARCHOPTIMIZATION += -fsanitize-undefined-trap-on-error -endif - -ifeq ($(CONFIG_ENDIAN_BIG),y) - TARGET_ARCH := armeb -else - TARGET_ARCH := arm -endif - -# NuttX buildroot under Linux or Cygwin - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT),y) - CROSSDEV ?= $(TARGET_ARCH)-nuttx-eabi- -endif - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT_OABI),y) - CROSSDEV ?= $(TARGET_ARCH)-nuttx-elf- -endif - -# Generic GNU EABI toolchain - -ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - CROSSDEV ?= $(TARGET_ARCH)-none-eabi- -endif - -ARCHCFLAGS += -fno-common -ARCHCXXFLAGS += -fno-common -nostdinc++ - -ARCHCFLAGS += -Wall -Wstrict-prototypes -Wshadow -Wundef -ARCHCXXFLAGS += -Wall -Wshadow -Wundef - -ifneq ($(CONFIG_CXX_EXCEPTION),y) - ARCHCXXFLAGS += -fno-exceptions -fcheck-new -endif - -ifneq ($(CONFIG_CXX_RTTI),y) - ARCHCXXFLAGS += -fno-rtti -endif - -LDFLAGS += -nostdlib - -# Optimization of unused sections - -ifeq ($(CONFIG_DEBUG_OPT_UNUSED_SECTIONS),y) - LDFLAGS += --gc-sections - ARCHOPTIMIZATION += -ffunction-sections -fdata-sections -endif - -# Debug link map - -ifeq ($(CONFIG_DEBUG_LINK_MAP),y) - LDFLAGS += --cref -Map=$(call CONVERT_PATH,$(TOPDIR)$(DELIM)nuttx.map) -endif - -ifeq ($(CONFIG_DEBUG_SYMBOLS),y) - ARCHOPTIMIZATION += -g -endif - -# Default toolchain - -CC = $(CROSSDEV)gcc -CXX = $(CROSSDEV)g++ -CPP = $(CROSSDEV)gcc -E -P -x c -STRIP = $(CROSSDEV)strip --strip-unneeded -OBJCOPY = $(CROSSDEV)objcopy -OBJDUMP = $(CROSSDEV)objdump -LD = $(CROSSDEV)ld -AR = $(CROSSDEV)ar rcs -NM = $(CROSSDEV)nm - -# Link Time Optimization - -ifeq ($(CONFIG_LTO_FULL),y) - ARCHOPTIMIZATION += -flto - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - LD := $(CROSSDEV)gcc - AR := $(CROSSDEV)gcc-ar rcs - NM := $(CROSSDEV)gcc-nm - ARCHOPTIMIZATION += -fuse-linker-plugin - ARCHOPTIMIZATION += -fno-builtin - endif -endif - -# Add the builtin library - -EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-libgcc-file-name)) - -ifneq ($(CONFIG_LIBM),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libm.a)) -endif - -ifeq ($(CONFIG_LIBSUPCXX),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) -endif - -ifeq ($(CONFIG_ARCH_COVERAGE),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) -endif +include $(TOPDIR)/arch/arm/src/common/Toolchain.defs diff --git a/arch/arm/src/armv8-m/Toolchain.defs b/arch/arm/src/armv8-m/Toolchain.defs index cd228683ba..8ad07e0def 100644 --- a/arch/arm/src/armv8-m/Toolchain.defs +++ b/arch/arm/src/armv8-m/Toolchain.defs @@ -18,85 +18,6 @@ # ############################################################################ -# 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_ARM_TOOLCHAIN_BUILDROOT) \ - ),y) - CONFIG_TOOLCHAIN ?= BUILDROOT -endif - -ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_GNU_EABI) \ - ),y) - CONFIG_TOOLCHAIN ?= GNU_EABI -endif - -ifeq ($(filter y, \ - $(CONFIG_ARM_TOOLCHAIN_CLANG) \ - ),y) - CONFIG_TOOLCHAIN ?= CLANG -endif - -# -# Supported toolchains -# -# Each toolchain definition should set: -# -# CROSSDEV The GNU toolchain triple (command prefix) -# ARCHCPUFLAGS CPU-specific flags selecting the instruction set -# FPU options, etc. -# ARCHOPTIMIZATION The optimization level that results in -# reliable code generation. -# - -ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y) - ARCHOPTIMIZATION += $(CONFIG_DEBUG_OPTLEVEL) -else ifeq ($(CONFIG_DEBUG_FULLOPT),y) - ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ARCHOPTIMIZATION += -Oz - else - ARCHOPTIMIZATION += -Os - endif -endif - -ifneq ($(CONFIG_DEBUG_NOOPT),y) - ARCHOPTIMIZATION += -fno-strict-aliasing -endif - -ifeq ($(CONFIG_FRAME_POINTER),y) - ARCHOPTIMIZATION += -fno-omit-frame-pointer -fno-optimize-sibling-calls -else - ARCHOPTIMIZATION += -fomit-frame-pointer -endif - -ifeq ($(CONFIG_STACK_CANARIES),y) - ARCHOPTIMIZATION += -fstack-protector-all -endif - -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - -ifeq ($(CONFIG_ARMV8M_STACKCHECK),y) - ARCHOPTIMIZATION += -finstrument-functions -ffixed-r10 -endif - -ifeq ($(CONFIG_MM_UBSAN_ALL),y) - ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) -endif - -ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y) - ARCHOPTIMIZATION += -fsanitize-undefined-trap-on-error -endif - # Parametrization for ARCHCPUFLAGS ifeq ($(CONFIG_ARCH_CORTEXM23),y) @@ -139,7 +60,7 @@ endif # Clang Configuration files -ifeq ($(CONFIG_TOOLCHAIN),CLANG) +ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) ifeq ($(CONFIG_ARCH_CORTEXM23),y) TOOLCHAIN_MARCH += --config armv8m.main_soft_nofp_nosys @@ -165,140 +86,8 @@ ifeq ($(CONFIG_TOOLCHAIN),CLANG) endif -# Link Time Optimization - -ifeq ($(CONFIG_LTO_THIN),y) - ARCHOPTIMIZATION += -flto=thin -else ifeq ($(CONFIG_LTO_FULL),y) - ARCHOPTIMIZATION += -flto - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - ARCHOPTIMIZATION += -fuse-linker-plugin - endif -endif - -# NuttX buildroot under Linux or Cygwin - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT),y) - CROSSDEV ?= arm-nuttx-eabi- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) -mthumb $(TOOLCHAIN_MFLOAT) -endif - -ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT_OABI),y) - CROSSDEV ?= arm-nuttx-elf- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) -endif - -ifeq ($(CONFIG_MM_KASAN_ALL),y) - ARCHOPTIMIZATION += -fsanitize=kernel-address -endif - -# Generic GNU EABI toolchain - -ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - CROSSDEV ?= arm-none-eabi- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) -mthumb $(TOOLCHAIN_MFLOAT) -endif - -# Clang toolchain - -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) -mthumb $(TOOLCHAIN_MFLOAT) - - CC = clang - CXX = clang++ - CPP = clang -E -P -x c - LD = ld.lld -m armelf - STRIP = llvm-strip --strip-unneeded - AR = llvm-ar rcs - NM = llvm-nm - OBJCOPY = llvm-objcopy - OBJDUMP = llvm-objdump - - # Since the no_builtin attribute is not fully supported on Clang - # disable the built-in functions, refer: - # https://github.com/apache/incubator-nuttx/pull/5971 - - ARCHOPTIMIZATION += -fno-builtin - -# Default toolchain - -else - CC = $(CROSSDEV)gcc - CXX = $(CROSSDEV)g++ - CPP = $(CROSSDEV)gcc -E -P -x c - LD = $(CROSSDEV)ld - STRIP = $(CROSSDEV)strip --strip-unneeded - AR = $(CROSSDEV)ar rcs - NM = $(CROSSDEV)nm - OBJCOPY = $(CROSSDEV)objcopy - OBJDUMP = $(CROSSDEV)objdump - - ifeq ($(CONFIG_LTO_FULL),y) - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - LD := $(CROSSDEV)gcc - AR := $(CROSSDEV)gcc-ar rcs - NM := $(CROSSDEV)gcc-nm - ARCHOPTIMIZATION += -fno-builtin - endif - endif -endif - -# Architecture flags - -ARCHCFLAGS += -fno-common -ARCHCXXFLAGS += -fno-common -nostdinc++ - -ARCHCFLAGS += -Wall -Wstrict-prototypes -Wshadow -Wundef -ARCHCXXFLAGS += -Wall -Wshadow -Wundef - -ifneq ($(CONFIG_CXX_EXCEPTION),y) - ARCHCXXFLAGS += -fno-exceptions -fcheck-new -endif - -ifneq ($(CONFIG_CXX_RTTI),y) - ARCHCXXFLAGS += -fno-rtti -endif - -LDFLAGS += -nostdlib - -# Optimization of unused sections - -ifeq ($(CONFIG_DEBUG_OPT_UNUSED_SECTIONS),y) - LDFLAGS += --gc-sections - ARCHOPTIMIZATION += -ffunction-sections -fdata-sections -endif - -# Debug link map - -ifeq ($(CONFIG_DEBUG_LINK_MAP),y) - LDFLAGS += --cref -Map=$(call CONVERT_PATH,$(TOPDIR)$(DELIM)nuttx.map) -endif - -ifeq ($(CONFIG_DEBUG_SYMBOLS),y) - ARCHOPTIMIZATION += -g -endif - -# Add the builtin library - -COMPILER_RT_LIB = $(shell $(CC) $(ARCHCPUFLAGS) --print-libgcc-file-name) -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ifeq ($(wildcard $(COMPILER_RT_LIB)),) - # if "--print-libgcc-file-name" unable to find the correct libgcc PATH - # then go ahead and try "--print-file-name" - COMPILER_RT_LIB := $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name $(notdir $(COMPILER_RT_LIB)))) - endif -endif - -EXTRA_LIBS += $(COMPILER_RT_LIB) - -ifneq ($(CONFIG_LIBM),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libm.a)) -endif - -ifeq ($(CONFIG_LIBSUPCXX),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) +ifeq ($(CONFIG_ARMV8M_STACKCHECK),y) + ARCHOPTIMIZATION += -finstrument-functions -ffixed-r10 endif -ifeq ($(CONFIG_ARCH_COVERAGE),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) -endif +include $(TOPDIR)/arch/arm/src/common/Toolchain.defs diff --git a/arch/arm/src/armv6-m/Toolchain.defs b/arch/arm/src/common/Toolchain.defs similarity index 73% copy from arch/arm/src/armv6-m/Toolchain.defs copy to arch/arm/src/common/Toolchain.defs index 102f803219..29ad342faa 100644 --- a/arch/arm/src/armv6-m/Toolchain.defs +++ b/arch/arm/src/common/Toolchain.defs @@ -1,5 +1,5 @@ ############################################################################ -# arch/arm/src/armv6-m/Toolchain.defs +# arch/arm/src/armv8-m/Toolchain.defs # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with @@ -18,39 +18,14 @@ # ############################################################################ -# 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_ARM_TOOLCHAIN_BUILDROOT)),y) - CONFIG_TOOLCHAIN ?= BUILDROOT -endif - -ifeq ($(filter y, $(CONFIG_ARM_TOOLCHAIN_GNU_EABI)),y) - CONFIG_TOOLCHAIN ?= GNU_EABI -endif - -ifeq ($(filter y, $(CONFIG_ARM_TOOLCHAIN_CLANG)),y) - CONFIG_TOOLCHAIN ?= CLANG -endif - # # Supported toolchains # -# TODO - It's likely that all of these toolchains now support the -# CortexM0. 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) # ARCHCPUFLAGS CPU-specific flags selecting the instruction set -# options, etc. +# FPU options, etc. # ARCHOPTIMIZATION The optimization level that results in # reliable code generation. # @@ -58,7 +33,7 @@ endif ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y) ARCHOPTIMIZATION += $(CONFIG_DEBUG_OPTLEVEL) else ifeq ($(CONFIG_DEBUG_FULLOPT),y) - ifeq ($(CONFIG_TOOLCHAIN),CLANG) + ifeq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y) ARCHOPTIMIZATION += -Oz else ARCHOPTIMIZATION += -Os @@ -83,15 +58,20 @@ ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage endif -# Parametrization for ARCHCPUFLAGS +ifeq ($(CONFIG_MM_UBSAN_ALL),y) + ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) +endif -TOOLCHAIN_MTUNE := -mcpu=cortex-m0 -mthumb -TOOLCHAIN_MFLOAT := -mfloat-abi=soft +ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y) + ARCHOPTIMIZATION += -fsanitize-undefined-trap-on-error +endif -# Clang Configuration files +ifeq ($(CONFIG_MM_KASAN_ALL),y) + ARCHOPTIMIZATION += -fsanitize=kernel-address +endif -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - TOOLCHAIN_MARCH := --config armv6m_soft_nofp_nosys +ifeq ($(CONFIG_ARM_THUMB),y) + ARCHOPTIMIZATION += -mthumb endif # Link Time Optimization @@ -100,29 +80,40 @@ ifeq ($(CONFIG_LTO_THIN),y) ARCHOPTIMIZATION += -flto=thin else ifeq ($(CONFIG_LTO_FULL),y) ARCHOPTIMIZATION += -flto - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) + ifeq ($(CONFIG_ARM_TOOLCHAIN_GNU_EABI),y) ARCHOPTIMIZATION += -fuse-linker-plugin endif endif # NuttX buildroot under Linux or Cygwin -ifeq ($(CONFIG_TOOLCHAIN),BUILDROOT) - CROSSDEV ?= arm-nuttx-eabi- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) +ifeq ($(CONFIG_ENDIAN_BIG),y) + ARCHCPUFLAGS += -mbig-endian + TARGET_ARCH := armeb +else + ARCHCPUFLAGS += -mlittle-endian + TARGET_ARCH := arm +endif + +ARCHCPUFLAGS += $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) + +ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT),y) + CROSSDEV ?= $(TARGET_ARCH)-nuttx-eabi- +endif + +ifeq ($(CONFIG_ARM_TOOLCHAIN_BUILDROOT_OABI),y) + CROSSDEV ?= $(TARGET_ARCH)-nuttx-elf- endif # Generic GNU EABI toolchain -ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) - CROSSDEV ?= arm-none-eabi- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) +ifeq ($(CONFIG_ARM_TOOLCHAIN_GNU_EABI),y) + CROSSDEV ?= $(TARGET_ARCH)-none-eabi- endif # Clang toolchain -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) +ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) CC = clang CXX = clang++ @@ -146,15 +137,15 @@ else CC = $(CROSSDEV)gcc CXX = $(CROSSDEV)g++ CPP = $(CROSSDEV)gcc -E -P -x c - STRIP = $(CROSSDEV)strip --strip-unneeded - OBJCOPY = $(CROSSDEV)objcopy - OBJDUMP = $(CROSSDEV)objdump LD = $(CROSSDEV)ld + STRIP = $(CROSSDEV)strip --strip-unneeded AR = $(CROSSDEV)ar rcs NM = $(CROSSDEV)nm + OBJCOPY = $(CROSSDEV)objcopy + OBJDUMP = $(CROSSDEV)objdump ifeq ($(CONFIG_LTO_FULL),y) - ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) + ifeq ($(CONFIG_ARM_TOOLCHAIN_GNU_EABI),y) LD := $(CROSSDEV)gcc AR := $(CROSSDEV)gcc-ar rcs NM := $(CROSSDEV)gcc-nm @@ -163,25 +154,14 @@ else endif endif -# Architecture flags - -ifeq ($(CONFIG_MM_KASAN_ALL),y) - ARCHOPTIMIZATION += -fsanitize=kernel-address -endif - -ifeq ($(CONFIG_MM_UBSAN_ALL),y) - ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) +ifeq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y) + ARCHOPTIMIZATION += -fshort-enums endif -ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y) - ARCHOPTIMIZATION += -fsanitize-undefined-trap-on-error -endif - -ARCHCFLAGS += -fno-common -ARCHCXXFLAGS += -fno-common -nostdinc++ +# Architecture flags -ARCHCFLAGS += -Wall -Wstrict-prototypes -Wshadow -Wundef -ARCHCXXFLAGS += -Wall -Wshadow -Wundef +ARCHCFLAGS += -Wstrict-prototypes +ARCHCXXFLAGS += -nostdinc++ ifneq ($(CONFIG_CXX_EXCEPTION),y) ARCHCXXFLAGS += -fno-exceptions -fcheck-new @@ -191,6 +171,9 @@ ifneq ($(CONFIG_CXX_RTTI),y) ARCHCXXFLAGS += -fno-rtti endif +ARCHOPTIMIZATION += -fno-common -Wall -Wshadow -Wundef +ARCHOPTIMIZATION += -nostdlib + LDFLAGS += -nostdlib # Optimization of unused sections @@ -213,7 +196,7 @@ endif # Add the builtin library COMPILER_RT_LIB = $(shell $(CC) $(ARCHCPUFLAGS) --print-libgcc-file-name) -ifeq ($(CONFIG_TOOLCHAIN),CLANG) +ifeq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y) ifeq ($(wildcard $(COMPILER_RT_LIB)),) # if "--print-libgcc-file-name" unable to find the correct libgcc PATH # then go ahead and try "--print-file-name" diff --git a/arch/arm/src/tlsr82/Toolchain.defs b/arch/arm/src/tlsr82/Toolchain.defs index d4180df13c..410eae8aa9 100644 --- a/arch/arm/src/tlsr82/Toolchain.defs +++ b/arch/arm/src/tlsr82/Toolchain.defs @@ -18,182 +18,16 @@ # ############################################################################ -# 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_ARM_TOOLCHAIN_BUILDROOT)),y) - CONFIG_TOOLCHAIN ?= BUILDROOT -endif - -ifeq ($(filter y, $(CONFIG_ARM_TOOLCHAIN_GNU_EABI)),y) - CONFIG_TOOLCHAIN ?= GNU_EABI -endif - -ifeq ($(filter y, $(CONFIG_ARM_TOOLCHAIN_CLANG)),y) - CONFIG_TOOLCHAIN ?= CLANG -endif - -# -# Supported toolchains -# -# Each toolchain definition should set: -# -# CROSSDEV The GNU toolchain triple (command prefix) -# ARCHCPUFLAGS CPU-specific flags selecting the instruction set -# options, etc. -# ARCHOPTIMIZATION The optimization level that results in -# reliable code generation. -# - -ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y) - ARCHOPTIMIZATION += $(CONFIG_DEBUG_OPTLEVEL) -else ifeq ($(CONFIG_DEBUG_FULLOPT),y) - ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ARCHOPTIMIZATION += -Oz - else - ARCHOPTIMIZATION += -Os - endif -endif - -ifneq ($(CONFIG_DEBUG_NOOPT),y) - ARCHOPTIMIZATION += -fno-strict-aliasing -endif - -ifeq ($(CONFIG_FRAME_POINTER),y) - ARCHOPTIMIZATION += -fno-omit-frame-pointer -fno-optimize-sibling-calls -else - ARCHOPTIMIZATION += -fomit-frame-pointer -endif - -ifeq ($(CONFIG_STACK_CANARIES),y) - ARCHOPTIMIZATION += -fstack-protector-all -endif - # Clang Configuration files -ifeq ($(CONFIG_TOOLCHAIN),CLANG) +ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) TOOLCHAIN_MARCH := --config armv6m_soft_nofp_nosys endif -# Link Time Optimization - -ifeq ($(CONFIG_LTO_THIN),y) - ARCHOPTIMIZATION += -flto=thin -else ifeq ($(CONFIG_LTO_FULL),y) - ARCHOPTIMIZATION += -flto -endif - -# NuttX buildroot under Linux or Cygwin - -ifeq ($(CONFIG_TOOLCHAIN),BUILDROOT) - CROSSDEV ?= arm-nuttx-eabi- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) -endif - # Generic GNU EABI toolchain -ifeq ($(CONFIG_TOOLCHAIN),GNU_EABI) +ifeq ($(CONFIG_ARM_TOOLCHAIN_GNU_EABI),y) CROSSDEV ?= tc32-elf- - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) -endif - -# Clang toolchain - -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ARCHCPUFLAGS = $(TOOLCHAIN_MARCH) $(TOOLCHAIN_MTUNE) $(TOOLCHAIN_MFLOAT) - - CC = clang - CXX = clang++ - CPP = clang -E -P -x c - LD = ld.lld -m armelf - STRIP = llvm-strip --strip-unneeded - AR = llvm-ar rcs - NM = llvm-nm - OBJCOPY = llvm-objcopy - OBJDUMP = llvm-objdump - - # Since the no_builtin attribute is not fully supported on Clang - # disable the built-in functions, refer: - # https://github.com/apache/incubator-nuttx/pull/5971 - - ARCHOPTIMIZATION += -fno-builtin - -# Default toolchain - -else - CC = $(CROSSDEV)gcc - CXX = $(CROSSDEV)g++ - CPP = $(CROSSDEV)gcc -E -P -x c - LD = $(CROSSDEV)ld - STRIP = $(CROSSDEV)strip --strip-unneeded - AR = $(CROSSDEV)ar rcs - NM = $(CROSSDEV)nm - OBJCOPY = $(CROSSDEV)objcopy - OBJDUMP = $(CROSSDEV)objdump -endif - -# Architecture flags - -ifeq ($(CONFIG_MM_KASAN_ALL),y) - ARCHOPTIMIZATION += -fsanitize=kernel-address -endif - -ARCHCFLAGS += -fno-common -ARCHCXXFLAGS += -fno-common -nostdinc++ - -ARCHCFLAGS += -Wall -Wstrict-prototypes -Wshadow -Wundef -ARCHCXXFLAGS += -Wall -Wshadow -Wundef - -ifneq ($(CONFIG_CXX_EXCEPTION),y) - ARCHCXXFLAGS += -fno-exceptions -fcheck-new -endif - -ifneq ($(CONFIG_CXX_RTTI),y) - ARCHCXXFLAGS += -fno-rtti endif -LDFLAGS += -nostdlib - -# Optimization of unused sections - -ifeq ($(CONFIG_DEBUG_OPT_UNUSED_SECTIONS),y) - LDFLAGS += --gc-sections - ARCHOPTIMIZATION += -ffunction-sections -fdata-sections -endif - -# Debug link map - -ifeq ($(CONFIG_DEBUG_LINK_MAP),y) - LDFLAGS += --cref -Map=$(call CONVERT_PATH,$(TOPDIR)$(DELIM)nuttx.map) -endif - -ifeq ($(CONFIG_DEBUG_SYMBOLS),y) - ARCHOPTIMIZATION += -g -endif - -# Add the builtin library - -COMPILER_RT_LIB = $(shell $(CC) $(ARCHCPUFLAGS) --print-libgcc-file-name) -ifeq ($(CONFIG_TOOLCHAIN),CLANG) - ifeq ($(wildcard $(COMPILER_RT_LIB)),) - # if "--print-libgcc-file-name" unable to find the correct libgcc PATH - # then go ahead and try "--print-file-name" - COMPILER_RT_LIB := $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name $(notdir $(COMPILER_RT_LIB)))) - endif -endif - -EXTRA_LIBS += $(COMPILER_RT_LIB) - -ifneq ($(CONFIG_LIBM),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libm.a)) -endif - -ifeq ($(CONFIG_LIBSUPCXX),y) - EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) -endif +include $(TOPDIR)/arch/arm/src/common/Toolchain.defs diff --git a/boards/arm/eoss3/quickfeather/scripts/Make.defs b/boards/arm/eoss3/quickfeather/scripts/Make.defs index 151f043d9f..a9a3a43921 100644 --- a/boards/arm/eoss3/quickfeather/scripts/Make.defs +++ b/boards/arm/eoss3/quickfeather/scripts/Make.defs @@ -27,7 +27,7 @@ ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT) ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10 -ifneq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) +ifneq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y) ARCHCFLAGS += -funwind-tables ARCHCXXFLAGS += -funwind-tables endif diff --git a/boards/arm/stm32/stm32f4discovery/scripts/Make.defs b/boards/arm/stm32/stm32f4discovery/scripts/Make.defs index de6e0fde6b..c309ae1a9f 100644 --- a/boards/arm/stm32/stm32f4discovery/scripts/Make.defs +++ b/boards/arm/stm32/stm32f4discovery/scripts/Make.defs @@ -27,7 +27,7 @@ ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT) ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10 -ifneq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) +ifneq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y) ARCHCFLAGS += -funwind-tables ARCHCXXFLAGS += -funwind-tables endif