#
# Copyright (C) 2008 Sony Computer Entertainment Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
#   * Redistributions of source code must retain the above copyright notice,
#     this list of conditions and the following disclaimer.
#   * Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#   * Neither the names of the copyright holders nor the names of their
#     contributors may be used to endorse or promote products derived from this
#     software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#

ZLIB=zlib-1.2.3
MGZIP=smp_mgzip_1.2c
HOST_FLAG=-m32
LIBS=-lspe2 -lmars_task -lmars_base

.PHONY: all clean

all: mgzip

$(ZLIB).tar.gz:
	wget http://www.zlib.net/$(ZLIB).tar.gz

$(ZLIB)/Makefile.in: $(ZLIB).tar.gz $(ZLIB)_mars.patch
	tar xvfz $(ZLIB).tar.gz
	cd $(ZLIB) && patch -p1 < ../$(ZLIB)_mars.patch
	rm -f $(ZLIB)/Makefile

$(ZLIB)/adler32.c: $(ZLIB)/Makefile.in
$(ZLIB)/compress.c: $(ZLIB)/Makefile.in
$(ZLIB)/crc32.c: $(ZLIB)/Makefile.in
$(ZLIB)/crc32.h: $(ZLIB)/Makefile.in
$(ZLIB)/deflate.c: $(ZLIB)/Makefile.in
$(ZLIB)/deflate.h: $(ZLIB)/Makefile.in
$(ZLIB)/e_cell.h: $(ZLIB)/Makefile.in
$(ZLIB)/example.c: $(ZLIB)/Makefile.in
$(ZLIB)/gzio.c: $(ZLIB)/Makefile.in
$(ZLIB)/infback.c: $(ZLIB)/Makefile.in
$(ZLIB)/inffast.c: $(ZLIB)/Makefile.in
$(ZLIB)/inffast.h: $(ZLIB)/Makefile.in
$(ZLIB)/inffixed.h: $(ZLIB)/Makefile.in
$(ZLIB)/inflate.c: $(ZLIB)/Makefile.in
$(ZLIB)/inflate.h: $(ZLIB)/Makefile.in
$(ZLIB)/inftrees.c: $(ZLIB)/Makefile.in
$(ZLIB)/inftrees.h: $(ZLIB)/Makefile.in
$(ZLIB)/mars_ppe_queue.c: $(ZLIB)/Makefile.in
$(ZLIB)/mars_spe_main.c: $(ZLIB)/Makefile.in
$(ZLIB)/mars_spe_queue.c: $(ZLIB)/Makefile.in
$(ZLIB)/mars_task.c: $(ZLIB)/Makefile.in
$(ZLIB)/minigzip.c: $(ZLIB)/Makefile.in
$(ZLIB)/ppe_deflate.c: $(ZLIB)/Makefile.in
$(ZLIB)/ppe_malloc.c: $(ZLIB)/Makefile.in
$(ZLIB)/spe_deflate.c: $(ZLIB)/Makefile.in
$(ZLIB)/spe_dummy.c: $(ZLIB)/Makefile.in
$(ZLIB)/trees.c: $(ZLIB)/Makefile.in
$(ZLIB)/trees.h: $(ZLIB)/Makefile.in
$(ZLIB)/uncompr.c: $(ZLIB)/Makefile.in
$(ZLIB)/zconf.h: $(ZLIB)/Makefile.in
$(ZLIB)/zconf.in.h: $(ZLIB)/Makefile.in
$(ZLIB)/zlib.h: $(ZLIB)/Makefile.in
$(ZLIB)/zutil.c: $(ZLIB)/Makefile.in
$(ZLIB)/zutil.h: $(ZLIB)/Makefile.in

$(ZLIB)/Makefile: $(ZLIB)/Makefile.in
	cd $(ZLIB) && ./configure

$(ZLIB)/libz.a: $(ZLIB)/Makefile $(ZLIB)/adler32.c $(ZLIB)/compress.c \
                $(ZLIB)/crc32.c $(ZLIB)/crc32.h $(ZLIB)/deflate.c \
                $(ZLIB)/deflate.h $(ZLIB)/e_cell.h $(ZLIB)/example.c \
                $(ZLIB)/gzio.c $(ZLIB)/infback.c $(ZLIB)/inffast.c \
                $(ZLIB)/inffast.h $(ZLIB)/inffixed.h $(ZLIB)/inflate.c \
                $(ZLIB)/inflate.h $(ZLIB)/inftrees.c $(ZLIB)/inftrees.h \
                $(ZLIB)/mars_ppe_queue.c $(ZLIB)/mars_spe_main.c \
                $(ZLIB)/mars_spe_queue.c $(ZLIB)/mars_task.c \
                $(ZLIB)/minigzip.c $(ZLIB)/ppe_deflate.c $(ZLIB)/ppe_malloc.c \
                $(ZLIB)/spe_deflate.c $(ZLIB)/spe_dummy.c $(ZLIB)/trees.c \
                $(ZLIB)/trees.h $(ZLIB)/uncompr.c $(ZLIB)/zconf.h \
                $(ZLIB)/zconf.in.h $(ZLIB)/zlib.h $(ZLIB)/zutil.c \
                $(ZLIB)/zutil.h
	cd $(ZLIB) && HOST_FLAG=$(HOST_FLAG) make libz.a

$(MGZIP).tar.gz:
	wget http://lemley.net/$(MGZIP).tar.gz

$(MGZIP)/configure.in: $(MGZIP).tar.gz mgzip_gz_header.patch \
                mgzip_remove_zlib_check.patch
	tar xvfz $(MGZIP).tar.gz
	cd $(MGZIP) && patch -p1 < ../mgzip_gz_header.patch
	cd $(MGZIP) && patch -p1 < ../mgzip_remove_zlib_check.patch

$(MGZIP)/die.c: $(MGZIP)/configure.in
$(MGZIP)/die.h: $(MGZIP)/configure.in
$(MGZIP)/get_options.c: $(MGZIP)/configure.in
$(MGZIP)/mgzip.c: $(MGZIP)/configure.in
$(MGZIP)/mgzip.h: $(MGZIP)/configure.in
$(MGZIP)/queue.c: $(MGZIP)/configure.in
$(MGZIP)/queue.h: $(MGZIP)/configure.in
$(MGZIP)/version.h: $(MGZIP)/configure.in
	
$(MGZIP)/configure: $(MGZIP)/configure.in
	cd $(MGZIP) && autoconf

$(MGZIP)/Makefile: $(MGZIP)/configure
	cd $(MGZIP) && \
	CC='ppu-gcc' CPPFLAGS='-I../$(ZLIB)' \
	CFLAGS='$(HOST_FLAG) -D_FILE_OFFSET_BITS=64' \
	LDFLAGS='$(HOST_FLAG)' \
	LIBS='$(LIBS)' ./configure
	
$(MGZIP)/mgzip: $(MGZIP)/Makefile $(MGZIP)/die.c $(MGZIP)/die.h \
                $(MGZIP)/get_options.c $(MGZIP)/mgzip.c $(MGZIP)/mgzip.h \
                $(MGZIP)/queue.c $(MGZIP)/queue.h $(MGZIP)/version.h \
                $(ZLIB)/libz.a
	rm -f $(MGZIP)/mgzip
	cd $(MGZIP) && make LIBS='$(LIBS) ../$(ZLIB)/libz.a'

mgzip: $(MGZIP)/mgzip
	test -s mgzip || ln -s $(MGZIP)/mgzip mgzip

clean:
	rm -rf $(MGZIP) $(ZLIB) \
		$(ZLIB).tar.gz $(MGZIP).tar.gz mgzip
