##/*-------------------------------------------------------------------
##		Created by REALTEK  
##--------------------------------------------------------------------*/
include ../.config
CROSS = $(CROSS_PATH)$(KRL_CROSS)
OUTDIR	= ./Output

CC	= $(CROSS)gcc

AS	= $(CROSS)as

AR	= $(CROSS)ar crs

LD	= $(CROSS)ld

OBJCOPY = $(CROSS)objcopy

OBJDUMP	= $(CROSS)objdump

IMG2BIN	= $(CROSS)img2bin

NM	= $(CROSS)nm

RM	= rm


TOOLCFLAGS	=

TOOLLDFLAGS	= -n

OPT	=  -G 0

TEXT	=

INCLUDES	= -I. -I./include

ifeq ($(RTL865X),1)
CFLAGS	= -march=5181 -g  -fomit-frame-pointer -nostdinc -fno-pic -mno-abicalls $(TOOLCFLAGS) $(OPT) $(INCLUDES)\
          -D__KERNEL__\
          -Dlinux\
          -O 
endif          

ifeq ($(RTL8196B),1)
CFLAGS	= -march=5181 -g  -fomit-frame-pointer -nostdinc -fno-pic -mno-abicalls $(TOOLCFLAGS) $(OPT) $(INCLUDES)\
          -D__KERNEL__\
          -Dlinux\
          -O 
endif
          
ifeq ($(RTL8186),1)
CFLAGS	= -mips1 -g  -fomit-frame-pointer -nostdinc -fno-pic -mno-abicalls $(TOOLCFLAGS) $(OPT) $(INCLUDES) \
           -D__KERNEL__\
           -Dlinux\
           -O 
endif           
ifeq ($(BK),1)
CFLAGS += -DBK
endif
ifeq ($(GR),1)
CFLAGS += -DGR
endif
ifeq ($(CONFIG_DHCP_SERVER),y)
CFLAGS += -DDHCP_SERVER
endif
ifeq ($(CONFIG_HTTP_SERVER),y)
CFLAGS += -DHTTP_SERVER
endif

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

ifeq ($(RTL8186),1)
CFLAGS += -DRTL8186=1
CFLAGSW = $(CFLAGS) -DWRAPPER -DRTL8186
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
ifeq ($(CONFIG_RTL8196B_FPGA),1)
CFLAGS += -DCONFIG_RTL8196B_FPGA=1
endif
endif

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

ifeq ($(CONFIG_DEFAULTS_REALTEK_RTL8652_5G),y)
CFLAGS += -DRTL_8652_5PORT
endif
ifeq ($(SC),1)
CFLAGS += -DCONFIG_RTL865X_SC=1
endif

ifeq ($(TR),1)
CFLAGS += -DTR
endif

LDFLAGS = -nostdlib  -T./ld.script  -EB   --static 
WLDFLAGS = -nostdlib  -T./ldw.script  -EB   --static 

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

CRT	=

LIBS	= -L./Output -lhttpd

.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
	$(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
	$(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)/flash.o $(OUTDIR)/ctype.o $(OUTDIR)/timer.o $(OUTDIR)/calloc.o
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)/flash.o $(OUTDIR)/ctype.o $(OUTDIR)/calloc.o ./Output/libhttpd.a



ifeq ($(RTL8181),1)
OBJFILES += ./Output/ethInt_8181.o
endif

ifeq ($(RTL8186),1)
OBJFILES += ./Output/ethInt_8186.o
endif

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

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

ifeq ($(RTL865X),1)
OBJFILES += ./Output/ethInt_865x.o \
./Output/swCore.o \
./Output/swNic_poll.o \
./Output/swTable.o \
./Output/vlanTable.o 
endif

ifeq ($(RTL8196B),1)
OBJFILES += ./Output/ethInt_865x.o \
./Output/swCore.o \
./Output/swNic_poll.o \
./Output/swTable.o \
./Output/vlanTable.o
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)/libhttpd.a:
	cd httpd && make all
	
$(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

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


ifeq ($(RTL8186),1)
$(OUTDIR)/ethInt_8186.o: ./init/ethInt_8186.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/ethInt_8186.o ./init/ethInt_8186.c
endif	

#-----------------------------------------------------------------------------
ifeq ($(RTL865X),1)
$(OUTDIR)/ethInt_865x.o: ./init/ethInt_865x.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/ethInt_865x.o ./init/ethInt_865x.c
	
$(OUTDIR)/swCore.o: ./rtl865x/swCore.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/swCore.o ./rtl865x/swCore.c
	
$(OUTDIR)/swNic_poll.o: ./rtl865x/swNic_poll.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/swNic_poll.o ./rtl865x/swNic_poll.c
	
$(OUTDIR)/swTable.o: ./rtl865x/swTable.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/swTable.o ./rtl865x/swTable.c
	
$(OUTDIR)/vlanTable.o: ./rtl865x/vlanTable.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/vlanTable.o ./rtl865x/vlanTable.c
	
endif	

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

ifeq ($(RTL8196B),1)
$(OUTDIR)/ethInt_865x.o: ./init/ethInt_865x.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/ethInt_865x.o ./init/ethInt_865x.c
	
$(OUTDIR)/swCore.o: ./rtl865x/swCore.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/swCore.o ./rtl865x/swCore.c
	
$(OUTDIR)/swNic_poll.o: ./rtl865x/swNic_poll.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/swNic_poll.o ./rtl865x/swNic_poll.c
	
$(OUTDIR)/swTable.o: ./rtl865x/swTable.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/swTable.o ./rtl865x/swTable.c
	
$(OUTDIR)/vlanTable.o: ./rtl865x/vlanTable.c 
	$(CC) -c $(CFLAGS) -o $(OUTDIR)/vlanTable.o ./rtl865x/vlanTable.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
	$(LD) $(LDFLAGS) $(OBJFILES) $(OUTDIR)/monitor.o $(LIBS) -o $(OUTDIR)/boot.out

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

$(OUTDIR)/wboot.out :	  $(OBJFILES) $(OUTDIR)/temp.o $(OUTDIR)/wmonitor.o 
	$(LD) $(WLDFLAGS) $(OBJFILES) $(OUTDIR)/temp.o $(OUTDIR)/wmonitor.o $(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 {} \;
	cd httpd && make clean
	
test:
	OBJFILES	= ./Output/head.o 
$(OUTDIR)/test.out :	 $(OBJFILES) $(OUTDIR)/test.o
	$(LD) $(LDFLAGS) $(OBJFILES) $(OUTDIR)/test.o $(LIBS) -o $(OUTDIR)/test.out	


