##/*-------------------------------------------------------------------
##		Created by REALTEK  
##--------------------------------------------------------------------*/
include ../.config
CROSS = mips-linux-
#CROSS = rsdk-elf-

OUTDIR	= ./Output

SRC	= ./monitor

CC	= $(CROSS)gcc

AS	= $(CROSS)as

AR	= $(CROSS)ar crs

LD	= $(CROSS)ld

OBJCOPY = $(CROSS)objcopy
#OBJCOPY = objcopy

OBJDUMP	= $(CROSS)objdump

IMG2BIN	= $(CROSS)img2bin

NM	= $(CROSS)nm

RM	= rm


TOOLCFLAGS	=

TOOLLDFLAGS	= -n

OPT	=  -G 0

TEXT	=

INCLUDES	= -I. -I./include

ifeq ($(USE_RSDK_1_2_11),1)
export PATH
PATH:=/toolchain/rsdk-1.2.11/linux:$(PATH)
else
ifdef CONFIG_RTL8198
export PATH
PATH:= /toolchain/rsdk-98/linux:$(PATH)
USE_TOOLCHAIN_98=1
export USE_TOOLCHAIN_98
else
export PATH
PATH:= /toolchain/rsdk-96c/linux:$(PATH)
endif
endif








ifdef RTL8196B
CFLAGS	= -march=4181 -g  -fomit-frame-pointer -nostdinc -fno-pic -mno-abicalls $(TOOLCFLAGS) $(OPT) $(INCLUDES)\
          -D__KERNEL__\
          -Dlinux\
          -O 
endif

ifdef RTL8198
CFLAGS	= -march=5281 -g  -fomit-frame-pointer -nostdinc -fno-pic -mno-abicalls $(TOOLCFLAGS) $(OPT) $(INCLUDES)\
          -D__KERNEL__\
          -Dlinux\
          -O 
endif
       
ifeq ($(CONFIG_DHCP_SERVER),y)
CFLAGS += -DDHCP_SERVER
endif
ifeq ($(CONFIG_HTTP_SERVER),y)
CFLAGS += -DHTTP_SERVER
endif
ifeq ($(CONFIG_POST_ENABLE),y)
CFLAGS += -DCONFIG_POST_ENABLE
endif    

ifeq ($(CONFIG_BOOT_DEBUG_ENABLE),y)
CFLAGS += -DCONFIG_BOOT_DEBUG_ENABLE
endif

#------------------------------------------------------------------------------------------
ifneq "$(strip $(JUMP_ADDR))" ""
CFLAGS += -DJUMP_ADDR=$(JUMP_ADDR)
endif



ifeq ($(RTL865X),1)
CFLAGS += -DRTL865X=1 -DCONFIG_RTL865X=y -DCONFIG_RTL865XC=1 
CFLAGSW = $(CFLAGS) -DWRAPPER -DRTL865X
endif

ifeq ($(RTL8196B),1)
CFLAGS += -DRTL8196B=1 -DCONFIG_RTL865XC=1
CFLAGSW = $(CFLAGS) -DWRAPPER -DRTL8196B
endif

ifeq ($(RTL8198),1)
CFLAGS += -DRTL8198=1 -DCONFIG_RTL865XC=1
CFLAGSW = $(CFLAGS) -DWRAPPER -DRTL8198
endif

ifeq ($(RTL8196C),1)
EXTRA_CFLAGS += -DRTL8196C=1
endif
ifeq ($(RTL8196C),1)
CFLAGS += -DRTL8196C=1 -DCONFIG_RTL865XC=1
CFLAGSW = $(CFLAGS) -DWRAPPER -DRTL8196C
endif

ifeq ($(RTL8197B),1)
CFLAGS += -DRTL8197B
endif

ifeq ($(CONFIG_FPGA_PLATFORM),1)
CFLAGS += -DCONFIG_FPGA_PLATFORM=1
endif


