#****************************************************************************** # # makedefs - Definitions common to all makefiles. # # Copyright (c) 2005-2012 Texas Instruments Incorporated. All rights reserved. # Software License Agreement # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 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. # # Neither the name of Texas Instruments Incorporated 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. # # This is part of revision 9453 of the Stellaris Firmware Development Package. # #****************************************************************************** #****************************************************************************** # # Get the operating system name. If this is Cygwin, the .d files will be # munged to convert c: into /cygdrive/c so that "make" will be happy with the # auto-generated dependencies. # #****************************************************************************** os:=${shell uname -s} #****************************************************************************** # # The compiler to be used. # #****************************************************************************** ifndef COMPILER COMPILER=gcc endif #****************************************************************************** # # Definitions for using GCC. # #****************************************************************************** ifeq (${COMPILER}, gcc) # # Get the prefix for the tools to use. Use arm-stellaris-eabi if it exists, # otherwise fall back to arm-none-eabi. # PREFIX=${shell type arm-stellaris-eabi-gcc > /dev/null 2>&1 && \ echo arm-stellaris-eabi || echo arm-none-eabi} # # The command for calling the compiler. # CC=${PREFIX}-gcc # # The location of the C compiler # ARMGCC_ROOT is used by some makefiles that need to know where the compiler # is installed. It is not used further for normal stellarisware apps # ARMGCC_ROOT:=${shell dirname '${shell sh -c "which ${CC}"}'}/.. # # Determine the compiler CPU/FPU options based on the processor variant. # ifndef VARIANT CPU=-mcpu=cortex-m3 FPU= else ifeq (${VARIANT}, cm3) CPU=-mcpu=cortex-m3 FPU= else ifeq (${VARIANT}, cm4f) CPU=-mcpu=cortex-m4 FPU=-mfpu=fpv4-sp-d16 -mfloat-abi=softfp else $(error Unknown processor variant ${VARIANT}!) endif endif endif # # The flags passed to the assembler. # AFLAGS=-mthumb \ ${CPU} \ ${FPU} \ -MD # # The flags passed to the compiler. # CFLAGS=-mthumb \ ${CPU} \ ${FPU} \ -Os \ -ffunction-sections \ -fdata-sections \ -MD \ -std=c99 \ -Wall \ -pedantic \ -DPART_${PART} \ -c # # The command for calling the library archiver. # AR=${PREFIX}-ar # # The command for calling the linker. # LD=${PREFIX}-ld # # The flags passed to the linker. # LDFLAGS=--gc-sections # # Get the location of libgcc.a from the GCC front-end. # LIBGCC=${shell ${CC} ${CFLAGS} -print-libgcc-file-name} # # Get the location of libc.a from the GCC front-end. # LIBC=${shell ${CC} ${CFLAGS} -print-file-name=libc.a} # # Get the location of libm.a from the GCC front-end. # LIBM=${shell ${CC} ${CFLAGS} -print-file-name=libm.a} # # The command for extracting images from the linked executables. # OBJCOPY=${PREFIX}-objcopy # # Tell the compiler to include debugging information if the DEBUG environment # variable is set. # ifdef DEBUG CFLAGS+=-g -D DEBUG endif # # Add the tool specific CFLAGS. # CFLAGS+=${CFLAGSgcc} # # Add the include file paths to AFLAGS and CFLAGS. # AFLAGS+=${patsubst %,-I%,${subst :, ,${IPATH}}} CFLAGS+=${patsubst %,-I%,${subst :, ,${IPATH}}} # # The rule for building the object file from each C source file. # ${COMPILER}${SUFFIX}/%.o: %.c @if [ 'x${VERBOSE}' = x ]; \ then \ echo " CC ${<}"; \ else \ echo ${CC} ${CFLAGS} -D${COMPILER} -o ${@} ${<}; \ fi @${CC} ${CFLAGS} -D${COMPILER} -o ${@} ${<} ifneq ($(findstring CYGWIN, ${os}), ) @sed -i -r 's/ ([A-Za-z]):/ \/cygdrive\/\1/g' ${@:.o=.d} endif # # The rule for building the object file from each assembly source file. # ${COMPILER}${SUFFIX}/%.o: %.S @if [ 'x${VERBOSE}' = x ]; \ then \ echo " AS ${<}"; \ else \ echo ${CC} ${AFLAGS} -D${COMPILER} -o ${@} -c ${<}; \ fi @${CC} ${AFLAGS} -D${COMPILER} -o ${@} -c ${<} ifneq ($(findstring CYGWIN, ${os}), ) @sed -i -r 's/ ([A-Za-z]):/ \/cygdrive\/\1/g' ${@:.o=.d} endif # # The rule for creating an object library. # ${COMPILER}${SUFFIX}/%.a: @if [ 'x${VERBOSE}' = x ]; \ then \ echo " AR ${@}"; \ else \ echo ${AR} -cr ${@} ${^}; \ fi @${AR} -cr ${@} ${^} # # The rule for linking the application. # ${COMPILER}${SUFFIX}/%.axf: @if [ 'x${SCATTERgcc_${notdir ${@:.axf=}}}' = x ]; \ then \ ldname="${ROOT}/gcc/standalone.ld"; \ else \ ldname="${SCATTERgcc_${notdir ${@:.axf=}}}"; \ fi; \ if [ 'x${VERBOSE}' = x ]; \ then \ echo " LD ${@} ${LNK_SCP}"; \ else \ echo ${LD} -T $${ldname} \ --entry ${ENTRY_${notdir ${@:.axf=}}} \ ${LDFLAGSgcc_${notdir ${@:.axf=}}} \ ${LDFLAGS} -o ${@} $(filter %.o %.a, ${^}) \ '${LIBM}' '${LIBC}' '${LIBGCC}'; \ fi; \ ${LD} -T $${ldname} \ --entry ${ENTRY_${notdir ${@:.axf=}}} \ ${LDFLAGSgcc_${notdir ${@:.axf=}}} \ ${LDFLAGS} -o ${@} $(filter %.o %.a, ${^}) \ '${LIBM}' '${LIBC}' '${LIBGCC}' @${OBJCOPY} -O binary ${@} ${@:.axf=.bin} endif