#======================================================================
# File Name  : Makefile
# Function   : Makefile for GNU make
# Author     : Kim Siyoung @ System LSI, Samsung Electronics.
#======================================================================
# $@ - the target name
# $* - the stem of the target name ("dir/foo.c" -> "dir/foo.e")
# $< - the name of the first dependency
# $(@F) - the target name with path = $(notdir $@)
# $(notdir $*.e) - ("dir/foo.c" -> "foo.e")
# $^ - the names of all the dependencies
#======================================================================

#### Files ####

PRJ = SMDK_v210_Test
INC = Components,\
	-IComponents\_common \
	-IComponents\_common\dhrystone \
	-IComponents\memory \
	-IComponents\system \
	-IComponents\connectivity \
	-IComponents\multimedia \
	-IComponents\connectivity\ac97 \
	-IComponents\connectivity\adcts \
	-IComponents\connectivity\audiolibrary \
	-IComponents\connectivity\audioss \
	-IComponents\connectivity\audioss\i2sv5_1 \
	-IComponents\connectivity\audioss\rp \
	-IComponents\connectivity\audioss\APP_decoded \
	-IComponents\connectivity\audioss\APP_rp_decode \
	-IComponents\connectivity\cfcon \
	-IComponents\connectivity\csis \
	-IComponents\connectivity\dsim \
	-IComponents\connectivity\dsim\dsim_test \
	-IComponents\connectivity\hdmi_audio \
	-IComponents\connectivity\i2s \
	-IComponents\connectivity\iic \
	-IComponents\connectivity\keypad \
	-IComponents\connectivity\modem \
	-IComponents\connectivity\pcm \
	-IComponents\connectivity\sdmmc \
	-IComponents\connectivity\spdif \
	-IComponents\connectivity\spi \
	-IComponents\connectivity\tsi \
	-IComponents\connectivity\uart \
	-IComponents\connectivity\usbotg \
	-IComponents\connectivity\usbhost \
	-IComponents\connectivity\pmic \
	-IComponents\multimedia\camera \
	-IComponents\multimedia\fimc \
	-IComponents\multimedia\fimc\c_model \
	-IComponents\multimedia\fimd \
	-IComponents\multimedia\ipc \
	-IComponents\multimedia\jpeg \
	-IComponents\multimedia\mdnie \
	-IComponents\multimedia\mfc \
	-IComponents\multimedia\mfc\ethernet \
	-IComponents\multimedia\mfc\fat \
	-IComponents\multimedia\mfc\vsparser \
	-IComponents\multimedia\mfc\aviparser \
	-IComponents\multimedia\mie \
	-IComponents\multimedia\rotator \
	-IComponents\multimedia\sss \
	-IComponents\multimedia\tv_sub \
	-IComponents\multimedia\tv_sub\HDMI \
	-IComponents\multimedia\sgx540 \
	-IComponents\autotest\
	-IComponents\_board\ddi
	
LIBS = 
INIT_DRAM = Components\_common\startup.s

#### Destination path Definition ####
OBJ=.\obj
ERR=.\err

