# ----------------------------------------------------------------------------

# 	Makefile for compiling the Getting Started project

#-------------------------------------------------------------------------------
#		User-modifiable options
#-------------------------------------------------------------------------------

# Chip & board used for compilation
# (can be overriden by adding CHIP=chip and BOARD=board to the command-line)
CHIP  = LPC2919
BOARD = LPC-P2919

# Trace level used for compilation
# (can be overriden by adding TRACE_LEVEL=#number to the command-line)
# TRACE_LEVEL_DEBUG      5
# TRACE_LEVEL_INFO       4
# TRACE_LEVEL_WARNING    3
# TRACE_LEVEL_ERROR      2
# TRACE_LEVEL_FATAL      1
# TRACE_LEVEL_NO_TRACE   0
TRACE_LEVEL = 4

# Optimization level, put in comment for debugging
OPTIMIZATION = -Os

# Output file basename
OUTPUT = out-$(BOARD)

# Output directories
BIN = .
OBJ = .

#-------------------------------------------------------------------------------
#		Tools
#-------------------------------------------------------------------------------

# Tool suffix when cross-compiling
CROSS_COMPILE = arm-none-eabi-

# Compilation tools
CC = $(CROSS_COMPILE)gcc
SIZE = $(CROSS_COMPILE)size
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump

# Flags
#INCLUDES = -I./

CFLAGS = -Wall -mlong-calls -ffunction-sections
CFLAGS += -g $(OPTIMIZATION) $(INCLUDES) -D$(CHIP) -DTRACE_LEVEL=$(TRACE_LEVEL)
ASFLAGS = -g $(OPTIMIZATION) $(INCLUDES) -D$(CHIP) -D__ASSEMBLY__
LDFLAGS = -g $(OPTIMIZATION) -nostartfiles -Wl,--gc-sections

#-------------------------------------------------------------------------------
#		Files
#-------------------------------------------------------------------------------

# Directories where source files can be found
#VPATH += $(UTILITY)

# Objects built from C source files
C_OBJECTS = main.o
C_OBJECTS += target.o

# Objects built from Assembly source files
ASM_OBJECTS = board_cstartup.o

# linker script
LINKER_SCRIPT = sram.lds

#-------------------------------------------------------------------------------
#		Rules
#-------------------------------------------------------------------------------

all: $(BIN)/main.elf

$(BIN)/main.elf: $(C_OBJECTS) $(ASM_OBJECTS) $(LINKER_SCRIPT)
	@echo "...linking"
	$(CC) $(LDFLAGS) -T$(LINKER_SCRIPT) -o main.elf $(C_OBJECTS) $(ASM_OBJECTS)
	$(OBJCOPY) -O binary main.elf main.bin
	$(SIZE) $(C_OBJECTS) $(ASM_OBJECTS) main.elf
	$(OBJDUMP) -h $(C_OBJECTS) main.elf
	
main.o: main.c type.h target.h lpc29xx.h
	@echo "...compiling"
	$(CC) $(CFLAGS) -c -o main.o main.c

target.o: target.c type.h target.h
	@echo "...compiling"
	$(CC) $(CFLAGS) -c -o target.o target.c

board_cstartup.o: board_cstartup.S
	@echo "...compiling"
	$(CC) $(ASFLAGS) -c -o board_cstartup.o board_cstartup.S 

clean:
	-rm -f $(OBJ)/*.o $(BIN)/*.bin $(BIN)/*.elf