ifeq ($(KLD),1)
CFLAGS += -DKLD
endif

ifeq ($(EC),1)
CFLAGS += -DEC
endif

#--------------------------------------
ifeq ($(CONFIG_DDR_SDRAM),y)
CFLAGS += -DDDR_SDRAM
endif
#--------------------------------------
ifeq ($(CONFIG_SW_8366GIGA),y)
CFLAGS += -DSW_8366GIGA
endif
#--------------------------------------

ifeq ($(RTL8197B),1)
LDFLAGS = -nostdlib  -T./rtl8197b.script  -EB   --static
else
LDFLAGS = -nostdlib  -T./ld.script  -EB   --static
endif
WLDFLAGS = -nostdlib  -T./ldw.script  -EB   --static

ASFLAGS	=  -D__ASSEMBLY__  -x assembler-with-cpp -G 0

CRT	=

LIBS	=

.SUFFIXES : .s .S .c .o .out .nm .img .sr .sre .text .bin .scr

#wboot(wrapped) means boot code will be wrapped in this code
all:
	@echo "No rules to make target. You should choose:"
	@echo "make { boot | wboot }  boot for general, wboot for wrapped boot code"

.PHONY: banner
banner:	cr-output
	@echo  \#define BOOT_CODE_TIME \"`date "+%Y.%m.%d-%H:%M%z"`\" > ./banner/mk_time	 	
	
cr-output:
	@if [ ! -d Output ]; then \
	mkdir Output; \
	fi


wboot: banner $(OUTDIR)/wboot.out
	$(NM)	./Output/wboot.out | sort > ./Output/wboot.nm
	$(OBJCOPY) -g -Obinary ./Output/wboot.out ./Output/wboot.img
	mips-linux-objdump -h -S ./Output/wboot.out > ./Output/wboot.text


#all :	"$(OUTDIR)" boot.out
boot: banner $(OUTDIR)/boot.out
	$(NM)	./Output/boot.out | sort > ./Output/boot.nm
	# $(OBJCOPY) -g -Obinary ./Output/boot.out ./Output/boot.img
	mips-linux-objcopy -g -Obinary ./Output/boot.out ./Output/boot.img
	mips-linux-objdump -h -S ./Output/boot.out > ./Output/boot.text
#david
	cp ./Output/boot.img ../btcode/boot.img -f

#"$(OUTDIR)" :

##########################head.o must be the first.

OBJFILES	= ./Output/head.o ./Output/eth_tftpd.o ./Output/irq.o ./Output/inthandler.o ./Output/setup.o ./Output/main.o  ./Output/traps.o ./Output/vsprintf.o $(OUTDIR)/init.o $(OUTDIR)/string.o  $(OUTDIR)/strtol.o $(OUTDIR)/strtoul.o $(OUTDIR)/ctool.o $(OUTDIR)/misc.o $(OUTDIR)/ctype.o $(OUTDIR)/calloc.o

#--------------------------------------
ifdef CONFIG_SPI_FLASH
OBJFILES += $(OUTDIR)/spi_flash.o
else
OBJFILES += $(OUTDIR)/flash.o
endif
#--------------------------------------

#--------------------------------------
ifeq ($(CONFIG_DHCP_SERVER),y)
OBJFILES += ./Output/dhcpd.o
endif
#--------------------------------------
ifeq ($(CONFIG_HTTP_SERVER),y)
OBJFILES += ./Output/utcp.o 
endif
#--------------------------------------


