#### Start of system configuration section. ####

srcdir =	@srcdir@
VPATH =		@srcdir@

# Common prefix for machine-independent installed files.
prefix =	@prefix@

# Common prefix for machine-dependent installed files.
exec_prefix =	@exec_prefix@

bindir =	$(exec_prefix)/bin
libdir =	$(exec_prefix)/lib
syslibsdir =	$(exec_prefix)/Sys/libs
sysldir =	$(exec_prefix)/Sys/l
incdir =	$(exec_prefix)/include
etcdir =	$(exec_prefix)/etc
mandir =	$(prefix)/man

INSTALL =	@INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA =	@INSTALL_DATA@

CC =		@CC@
AS =		as
CFLAGS =	@CFLAGS@
LDFLAGS =	@LDFLAGS@

RANLIB =	@RANLIB@

#### End system configuration section ####

# Default is generic m68k version with no FPU support.

CPU =		68000
FPU =		soft-float
BASE =		no-baserel

# Comment this line to compile each source instead of catenating the
# sources together into one big source. Note: catenating the sources
# not only speeds up compilation, it also reduces the library size!
export CATENATE = 1

# Some additional options for OTHER_CFLAGS that may or may not be useful are:
#
# -funroll-loops
# -fforce-mem
# -DDEBUG_VERSION	(build a debugging version)

# Use the flag to suppress stack extension when 2.6.4/2.7 is installed.
# STACKEXTEND =	-mnostackextend

# Use ixnet.library for network calls
NETWORKING = -DUSE_NET

OTHER_CFLAGS =	-fomit-frame-pointer $(STACKEXTEND) $(NETWORKING) -Wall

BASE_FLAGS_TO_PASS = \
		"AS=$(AS)" \
		"BASE=$(BASE)" \
		"BUILDDIR=$(BUILDDIR)" \
		"CC=$(CC)" \
		"CFLAGS=$(CFLAGS)" \
		"CPU=$(CPU)" \
		"FPU=$(FPU)" \
		"LDFLAGS=$(LDFLAGS)" \
		"OTHER_CFLAGS=$(OTHER_CFLAGS)" \
		"RANLIB=$(RANLIB)"

FLAGS_TO_PASS =	$(BASE_FLAGS_TO_PASS) $(EXTRA_FLAGS_TO_PASS)

###  The default thing to do is to make all reasonable combinations of the
###  library.
###
###  Note that libsrc, which builds the runtime startup files and both
###  versions of libc.a, completely ignores the FPU/CPU/BASE variables,
###  so we just call it directly.  Also note that the 68000 versions
###  of the files MUST be built before libsrc.
###
###  Other than the restriction noted above, you can comment out specific
###  CPU/FPU combinations that you are not interested in.  However you
###  do have to build both the baserel and no-baserel versions for the
###  combinations you want to build.

all:
		$(MAKE) build CPU=68000 FPU=soft-float BASE=no-baserel
		$(MAKE) build CPU=68000 FPU=soft-float BASE=baserel
		$(MAKE) build CPU=68020 FPU=68881      BASE=no-baserel
		$(MAKE) build CPU=68020 FPU=68881      BASE=baserel
		$(MAKE) build CPU=68020 FPU=soft-float BASE=no-baserel
		$(MAKE) build CPU=68020 FPU=soft-float BASE=baserel
		$(MAKE) build CPU=68030 FPU=68881      BASE=no-baserel
		$(MAKE) build CPU=68030 FPU=68881      BASE=baserel
		$(MAKE) build CPU=68030 FPU=soft-float BASE=no-baserel
		$(MAKE) build CPU=68030 FPU=soft-float BASE=baserel
		$(MAKE) build CPU=68040 FPU=68881      BASE=no-baserel
		$(MAKE) build CPU=68040 FPU=68881      BASE=baserel
		$(MAKE) build CPU=68040 FPU=soft-float BASE=no-baserel
		$(MAKE) build CPU=68040 FPU=soft-float BASE=baserel
		@(cd libsrc && $(MAKE) $(FLAGS_TO_PASS))
		@(cd utils && $(MAKE) $(FLAGS_TO_PASS))

###  The "build" target makes a single flavor of the library.  I.E.
###  the 68040+FPU version.

