Makefile文件  |  70行  |  2.31 KB

#
# Build targets for a Cortex-M-based processor
#

# Cortex-M Environment Checks ##################################################

# If building for the Cortex-M target, ensure that the user has specified a path
# to the Cortex-M toolchain that they wish to use.
ifeq ($(CORTEXM_TOOLS_PREFIX),)
$(error "You must supply a CORTEXM_TOOLS_PREFIX environment variable \
         containing a path to the Cortex-M toolchain. Example: \
         export CORTEXM_TOOLS_PREFIX=$$HOME/bin/gcc-arm-none-eabi-5_3-2016q1")
endif

# Cortex-M Tools ###############################################################

TARGET_AR = $(CORTEXM_TOOLS_PREFIX)/bin/arm-none-eabi-ar
TARGET_CC = $(CORTEXM_TOOLS_PREFIX)/bin/arm-none-eabi-g++
TARGET_LD = $(CORTEXM_TOOLS_PREFIX)/bin/arm-none-eabi-g++

# Cortex-M Compiler Flags ######################################################

# Add Cortex-M compiler flags.
TARGET_CFLAGS += $(CORTEXM_CFLAGS)

# TODO: Add more Cortex-M flags from the Nanohub build

# Code generation flags.
TARGET_CFLAGS += -mthumb
TARGET_CFLAGS += -mfloat-abi=softfp
TARGET_CFLAGS += -mno-thumb-interwork
TARGET_CFLAGS += -ffast-math
TARGET_CFLAGS += -fsingle-precision-constant

# Sadly we must disable double promotion warnings due to logging macros. There
# is a bug for this here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431
TARGET_CFLAGS += -Wno-double-promotion

# Cortex-M Shared Object Linker Flags ##########################################

TARGET_SO_LDFLAGS += -shared

# Supported Cortex-M Architectures #############################################

CORTEXM_SUPPORTED_ARCHS = m4

# Environment Checks ###########################################################

# Ensure that an architecture is chosen.
ifeq ($(filter $(CORTEXM_ARCH), $(CORTEXM_SUPPORTED_ARCHS)),)
$(error "The CORTEXM_ARCH argument must be set to a supported architecture (\
         $(CORTEXM_SUPPORTED_ARCHS))")
endif

# Target Architecture ##########################################################

# Set the Cortex-M architecture.
ifeq ($(CORTEXM_ARCH), m4)
TARGET_CFLAGS += -mcpu=cortex-m4
TARGET_CFLAGS += -mfpu=fpv4-sp-d16
endif

# Optimization Level ###########################################################

TARGET_CFLAGS += -O$(OPT_LEVEL)

# Variant Specific Sources #####################################################

TARGET_VARIANT_SRCS += $(CORTEXM_SRCS)