SRC = \
	Components\_common\v210_main.c \
	Components\_common\system.c \
	Components\_common\retarget.c \
	Components\_common\library.c \
	Components\_common\fpinit.c \
	Components\_common\util.c \
	Components\_common\vfpinit.s \
	Components\_common\system_.s \
	Components\_common\retarget_.s \
	Components\_common\DhryStone\dhry_1.c \
	Components\_common\DhryStone\dhry_2.c \
	Components\_common\AsyncBridge.c \
	Components\_common\AsyncBridge_test.c \
	Components\memory\dmc.inc \
	Components\memory\nand.c \
	Components\memory\sromc.c\
	Components\memory\sromc_test.c\
	Components\memory\dmc_test.c \
	Components\memory\dmc.c \
	Components\memory\audi_ondc_test.c \
	Components\memory\audi_ondc.c \
	Components\memory\dmc_init.s \
	Components\memory\memcpy_lib.s \
	Components\memory\BootCodeWrite.c \
	Components\memory\am29f800.c \
	Components\system\WDT_test.c \
	Components\system\WDT.c \
	Components\system\timer_test.c \
	Components\system\timer.c \
	Components\system\sys_timer_test.c \
	Components\system\sys_timer.c \
	Components\system\sysc_test.c \
	Components\system\sysc.c \
	Components\system\intc_test.c \
	Components\system\intc.c \
	Components\system\rtc_test.c \
	Components\system\rtc.c \
	Components\system\intc.c \
	Components\system\gpio.c \
	Components\system\dma_test.c \
	Components\system\dma.c \
	Components\connectivity\iic\iic.c \
	Components\connectivity\iic\i2c.c \
	Components\connectivity\iic\iic_test.c \
	Components\connectivity\spi\spi.c \
	Components\connectivity\spi\spi_test.c \
	Components\connectivity\keypad\keypad.c \
	Components\connectivity\keypad\keypad_test.c \
	Components\connectivity\adcts\adcts.c \
	Components\connectivity\adcts\adcts_test.c \
	Components\connectivity\SfrReadWriten.c \
	Components\connectivity\audiolibrary\audiocodecs.c \
	Components\connectivity\audiolibrary\pcmutils.c \
	Components\connectivity\audiolibrary\stopwatch.c \
	Components\connectivity\audioss\rpetc.c \
	Components\connectivity\audioss\assclkcon.c \
	Components\connectivity\audioss\asscommbox.c \
	Components\connectivity\audioss\rp\rpcommbox.c \
	Components\connectivity\audioss\i2sv5_1\i2sv5_1.c \
	Components\connectivity\audioss\i2sv5_1\i2sv5_1_test.c \
	Components\connectivity\audioss\i2sv5_1\i2sv5_1_testcases1.c \
	Components\connectivity\audioss\i2sv5_1\i2sv5_1_testcases2.c \
	Components\connectivity\audioss\APP_decoded\decodedapp.c \
	Components\connectivity\audioss\APP_decoded\decoded_appcase1.c \
	Components\connectivity\audioss\APP_rp_decode\rpapp.c \
	Components\connectivity\audioss\APP_rp_decode\rpaudioss_dd.c \
	Components\connectivity\audioss\APP_rp_decode\rp_testcase1.c \
	Components\connectivity\pcm\pcm.c \
	Components\connectivity\pcm\pcm_test.c \
	Components\connectivity\pmic\max8698.c \
	Components\connectivity\pmic\max8698_test.c \
	Components\connectivity\pmic\i2c_pmic.c \
	Components\connectivity\i2s\i2s1_backboneconv.c \
	Components\connectivity\i2s\i2s2_backboneconv.c \
	Components\connectivity\ac97\ac97.c \
	Components\connectivity\ac97\ac97_test.c \
	Components\connectivity\uart\uart.c \
	Components\connectivity\uart\uart_test.c \
	Components\connectivity\usbotg\otgdev.c \
	Components\connectivity\usbotg\otgdev_test.c \
	Components\connectivity\usbhost\usbhost.c \
	Components\connectivity\usbhost\usbhost_test.c \
	Components\connectivity\cfcon\ata.c \
	Components\connectivity\cfcon\ata_test.c \
	Components\connectivity\sdmmc\sdhc.c \
	Components\connectivity\sdmmc\sdhc_test.c \
	Components\connectivity\modem\modemif.c \
	Components\connectivity\modem\modemif_test.c \
	Components\connectivity\tsi\tsi.c \
	Components\connectivity\tsi\tsi_test.c \
	Components\connectivity\tsi\tx_tsi.c \
	Components\connectivity\tsi\tx_tsi_test.c \
	Components\connectivity\spdif\ac3file.c \
	Components\connectivity\spdif\wavefile.c \
	Components\connectivity\spdif\spdif.c \
	Components\connectivity\spdif\spdif_test.c \
	Components\connectivity\hdmi_audio\hdmi_audio.c \
	Components\connectivity\hdmi_audio\hdmi_audio_test.c \
	Components\connectivity\hdmi_audio\i2s_hdmi.c \
	Components\connectivity\csis\RawConverter.c \
	Components\connectivity\csis\csi.c \
	Components\connectivity\csis\csi_test.c \
	Components\connectivity\dsim\dsim.c \
	Components\connectivity\dsim\dcs.c \
	Components\connectivity\dsim\dsim_test\dsim_test.c\
	Components\connectivity\dsim\dsim_test\dsim_test_00.c \
	Components\connectivity\dsim\dsim_test\dsim_test_01.c \
	Components\connectivity\dsim\dsim_test\dsim_test_02.c \
	Components\connectivity\dsim\dsim_test\dsim_test_03.c \
	Components\connectivity\dsim\dsim_test\dsim_test_04.c \
	Components\connectivity\dsim\dsim_test\dsim_test_05.c \
	Components\connectivity\dsim\dsim_test\dsim_test_autotest.c \
	Components\multimedia\jpeg\jpeg.c \
	Components\multimedia\jpeg\jpeg_test.c \
	Components\multimedia\camera\camera.c \
	Components\multimedia\camera\mipi_camera.c \
	Components\multimedia\fimd\lcd_module.c \
	Components\multimedia\fimd\lcd.c \
	Components\multimedia\fimd\lcd_test.c \
	Components\multimedia\fimd\glib.c \
	Components\multimedia\fimc\fimc.c \
	Components\multimedia\fimc\fimc_test.c \
	Components\multimedia\fimc\c_model\fimc_2nd.c \
	Components\multimedia\fimc\c_model\fimc_conditions.c \
	Components\multimedia\fimc\c_model\fimc_sw.c \
	Components\multimedia\fimc\c_model\fimc_test_2nd.c \
	Components\multimedia\rotator\rotator.c \
	Components\multimedia\rotator\rotator_test.c \
	Components\multimedia\tv_sub\hdout_test.c \
	Components\multimedia\tv_sub\mixer.c \
	Components\multimedia\tv_sub\sdout.c \
	Components\multimedia\tv_sub\sdout_test.c \
	Components\multimedia\tv_sub\vp_v210.c \
	Components\multimedia\tv_sub\HDMI\cec.c \
	Components\multimedia\tv_sub\HDMI\edid.c \
	Components\multimedia\tv_sub\HDMI\hdcp.c \
	Components\multimedia\tv_sub\HDMI\hdmi.c \
	Components\multimedia\tv_sub\HDMI\hpd.c \
	Components\multimedia\tv_sub\HDMI\i2c_hdmi_phy.c \
	Components\multimedia\tv_sub\HDMI\i2c_ddc.c \
	Components\multimedia\tv_sub\HDMI\phy.c \
	Components\multimedia\tv_sub\HDMI\hdmi_audio1.c \
	Components\multimedia\sss\sblock.c \
	Components\multimedia\sss\Sblock_test.c \
	Components\multimedia\mfc\mfc.c \
	Components\multimedia\mfc\mfc_test.c \
	Components\multimedia\mfc\vsparser\vsparser.c \
	Components\multimedia\mfc\aviparser\avireader.c \
	Components\multimedia\mfc\ethernet\EthernetFileTransfer.c \
	Components\multimedia\mfc\ethernet\ProtocolStack.c \
	Components\multimedia\mfc\ethernet\ProtocolStackUDP.c \
	Components\multimedia\mfc\ethernet\smsc911x.c \
	Components\multimedia\mfc\ethernet\burstcopy.s \
	Components\multimedia\mfc\fat\fs.c \
	Components\multimedia\mfc\fat\morex_ddm.c \
	Components\multimedia\mfc\fat\morex_fat.c \
	Components\multimedia\mfc\fat\morex_iobuffer.c \
	Components\multimedia\mfc\fat\morex_memory.c \
	Components\multimedia\mfc\fat\morex_pdev.c \
	Components\multimedia\mfc\fat\morex_time.c \
	Components\multimedia\mfc\fat\morex_tty.c \
	Components\multimedia\mfc\fat\morex_util.c \
	Components\multimedia\ipc\ipc.c \
	Components\multimedia\ipc\ipc_test.c \
	Components\multimedia\sgx540\sgx540_test.c \
	Components\multimedia\sgx540\dx_wireframe_8888_fpmn_lenna.c \
	Components\autotest\MM_Manual_test.c \
	Components\autotest\autotest.c \
	Components\_board\ddi\ddi.c \
	Components\_board\ddi\ddi_mipi_dummy.c 
	