build:
		@$(MAKE) general-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)
		@$(MAKE) stdio-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)
		@$(MAKE) stdlib-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)
		@$(MAKE) string-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)
		@$(MAKE) ixglue-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)
		@$(MAKE) library-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)
		@$(MAKE) glue-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)
		@$(MAKE) ixnet-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)
		@$(MAKE) stack-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)
		@$(MAKE) static-$(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS)

###  These targets are used to map a generic target <builddir>-<BASE>-<CPU>-<FPU>
###  to one of the less complicated targets.  I.E. if something only needs to
###  be built for a particular CPU and FPU, and the value of BASE is irrelevant,
###  then it would be mapped to <CPU>-<FPU>.

general-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(CPU)-$(FPU) $(FLAGS_TO_PASS) BUILDDIR=general

glue-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(BASE) $(FLAGS_TO_PASS) BUILDDIR=glue

ixnet-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(CPU)-$(FPU) $(FLAGS_TO_PASS) BUILDDIR=ixnet

ixglue-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(BASE) $(FLAGS_TO_PASS) BUILDDIR=ixglue

library-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(CPU)-$(FPU) $(FLAGS_TO_PASS) BUILDDIR=library

stack-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS) BUILDDIR=stack

static-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(BASE)-$(CPU)-$(FPU) $(FLAGS_TO_PASS) BUILDDIR=static

stdio-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(CPU)-$(FPU) $(FLAGS_TO_PASS) BUILDDIR=stdio

stdlib-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(CPU)-$(FPU) $(FLAGS_TO_PASS) BUILDDIR=stdlib

string-$(BASE)-$(CPU)-$(FPU):
		@$(MAKE) $(CPU)-$(FPU) $(FLAGS_TO_PASS) BUILDDIR=string

###  These targets are the ones that are reduced from the full generic
###  targets, on a per directory basis.  I.E. if it is only necessary
###  to build versions for a specific BASE and the CPU/FPU combination
###  is irrelevant, then the generic target is mapped to just BASE.

# This target is for things that are only dependent on BASE.

$(BASE):
		@if [ -d $(BUILDDIR)/$(BASE) ]; then \
			true; \
		else \
			echo mkdir -p $(BUILDDIR)/$(BASE); \
			mkdir -p $(BUILDDIR)/$(BASE); \
		fi;
		@(cd $(BUILDDIR)/$(BASE) ; $(MAKE) -f ../Makefile $(FLAGS_TO_PASS));

# This target is for things that are only dependent on CPU and FPU.

$(CPU)-$(FPU):
		@if [ -d $(BUILDDIR)/$(CPU)/$(FPU) ]; then \
			true; \
		else \
			echo mkdir -p $(BUILDDIR)/$(CPU)/$(FPU); \
			mkdir -p $(BUILDDIR)/$(CPU)/$(FPU); \
		fi;
		@(cd $(BUILDDIR)/$(CPU)/$(FPU) ; $(MAKE) -f ../../Makefile $(FLAGS_TO_PASS))

# This target is for things that are dependent on CPU, FPU, and BASE.

$(BASE)-$(CPU)-$(FPU):
		@if [ -d $(BUILDDIR)/$(BASE)/$(CPU)/$(FPU) ]; then \
			true; \
		else \
			echo mkdir -p $(BUILDDIR)/$(BASE)/$(CPU)/$(FPU); \
			mkdir -p $(BUILDDIR)/$(BASE)/$(CPU)/$(FPU); \
		fi;
		@(cd $(BUILDDIR)/$(BASE)/$(CPU)/$(FPU) ; $(MAKE) -f ../../../Makefile $(FLAGS_TO_PASS));

###  Install all the libraries, include files, runtime files, etc.

