##############################################################################
#
# Makefile
#
# Make program to compile the Foam runtime files
#
# Copyright (c) 1990-2007 Aldor Software Organization Ltd (Aldor.org).
#
##############################################################################
#
# Targets: all, clean, quick
#
#    make all	-- make the runtime files for the AXIOM-XL compiler
#
# Parameters:  ALDORROOT
#
#    To override defaults do, e.g.,
#	 make -e ALDORROOT=/spad/local/axiomxl/rs all
#    or
#	 setenv ALDORROOT /spad/local/axiomxl/rs; setenv MAKEFLAGS e; make all
#
##############################################################################
#
# We do not use the compiler archive since these files may be compiled
# with different options, or different compilers.
#
##############################################################################

PWD=$(MAKEDIR)
AR	= ar rv
CP	= copy
LN	= ln
RM	= rm -f
DORANLIB=lib

CCPROG	= cl -nologo
#CCPROG  = docc # use if unicl whinges about ansi constructs

#CFLAGS	= -g -DFOAM_RTS $(SYSARG) -DSTO_CAN_BLACKLIST -DSTO_DEBUG_DISPLAY
#CFLAGS	= -O -DNDEBUG -DFOAM_RTS $(SYSARG) -DSTO_DEBUG_DISPLAY
#OFLAGS	= -g # -O -DNDEBUG -Wopts=-pg # -g -Wopts=-pg
OFLAGS	=  -Ox -DNDEBUG # -g -Wopts=-pg
#DFLAGS	= -DSTO_DEBUG_DISPLAY -DSTO_CENSUS
DFLAGS =
CFLAGS	= -DFOAM_RTS $(SYSARG) $(DFLAGS) $(OFLAGS)

#
# Environment
#
IncDir	= $(ALDORROOT)\include
LibDir	= $(ALDORROOT)\lib
SRC     = $(PWD)\..\..\..\src
LIBFOAM	= $(LibDir)\libfoam-base.lib

#
# File Lists
#
PORTH0        = $(SRC)\axlport.h $(SRC)\platform.h $(SRC)\cconfig.h \
		$(SRC)\optcfg.h $(SRC)\foamopt.h $(SRC)\compopt.h
STDCH0        = $(SRC)\assert.h0 $(SRC)\ctype.h0 $(SRC)\errno.h0 \
		$(SRC)\float.h0 $(SRC)\limits.h0 $(SRC)\locale.h0 \
		$(SRC)\math.h0 $(SRC)\setjmp.h0 $(SRC)\signal.h0 \
		$(SRC)\stdarg.h0 $(SRC)\stddef.h0 $(SRC)\stdio.h0 \
		$(SRC)\stdlib.h0 $(SRC)\string.h0 $(SRC)\time.h0 \
	        $(SRC)\unistd.h0
OPSYSH0       = $(SRC)\os_cms.c $(SRC)\os_dos.c $(SRC)\os_os2.c \
		$(SRC)\os_unix.c $(SRC)\os_vms.c $(SRC)\os_macs7.c \
		$(SRC)\os_win32.c
FOAMHX        =	$(SRC)\axlgen.h $(SRC)\axlgen0.h $(SRC)\editlevels.h \
		$(SRC)\debug.h $(SRC)\fluid.h $(SRC)\format.h $(SRC)\test.h
FOAMC	      = $(SRC)\stdc.c $(SRC)\cport.c $(SRC)\opsys.c $(SRC)\btree.c \
		$(SRC)\store.c $(SRC)\memclim.c $(SRC)\bigint.c $(SRC)\util.c \
		$(SRC)\foam_c.c $(SRC)\foam_i.c $(SRC)\output.c $(SRC)\table.c \
		$(SRC)\xfloat.c $(SRC)\foamopt.c $(SRC)\compopt.c \
		$(SRC)\dword.c $(SRC)\foam_cfp.c $(SRC)\timer.c

FOAMH         = $(PORTH0) $(STDCH0) $(OPSYSH0) $(FOAMC:.c=.h) $(FOAMHX)
COMMONFILES   = $(FOAMH) $(FOAMC) $(FOAMAS)
OKFILES       = Makefile NMakefile descrip.mms $(COMMONFILES)

OBJECTS       = stdc.obj  cport.obj opsys.obj  \
		btree.obj store.obj bigint.obj \
		util.obj  foam_c.obj foam_i.obj \
		foam_cfp.obj  output.obj \
		table.obj xfloat.obj foamopt.obj \
		dword.obj compopt.obj timer.obj

