#******************************************************************************
#
# makedefs - Definitions common to all makefiles.
#
# Copyright (c) 2005,2006 Luminary Micro, Inc.  All rights reserved.
#
# Software License Agreement
#
# Luminary Micro, Inc. (LMI) is supplying this software for use solely and
# exclusively on LMI's Stellaris Family of microcontroller products.
#
# The software is owned by LMI and/or its suppliers, and is protected under
# applicable copyright laws.  All rights are reserved.  Any use in violation
# of the foregoing restrictions may subject the user to criminal sanctions
# under applicable laws, as well as to civil liability for the breach of the
# terms and conditions of this license.
#
# THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
# OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
# LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
# CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
#
#******************************************************************************

#******************************************************************************
#
# The compiler to be used.
#
#******************************************************************************
ifndef COMPILER
COMPILER=gcc
endif

#******************************************************************************
#
# The debugger to be used.
#
#******************************************************************************
ifndef DEBUGGER
DEBUGGER=gdb
endif

#******************************************************************************
#
# Definitions for using GCC.
#
#******************************************************************************
ifeq (${COMPILER}, gcc)

#
# The command for calling the compiler.
#
CC=arm-none-eabi-gcc

#
# The flags passed to the assembler.
#
AFLAGS=-mthumb         \
       -mcpu=cortex-m3 \
       -MD

#
# The flags passed to the compiler.
#
CFLAGS=-mthumb         \
       -mcpu=cortex-m3 \
       -O2             \
       -MD

#
# The command for calling the library archiver.
#
AR=arm-none-eabi-ar

#
# The command for calling the linker.
#
LD=arm-none-eabi-ld

#
# The flags passed to the linker.
#
LDFLAGS= -Map gcc/out.map

#
# Get the location of libgcc.a from the GCC front-end.
#
LIBGCC=${shell ${CC} -mthumb -march=armv6t2 -print-libgcc-file-name}

#
# Get the location of libc.a from the GCC front-end.
#
LIBC=${shell ${CC} -mthumb -march=armv6t2 -print-file-name=libc.a}

#
# The command for extracting images from the linked executables.
#
OBJCOPY=arm-none-eabi-objcopy

endif

#******************************************************************************
#
# Tell the compiler to include debugging information if the DEBUG environment
# variable is set.
#
#******************************************************************************
ifdef DEBUG
CFLAGS += -g
endif

#******************************************************************************
#
# The rule for building the object file from each C source file.
#
#******************************************************************************
${COMPILER}/%.o: %.c
	@if [ 'x${VERBOSE}' = x ];                               \
	 then                                                    \
	     echo "  CC    ${<}";                                \
	 else                                                    \
	     echo ${CC} ${CFLAGS} -D${COMPILER} -o ${@} -c ${<}; \
	 fi
	@${CC} ${CFLAGS} -D${COMPILER} -o ${@} -c ${<}
ifeq (${COMPILER}, rvds)
	@mv -f ${notdir ${@:.o=.d}} ${COMPILER}
endif

#******************************************************************************
#
# The rule for building the object file from each assembly source file.
#
#******************************************************************************
${COMPILER}/%.o: %.S
	@if [ 'x${VERBOSE}' = x ];                               \
	 then                                                    \
	     echo "  CC    ${<}";                                \
	 else                                                    \
	     echo ${CC} ${AFLAGS} -D${COMPILER} -o ${@} -c ${<}; \
	 fi
ifeq (${COMPILER}, rvds)
	@${CC} ${AFLAGS} -D${COMPILER} -E ${<} > ${@:.o=_.S}
	@${CC} ${AFLAGS} -o ${@} -c ${@:.o=_.S}
	@rm ${@:.o=_.S}
	@${CC} ${AFLAGS} -D${COMPILER} --md -E ${<}
	@sed 's,<stdout>,${@},g' ${notdir ${<:.S=.d}} > ${@:.o=.d}
	@rm ${notdir ${<:.S=.d}}
endif
ifeq (${COMPILER}, gcc)
	@${CC} ${AFLAGS} -D${COMPILER} -o ${@} -c ${<}
endif

#******************************************************************************
#
# The rule for creating an object library.
#
#******************************************************************************
${COMPILER}/%.a:
	@if [ 'x${VERBOSE}' = x ];     \
	 then                          \
	     echo "  AR    ${@}";      \
	 else                          \
	     echo ${AR} -cr ${@} ${^}; \
	 fi
	@${AR} -cr ${@} ${^}

#******************************************************************************
#
# The rule for linking the application.
#
#******************************************************************************
${COMPILER}/%.axf:
	@if [ 'x${VERBOSE}' = x ]; \
	 then                      \
	     echo "  LD    ${@}";  \
	 fi
ifeq (${COMPILER}, gcc)
	@if [ 'x${VERBOSE}' != x ];                           \
	 then                                                 \
	     echo ${LD} -T ${SCATTER_${notdir ${@:.axf=}}}    \
	                --entry ${ENTRY_${notdir ${@:.axf=}}} \
	                ${LDFLAGSgcc_${notdir ${@:.axf=}}}    \
	                ${LDFLAGS} -o ${@} ${^}               \
	                '${LIBC}' '${LIBGCC}';                \
	 fi
	@${LD} -T ${SCATTER_${notdir ${@:.axf=}}}    \
	       --entry ${ENTRY_${notdir ${@:.axf=}}} \
	       ${LDFLAGSgcc_${notdir ${@:.axf=}}}    \
	       ${LDFLAGS} -o ${@} ${^}               \
	       '${LIBC}' '${LIBGCC}'
	@${OBJCOPY} -O binary ${@} ${@:.axf=.bin}
endif
