# A spec for using Tivaware's makefiles # Top-level concerns. PROJECT = controller MCU = TM4C123GH6PM # Utilities. CC = arm-none-eabi-gcc LD = arm-none-eabi-ld OBJCOPY = arm-none-eabi-objcopy RM = rm -rf MKDIR = @mkdir -p $(@D) # Custom/TI/build resource locations. SRCS = $(wildcard src/*.c) \ $(wildcard libs/*.c) OBJ = obj/ OBJS = $(addprefix $(OBJ),$(notdir $(SRCS:.c=.o))) LD_SCRIPT = ld/$(MCU).ld IPATH = /home/dnw/Code/TivaC/libs/driverlib # Flags. CFLAGS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections \ -fdata-sections -MD -std=c2x -Wall -Wextra -Werror -DPART_${MCU} -c -Os -Dgcc -ggdb CFLAGS += ${patsubst %,-I%,${subst :, ,${IPATH}}} -iquote inc # Compiler/standard resource locations. LIBGCC := ${shell ${CC} ${CFLAGS} -print-libgcc-file-name} LIBC := ${shell ${CC} ${CFLAGS} -print-file-name=libc.a} LIBM := ${shell ${CC} ${CFLAGS} -print-file-name=libm.a} # More flags. LDFLAGS = -T $(LD_SCRIPT) -e Reset_Handler --gc-sections '${LIBGCC}' '${LIBC}' '${LIBM}' # Targets. all: bin/$(PROJECT).bin $(OBJ)%.o: src/%.c $(MKDIR) $(CC) -o $@ $^ $(CFLAGS) $(OBJ)%.o: libs/%.c $(MKDIR) $(CC) -o $@ $^ $(CFLAGS) $(info $$PROJECT is [${PROJECT}]) bin/$(PROJECT).elf: $(OBJS) $(MKDIR) $(LD) -o $@ $^ $(LDFLAGS) bin/$(PROJECT).bin: bin/$(PROJECT).elf $(OBJCOPY) -O binary $< $@ clean: -$(RM) obj -$(RM) bin .PHONY: all clean