install:	installdirs
		$(INSTALL) library/68000/soft-float/ixemul.library $(syslibsdir)/ixemul.library
		$(INSTALL) library/68000/soft-float/ixemul.trace $(syslibsdir)/ixemul.trace
		$(INSTALL) library/68000/soft-float/ixemul.library $(syslibsdir)/ixemul000.library
		$(INSTALL) library/68000/soft-float/ixemul.trace $(syslibsdir)/ixemul000.trace
		$(INSTALL) library/68020/soft-float/ixemul.library $(syslibsdir)/ixemul020.library
		$(INSTALL) library/68020/soft-float/ixemul.trace $(syslibsdir)/ixemul020.trace
		$(INSTALL) library/68030/soft-float/ixemul.library $(syslibsdir)/ixemul030.library
		$(INSTALL) library/68030/soft-float/ixemul.trace $(syslibsdir)/ixemul030.trace
		$(INSTALL) library/68040/soft-float/ixemul.library $(syslibsdir)/ixemul040.library
		$(INSTALL) library/68040/soft-float/ixemul.trace $(syslibsdir)/ixemul040.trace
		$(INSTALL) library/68020/68881/ixemul.library $(syslibsdir)/ixemul020fpu.library
		$(INSTALL) library/68020/68881/ixemul.trace $(syslibsdir)/ixemul020fpu.trace
		$(INSTALL) library/68030/68881/ixemul.library $(syslibsdir)/ixemul030fpu.library
		$(INSTALL) library/68030/68881/ixemul.trace $(syslibsdir)/ixemul030fpu.trace
		$(INSTALL) library/68040/68881/ixemul.library $(syslibsdir)/ixemul040fpu.library
		$(INSTALL) library/68040/68881/ixemul.trace $(syslibsdir)/ixemul040fpu.trace

		$(INSTALL) ixnet/68000/soft-float/ixnet.library $(syslibsdir)/ixnet.library
		$(INSTALL) ixnet/68000/soft-float/ixnet.library $(syslibsdir)/ixnet000.library
		$(INSTALL) ixnet/68020/soft-float/ixnet.library $(syslibsdir)/ixnet020.library
		$(INSTALL) ixnet/68030/soft-float/ixnet.library $(syslibsdir)/ixnet030.library
		$(INSTALL) ixnet/68040/soft-float/ixnet.library $(syslibsdir)/ixnet040.library
		$(INSTALL) ixnet/68020/68881/ixnet.library $(syslibsdir)/ixnet020fpu.library
		$(INSTALL) ixnet/68030/68881/ixnet.library $(syslibsdir)/ixnet030fpu.library
		$(INSTALL) ixnet/68040/68881/ixnet.library $(syslibsdir)/ixnet040fpu.library

		$(INSTALL) libsrc/bcrt0.o $(libdir)/bcrt0.o
		$(INSTALL) libsrc/crt0.o $(libdir)/crt0.o
		$(INSTALL) libsrc/gcrt0.o $(libdir)/gcrt0.o
		$(INSTALL) libsrc/mcrt0.o $(libdir)/mcrt0.o
		$(INSTALL) libsrc/rcrt0.o $(libdir)/rcrt0.o
		$(INSTALL) libsrc/libc.a $(libdir)/libc.a
		$(INSTALL) libsrc/libbc.a $(libdir)/libb/libc.a
		$(INSTALL) libsrc/libc_p.a $(libdir)/libc_p.a
		$(INSTALL_PROGRAM) utils/ixtrace $(bindir)/ixtrace
		$(INSTALL_PROGRAM) utils/ixprefs $(bindir)/ixprefs
		$(INSTALL_PROGRAM) utils/ixtimezone $(bindir)/ixtimezone
		$(INSTALL_PROGRAM) utils/ixrun $(bindir)/ixrun
		$(INSTALL) utils/ixpipe-handler $(sysldir)/ixpipe-handler
		(cd $(srcdir)/include && cp -r . $(incdir))
		find $(incdir) -type d -name CVS -print | xargs rm -rf
		(cd $(srcdir)/man && cp -r . $(mandir))
		find $(mandir) -type d -name CVS -print | xargs rm -rf
		mkdir -p $(etcdir)/zoneinfo
		(cd utils/zoneinfo && cp -r . $(etcdir)/zoneinfo)
		
installdirs:	mkinstalldirs
		$(srcdir)/mkinstalldirs $(bindir) $(libdir) $(syslibsdir) \
			$(sysldir) $(incdir) $(etcdir)

