# The kernel tree you do builds in.
# Uncomment if you're building for the emulator
include ../.config
DOQUIET = true 
KERNEL_ROOT = ..
CVIMG=./tools/cvimg
CVIMGDIR=./tools/
LDSCRIPT = ld.script
COPTIONS = -DROM_MEMORY -DCOMPRESSED_KERNEL

ifdef CONFIG_RTL_EB8186
COPTIONS += -DRTL8186
endif
SOURCES = string.c ctype.c misc.c hfload.c start.S read_memory.c cache.c LzmaDecode.c
LOADER_FILES = hfload.o read_memory.o

ifeq ($(strip $(DOQUIET)),true)
SUPPORT_FILES = string.o ctype.o misc.o cache.o 
else
SUPPORT_FILES = string.o ctype.o misc.o cache.o vsprintf.o prom_printf.o  
endif

SUPPORT_FILES += LzmaDecode.o

CFLAGS = -O2 -fno-pic -mno-abicalls $(EMUOPTS)
ifeq ($(strip $(DOQUIET)),true)
CFLAGS  += $(WARNINGS)  -D__DO_QUIET__
endif
CFLAGS += -DEMBEDDED -I$(KERNEL_ROOT)/include/linux -I$(KERNEL_ROOT)/include -I$(KERNEL_ROOT)/lib -I$(KERNEL_ROOT)/include/asm/mach-generic $(COPTIONS) -march=5181
ASFLAGS = -O2 $(EMUOPTS) -DEMBEDDED -I$(KERNEL_ROOT)/include

CFLAGS += -DLZMA_COMPRESS
ASFLAGS += -DLZMA_COMPRESS
START_FILE = start.o

CC = $(CROSS_KERNEL_COMPILE)gcc -mno-abicalls -fno-pic -G 0
LD = $(CROSS_KERNEL_COMPILE)ld -static -nostdlib
NM = $(CROSS_KERNEL_COMPILE)nm
OBJDUMP = $(CROSS_KERNEL_COMPILE)objdump
OBJCOPY = $(CROSS_KERNEL_COMPILE)objcopy
STRIP = $(CROSS_KERNEL_COMPILE)strip

ifdef CONFIG_RTL8186_AP
LOAD_START_ADDR=0x80500000
FLASH_OFFSET=20000
endif

ifdef CONFIG_RTL8186_GW
LOAD_START_ADDR=0x80500000
FLASH_OFFSET=30000
endif

ifdef CONFIG_RTL8186_GW_8M
LOAD_START_ADDR=0x80500000
FLASH_OFFSET=30000
endif
ifdef CONFIG_RTL8196B
LOAD_START_ADDR=0x80500000
#2M Flash Layout
#FLASH_OFFSET=30000
#4M Flash layout -> CAMEO Project
FLASH_OFFSET=10000
endif

ifdef CONFIG_SQUASHFS
CV_OPTION=linux-ro
else
CV_OPTION=linux
endif

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

all: linux.bin

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

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

memload-partial: vmlinux_img.gz $(LOADER_FILES) $(SUPPORT_FILES) $(START_FILE) ../vmlinux
	$(CC) -fno-pic -mno-abicalls -O2 -fomit-frame-pointer -D__KERNEL__ -c vmlinux_img.c -o vmlinux_img.o	
	$(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
	$(STRIP) vmlinux-stripped
	$(OBJCOPY) -Obinary vmlinux-stripped vmlinux_img
	rm -f vmlinux_img.gz
	./lzma e vmlinux_img vmlinux_img.gz

nfjrom:   memload-full  ../vmlinux
	$(OBJCOPY) -Obinary memload-full nfjrom

CVIMGEXIST=$(shell test -e $(CVIMG); echo $$?)
linux.bin: nfjrom
ifeq ($(CVIMGEXIST), 1)
	make -C $(CVIMGDIR) cvimg
endif
	$(CVIMG) $(CV_OPTION) nfjrom linux.bin $(LOAD_START_ADDR) $(FLASH_OFFSET)
	@$(CVIMG) size_chk vmlinux_img $(LOAD_START_ADDR)

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