#
#       constructs mmsystem DLL
#
#   Defines:
#       DEBUG   - Enable debug code
#       STRICT  - Build a version with STRICT enabled
#

!include ..\makefile.inc
NAME    =mmsystem
EXT     =dll
OBJFIRST=$Zlibentry.obj
OBJ1    =$Zinit.obj $Ztime.obj $Zjoy.obj $Zsound.obj $Zwave.obj
OBJ2    =$Zmidi.obj $Zmci.obj $Zmcisys.obj $Zmciparse.obj $Zdrvproc.obj $ZPlaywav.obj
OBJ3    =$Zmmwnd.obj $Zauxout.obj $Zdebug.obj $Zdrvr31.obj $Ztaska.obj $Zthunks.obj
OBJ4    =$Ztask.obj $Zbwinexec.obj $Zcomm.obj $Zstack.obj $Zheap.obj $Zdpmipage.obj
OBJ5    =$Zmmio.obj $Zmmioriff.obj $Zhmemcpy.obj $Zdosa.obj $Zisr.obj $Zmixer.obj

OBJ     =$(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4) $(OBJ5) $(OBJD)
LIBS    =..\lib\$(ALT_PROJECT)\libw ..\lib\mdllcew
INCS    = -I. -I..\inc -I..\..\inc

OPT     = -Oxws

INCSX   =..\inc;.\rinc;..\..\inc;$(SDK_INC_PATH)

#
#   build a retail build
#
!if $(FREEBUILD)

#CLOPT   =-I..\inc -I.\rinc -I..\..\inc
CLOPT   =
MASMOPT =-I..\inc -I..\..\inc
LINKOPT =
RC      =rc16 -i..\inc -i.\rinc
OBJD    =

MMDEBUG =

#
#   build a full debug build
#
!else

CDEBUG  =-Zd -Odi
ADEBUG  =-Zd
LDEBUG  =/LI

#CLOPT   =$(CDEBUG) -DDEBUG -I..\inc -I.\rinc -I..\..\inc
CLOPT   =$(CDEBUG) -DDEBUG
MASMOPT =$(ADEBUG) -DDEBUG -I..\inc -I..\..\inc
LINKOPT =$(LDEBUG)
RC      =rc16 -DDEBUG -i..\inc -i.\rinc
OBJD    =$Zmmsex.obj
MMDEBUG = DEBUG=1

!endif

!if "$(PROCESSOR_ARCHITECTURE)" == "x86"
Z=$(ALT_PROJECT)\$(_OBJ_DIR)\i386^\
!elseif "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
Z=$(ALT_PROJECT)\$(_OBJ_DIR)\alpha^\
!endif

.SUFFIXES: .asm


!if "$(STRICT)" == "YES"
TYPES   =-DSTRICT
!else
TYPES   =
!endif

CLOPT  =$(CLOPT) $(DBCS_FLAGS)
MASMOPT=$(MASMOPT) $(DBCS_FLAGS)

#
# NOTE
#
# this code is compiled *without* windows prolog/epilog (no -Gw)
# thus all exported routines, must have _loadds
#

CC      = cl16 -c -Alnw -G2s -Zp -W3 $(CLOPT) $(OPT) $(TYPES)
ASM     = masm -Mx -t -D?QUIET $(MASMOPT)
LINK    = $(LINK16) /NOD/NOE/MAP/ALIGN:16 $(LINKOPT)

.c{$Z}.obj:
   $(CC) -Fo$*.obj $(@B).c

.asm{$Z}.obj:
   $(ASM) -DSEGNAME=_TEXT $(*F).asm, $*.obj;


###################################

all:   $Z $Z$(NAME).$(EXT) $Z$(NAME).sym mmtask.tsk

$Z:
    if not exist $Z md $Z
    set include=$(INCSX)

$Z$(NAME).$(EXT): $(OBJFIRST) $(OBJ) $(NAME).def $Z$(NAME).res mmtask.tsk
        $(LINK) @<<
$(OBJFIRST) +
$(OBJ1)+
$(OBJ2)+
$(OBJ3)+
$(OBJ4)+
$(OBJ5)+
$(OBJD),
$Z$(NAME).$(EXT),
$Z$(NAME),
$(LIBS),
$(NAME).def
<<
        $(RC) -t $Z$(NAME).res $Z$(NAME).$(EXT)
        mapsym /n -o $*.sym $*.map
        -binplace -o $(ALT_PROJECT_TARGET) $Zmmsystem.dll $Zmmsystem.map $Zmmsystem.sym mmtask.tsk mmtask.map mmtask.sym

RES_DIR =.\messages\usa

$Z$(NAME).rc: $(RES_DIR)\$(NAME).rc
        copy $(RES_DIR)\$(NAME).rc $Z

$Zmci.rc: $(RES_DIR)\mci.rc
        copy $(RES_DIR)\mci.rc $Z

$Z$(NAME).rcv: $(RES_DIR)\$(NAME).rcv ..\inc\common.ver
        copy $(RES_DIR)\$(NAME).rcv $Z
        touch $@

$Z$(NAME).res: $Z$(NAME).rc $Zmci.rc ..\inc\$(NAME).h $Z$(NAME).rcv mmsysi.h ..\inc\mmddk.h
        $(RC) -r -fo$Z$(NAME).res $Z$(NAME).rc

############## mmtask #############

mmtask.tsk: mmtask\mmtask.asm mmtask\makefile mmtask\mmtask.def mmtask\mmtask.h
        cd mmtask
        $(MAKE) ALT_PROJECT=$(ALT_PROJECT) $(MMDEBUG)
        cd ..

############## includes ##############

