#
# linux/arch/sh/boot/compressed/Makefile
#
# create a compressed vmlinux image from the original vmlinux
#

SYSTEM = $(TOPDIR)/vmlinux

OBJECTS = head.o misc.o main.o proc.o arc_tcon_param.o arc_tcon.o arc_disp_param.o arc_pgufb.o logo.o hdjpeg.o halJPEGD.o jdcolor.o NorFlash.o ramset.o sky_8850_dma.o sky_8850_i2s.o audio.o ramdisk2.o skyconfig.o
OBJECTS_RAMFS = head.o misc.o main.o proc.o arc_tcon_param.o arc_tcon.o arc_disp_param.o arc_pgufb.o logo.o hdjpeg.o halJPEGD.o jdcolor.o NorFlash.o ramset_ramfs.o sky_8850_dma.o sky_8850_i2s.o audio.o ramdisk2.o skyconfig.o
OBJECTS_NOFS = head.o misc.o main.o proc.o arc_tcon_param.o arc_tcon.o arc_disp_param.o arc_pgufb.o logo.o hdjpeg.o halJPEGD.o jdcolor.o NorFlash.o ramset_nofs.o sky_8850_dma.o sky_8850_i2s.o audio.o skyconfig.o
#OBJECTS = head.o misc.o main.o arc_pgufb.o logo.o hdjpeg.o halJPEGD.o jdcolor.o

LIBGCC		:= $(shell $(CC) $(CFLAGS) --print-libgcc-file-name)


ZLDFLAGS = -e startup -T $(TOPDIR)/arch/arc/boot/compressed/linux.lds

CFLAGS += -mno-volatile-cache


all: zImage

zImage: piggy.o null_ramdisk.o $(OBJECTS)
	rm -f zImage.elf zImage.elf.map ; \
	$(LD) -M -X -T linux.lds $(OBJECTS) --start-group ../../lib/lib.a  $(LIBGCC) --end-group -o zImage.elf > zImage.elf.map ; \
	rm -f zImage.bin ; \
	$(OBJCOPY) -O binary -R .note -R .comment -S zImage.elf zImage.bin

bzImage: piggy.o ramdisk.o $(OBJECTS) ramset_nofs.o ramset_ramfs.o
	rm -f zImage_ramfs.elf zImage_ramfs.elf.map
	$(LD) -M -X -T linux.lds.ramfs $(OBJECTS_RAMFS) --start-group ../../lib/lib.a  $(LIBGCC) --end-group -o zImage_ramfs.elf > zImage_ramfs.elf.map
	rm -f zImage_ramfs.bin
	$(OBJCOPY) -O binary -R .note -R .comment -S zImage_ramfs.elf zImage_ramfs.bin
####
	rm -f zImage.elf zImage.elf.map
	$(LD) -M -X -T linux.lds $(OBJECTS) --start-group ../../lib/lib.a  $(LIBGCC) --end-group -o zImage.elf > zImage.elf.map
	rm -f zImage.bin
	$(OBJCOPY) -O binary -R .note -R .comment -S zImage.elf zImage.bin
####
	rm -f zImage_nofs.elf zImage_nofs.elf.map
	$(LD) -M -X -T linux.lds.nofs $(OBJECTS_NOFS) --start-group ../../lib/lib.a  $(LIBGCC) --end-group -o zImage_nofs.elf > zImage_nofs.elf.map
	rm -f zImage_nofs.bin
	$(OBJCOPY) -O binary -R .note -R .comment -R .debug_frame -S zImage_nofs.elf zImage_nofs.bin


head.o: head.S
	$(CC) -D__ASSEMBLY__ $(AFLAGS) -c head.S -o head.o

entry.o: entry.S
	$(CC) -D__ASSEMBLY__ $(AFLAGS) -c entry.S -o entry.o

#proc.o:	traps.o entry.o
#	$(LD) -T/usr/local/arc/arc-elf32/lib/ldscripts/arcelf.xr -r -o proc.o entry.o traps.o
#proc.o:	entry.o
#	$(LD) -T/usr/local/arc/arc-elf32/lib/ldscripts/arcelf.xr -r -o proc.o entry.o
proc.o:	entry.o
	$(LD) -r -o proc.o entry.o

ramdisk2.o: $(SYSTEM)
	rm -f ramdisk2.c ramdisk2.o
	touch ramdisk2.c
	touch ramdisk2.img
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o ramdisk2.o ramdisk2.c
	$(OBJCOPY) -O elf32-littlearc --add-section=.data.ramdisk2=ramdisk2.img --set-section-flags=.data.ramdisk2=alloc,load,readonly,data,contents ramdisk2.o


#wschen
ifndef CONFIG_BOOT_KERNEL_USE_GZIP

piggy.o:	$(SYSTEM)
	rm -f _tmppiggy _tmppiggy.gz; \
	rm -f piggy.c piggy.o; \
	touch piggy.c ; \
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o piggy.o piggy.c ; \
	$(OBJCOPY) -O binary -R .note -R .comment -R .empty_zero_page -S $(TOPDIR)/vmlinux _tmppiggy ; \
	7zip _tmppiggy _tmppiggy.7z; \
	rm -f piggy_backup.gz ; \
	cp -f _tmppiggy.7z piggy_backup.gz ; \
	$(OBJCOPY) -O elf32-littlearc --add-section=.data.piggy=_tmppiggy.7z --set-section-flags=.data.piggy=alloc,load,readonly,data,contents piggy.o ; \
	rm -f _tmppiggy _tmppiggy.7z;

else
piggy.o:	$(SYSTEM)
	rm -f _tmppiggy _tmppiggy.gz; \
	rm -f piggy.c piggy.o; \
	touch piggy.c ; \
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o piggy.o piggy.c ; \
	$(OBJCOPY) -O binary -R .note -R .comment -R .empty_zero_page -S $(TOPDIR)/vmlinux _tmppiggy ; \
	gzip -f -9 < _tmppiggy > _tmppiggy.gz; \
	rm -f piggy_backup.gz ; \
	cp -f _tmppiggy.gz piggy_backup.gz ; \
	$(OBJCOPY) -O elf32-littlearc --add-section=.data.piggy=_tmppiggy.gz --set-section-flags=.data.piggy=alloc,load,readonly,data,contents piggy.o ; \
	rm -f _tmppiggy _tmppiggy.gz;

endif

ramdisk.o: $(SYSTEM)
	rm -f ramdisk.c ramdisk.o; \
	touch ramdisk.c ; \
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o ramdisk.o ramdisk.c ; \
	$(OBJCOPY) -O elf32-littlearc --add-section=.data.ramdisk=../ramdisk.image.gz --set-section-flags=.data.ramdisk=alloc,load,readonly,data,contents ramdisk.o ;

null_ramdisk.o: $(SYSTEM)
	rm -f ramdisk.c ramdisk.o; \
	touch ramdisk.c ; \
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o ramdisk.o ramdisk.c ;

#jinn
skyconfig.o: $(SYSTEM)
	rm -f skyconfig.c skyconfig.o
	touch skyconfig.c
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o skyconfig.o skyconfig.c
	$(OBJCOPY) -O elf32-littlearc --add-section=.data.skyconfig=skyconfig.cfg --set-section-flags=.data.skyconfig=alloc,load,readonly,data,contents skyconfig.o


#wschen
ifndef CONFIG_BOOT_KERNEL_USE_GZIP

logo.o: $(SYSTEM)
	rm -f logo.c logo.o
	touch logo.c
	rm -f logo.rgb.gz
	7zip logo.jpg logo.rgb.gz
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o logo.o logo.c
	$(OBJCOPY) -O elf32-littlearc --add-section=.data.logo=logo.rgb.gz --set-section-flags=.data.logo=alloc,load,readonly,data,contents logo.o

else

logo.o: $(SYSTEM)
	rm -f logo.c logo.o
	touch logo.c
	rm -f logo.rgb.gz
	gzip -f -9 < logo.jpg > logo.rgb.gz;
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o logo.o logo.c
	$(OBJCOPY) -O elf32-littlearc --add-section=.data.logo=logo.rgb.gz --set-section-flags=.data.logo=alloc,load,readonly,data,contents logo.o

endif



ifndef CONFIG_BOOT_KERNEL_USE_GZIP

audio.o: $(SYSTEM)
	rm -f audio.c audio.o
	touch audio.c
	touch audio.pcm
	rm -f audio.pcm.gz
	7zip audio.pcm audio.pcm.gz;
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o audio.o audio.c
	$(OBJCOPY) -O elf32-littlearc --add-section=.data.audio=audio.pcm.gz --set-section-flags=.data.audio=alloc,load,readonly,data,contents audio.o
else

audio.o: $(SYSTEM)
	rm -f audio.c audio.o
	touch audio.c
	touch audio.pcm
	rm -f audio.pcm.gz
	gzip -f -9 < audio.pcm > audio.pcm.gz;
	$(CC) -D__KERNEL__ -I$(TOPDIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -mA7 -mlong-calls -funsigned-char -O2 -fno-common -pipe -fno-builtin -D__linux__  -fno-unit-at-a-time -c -o audio.o audio.c
	$(OBJCOPY) -O elf32-littlearc --add-section=.data.audio=audio.pcm.gz --set-section-flags=.data.audio=alloc,load,readonly,data,contents audio.o

endif

clean:
	rm -f vmlinux _tmp_* zImage zImage.bin zImage.elf zImage.elf.map \
		piggy_backup.gz piggy.c piggy.o *.o

include $(TOPDIR)/Rules.make

