Skip to content

Instantly share code, notes, and snippets.

@azurewraith
Created August 17, 2011 02:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azurewraith/1150650 to your computer and use it in GitHub Desktop.
Save azurewraith/1150650 to your computer and use it in GitHub Desktop.
ARM "hello world" Makefile
#******************************************************************************
#
# makedefs - Definitions common to all makefiles.
#
# Copyright (c) 2005-2011 Texas Instruments Incorporated. All rights reserved.
# Software License Agreement
#
# ...
#
# This is part of revision 6852 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-none-eabi-gcc > /dev/null 2>&1 && \
echo arm-none-eabi || echo arm-none-eabi}
#
# The command for calling the compiler.
#
CC=${PREFIX}-gcc
#
# The flags passed to the assembler.
#
AFLAGS=-mthumb \
-mcpu=cortex-m3 \
-MD
#
# The flags passed to the compiler.
#
CFLAGS=-mthumb \
-mcpu=cortex-m3 \
-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}/%.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}/%.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}/%.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${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, ${^}) \
'${LIBC}' '${LIBM}' '${LIBGCC}'; \
fi; \
${LD} -T $${ldname} \
--entry ${ENTRY_${notdir ${@:.axf=}}} \
${LDFLAGSgcc_${notdir ${@:.axf=}}} \
${LDFLAGS} -o ${@} $(filter %.o %.a, ${^}) \
'${LIBC}' '${LIBM}' '${LIBGCC}'
@${OBJCOPY} -O binary ${@} ${@:.axf=.bin}
endif
#******************************************************************************
#
# Makefile - Rules for building the hello example.
#
# Copyright (c) 2006-2011 Texas Instruments Incorporated. All rights reserved.
# ...
#
#******************************************************************************
#
# Defines the part type that this project uses.
#
PART=LM3S8962
#
# The base directory for StellarisWare.
#
ROOT=..
#
# Include the common make definitions.
#
include ${ROOT}/makedefs
#
# Where to find source files that do not live in this directory.
#
VPATH=../drivers
#
# Where to find header files that do not live in the source directory.
#
IPATH=..
#
# The final location of the built files
#
BINDIR=../bin
#
# The default rule, which causes the hello example to be built.
#
all: ${COMPILER}
all: ${COMPILER}/main.axf
all: ${BINDIR}
#
# The rule to clean out all the build products.
#
clean:
rm -rf ${BINDIR} ${wildcard *~}
#
# The rule to create the target directory.
#
${COMPILER}:
@mkdir ${COMPILER}
#
# Rules for building the main example.
#
${COMPILER}/main.axf: ${COMPILER}/main.o
${COMPILER}/main.axf: ${COMPILER}/rit128x96x4.o
${COMPILER}/main.axf: ${COMPILER}/startup_${COMPILER}.o
${COMPILER}/main.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a
${COMPILER}/main.axf: main.ld
SCATTERgcc_main=main.ld
ENTRY_main=ResetISR
${BINDIR}:
@mv -f ${COMPILER} ${BINDIR}
#
# Include the automatically generated dependency files.
#
ifneq (${MAKECMDGOALS},clean)
-include ${wildcard ${BINDIR}/*.d} __dummy__
endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment