#******************************************************************************
#
# 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.
#
#******************************************************************************

#******************************************************************************
#
# 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

#******************************************************************************
#
# 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
ifneq ($(findstring CYGWIN, ${os}), )
	@perl -i.bak -p -e 's/[Cc]:/\/cygdrive\/c/g' ${@:.o=.d}
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
ifneq ($(findstring CYGWIN, ${os}), )
	@perl -i.bak -p -e 's/[Cc]:/\/cygdrive\/c/g' ${@:.o=.d}
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