ifdef RTL8196B
OBJFILES += ./Output/ethInt_865x.o \
./Output/swCore.o \
./Output/swNic_poll.o \
./Output/swTable.o \
./Output/vlanTable.o
endif
ifdef RTL8198
OBJFILES += ./Output/ethInt_865x.o \
./Output/swCore.o \
./Output/swNic_poll.o \
./Output/swTable.o \
./Output/vlanTable.o
endif
#--------------------------------------
ifdef CONFIG_PCIE_MODULE
OBJFILES += ./Output/test_hw.o
OBJFILES += ./Output/test_8168n.o
endif
#------------------------------------
ifeq ($(CONFIG_SPE_MODULE),y)
ifeq ($(CONFIG_SPE_HOST),y)
CFLAGS += -DCONFIG_R8198EP_HOST
else
CFLAGS += -DCONFIG_R8198EP_DEVICE
endif
OBJFILES += ./Output/test_slvpcie.o
endif

ifeq ($(CONFIG_RTL8198_TAROKO),y)
TAROKO_TEST = \
$(SRC)/rtl8198_taroko/rtl8198_cpu_test.c	\
$(SRC)/rtl8198_taroko/idmem_dma_op.c		\

TAROKO_TEST_ASM = \
$(SRC)/rtl8198_taroko/lexra_load_store.S

endif

ifeq ($(CONFIG_PCM_TEST),y)
PCM_IIS_TEST = \
$(SRC)/pcm/pcm_isr.c			\
$(SRC)/pcm/iis_isr.c			\
$(SRC)/pcm/ALC5621.c			\
$(SRC)/pcm/fpga_gpio.c			\

endif

SRCLIST = \
$(PCM_IIS_TEST)				\
$(TAROKO_TEST)				\

OBJS	= $(addprefix $(OUTDIR)/,$(addsuffix .o,$(notdir $(basename $(SRCLIST))) ))

$(OBJS):$(SRCLIST)
	$(CC) -c $(CFLAGS) $(filter %$(addsuffix .c,$(notdir $(basename $@))),$(SRCLIST) ) -o $@

ASMLIST = \
$(TAROKO_TEST_ASM)			\

ASMOBJS = $(addprefix $(OUTDIR)/,$(addsuffix .o,$(notdir $(basename $(ASMLIST))) ))

$(ASMOBJS):$(ASMLIST)
	$(CC) -c $(CFLAGS) $(ASFLAGS) $(filter %$(addsuffix .S,$(notdir $(basename $@))),$(ASMLIST) ) -o $@



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

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

#--------------------------------------
ifeq ($(CONFIG_HISTORY_KEYIN),y)
CFLAGS += -DCONFIG_HISTORY_KEYIN
endif
#--------------------------------------

##Assembly file######################################################
$(OUTDIR)/inthandler.o: ./init/inthandler.S 
	$(CC) -c $(CFLAGS) $(ASFLAGS) -o $(OUTDIR)/inthandler.o ./init/inthandler.S
$(OUTDIR)/head.o: ./arch/mips/kernel/head.S 
	$(CC) -c $(CFLAGS) $(ASFLAGS) -o $(OUTDIR)/head.o ./arch/mips/kernel/head.S
#####################################################################
##C file#############################################################
$(OUTDIR)/irq.o: ./init/irq.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/irq.o ./init/irq.c

#$(OUTDIR)/time.o: ./init/time.c 
#	$(CC) -c $(CFLAGS) -o $(OUTDIR)/time.o ./init/time.c

#$(OUTDIR)/timer.o: ./timer/timer.c 
#	$(CC) -c $(CFLAGS) -o $(OUTDIR)/timer.o ./timer/timer.c

$(OUTDIR)/eth_tftpd.o: ./init/eth_tftpd.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/eth_tftpd.o ./init/eth_tftpd.c


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

#----------------------------------------------------------------------------
ifeq ($(CONFIG_DHCP_SERVER),y)
$(OUTDIR)/dhcpd.o: ./init/dhcpd.c
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/dhcpd.o ./init/dhcpd.c
endif

ifeq ($(CONFIG_HTTP_SERVER),y)
$(OUTDIR)/utcp.o: ./init/utcp.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/utcp.o ./init/utcp.c
endif
#----------------------------------------------------------------------------
$(OUTDIR)/ethInt_865x.o: ./init/ethInt_865x.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/ethInt_865x.o ./init/ethInt_865x.c
	
