# Build runtime library for Dylan under Win32

APPVER	 = 4.0
TARGETOS = BOTH

OPTIMIZEDDEBUG = 1

!if defined(BuildArea)
INCLUDEDEST      = $(BuildArea)\include
LIBDEST          = $(BuildArea)\lib
BINDEST          = $(BuildArea)\bin
!else
INCLUDEDEST      = $(OPEN_DYLAN_USER_INSTALL)\include
LIBDEST          = $(OPEN_DYLAN_USER_INSTALL)\lib
BINDEST          = $(OPEN_DYLAN_USER_INSTALL)\bin
!endif

!include <win32.mak>

# !if !defined(NODEBUG) && !defined(PROFILE) && !defined(TUNE)
# cdebug = $(cdebug) /Zi /Fd$(INCLUDEDEST)\system.pdb
# !endif

!if defined(OPTIMIZEDDEBUG) && ($(OPTIMIZEDDEBUG) > 0) && !defined(NODEBUG) && !defined(PROFILE) && !defined(TUNE)
cdebug = /G5 /O2 /Ob2 /Oy- /Oi /Z7 /DNDEBUG
!endif

# For newer versions of Win32.Mak, turn off extraneous definition of _DEBUG
!if defined(hcvars)
cvarsmt = $(noansi) -D_MT -MT
!endif

!if defined(gen0freq)
mmtuneflags = /DTUNE_GEN0_FREQ=$(gen0freq)
!else
mmtuneflags = 
!endif

MPSKIT	 = C:\fundev\mps-kit\code

CC	 = $(cc)
LINKLIB	 = $(implib) /nologo /out:
CFLAGS	 = $(cflags) $(cvarsmt) $(cdebug) /I$(INCLUDEDEST) /I. /I.. /I$(MPSKIT) $(OPEN_DYLAN_C_FLAGS) $(mmtuneflags)
HEAPOBJS = heap-display.obj heap-utils.obj heap-trail.obj heap-order1.obj heap-order2.obj heap-table.obj
OBJS	 = collector.obj $(HEAPOBJS) runtime.obj win32-threads-primitives.obj spy-interfaces.obj
LIBFILE	 = pentium-run-time.lib
USEROBJ	 = dylan-support.obj
USERLIB	 = dylan-support.lib
MINCRT   = minvcrt.lib

RUNTIMELIBDEST	 = $(LIBDEST)\pentium-run-time.lib
MMDWDEST	 = $(LIBDEST)\mmdw.lib
PLINTHDEST	 = $(LIBDEST)\mpsplinth.lib
MINCRTDEST	 = $(LIBDEST)\minvcrt.lib
BOEHMGCDEST	 = $(BINDEST)\gc.dll

BUFFOBJS	 = buffalo-collector.obj $(HEAPOBJS) runtime.obj win32-threads-primitives.obj spy-interfaces.obj
BUFFLIBFILE	 = buffalo-pentium-run-time.lib
BUFFMMDW         = buffalo-mmdw.lib

NOWEAKOBJS	 = no-weakness-collector.obj $(HEAPOBJS) runtime.obj win32-threads-primitives.obj spy-interfaces.obj
NOWEAKLIBFILE	 = no-weakness-pentium-run-time.lib

BOEHMOBJS	 = boehm-collector.obj $(HEAPOBJS) runtime.obj win32-threads-primitives.obj spy-interfaces.obj
BOEHMLIBFILE	 = boehm-pentium-run-time.lib

RELEASEMMDW      = $(MPSKIT)\w3i3mv\hi\mmdw.lib
RELEASEPLINTH	 = $(MPSKIT)\w3i3mv\hi\mpsplan.lib

DEBUGMMDW        = debug-mmdw.lib
DEBUGPLINTH	 = debug-mpsplan.lib

SYMBOLICMMDW     = symbolic-mmdw.lib
SYMBOLICPLINTH	 = mpsplan.lib

PLINTHOBJS       = plinth.obj mpsiowin32.obj
DYLANPLINTH      = dylan-plinth.lib

collector.obj: ..\collector.c
	$(CC) $(CFLAGS) /c ..\collector.c

no-weakness-collector.obj: ..\no-weakness-collector.c ..\collector.c
	$(CC) $(CFLAGS) /c ..\no-weakness-collector.c

boehm-collector.obj:	..\boehm-collector.c ..\collector.c
	$(CC) $(CFLAGS) /c ..\boehm-collector.c

!if defined(fullcrt)
$(MINCRT): 
!else
$(MINCRT): minvcrt.def rtsyms.obj
	$(LINKLIB)$(MINCRT) /def:minvcrt.def /machine:ix86
	$(LINKLIB)$(MINCRT) $(MINCRT) rtsyms.obj
!endif

rtsyms.obj: rtsyms.s
	as -n -o rtsyms.obj rtsyms.s

$(DYLANPLINTH): $(PLINTHOBJS)
	$(LINKLIB)$(DYLANPLINTH) $(PLINTHOBJS)

$(LIBFILE): $(OBJS)
	$(LINKLIB)$(LIBFILE) $(OBJS)

$(BUFFLIBFILE): $(BUFFOBJS)
	$(LINKLIB)$(BUFFLIBFILE) $(BUFFOBJS)

$(NOWEAKLIBFILE): $(NOWEAKOBJS)
	$(LINKLIB)$(NOWEAKLIBFILE) $(NOWEAKOBJS)

$(BOEHMLIBFILE): $(BOEHMOBJS)
	$(LINKLIB)$(BOEHMLIBFILE) $(BOEHMOBJS) gc.lib

$(USERLIB): $(USEROBJ)
	$(LINKLIB)$(USERLIB) $(USEROBJ)

