include Makefile.release

SVN_GCC_323   = tarfiles/gcc-3.2.3.tar.gz
SVN_GCC_344   = tarfiles/gcc-3.4.4.tar.gz
SVN_GCC_442   = tarfiles/gcc-4.4.2.tar.bz2
SVN_GCC_412     = tarfiles/gcc-core-4.1.2.tar.bz2
SVN_GCC_412_CPP = tarfiles/gcc-g++-4.1.2.tar.bz2
SVN_GCC_412_F95 = tarfiles/gcc-fortran-4.1.2.tar.bz2
SVN_GCC_441     = tarfiles/gcc-core-4.4.1.tar.bz2
SVN_GCC_441_CPP = tarfiles/gcc-g++-4.4.1.tar.bz2
SVN_GCC_441_F95 = tarfiles/gcc-fortran-4.4.1.tar.bz2
SVN_BINUTILS  = tarfiles/binutils-2.13.2.1.tar.gz
SVN_BINUTILS2 = tarfiles/binutils-2.16.1.tar.gz
SVN_BINUTILS19 = tarfiles/binutils-2.19.51.tar.bz2
SVN_NEWLIB    = tarfiles/newlib-1.13.0.tar.gz
SVN_GDB       = tarfiles/insight-6.4.tar.bz2
SVN_GDB_M     = tarfiles/gdb-6.3-2-mingw.tar.bz2
SVN_GLIBC_232     = tarfiles/glibc-2.3.2.tar.bz2
SVN_GLIBC_232_P   = tarfiles/glibc-linuxthreads-2.3.2.tar.bz2
SVN_GLIBC_25      = tarfiles/glibc-2.5.tar.gz
SVN_GLIBC_25_P    = tarfiles/glibc-linuxthreads-2.5.tar.bz2
SVN_UCLIBC_0926   = tarfiles/uClibc-0.9.26.tar.bz2
SVN_UCLIBC_09282  = tarfiles/uClibc-0.9.28.2.tar.bz2
SVN_UCLIBC_REF    = tarfiles/uclinux-includes.tar.bz2
SVN_UCLIBC_09301  = tarfiles/uClibc-0.9.30.1.tar.gz
SVN_GMP           = tarfiles/gmp-4.2.4.tar.bz2
SVN_MPFR          = tarfiles/mpfr-2.4.1.tar.bz2

SYSCOPY=$(if $(filter MINGW32%,$(shell uname)),--usecopy,)

download:
	-mkdir $(CURDIR)/tarfiles
	cd $(CURDIR)/tarfiles; \
	wget -N ftp://sourceware.org/pub/insight/releases/insight-6.4.tar.bz2 \
	wget -N http://ftp.gnu.org/gnu/binutils/binutils-2.13.2.1.tar.gz; \
	wget -N http://ftp.gnu.org/gnu/binutils/binutils-2.16.1.tar.gz; \
	wget -N http://sources-redhat.mirrors.airband.net/binutils/snapshots/binutils-2.19.51.tar.bz2; \
	wget -N http://mesh.dl.sourceforge.net/sourceforge/gnuwin32/flex-2.5.4a-1.exe; \
	wget -N http://ftp.gnu.org/gnu/gcc/gcc-3.2.3/gcc-3.2.3.tar.gz; \
	wget -N http://gd.tuwien.ac.at/gnu/sourceware/gcc/releases/gcc-3.4.4/gcc-3.4.4.tar.gz; \
	wget -N http://ftp.gnu.org/pub/gnu/gcc/gcc-3.4.4/gcc-core-3.4.4.tar.bz2; \
	wget -N http://ftp.gnu.org/pub/gnu/gcc/gcc-3.4.4/gcc-3.4.4.tar.bz2; \
	wget -N http://ftp.gnu.org/pub/gnu/gcc/gcc-4.4.2/gcc-4.4.2.tar.bz2; \
	wget -N http://mesh.dl.sourceforge.net/sourceforge/mingw/gdb-6.3-2.tar.bz2; \
	wget -N http://ftp.gnu.org/gnu/gdb/gdb-6.3.tar.gz; \
	wget -N --passive-ftp ftp://sources.redhat.com/pub/newlib/newlib-1.13.0.tar.gz; \
	wget -N http://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz; \
	wget -N http://ftp.gnu.org/gnu/gdb/gdb-7.1.tar.gz; \

#download glibc + prebuild include and libs to start with for sparc-linux toolchain build
download-sparc-linux: download
	cd $(CURDIR)/tarfiles; \
	wget -N http://ftp.gnu.org/gnu/glibc/glibc-2.3.2.tar.bz2; \
	wget -N http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.gz; \
	wget -N http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.2.tar.bz2; \
	wget -N http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.5.tar.bz2; \
	wget -N ftp://gaisler.com/gaisler.com/linux/src/prebuild/gcc-sparc-linux-includes.tar.bz2;

download-sparc-uclinux: download
	cd $(CURDIR)/tarfiles; \
	wget -N http://www.uclibc.org/downloads/uClibc-0.9.26.tar.bz2; \
	wget -N http://www.uclibc.org/downloads/uClibc-0.9.28.2.tar.bz2; \
	wget -N ftp://gaisler.com/gaisler.com/linux/src/prebuild/uclinux-includes.tar.bz2;

all:
	-mkdir $(CURDIR)/toolchains
	-rm -rf /opt/sparc-elf-3.4.4 /opt/sparc-elf-4.4.2 ;
	-rm -rf /opt/sparc-elf-3.4.4-mingw /opt/sparc-elf-4.4.2-mingw ;
	cd /opt;ln -s $(CURDIR)/toolchains/sparc-elf-3.4.4 sparc-elf-3.4.4
	cd /opt;ln -s $(CURDIR)/toolchains/sparc-elf-4.4.2 sparc-elf-4.4.2
	cd /opt;ln -s $(CURDIR)/toolchains/sparc-elf-3.4.4-mingw sparc-elf-3.4.4-mingw
	cd /opt;ln -s $(CURDIR)/toolchains/sparc-elf-4.4.2-mingw sparc-elf-4.4.2-mingw
	make -f Makefile.gcc-3.4.4 build-all
	make -f Makefile.gcc-4.4.2 build-all
	make -f Makefile.gcc-3.4.4 gcc-createtars
	make -f Makefile.gcc-4.4.2 gcc-createtars
	echo "Try to get i686-mingw32-gcc into PATH:"
	source /usr/local/cross/cross.sh; make -f Makefile.gcc-3.4.4-linux-mingw build-all
	source /usr/local/cross/cross.sh; make -f Makefile.gcc-4.4.2-linux-mingw build-all
	source /usr/local/cross/cross.sh; make -f Makefile.gcc-3.4.4-linux-mingw gcc-createtars-mingw
	source /usr/local/cross/cross.sh; make -f Makefile.gcc-4.4.2-linux-mingw gcc-createtars-mingw
	make -f Makefile.gcc-3.4.4 upload
	make -f Makefile.gcc-3.4.4 download


all-linux: createtars rpmprepare rpmbuild slackbuild symlinks

all-windows: createtars-mingw 
#	cd installer; make all 

all-mingw:
	-make -f Makefile.gcc-3.2.3-mingw build-all
	make createtars-mingw

install: 
	-tar xzf $(SVN_GCC_323)       --keep-old-files
	-tar xzf $(SVN_GCC_344)	     --keep-old-files
	-tar xjf $(SVN_GCC_442)   --keep-old-files
	-tar xzf $(SVN_BINUTILS)      --keep-old-files
	-tar xzf $(SVN_BINUTILS2)     --keep-old-files
	-tar xjf $(SVN_BINUTILS19)    --keep-old-files
	-tar xzf $(SVN_NEWLIB)	     --keep-old-files 
	-tar xjf $(SVN_GDB)	     --keep-old-files
	-tar xjf $(SVN_GDB_M)         --keep-old-files


install-glibcs:
	tar xzvf $(SVN_GLIBC_25)	  	  --exclude-from=svndirs.txt 
	cd glibc-2.5;tar xjvf ../$(SVN_GLIBC_25_P)	  --exclude-from=../svndirs.txt 
	tar xjvf $(SVN_GLIBC_232)	  	  --exclude-from=svndirs.txt 
	cd glibc-2.3.2;tar xjvf ../$(SVN_GLIBC_232_P)  --exclude-from=../svndirs.txt 
	touch glibc-2.5/configure
	touch glibc-2.3.2/configure

