################################################################################
#
# Makefile
#
#   Generates
#         mad16.add - wakeup code for OPTI MAD16 (82C928)
#
#@IBM: NAME       DATE        CHANGE
#@IBM: ---------- ----------- ------------------------------------------
#@IBM: Joe Nord   05-Dec-94   Creation, based on wakeup.add -OPTI 82C928/82C928
#@IBM: Joe Nord   17-Jan-95   Ported to Watcom C 10.0
#@IBM: Joe Nord   07-Feb-95   Ported to OS2/DDK build tree
################################################################################

.SUFFIXES:
.SUFFIXES:     .com .sys .exe .obj .mbj .asm .inc .def .lrf .crf .ref \
               .lst .sym .map .c .h .lib .msg .pro .txt

NAME    = mad16
NAMEEXE = qmad16

#
# Compiler and Tools location
#

TOP=..\..\..\..
H=$(TOP)\H
IBMH=$(TOP)\IBMH
IBMC=$(TOP)\IBMC
TOOLS=$(TOP)\TOOLS
LIB=$(TOP)\LIB
INC=$(TOP)\INC

!include        "$(H)\version.mak"

!if "$(_VENDOR)" == "IBM"
DISKH= ..\..\dasd\diskh
DHCALLS_LIB = ..\..\dasd\devhelp\dhcalls.lib
RMCALLS_LIB = ..\..\resource\rmcalls\rmcalls.lib
RMCALLS_INC = ..\..\resource\rsm_h
WATCOM=$(TOP)\WATCOM
!else
DISKH=
DHCALLS_LIB = $(LIB)\DHCALLS.LIB
RMCALLS_LIB = $(LIB)\RMCALLS.LIB
RMCALLS_INC =
WATCOM=\WATCOM
!endif
WH=$(WATCOM)\h