ensure-dirs:
	if not exist $(LIBDEST) mkdir $(LIBDEST)
	if not exist $(BINDEST) mkdir $(BINDEST)

install-build:
	if not exist $(LIBDEST)\mini-jambase.jam copy ..\mini-jambase.jam $(LIBDEST)
	if not exist $(LIBDEST)\x86-win32-build.jam copy x86-win32-vc6-build.jam $(LIBDEST)\x86-win32-build.jam
	if not exist $(LIBDEST)\x86-win32-vc6-build.jam copy x86-win32-vc6-build.jam $(LIBDEST)
	if not exist $(LIBDEST)\x86-win32-vc7-build.jam copy x86-win32-vc7-build.jam $(LIBDEST)
	if not exist $(LIBDEST)\x86-win32-pellesc-build.jam copy x86-win32-pellesc-build.jam $(LIBDEST)
	if not exist $(LIBDEST)\dylan-support.obj copy dylan-support.obj $(LIBDEST)
	if not exist $(LIBDEST)\dylanpe.script copy dylanpe.script $(LIBDEST)
	if not exist $(BINDEST)\make-reloc.exe copy make-reloc.exe $(BINDEST)

install-userlib: $(USERLIB)
	pushd $(LIBDEST) & (del /q /f $(USERLIB)) & popd
	copy $(USERLIB) $(LIBDEST)


install-runtime: $(LIBFILE)
	pushd $(LIBDEST) & (del /q /f $(LIBFILE)) & popd
	copy $(LIBFILE) $(LIBDEST)

install-noweak-runtime: $(NOWEAKLIBFILE)
	if exist $(RUNTIMELIBDEST) del /q /f $(RUNTIMELIBDEST)
	copy $(NOWEAKLIBFILE) $(RUNTIMELIBDEST)

install-boehm-runtime: $(BOEHMLIBFILE)
	if exist $(RUNTIMELIBDEST) del /q /f $(RUNTIMELIBDEST)
	copy $(BOEHMLIBFILE) $(RUNTIMELIBDEST)
	copy gc.dll $(BOEHMGCDEST)

install-buffalo-runtime: $(BUFFLIBFILE)
	if exist $(RUNTIMELIBDEST) del /q /f $(RUNTIMELIBDEST)
	copy $(BUFFLIBFILE) $(RUNTIMELIBDEST)


install-dylan-plinth: $(DYLANPLINTH)
	if exist $(PLINTHDEST) del /q /f $(PLINTHDEST)
	copy $(DYLANPLINTH) $(PLINTHDEST)

install-ansi-plinth: $(SYMBOLICPLINTH)
	if exist $(PLINTHDEST) del /q /f $(PLINTHDEST)
	copy $(SYMBOLICPLINTH) $(PLINTHDEST)

install-debug-ansi-plinth: $(DEBUGPLINTH)
	if exist $(PLINTHDEST) del /q /f $(PLINTHDEST)
	copy $(DEBUGPLINTH) $(PLINTHDEST)

install-plinth: install-dylan-plinth



!if defined(fullcrt)
install-mincrt:
!else
install-mincrt: $(MINCRT)
	if exist $(MINCRTDEST) del /q /f $(MINCRTDEST)
	copy $(MINCRT) $(MINCRTDEST)
!endif


install-mmdw: 
	if exist $(MMDWDEST) del /q /f $(MMDWDEST)
	copy $(RELEASEMMDW) $(MMDWDEST)

install-symbolic-mmdw: $(SYMBOLICMMDW)
	if exist $(MMDWDEST) del /q /f $(MMDWDEST)
	copy $(SYMBOLICMMDW) $(MMDWDEST)

install-debug-mmdw: $(DEBUGMMDW)
	if exist $(MMDWDEST) del /q /f $(MMDWDEST)
	copy $(DEBUGMMDW) $(MMDWDEST)

install-buffalo-mmdw: $(BUFFMMDW)
	if exist $(MMDWDEST) del /q /f $(MMDWDEST)
	copy $(BUFFMMDW) $(MMDWDEST)


install-common-libs: ensure-dirs install-plinth install-userlib install-mincrt


install-stripped: ensure-dirs install-mmdw install-runtime install-common-libs

install-debug: ensure-dirs install-debug-mmdw install-runtime install-common-libs

install-symbolic: ensure-dirs install-symbolic-mmdw install-runtime install-common-libs

install-noweak: ensure-dirs install-mmdw install-noweak-runtime install-common-libs

install-noweak-debug: ensure-dirs install-debug-mmdw install-noweak-runtime install-common-libs

install-noweak-symbolic: ensure-dirs install-symbolic-mmdw install-noweak-runtime install-common-libs

install-boehm: ensure-dirs install-mmdw install-boehm-runtime install-common-libs

install-boehm-debug: ensure-dirs install-debug-mmdw install-boehm-runtime install-common-libs

install-boehm-symbolic: ensure-dirs install-symbolic-mmdw install-boehm-runtime install-common-libs

install-buffalo: ensure-dirs install-buffalo-mmdw install-buffalo-runtime install-userlib


install: ensure-dirs install-stripped install-build

# Only delete the products that should be built by this makefile.
# (The files runtime.obj & dylan-support.obj are checked out from HOPE)
clean:
	pushd . & (del /f /q *collector.obj $(HEAPOBJS) win32-threads-primitives.obj spy-interfaces.obj) & popd
        pushd . & (del /f /q *pentium-run-time.lib $(USERLIB)) & popd
        pushd . & (del /f /q $(MINCRT) rtsyms.obj) & popd
        pushd . & (del /f /q $(DYLANPLINTH) $(PLINTHOBJS)) & popd



syntax highlighted by Code2HTML, v. 0.9.1