install-gcc4:
	tar xjvf $(SVN_GCC_412)	  --exclude-from=svndirs.txt 
	tar xjvf $(SVN_GCC_412_CPP)	  --exclude-from=svndirs.txt

install-gcc412:
	-tar xjf $(SVN_GCC_412)        --keep-old-files
	-tar xjf $(SVN_GCC_412_CPP)    --keep-old-files
	-tar xjf $(SVN_GCC_412_F95)    --keep-old-files

install-gcc4-patch:
	make SVN_DIR_BASE=gcc-4.1.2 SOURCE_TAR=$(SVN_GCC_412) SOURCE_CPP_TAR=$(SVN_GCC_412_CPP) installdodiff

install-binutils-patch:
	make SVN_DIR_BASE=binutils-2.16.1 SOURCE_TAR=$(SVN_BINUTILS2) SOURCE_CPP_TAR= installdodiff

installdodiff:
	-mkdir install_dodiff
	-rm -rf install_dodiff/$(SVN_DIR_BASE)-svn
	if [ ! -d install_dodiff/$(SVN_DIR_BASE) ]; then cd install_dodiff; tar xvf $(CURDIR)/$(SOURCE_TAR);$(if $(SOURCE_CPP_TAR),tar xvf $(CURDIR)/$(SOURCE_CPP_TAR);,) fi
	svn export $(SVN_DIR_BASE) install_dodiff/$(SVN_DIR_BASE)-svn
	-cd install_dodiff; for fs in `find $(SVN_DIR_BASE)-svn -type f`; do \
		echo $$fs; \
		fd=`echo $$fs | sed -e 's/$(SVN_DIR_BASE)-svn/$(SVN_DIR_BASE)/g'`; \
		fp=`echo $$fs | sed -e 's/$(SVN_DIR_BASE)-svn/$(SVN_DIR_BASE)-patch/g'`; \
		mkdir -p `dirname $$fp`; \
		diff -Naurb $$fd $$fs > $$fp; \
	done
	@echo Diff end;

install-gcc441: install-gcc441-mp
	tar xjvf $(SVN_GCC_441)	  --exclude-from=svndirs.txt 
	tar xjvf $(SVN_GCC_441_CPP)	  --exclude-from=svndirs.txt 
	tar xjvf $(SVN_GCC_441_F95)	  --exclude-from=svndirs.txt 

install-gcc441-mp:
	tar xjvf $(SVN_GMP)	  --exclude-from=svndirs.txt 
	tar xjvf $(SVN_MPFR)	  --exclude-from=svndirs.txt 





install-gcc34:
	tar xzvf $(SVN_GCC_344)	  --exclude-from=svndirs.txt 

install-uclibc:
	tar xjvf $(SVN_UCLIBC_0926)   --exclude-from=svndirs.txt 
	tar xjvf $(SVN_UCLIBC_09282)  --exclude-from=svndirs.txt

install-uclibc-9301:
	tar xvf $(SVN_UCLIBC_09301)   --exclude-from=svndirs.txt 

install-uclibc-ref:
	tar xjvf $(SVN_UCLIBC_REF)

install-gdb:
	tar xzvf $(SVN_GDB)	  --exclude-from=svndirs.txt 

all-sparc-linux-3.4.4-2.5: clear
	-rm -rf /opt/sparc-linux-3.4.4-2.6.21
	make -f Makefile.gcc-sparc-linux-3.4.4 binutils-all gcc-all
	make -f Makefile.glibc-2.5-3.4.4 glibc-all

all-sparc-linux-3.4.4-2.5-16k: clear
	-rm -rf /opt/sparc-linux-3.4.4
	make -f Makefile.gcc-sparc-linux-3.4.4-16k binutils-all gcc-all
	make -f Makefile.glibc-2.5-3.4.4 glibc-all