#
# Set the environmental variables for compiling
#
!if [set PATH=$(TOOLS);$(WATCOM)\BINP;$(WATCOM)\BINB;$(IBMC)\CBIN;%PATH%] || \
    [set LIB=$(LIB);$(WATCOM)\LIB386;$(IBMC)\CLIB                         || \
    [set INCLUDE=]
!endif


!ifdef DEBUG
DEBUG=-DDEBUG
# Watcom debug options
# C386DEBUG=-d3 -hc

# IBM C Set/++ debug options
C386DEBUG=/Ti+ /O-
LNK_DEBUG=/CO
!endif

#
# Options for C compiler, Watcom 16-bit
#  -bt=os2   = Build target OS is OS/2
#  -mc       = Memory model compact (one code, many data)
#  -3        = Enable use of 80386 instructions
#  -d1       = Include line number info in object
#              (necessary to produce assembler listing)
#  -d_PDD_   = Identify code as for PDD (for code shared with VDD)
#  -o        = Optimization - i = enable inline intrensic functions
#                             r = optimize for 80486 and pentium pipes
#                             s = space is preferred to time
#  -s        = Omit stack size checking from start of each function
#  -zl       = Place no library references into objects
#  -wx       = Warning level set to maximum (vs 1..4)
#  -zfp      = Prevent use of FS selector
#  -zgp      = Prevent use of GS selector
#  -zq       = Operate quietly
#  -zu       = Do not assume that SS contains segment of DGROUP
#
CC=wcc
CFLAGS=-mc -3 -bt=os2 -d1 -d_PDD_ -oirs -s -wx -zl -zfp -zgp -zq -zu $(DEBUG)
CINC=-i$(WH);$(WH)\SYS;$(H);$(DISKH);$(RMCALLS_INC)
CINCI=-I$(WH) -I$(WH)\SYS -I$(H) -I$(DISKH) -I$(RMCALLS_INC)

#CC386=wcc386
#CFLAGS386=-bt=os2 -d1 -ors -s -wx -zl -zfp -zgp -zq $(DEBUG) $(C386DEBUG)
#CINC386=-i$(WH);$(WH)\SYS;$(IBMH);$(H)

CC386=icc
CFLAGS386=-c -Ss -Q+ -O+ $(C386DEBUG)
CINC386=-I$(IBMC)\CINCLUDE -I$(IBMC)\CINCLUDE\SYS -I$(TOP)\IBMH -I$(TOP)\H


# Definitions for assembler, Watcom WASM
#  -bt=os2   = Build target OS is OS/2
#  -d1       = Include line number info in object
#              (necessary to produce assembler listing)
#  -i        = Include list
#  -zq       = Operate quietly
#
ASM=wasm
AFLAGS=-bt=os2 -d1 -zq $(DEBUG)
AINC=-i$(INC)


# Definitions for linker
#  /B    = Suppress prompts for .LIB and .OBJ
#  /NOE  = Prevents searching extended dictionaries in libraray
#  /NOD  = No default libraries
#
LINK=link
LFLAGS=/BATCH /NOE /MAP /NOD
LIBS=DOSCALLS+OS2286+$(DHCALLS_LIB)

LINK386=link386
LFLAGS386=/BATCH /NOE /MAP /NOD $(LNK_DEBUG) /packcode /packdata /exepack
#LIBS386=OS2386+$(WATCOM)\LIB386\OS2\CLIB3R
LIBS386=$(IBMC)\clib\DDE4SBS.LIB $(LIB)\OS2386.LIB

# Inference rules
.c.obj:
     $(CC) $(CFLAGS) $(CINC) $*.c
     wdisasm -l -s $*

.asm.obj:
     $(ASM) $(AFLAGS) $(AINC) $*.asm
     wdisasm -l -s $*

# Object file list
PERMOBJS = SEGS.obj HEADER.obj DATA.obj STRATEGY.obj IOCTL.obj \
           UTILA.obj IDC_PDD.obj IDC_VDD.obj \
           MADUTIL.obj WSSUTIL.obj UTIL.obj TRACE.obj
INITOBJS = INIT.obj MAD16.obj WSS.obj SNDBLAST.obj   \
           DDSTRING.obj DDPRINTF.obj

EXEOBJS = $(NAMEEXE).obj

all: sys exe

##################################
# Target descriptions
##################################

sys: $(NAME).sys

exe: $(NAMEEXE).exe

$(NAME).sys: $(PERMOBJS) $(INITOBJS) makefile $(NAME).lrf $(NAME).def
    $(LINK) $(LFLAGS) @$(NAME).lrf
    mapsym $*.map

$(NAMEEXE).exe: $(EXEOBJS) makefile $*.lrf $*.def
    $(LINK386) $(LFLAGS386) @$*.lrf
    mapsym $*.map

$(EXEOBJS):
    $(CC386) $(CFLAGS386) $(CINC386) $*.c
    wdisasm -l -s $*


$(NAME).def: makefile $(H)\version.mak
        @echo Creating file <<$(@B).def
LIBRARY $(NAME)
DESCRIPTION '$(FILEVER) OPTi/IBM MAD16 (82C928/82C929) Device Driver'
PROTMODE
DATA PRELOAD
CODE PRELOAD
IMPORTS
   DOSIODELAYCNT=DOSCALLS.427
<<keep

$(NAMEEXE).def: makefile
        @echo Creating file <<$(@B).def
NAME $(NAMEEXE) WINDOWCOMPAT
DESCRIPTION '$(FILEVER)'
PROTMODE
STACKSIZE 16384
HEAPSIZE 0
<<keep

$(NAME).lrf: makefile
        @echo Creating file <<$(@B).lrf
$(PERMOBJS) +
$(INITOBJS)
$(NAME).add
$(NAME).map
$(LIBS)
$(NAME).def;
<<keep

$(NAMEEXE).lrf: makefile
        @echo Creating file <<$(@B).lrf
$(EXEOBJS)
$(NAMEEXE).exe
$(NAMEEXE).map
$(LIBS386)
$(NAMEEXE).def;
<<keep