IncTargs = $(IncDir)\foam_c.h $(IncDir)\optcfg.h $(IncDir)\foamopt.h \
	   $(IncDir)\cconfig.h

#
# Generic rules
#
all: library

library: $(IncTargs) $(COMMONFILES) $(LIBFOAM)

include: $(IncTargs)

$(IncDir)\foam_c.h: $(SRC)\foam_c.h
	$(CP) $(SRC)\foam_c.h $(IncDir)\foam_c.h

$(IncDir)\cconfig.h: $(SRC)\cconfig.h
	$(CP) $(SRC)\cconfig.h $(IncDir)\cconfig.h

$(IncDir)\optcfg.h: $(SRC)\optcfg.h
	$(CP) $(SRC)\optcfg.h $(IncDir)\optcfg.h

$(IncDir)\foamopt.h: $(SRC)\foamopt.h
	$(CP) $(SRC)\foamopt.h $(IncDir)\foamopt.h

#
# Rules to compile the common files
#

# The doranlib dependency ensures that doranlib gets called.
$(LIBFOAM): $(OBJECTS)
	lib -nologo -nodefaultlib -out:$@ $**
	del $**


stdc.obj: $(SRC)\stdc.c   $(PORTH0) $(STDCH0)
	$(CCPROG) $(CFLAGS) -c $(SRC)\stdc.c -Fo$@

cport.obj: $(SRC)\cport.c  $(PORTH0) $(STDCH0)
	$(CCPROG) $(CFLAGS) -c $(SRC)\cport.c -Fo$@

opsys.obj: $(SRC)\opsys.c  $(PORTH0) $(STDCH0) $(OPSYSH0)
	$(CCPROG) $(CFLAGS) -c $(SRC)\opsys.c -Fo$@

btree.obj: $(SRC)\btree.c  $(FOAMH)
	$(CCPROG) $(CFLAGS) -c $(SRC)\btree.c -Fo$@

store.obj: $(SRC)\store.c  $(FOAMH)
	$(CCPROG) $(CFLAGS) -c $(SRC)\store.c -Fo$@

memclim.obj: $(SRC)\memclim.c  $(FOAMH)
	$(CCPROG) $(CFLAGS) -c $(SRC)\memclim.c -Fo$@

bigint.obj: $(SRC)\bigint.c $(FOAMH)
	$(CCPROG) $(CFLAGS) -c $(SRC)\bigint.c -Fo$@

dword.obj: $(SRC)\dword.c $(FOAMH)
	$(CCPROG) $(CFLAGS) -c $(SRC)\dword.c -Fo$@

util.obj: $(SRC)\util.c   $(FOAMH)
	$(CCPROG) $(CFLAGS) -c $(SRC)\util.c -Fo$@

table.obj: $(SRC)\table.c   $(FOAMH)
	$(CCPROG) $(CFLAGS) -c $(SRC)\table.c -Fo$@

xfloat.obj: $(SRC)\xfloat.c   $(FOAMH)
	$(CCPROG) $(CFLAGS) -c $(SRC)\xfloat.c -Fo$@

foam_c.obj: $(SRC)\foam_c.c $(IncTargs)
	$(CCPROG) $(CFLAGS) -c $(SRC)\foam_c.c -Fo$@

foam_cfp.obj: $(SRC)\foam_cfp.c $(IncTargs)
	$(CCPROG) $(CFLAGS) -c $(SRC)\foam_cfp.c -Fo$@

foam_i.obj: $(SRC)\foam_i.c $(IncTargs)
	$(CCPROG) $(CFLAGS) -c $(SRC)\foam_i.c -Fo$@

output.obj: $(SRC)\output.c $(IncTargs)
	$(CCPROG) $(CFLAGS) -c $(SRC)\output.c -Fo$@

foamopt.obj: $(SRC)\foamopt.c $(IncTargs)
	$(CCPROG) $(CFLAGS) -c $(SRC)\foamopt.c -Fo$@

compopt.obj: $(SRC)\compopt.c $(IncTargs)
	$(CCPROG) $(CFLAGS) -c $(SRC)\compopt.c -Fo$@
 
timer.obj: $(SRC)\timer.c $(IncTargs)
	$(CCPROG) $(CFLAGS) -c $(SRC)\timer.c -Fo$@