$(OUTDIR)/swCore.o: ./rtl8196x/swCore.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/swCore.o ./rtl8196x/swCore.c
	
$(OUTDIR)/swNic_poll.o: ./rtl8196x/swNic_poll.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/swNic_poll.o ./rtl8196x/swNic_poll.c
	
$(OUTDIR)/swTable.o: ./rtl8196x/swTable.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/swTable.o ./rtl8196x/swTable.c
	
$(OUTDIR)/vlanTable.o: ./rtl8196x/vlanTable.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/vlanTable.o ./rtl8196x/vlanTable.c
	
#----------------------------------------------------------------------------		
ifdef CONFIG_SPI_FLASH	
$(OUTDIR)/spi_flash.o: ./flash/spi_flash.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/spi_flash.o ./flash/spi_flash.c
else
$(OUTDIR)/flash.o: ./flash/flash.c 
	$(CC) -c $(CFLAGS)  -o $(OUTDIR)/flash.o ./flash/flash.c		
endif
#----------------------------------------------------------------------------
ifdef CONFIG_PCIE_MODULE
$(OUTDIR)/test_8168n.o: ./monitor/test_8168n.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/test_8168n.o ./monitor/test_8168n.c

endif

ifdef CONFIG_SPE_MODULE
$(OUTDIR)/test_slvpcie.o: ./monitor/test_slvpcie.c                            
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/test_slvpcie.o ./monitor/test_slvpcie.c
endif

ifdef CONFIG_PCIE_MODULE	
$(OUTDIR)/test_hw.o: ./monitor/test_hw_96c.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/test_hw.o ./monitor/test_hw_96c.c
endif	
#----------------------------------------------------------------------------		
#$(OUTDIR)/sdram.o: ./init/sdram.c 
#	$(CC) -c $(CFLAGS) -o $(OUTDIR)/sdram.o ./init/sdram.c
#####################################################################

$(OUTDIR)/setup.o: ./arch/mips/kernel/setup.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/setup.o ./arch/mips/kernel/setup.c


$(OUTDIR)/main.o: ./init/main.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/main.o ./init/main.c

$(OUTDIR)/calloc.o: ./init/calloc.c			#wei add 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/calloc.o ./init/calloc.c

$(OUTDIR)/traps.o: ./arch/mips/kernel/traps.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/traps.o ./arch/mips/kernel/traps.c

$(OUTDIR)/vsprintf.o: ./io/vsprintf.c 
	$(CC) -c $(CFLAGS)  -o $(OUTDIR)/vsprintf.o ./io/vsprintf.c

$(OUTDIR)/init.o: ./io/init.c 
	$(CC) -c $(CFLAGS)  -o $(OUTDIR)/init.o ./io/init.c

$(OUTDIR)/string.o: ./io/string.c 
	$(CC) -c $(CFLAGS)  -o $(OUTDIR)/string.o ./io/string.c

$(OUTDIR)/strtol.o: ./io/strtol.c 
	$(CC) -c $(CFLAGS)  -o $(OUTDIR)/strtol.o ./io/strtol.c

$(OUTDIR)/strtoul.o: ./io/strtoul.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/strtoul.o ./io/strtoul.c

$(OUTDIR)/ctool.o: ./io/ctool.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/ctool.o ./io/ctool.c

$(OUTDIR)/misc.o: ./io/misc.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/misc.o ./io/misc.c

$(OUTDIR)/monitor.o: ./monitor/monitor.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/monitor.o ./monitor/monitor.c

$(OUTDIR)/wmonitor.o: ./monitor/monitor.c 
	$(CC) -c $(CFLAGSW) -o $(OUTDIR)/wmonitor.o ./monitor/monitor.c