all-sparc-linux-4.1.2-2.5: clear
	-rm -rf /opt/sparc-linux-4.1.2
	make -f Makefile.gcc-sparc-linux-4.1.2 binutils-all gcc-all | tee all-sparc-linux-4.1.2-2.5.out
	make -f Makefile.glibc-2.5-4.1.2 glibc-all | tee all-sparc-linux-4.1.2-2.5-glibc.out

all-sparc-linux-4.4.2-2.11.2: clear
	-rm -rf /opt/sparc-linux-4.4.2
	make -f Makefile.gcc-sparc-linux-4.4.2 binutils-all gcc-all | tee all-sparc-linux-4.4.2-2.5-2.6.31.out
	make -f Makefile.glibc-2.11.2-4.4.2-2.6.31 glibc-all | tee all-sparc-linux-4.4.2-2.11.2-2.6.31-glibc.out

toolchaindir:
	mkdir $(CURDIR)/toolchains/sparc-elf-3.2.3
	mkdir $(CURDIR)/toolchains/sparc-elf-3.4.4
	mkdir $(CURDIR)/toolchains/sparc-elf-3.2.3-mingw

createtars: strip
	if [ ! -d $(CURDIR)/toolchains/$(RELEASE_VERSION) ] ; then mkdir $(CURDIR)/toolchains/$(RELEASE_VERSION); fi
	make DESTDIR=$(CURDIR)/toolchains/sparc-elf-3.4.4 GCCVERSION=3.4.4 RELEASE_VERSION=$(RELEASE_VERSION) addsrc
	cp ddd/sparc-elf-ddd.3.4.4 toolchains/sparc-elf-3.4.4/bin/ddd
	cp ddd/sparc-elf-ddd.3.4.4 toolchains/sparc-elf-3.4.4/bin/sparc-elf-ddd
	cd $(CURDIR)/toolchains; \
	tar -cf - sparc-elf-3.4.4 | bzip2 -9 > $(RELEASE_VERSION)/sparc-elf-3.4.4-$(RELEASE_VERSION).tar.bz2

TOOLCHAIN-MINGWB = C:/opt
TOOLCHAIN-MINGW  = $(TOOLCHAIN-MINGWB)/sparc-elf-3.2.3-mingw

createtars-mingw: strip-mingw
	-mkdir -p $(CURDIR)/toolchains/$(RELEASE_VERSION)
	make DESTDIR=$(CURDIR)/toolchains/sparc-elf-3.4.4-mingw GCCVERSION=3.4.4 RELEASE_VERSION=$(RELEASE_VERSION) addsrc
	cd toolchains; zip -r $(RELEASE_VERSION)/sparc-elf-3.4.4-$(RELEASE_VERSION)-mingw.zip sparc-elf-3.4.4-mingw

createtars-cygwin: strip-cygwin
	-mkdir -p $(CURDIR)/toolchains/$(RELEASE_VERSION)
	make DESTDIR=$(CURDIR)/toolchains/cygwin/sparc-elf-3.4.4 GCCVERSION=3.4.4 RELEASE_VERSION=$(RELEASE_VERSION) addsrc
	cd $(CURDIR)/toolchains/cygwin/; \
	tar -cf - sparc-elf-3.4.4 | bzip2 -9 > ../$(RELEASE_VERSION)/sparc-elf-3.4.4-cygwin-$(RELEASE_VERSION).tar.bz2

strip-mingw: 
	find $(CURDIR)/toolchains/sparc-elf-3.4.4-mingw -name "*.exe" | xargs -L1 i686-mingw32-strip

strip-cygwin: 
	find $(CURDIR)/toolchains/cygwin/sparc-elf-3.4.4 -name "*.exe" | xargs -L1 i686-pc-cygwin-strip