OBJS = \
	$(patsubst %.c, %.o, $(filter %.c, $(SRC))) \
	$(patsubst %.cpp, %.o, $(filter %.cpp, $(SRC))) \
	$(patsubst %.s, %.o, $(filter %.s, $(SRC)))

#### Options ####

#CPU = 7-A
CPU = CORTEX-A8
#CPU = CORTEX-A8 --no_unaligned_access

AFLAGS = --cpu=$(CPU) --debug 
CFLAGS = --cpu=$(CPU) --debug -c -W -O0 -DS5PV210 -I$(INC)
LFLAGS_DRAM = --debug --ro-base 0x40200000 --first startup.o(Init) --entry startup.o(Init)

#### Tools ####

#TOOLS = "C:\Program Files\ARM\RVCT\Programs\2.2\503\win_32-pentium\"
#TOOLS = "C:\Program Files\ARM\RVCT\Programs\3.1\569\win_32-pentium\"
TOOLS =
ASM   = $(TOOLS)armasm
CC    = $(TOOLS)armcc
CPP   = $(TOOLS)armcpp
LINK  = $(TOOLS)armlink
ELF   = $(TOOLS)fromelf

#### Targets ####

.SUFFIXES: .axf .map .bin .sym .lst

all: test
test: $(PRJ).axf

clean:
	@del *.o *.bak *~ *.d /s

$(PRJ).axf: $(INIT_DRAM:.s=.o) $(OBJS)
	$(LINK) $(LFLAGS_DRAM) $(LIBS) -o $@ --map --list $*.map $^ 
	$(ELF)  $@ --text -s -o $*.sym
	$(ELF)  $@ --text -c -o $*.lst
	$(ELF) --bin -o $*.bin $@
#	bin2txt $*.bin /v6 > $*.txt

%.o: %.cpp
	$(CPP) $(CFLAGS) $< -o $@

%.o: %.c
	$(CC)  $(CFLAGS) $< -o $@

%.o: %.s
	$(ASM) $(AFLAGS) $< -o $@


dep: $(PRJ).dep

ifeq ($(PRJ).dep, $(findstring $(PRJ).dep, $(wildcard *.dep)))
include $(PRJ).dep
else
$(PRJ).dep: $(OBJS:.o=.d)
	copy $(subst +$(firstword $^),$(firstword $^),$(patsubst %.d,+%.d,$^)) $(PRJ).dep

%.d: %.cpp
	$(CC) $(CFLAGS) -M $< -o $*.o > $@

%.d: %.c
	$(CC) $(CFLAGS) -M $< -o $*.o > $@

%.d: %.s
	$(ASM) $(AFLAGS) -m $< -o $*.o > $@
endif

