diff options
| author | Yuval Adam <yuv.adm@gmail.com> | 2012-10-29 21:36:23 +0200 |
|---|---|---|
| committer | Yuval Adam <yuv.adm@gmail.com> | 2012-10-29 21:36:23 +0200 |
| commit | 44b979ac3dc53b29ee8176517b7d9a10935630c0 (patch) | |
| tree | 03c256e5e19ac2be9d19b3d4638cdf233b0ee4e9 /makedefs | |
| parent | 8ced6b65a22e0c392bc31288b2eb3f713a0fc477 (diff) | |
Initial code
Diffstat (limited to 'makedefs')
| -rw-r--r-- | makedefs | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/makedefs b/makedefs new file mode 100644 index 0000000..bfdce07 --- /dev/null +++ b/makedefs @@ -0,0 +1,251 @@ +#****************************************************************************** +# +# 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 + |