clean:
		(cd general ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd glue ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd ixglue ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd ixnet ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd stack ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd static ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd stdio ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd stdlib ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd string ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd library ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd libsrc ; $(MAKE) $(FLAGS_TO_PASS) clean)
		(cd utils ; $(MAKE) $(FLAGS_TO_PASS) clean)

clobber:
		(cd general ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd glue ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd ixglue ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd ixnet ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd stack ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd static ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd stdio ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd stdlib ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd string ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd library ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd libsrc ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		(cd utils ; $(MAKE) $(FLAGS_TO_PASS) clobber)
		rm -f Makefile config.* conftest.c

# Build source and binary distribution files.

dist:
		#
		# First get rid of any leftovers from a previous "make dist"
		#
		rm -rf gnu ixemul distrib
		mkdir -p distrib
		#
		# Create ixemul-bin.lha, which contains utilities
		# that are generally useful to ixemul.library users.
		#
		mkdir -p gnu/bin gnu/Sys/l gnu/Sys/devs
		cp -p utils/ixprefs gnu/bin/ixprefs
		cp -p utils/ixtrace gnu/bin/ixtrace
		cp -p utils/ixrun gnu/bin/ixrun
		cp -p utils/ixpipe-handler gnu/Sys/l/ixpipe-handler
		cp -p $(srcdir)/utils/Mountlist gnu/Sys/devs/MountList.ixpipe
		(cd gnu && lha -mraxeq a /distrib/ixemul-bin.lha bin Sys)
		sleep 5
		rm -rf gnu
		#
		# Create ixemul-tz.lha, which has timezone related pieces.
		#
		mkdir -p gnu/etc gnu/bin
		cp -p utils/ixtimezone gnu/bin/ixtimezone
		cp -p utils/zic gnu/bin/zic
		cp -pr utils/zoneinfo gnu/etc/zoneinfo
		(cd gnu && lha -mraxeq a /distrib/ixemul-tz.lha bin etc)
		sleep 5
		rm -rf gnu
		#
		# Create ixemul-sdk.lha, which contains the files that
		# programmers need to build applications that use ixemul.library.
		#
		mkdir -p gnu/lib/libb
		cp -p libsrc/bcrt0.o gnu/lib/bcrt0.o
		cp -p libsrc/crt0.o gnu/lib/crt0.o
		cp -p libsrc/gcrt0.o gnu/lib/gcrt0.o
		cp -p libsrc/mcrt0.o gnu/lib/mcrt0.o
		cp -p libsrc/rcrt0.o gnu/lib/rcrt0.o
		cp -p libsrc/libc.a gnu/lib/libc.a
		cp -p libsrc/libbc.a gnu/lib/libb/libc.a
		cp -p libsrc/libc_p.a gnu/lib/libc_p.a
		cp -pr $(srcdir)/include gnu/include
		cp -pr $(srcdir)/man gnu/man
		rm -f gnu/man/Makefile
		rm -f gnu/man/makewhatis.sed
		rm -f gnu/man/whatis.db
		find gnu -name CVS -print | xargs rm -rf
		(cd gnu && lha -mraxeq a /distrib/ixemul-sdk.lha lib include man)
		sleep 5
		rm -rf gnu
		#
		# Create ixemul-doc.lha, which contains various documentation
		# files.
		#
		mkdir ixemul
		cp -p $(srcdir)/COPYRIGHT ixemul/COPYRIGHT
		cp -p $(srcdir)/COPYING ixemul/COPYING
		cp -p $(srcdir)/COPYING.LIB ixemul/COPYING.LIB
		cp -p $(srcdir)/INSTALL ixemul/INSTALL
		cp -p $(srcdir)/NEWS ixemul/NEWS
		cp -p $(srcdir)/BUGS ixemul/BUGS
		cp -p $(srcdir)/TODO ixemul/TODO
		cp -p $(srcdir)/docs/README ixemul/README
		cp -p $(srcdir)/utils/ixprefs.guide ixemul/ixprefs.guide
		cp -p $(srcdir)/utils/ixprefs.guide.info ixemul/ixprefs.guide.info
		cp -p $(srcdir)/important.readme ixemul/important.readme
		cp -p utils/ixrun.doc ixemul/ixrun.doc
		cp -p utils/ixtrace.doc ixemul/ixtrace.doc
		cp -p utils/ixtimezone.doc ixemul/ixtimezone.doc
		cp -p utils/zic.doc ixemul/zic.doc
		lha -mraxeq a distrib/ixemul-doc.lha ixemul
		rm -rf ixemul
		#
		# Create ixemul-src.tgz, which contains the source code.
		# Do it in a temporary location so we don't have to
		# know where the build dir is, or translate between
		# Unix & AmigaDOS forms.  We also delete any CVS dirs
		# at this time.
		#
		rm -rf ixemul-src.tgz ixemul
		cp -pr $(srcdir) ixemul
		find ixemul -name CVS -print | xargs rm -rf
		tar -cpf - ixemul | gzip -9 >distrib/ixemul-src.tgz
		rm -rf ixemul
		#
		# Create ixemul-<cpu><fpu>.lha
		#
		mkdir -p gnu/Sys/libs
		cp -p library/68000/soft-float/ixemul.library gnu/Sys/libs/ixemul000.library
		cp -p ixnet/68000/soft-float/ixnet.library gnu/Sys/libs/ixnet000.library
		cp -p $(srcdir)/important.readme gnu/Sys/libs/important.readme
		(cd gnu && lha -mraxeq a /distrib/ixemul-000s.lha Sys)
		rm -f gnu/Sys/libs/*
		cp -p library/68000/soft-float/ixemul.trace gnu/Sys/libs/ixemul000.trace
		cp -p $(srcdir)/important.readme gnu/Sys/libs/important.readme
		(cd gnu && lha -mraxeq a /distrib/ixemul-000t.lha Sys)
		rm -f gnu/Sys/libs/*
		cp -p library/68020/soft-float/ixemul.library gnu/Sys/libs/ixemul020.library
		cp -p ixnet/68020/soft-float/ixnet.library gnu/Sys/libs/ixnet020.library
		cp -p $(srcdir)/important.readme gnu/Sys/libs/important.readme
		(cd gnu && lha -mraxeq a /distrib/ixemul-020s.lha Sys)
		rm -f gnu/Sys/libs/*
		cp -p library/68030/soft-float/ixemul.library gnu/Sys/libs/ixemul030.library
		cp -p ixnet/68030/soft-float/ixnet.library gnu/Sys/libs/ixnet030.library
		cp -p $(srcdir)/important.readme gnu/Sys/libs/important.readme
		(cd gnu && lha -mraxeq a /distrib/ixemul-030s.lha Sys)
		rm -f gnu/Sys/libs/*
		cp -p library/68040/soft-float/ixemul.library gnu/Sys/libs/ixemul040.library
		cp -p ixnet/68040/soft-float/ixnet.library gnu/Sys/libs/ixnet040.library
		cp -p $(srcdir)/important.readme gnu/Sys/libs/important.readme
		(cd gnu && lha -mraxeq a /distrib/ixemul-040s.lha Sys)
		rm -f gnu/Sys/libs/*
		cp -p library/68020/68881/ixemul.library gnu/Sys/libs/ixemul020fpu.library
		cp -p ixnet/68020/68881/ixnet.library gnu/Sys/libs/ixnet020fpu.library
		cp -p $(srcdir)/important.readme gnu/Sys/libs/important.readme
		(cd gnu && lha -mraxeq a /distrib/ixemul-020f.lha Sys)
		rm -f gnu/Sys/libs/*
		cp -p library/68030/68881/ixemul.library gnu/Sys/libs/ixemul030fpu.library
		cp -p ixnet/68030/68881/ixnet.library gnu/Sys/libs/ixnet030fpu.library
		cp -p $(srcdir)/important.readme gnu/Sys/libs/important.readme
		(cd gnu && lha -mraxeq a /distrib/ixemul-030f.lha Sys)
		rm -f gnu/Sys/libs/*
		cp -p library/68040/68881/ixemul.library gnu/Sys/libs/ixemul040fpu.library
		cp -p ixnet/68040/68881/ixnet.library gnu/Sys/libs/ixnet040fpu.library
		cp -p $(srcdir)/important.readme gnu/Sys/libs/important.readme
		(cd gnu && lha -mraxeq a /distrib/ixemul-040f.lha Sys)
		sleep 5
		rm -rf gnu
