#******************************************************************************
#
# Freescale Semiconductor Inc.
# (c) Copyright 2012 Freescale Semiconductor, Inc.
# ALL RIGHTS RESERVED.
#
#**************************************************************************//*!
#
# $File Name: makefile$
# $Author: b06050$
# $version: 1.0.8.0$
# $Date: Aug-21-2012$
# 
# Description:  Makefile for the sensorless BLDC motor control application using
#               MPC5606B (use GNU Make 3.81).
# 
#******************************************************************************/
# ---------------------------------------------------------
# Green Hills Compiler Setup
# ---------------------------------------------------------
COMPILER_PATH       = C:/ghs/multi517
COMPILER_EXE_FILE   = ccppc.exe

TARGET_DEVICE       = -cpu=ppc560xb

OPTIMIZATIONS     = -g -Ospeed -Opeep -Opipeline -isel -sda -auto_sda

# ---------------------------------------------------------
# Application paths specifications
# ---------------------------------------------------------
# Object files output directory
OBJECT_DIR          = objs

# Final ELF file output directory
OUTPUT_DIR          = output
OUTPUT_FILE_NAME    = MPC5606B_BLDC_Sensorless

# Application Configuration path specification
APP_CONFIG_PATH     = ApplicationConfig

# FreeMASTER source files path specification
FMASTER_PATH        = src/FreeMASTER

# MCLIB path and object file name specification
LIBRARY_PATH        = src/MCLIB
LIBRARY_FILE        = MCLIB_MPC560xP_v0.94.a

# Board Support Package (BSP) path
BSP_PATH            = src/BSP

# LLD source file path
LLD_PATH            = src/LLD

# Linker file name and path specification
LINKER_CONFIG_FILE  = GH_BOLERO_ROM.ld
LINKER_PATH         = src/MPC5606B_system/startup

# System source files path
SYSTEM_SRC_PATH     = src/MPC5606B_system/startup

# Peripherals source files path
PERIPH_SRC_PATH     = src/MPC5606B_system/peripherals

# ---------------------------------------------------------
# MAKE source code - DO NOT MODIFY !!!
# ---------------------------------------------------------
CC = $(COMPILER_PATH)/$(COMPILER_EXE_FILE)
AS = $(CC)
LD = $(CC)

LINKER_FILE = ./$(LINKER_PATH)/$(LINKER_CONFIG_FILE)

SRCDIR      = ./$(BSP_PATH) ./$(LLD_PATH) ./$(FMASTER_PATH)/Init ./$(FMASTER_PATH)/MPC5606B ./$(FMASTER_PATH)/src_common ./$(LIBRARY_PATH) ./$(SYSTEM_SRC_PATH) ./$(PERIPH_SRC_PATH)
INCDIR      = -I. -I./$(LIBRARY_INCLUDE_PATH) -I./$(BSP_PATH) -I./$(LLD_PATH) -I./$(FMASTER_PATH)/Init -I./$(FMASTER_PATH)/MPC5606B -I./$(FMASTER_PATH)/src_common -I./$(LIBRARY_PATH) -I./$(SYSTEM_SRC_PATH) -I./$(APP_CONFIG_PATH) -I./$(PERIPH_SRC_PATH)
OBJDIR      = ./$(OBJECT_DIR)
OUTDIR      = ./$(OUTPUT_DIR)
LIB_PATH    = -L./$(LIBRARY_PATH)
LIBRARIES   = -l./$(LIBRARY_PATH)/$(LIBRARY_FILE)

COMMON_FLAGS = -vle -noSPE -X1957 -X1128 -srec -dwarf2 -object_dir=$(OBJDIR)
 
CFLAGS  = $(TARGET_DEVICE) -c $(INCDIR) $(OPTIMIZATIONS) $(COMMON_FLAGS) -passsource -list -filetype.c # -MD
ASFLAGS = $(TARGET_DEVICE) -c $(INCDIR) $(OPTIMIZATIONS) $(COMMON_FLAGS) -filetype.assembly #-MD
LDFLAGS = $(TARGET_DEVICE) -language=c $(LINKER_FILE) $(OPTIMIZATIONS) $(COMMON_FLAGS) $(LIB_PATH) $(LIBRARIES) -nostartfiles -object_dir=$(OBJECT_DIR) #-locatedprogram -delete

vpath %.c $(SRCDIR)
vpath %.s $(SRCDIR)
vpath %.o $(OBJDIR)

OBJS = $(foreach gf,$(SRCDIR),$(patsubst $(gf)/%.c,$(OBJDIR)/%.o,$(wildcard $(gf)/*.c))) \
       $(foreach gf,$(SRCDIR),$(patsubst $(gf)/%.s,$(OBJDIR)/%.o,$(wildcard $(gf)/*.s))) \
       $(patsubst %.c,$(OBJDIR)/%.o,$(wildcard *.c))

all: $(OUTDIR)/$(OUTPUT_FILE_NAME).elf

$(OBJDIR)/%.o: %.c makefile
	mkdir -p $(OBJDIR)
	$(CC) $(CFLAGS) $< -o $@
 
$(OBJDIR)/%.o: %.s makefile
	$(AS) $(ASFLAGS) $< -o $@

$(OUTDIR)/$(OUTPUT_FILE_NAME).elf: $(OBJS) makefile ./$(LIBRARY_PATH)/$(LIBRARY_FILE)
	mkdir -p $(OUTDIR)
	$(LD) $(LDFLAGS) $(OBJS) -o $(OUTDIR)/$(OUTPUT_FILE_NAME).elf

#-include $(addprefix $(OBJDIR)/,$(OBJS:.o=.d))

clean:
	rm -f $(wildcard $(OBJDIR)/*.*) $(wildcard $(OUTDIR)/*.*)