#..\inc\$(NAME).h ..\inc\$(NAME).inc ..\inc\mmddk.h ..\inc\mmddk.inc ..\inc\mci.rc : $$(@F)
#       @copy $(@F) $@

############## clean ##############

clean: cleanup all

cleanup:
        if exist $Z$(NAME).$(EXT) del $Z$(NAME).$(EXT)
        if exist $Z$(NAME).res    del $Z$(NAME).res
        if exist $Z*.sym          del $Z*.sym
        if exist $Z*.map          del $Z*.map
        if exist $Z*.lib          del $Z*.lib
        if exist $Z*.cod          del $Z*.cod
        if exist $Z*.obj          del $Z*.obj
        if exist $Z*.rcv          del $Z*.rcv
        if exist $Z*.rc           del $Z*.rc
        if exist *.tsk          del *.tsk
        cd mmtask
        $(MAKE) cleanup
        cd ..

########### segmentation ##########
#
#   INIT  is the init/exit time segment
#   FIXED is the interupt time fixed segment
#   _TEXT is the non-resident "random" segment (was NRES)

SEGC = $(CC) -NT CSEG -Fo$*.obj $(@B).c
SEGA = $(ASM) -DSEGNAME=CSEG  $(*F).asm, $*.obj;

$Zdebug.obj       : ; $(SEGA:CSEG=FIX)
$Zinit.obj        : ; $(SEGC:CSEG=INIT)
$Zlibentry.obj    : ; $(SEGA:CSEG=INIT)
$Zmmwnd.obj       : ; $(SEGC:CSEG=INIT)
$Zplaywav.obj     : ; $(SEGC:CSEG=WAVE)
$Zsound.obj       : ; $(SEGC:CSEG=WAVE)
$Zwave.obj        : ; $(SEGC:CSEG=WAVE)
$Zmidi.obj        : ; $(SEGC:CSEG=MIDI)
$Zdpmipage.obj    : ; $(SEGA:CSEG=_TEXT)
$Zmci.obj         : ; $(SEGC:CSEG=MCI)
$Zmcisys.obj      : ; $(SEGC:CSEG=MCI)
$Zmciparse.obj    : ; $(SEGC:CSEG=MCI)
$Zdosa.obj        : ; $(SEGA:CSEG=MCI)
$Zheap.obj        : ; $(SEGA:CSEG=MCI)
$Ztask.obj        : ; $(SEGC:CSEG=_TEXT)
$Zdrvproc.obj     : ; $(SEGC:CSEG=_TEXT)
$Ztaska.obj       : ; $(SEGA:CSEG=_TEXT)
$Zjoy.obj         : ; $(SEGC:CSEG=RARE)
$Ztime.obj        : ; $(SEGC:CSEG=FIX)
$Zbwinexec.obj    : ; $(SEGA:CSEG=_TEXT)
$Zauxout.obj      : ; $(SEGC:CSEG=RARE)
$Zdrvr31.obj      : ; $(SEGA:CSEG=_TEXT)
$Zcomm.obj        : ; $(SEGA:CSEG=FIX)
$Zstack.obj       : ; $(SEGA:CSEG=FIX)
$Zhmemcpy.obj     : ; $(SEGA:CSEG=MMIO)
$Zmmio.obj        : ; $(SEGC:CSEG=MMIO)
$Zmmioriff.obj    : ; $(SEGC:CSEG=MMIO)
$Zmmsex.obj       : ; $(SEGC:CSEG=RARE)
$Zmixer.obj       : ; $(SEGC:CSEG=MIXER)

############# depend ##############

depend:
        mv makefile makefile.old
        sed "/^# START Dependencies/,/^# END Dependencies/D" makefile.old > makefile
        -del makefile.old
        echo # START Dependencies >> makefile
        includes -l *.c *.asm >> makefile
        echo # END Dependencies >> makefile

##################################################################
# START Dependencies
$Zauxout.obj: auxout.c ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h

$Zdpmipage.obj: dpmipage.asm int31.inc

$Zcomm.obj: comm.asm

$Zbwinexec.obj: bwinexec.asm

$Zdosa.obj: dosa.asm

$Zinit.obj: init.c drvr.h ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h

$Zhmemcpy.obj: hmemcpy.asm

$Zheap.obj: heap.asm

$Zjoy.obj: joy.c drvr.h ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h

$Zmci.obj: mci.c ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h

$Zlibentry.obj: libentry.asm

$Zmciparse.obj: mciparse.c ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h

$Zmcisys.obj: mcisys.c ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h

$Zmidi.obj: midi.c ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h

$Zmmio.obj: mmio.c mmioi.h ..\inc\mmsystem.h mmsysi.h

$Zmmioriff.obj: mmioriff.c mmioi.h ..\inc\mmsystem.h

$Zmmwnd.obj: mmwnd.c mmsysi.h ..\inc\mmsystem.h

$Zplaywav.obj: playwav.c mmsysi.h ..\inc\mmsystem.h playwav.h

$Zsound.obj: sound.c mmsysi.h ..\inc\mmsystem.h playwav.h

$Ztask.obj: task.c ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h mmtask\mmtask.h

$Ztaska.obj: taska.asm ..\inc\mmsystem.inc

$Zstack.obj: stack.asm ..\inc\mmddk.inc ..\inc\mmsystem.inc

$Zisr.obj: isr.asm ..\inc\mmddk.inc ..\inc\mmsystem.inc

$Ztime.obj: time.c drvr.h ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h

$Zwave.obj: wave.c ..\inc\mmddk.h mmsysi.h ..\inc\mmsystem.h

$Zdebug.obj: debug.asm ..\inc\mmddk.inc ..\inc\mmsystem.inc

$Zdrvproc.obj: drvproc.c mmsysi.h ..\inc\mmsystem.h mmioi.h

# END Dependencies