#$(OUTDIR)/flash.o: ./flash/flash.c 
#	$(CC) -c $(CFLAGS)  -o $(OUTDIR)/flash.o ./flash/flash.c
$(OUTDIR)/nand.o: ./nand/nand.c 
	$(CC) -c $(CFLAGS)  -o $(OUTDIR)/nand.o ./nand/nand.c
$(OUTDIR)/ctype.o: ./io/ctype.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/ctype.o ./io/ctype.c

$(OUTDIR)/boot.out :	 $(OBJFILES) $(OUTDIR)/monitor.o $(OBJS) $(ASMOBJS)
	$(LD) $(LDFLAGS) $(OBJFILES) $(OUTDIR)/monitor.o $(OBJS) $(ASMOBJS) $(LIBS) -o $(OUTDIR)/boot.out

$(OUTDIR)/temp.o: temp.c
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/temp.o temp.c
	mips-linux-objcopy --add-section .btimg=$(OUTDIR)/boot $(OUTDIR)/temp.o

$(OUTDIR)/wboot.out :	  $(OBJFILES) $(OUTDIR)/temp.o $(OUTDIR)/wmonitor.o $(OBJS) $(ASMOBJS)
	$(LD) $(WLDFLAGS) $(OBJFILES) $(OUTDIR)/temp.o $(OUTDIR)/wmonitor.o $(OBJS) $(ASMOBJS) $(LIBS) -o $(OUTDIR)/wboot.out

compile :	 $(OBJFILES)

.scr.bin:
	$(IMG2BIN) "$(OUTDIR)\$<" "$(OUTDIR)\$@"

.s.out:
	$(CC) $(CFLAGS) $(ASFLAGS) $(LDFLAGS) -o "$(OUTDIR)\$@" $<

.S.out:
	$(CC) $(CFLAGS) $(LDFLAGS) -o "$(OUTDIR)\$@" $< $(LIBS)

.c.out:
	$(CC) $(CFLAGS) $(LDFLAGS) -o "$(OUTDIR)\$@" $< $(LIBS)

.s.o:
	$(CC) -c $(CFLAGS) $(ASFLAGS) -o "$(OUTDIR)\$@" $<

.S.o:
	$(CC) -c $(CFLAGS) -o "$(OUTDIR)\$@" $<

.c.o:
	$(CC) -c $(CFLAGS) -o "$(OUTDIR)\$@" $<

.cpp.o:
	$(CC) -c $(CFLAGS) -o "$(OUTDIR)\$@" $<

.out.nm:
	$(NM) -B -n "$(OUTDIR)\$<" > "$(OUTDIR)\$@"

.out.img:
	$(OBJCOPY) -O binary "$(OUTDIR)\$<" "$(OUTDIR)\$@"

.out.text:
	$(OBJDUMP) -h -S -l --show-raw-insn "$(OUTDIR)\$<" > "$(OUTDIR)\$@"

.img.bin:
	$(IMG2BIN) "$(OUTDIR)\$<" "$(OUTDIR)\$@"

clean :
	$(RM) -f $(OBJFILES)
	$(RM) -f $(OUTDIR)/boot.out $(OUTDIR)/boot.text $(OUTDIR)/boot.nm $(OUTDIR)/boot.img
	$(RM) -f $(OUTDIR)/boot.cdb $(OUTDIR)/monitor.o $(OUTDIR)/wmonitor.o $(OUTDIR)/wboot.*
	$(RM) -f $(OUTDIR)/ethInt*.o $(OUTDIR)/temp.o $(OUTDIR)/boot
	@find $(OUTDIR) -type f -name '*.o' -exec rm -f {} \;
	
	
	
test:
	OBJFILES	= ./Output/head.o 
$(OUTDIR)/test.out :	 $(OBJFILES) $(OUTDIR)/test.o
	$(LD) $(LDFLAGS) $(OBJFILES) $(OUTDIR)/test.o $(LIBS) -o $(OUTDIR)/test.out	