addsrc:
	-rm -rf $(DESTDIR)/doc
	-rm -rf $(DESTDIR)/src
	mkdir -p $(DESTDIR)/src/libgloss
	mkdir -p $(DESTDIR)/doc
	cp doc/bcc.pdf $(DESTDIR)/doc
	cp Changelog.txt $(DESTDIR)/doc
	svn export examples $(DESTDIR)/src/examples
	svn export libs/libnet $(DESTDIR)/src/libnet
	svn export libs/libpthread $(DESTDIR)/src/libpthread
	svn export newlib-1.13.0/libgloss/sparc_leon $(DESTDIR)/src/libgloss/sparc_leon
	cp -r newlib-1.13.0/libgloss/*.c $(DESTDIR)/src/libgloss/
	cp -r newlib-1.13.0/libgloss/*.h $(DESTDIR)/src/libgloss/
	cp -r newlib-1.13.0/libgloss/configure $(DESTDIR)/src/libgloss/
	cp -r newlib-1.13.0/libgloss/Makefile.in $(DESTDIR)/src/libgloss/

test2:
	cd $(CURDIR)/toolchains/sparc-elf-3.2.3/sparc-elf/lib; find . | grep \\.a | xargs $(CURDIR)/toolchains/sparc-elf-3.2.3/bin/sparc-elf-strip --strip-debug $$1

strip:
	for file in $(CURDIR)/toolchains/sparc-elf-3.4.4/bin/*; \
		do strip $$file; done
	for file in $(CURDIR)/toolchains/sparc-elf-3.4.4/libexec/gcc/sparc-elf/3.4.4/*; \
		do strip $$file; done


symlinks:
	rm -rf /opt/sparc-elf-3.2.3 /opt/sparc-elf-3.4.4 /opt/sparc-elf-4.1.2 /opt/sparc-elf-4.4.1 /opt/sparc-aout-3.2.3 ;
	cd /opt;ln -s $(CURDIR)/toolchains/sparc-elf-3.2.3 sparc-elf-3.2.3
	cd /opt;ln -s $(CURDIR)/toolchains/sparc-aout-3.2.3 sparc-aout-3.2.3
	cd /opt;ln -s $(CURDIR)/toolchains/sparc-elf-3.4.4 sparc-elf-3.4.4
	cd /opt;ln -s $(CURDIR)/toolchains/sparc-elf-4.1.2 sparc-elf-4.1.2
	cd /opt;ln -s $(CURDIR)/toolchains/sparc-elf-4.4.1 sparc-elf-4.4.1

test: 
	echo $(SYSCOPY)

cleaner:
	-rm -rf *-build

clear:
	-rm -rf gcc-3.2.3-binutils-2.13.2.1-build gcc-3.2.3-build gcc-3.2.3-gdb-6.3-build gcc-3.2.3-newlib-1.13.0-build
	-rm -rf gcc-3.4.4-binutils-2.13.2.1-build gcc-3.4.4-build gcc-3.4.4-gdb-6.3-build gcc-3.4.4-newlib-1.13.0-build
	-rm -rf gcc-4.1.2-binutils-2.13.2.1-build gcc-4.1.2-build gcc-4.1.2-gdb-6.3-build gcc-4.1.2-newlib-1.13.0-build
	-rm -rf gcc-4.4.1-binutils-2.16.1-build gcc-4.4.1-binutils-2.19.51-build gcc-4.4.1-build gcc-4.4.1-gdb-6.3-build gcc-4.4.1-newlib-1.13.0-build
	-rm -rf gcc-4.4.1-gmp-4.2.4-install gcc-4.4.1-gmp-4.2.4-build gcc-4.4.1-mpfr-2.4.1-build gcc-4.4.1-mpfr-2.4.1-install
	-rm -rf slackware rpm 
	-rm -rf glibc-2.5-build- glibc-2.5-build-soft glibc-2.5-build-soft_v8 glibc-2.5-build-v8
	-rm -rf glibc-2.3.2-build- glibc-2.3.2-build-soft glibc-2.3.2-build-soft_v8 glibc-2.3.2-build-v8
	-rm -rf gcc-3.4.4-sparc-linux-binutils-2.16.1-build gcc-3.4.4-sparc-uclinux-binutils-2.16.1-build gcc-4.1.2-sparc-linux-binutils-2.16.1-build
	-rm -rf gcc-sparc-linux-3.4.4-build gcc-sparc-linux-4.1.2-build gcc-sparc-uclinux-3.4.4-build gcc-threadx-3.4.4--build gcc-threadx-3.4.4-binutils-2.16.1-build gcc-threadx-3.4.4-newlib-1.13.0-build
	-rm -rf newlib-1.13.0-build binutils-2.16.1-build

-include Makefile.rmp
-include Makefile.slack

