# The kernel tree you do builds in.
# Uncomment if you're building for the emulator
#include ../.config
DOQUIET = false
#EMULATOR = true
#KERNEL_ROOT = /home/john/RealTek/linux-2.5/linux
KERNEL_ROOT = ..

# ---- shouldn't need to modify below this line.

ifdef EMULATOR
EMUOPTS = -DEMULATOR
LDSCRIPT = ld-emu.script
else
EMUOPTS =
LDSCRIPT = ld.script
endif

COPTIONS = -DROM_MEMORY -DCOMPRESSED_KERNEL

ifdef CONFIG_RTL_EB8186
COPTIONS += -DRTL8186
endif
ifdef LZMA_COMPRESS
	SOURCES = string.o ctype.o misc.o $(HFLOAD_O) start.o read_memory.o cache.o LzmaDecode.o
endif

LOADER_FILES = $(HFLOAD_O) read_memory.o
#LOADER_FILES = hfload.o
ifdef LZMA_COMPRESS
	SUPPORT_FILES = vsprintf.o prom_printf.o string.o ctype.o misc.o cache.o LzmaDecode.o
endif

CFLAGS = -g -fno-pic -mno-abicalls $(EMUOPTS) -DEMBEDDED -I$(KERNEL_ROOT)/include/linux -I$(KERNEL_ROOT)/include -I$(KERNEL_ROOT)/lib $(COPTIONS)
ASFLAGS = -g $(EMUOPTS) -DEMBEDDED -I$(KERNEL_ROOT)/include

ifdef LZMA_COMPRESS
CFLAGS += -DLZMA_COMPRESS
ASFLAGS += -DLZMA_COMPRESS
endif

START_FILE = start.o

ifeq ($(strip $(DOQUIET)),true)
    #CFLAGS  += $(WARNINGS)  -D__DO_QUIET__
    CFLAGS  += $(WARNINGS)  -D__DO_QUIET__
	SUPPORT_FILES = string.o ctype.o misc.o
endif


#CC = gcc
CC = mips-linux-gcc -mno-abicalls -fno-pic -G 0
LD = mips-linux-ld -static -nostdlib
NM = mips-linux-nm
FLASH_OFFSET=20000

ifdef CONFIG_RTL8186_AP
LOAD_START_ADDR=0x80350000
HFLOAD_O=hfload_8m.o
endif

ifdef CONFIG_RTL8186_GW
LOAD_START_ADDR=0x80300000
HFLOAD_O=hfload_8m.o
endif

ifdef CONFIG_RTL8186_GW_8M
LOAD_START_ADDR=0x80300000
HFLOAD_O=hfload_8m.o
endif

ifdef CONFIG_RTL8186_GW_VPN
LOAD_START_ADDR=0x80800000
FLASH_OFFSET=30000
HFLOAD_O=hfload_16m.o
endif

ifdef CONFIG_RTL8186_DMA
LOAD_START_ADDR=0x80600000
endif

SEDFLAGS	= s/LOAD_ADDR/$(LOAD_START_ADDR)/;

default:
	@echo 'make {ap | gw | gw-vpn | clean}'
	
all: linux.bin 

clean:
	rm -f memload system.map rtkrom memload-partial memload-full vmlinux_img.gz target target.img strip1 linux.bin vmlinux-stripped  $(LDSCRIPT) vmlinux_img vmlinux_img.o

memload-full: memload-partial
	cp memload-partial memload-full

memload-partial: vmlinux_img.gz $(LOADER_FILES) $(SUPPORT_FILES) $(START_FILE) ../vmlinux
	mips-linux-gcc -fno-pic -mno-abicalls -O2 -fomit-frame-pointer -D__KERNEL__ -c vmlinux_img.c -o vmlinux_img.o	
	mips-linux-objcopy --add-section .vmlinux=vmlinux_img.gz vmlinux_img.o
	@sed "$(SEDFLAGS)" < ld.script.in > $(LDSCRIPT)
	$(LD) -G 0 -T $(LDSCRIPT) -o memload-partial $(START_FILE) $(LOADER_FILES) $(SUPPORT_FILES) vmlinux_img.o
	$(NM) memload-partial | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aU] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > system.map
	
vmlinux_img.gz: ../vmlinux
	cp $(KERNEL_ROOT)/vmlinux vmlinux-stripped
	mips-linux-strip vmlinux-stripped
	mips-linux-objcopy -Obinary vmlinux-stripped vmlinux_img
	rm -f vmlinux_img.gz
ifdef BZ2_COMPRESS
	cat vmlinux_img | bzip2 -9v > vmlinux_img.gz
else
ifdef LZMA_COMPRESS
	./lzma e vmlinux_img vmlinux_img.gz
else
	cat vmlinux_img | gzip -9v > vmlinux_img.gz
endif	
endif

rtkrom:   memload-full  ../vmlinux
	mips-linux-objcopy -Obinary memload-full rtkrom

linux.bin: rtkrom
	./cvimg linux rtkrom linux.bin $(LOAD_START_ADDR) $(FLASH_OFFSET)
#	@./size_chk vmlinux_img $(LOAD_START_ADDR)
	@./cvimg size_chk vmlinux_img $(LOAD_START_ADDR)

target:	rtkrom $(BOOT_CODE) $(EXT2_IMG)
# Pading boot code to 512 bytes long (but only 256 bytes are allowed, 512 is to make it page alignment)
	mips-linux-objcopy -Obinary --pad-to=0x80000200 $(BOOT_CODE) bootcode
	mips-linux-objcopy -Obinary --remove-section=.bss --remove-section=.data --remove-section=.mdebug  --pad-to=0x806FFE00 memload-full nandrom
	mips-linux-ld -G0 -Ttarget.script -o target  -bbinary bootcode -bbinary nandrom -bbinary $(EXT2_IMG)
	mips-linux-objcopy -Obinary target target.img		 
	cp -f ./target.img /tftpboot
depend:
	rm -f .depend
	$(CC) $(CFLAGS) -MM $(SOURCES) >.depend

ap:
	make all CONFIG_RTL8186_AP=1 LZMA_COMPRESS=1
	
gw:
	make all CONFIG_RTL8186_GW_8M=1 LZMA_COMPRESS=1

gw-vpn:
	make all CONFIG_RTL8186_GW_VPN=1 LZMA_COMPRESS=1