# MiniDriver 2 makefile

# basic compiler, linker program settings
# path to genplib.h, new ddi.h, and new pmddi.h


!include "..\h\version.mak"

TOP=..\..\..

TOOLSPATH = $(TOP)\ibmc\Cbin;
H386      = $(TOP)\ibmc\Cinclude
LIB386    = $(TOP)\ibmc\Clib
DPATH     = $(TOP)\IBMC\CHELP;
IH        = ..\h
IBMH      = ..\ibmh
INC       = ..\inc
LIB       = ..\lib

# Lock in the env for recursive makes
!if [set INCLUDE=$(IBMH);$(H386);$(INC);$(IH)] || \
    [set LIB=$(LIB);$(LIB386);%LIB%] ||  \
    [set PATH=$(TOOLSPATH);%PATH%] || \
    [set IPFC=$(TOOLSPATH)] || \
    [set DPATH=$(DPATH)] || \
    [set LANG=]
!endif

H = driver.h def.h funcs.h
CCBASE   = icc /c /Gd- /Ss /Gm+ /Q+ /Kb+ -I..\genplib -I..\ibmh -I..\h
LINKBASE = link386 /nod /map /noe
DRVLIBSBASE  = ..\..\..\..\IBMC\CLIB\DDE4NBS.LIB ..\..\LIB\OS2386.LIB


# retail version settings
BIN     = retail
CC      = $(CCBASE) /DNDEBUG /Fo$*.obj /Ge-
LINK    = $(LINKBASE)
DRVLIBS = $(DRVLIBSBASE) ..\..\GENPLIB\RETAIL\GENPLIB


# overrides for debug kernel version
!ifdef DEBUG
BIN     = debug
CC      = $(CCBASE) /Fo$*.obj /Ge- /O- /DKDB
LINK    = $(LINKBASE)
DRVLIBS = $(DRVLIBSBASE) ..\..\genplib\retail\genplib
!endif


# overrides for IPMD  version
!ifdef IPMD
BIN     = ipmd
CC      = $(CCBASE) /Ti+ /Fo$*.obj /Ge- /O- /DIPMD
LINK    = $(LINKBASE) /DEBUG
DRVLIBS = $(DRVLIBSBASE) ..\..\genplib\retail\genplib
!endif


OBJ = \
$(BIN)\assert.obj    \
$(BIN)\caps.obj      \
$(BIN)\dlg.obj       \
$(BIN)\driver.obj    \
$(BIN)\enable.obj    \
$(BIN)\escape.obj    \
$(BIN)\handler.obj   \
$(BIN)\helper.obj    \
$(BIN)\initterm.obj  \
$(BIN)\newframe.obj



#-----------------------------------------------------------------------
# pseudo targets

all: $(BIN)\mdriver.drv

debug:
  nmake DEBUG=1

retail:
  nmake

ipmd:
  nmake IPMD=1

zip:
  nmake source.zip



#-----------------------------------------------------------------------
# make target directory for obj, drv, map, sym
!if [ mkdir $(BIN) 2>nul ]
!endif



#-----------------------------------------------------------------------
# implicit build rules: to get a listing file of driver.c enter: nmake driver.lst
# implicit build rules: to get a preprocessed outfile enter: nmake driver.i

.c.lst:
        $(CCBASE) /La+e+s+j+ $*.c

.c.i:
        $(CCBASE) /P+ $*.c

.c.asm:
        $(CCBASE) /Fa+ $*.c

.c{$(BIN)}.obj:
    $(CC) $(@B).c



#-----------------------------------------------------------------------
# write the DEF file; $(FILEVER) is defined in ..\h\version.mak

driver.def: makefile
  @echo Updating <<driver.def
LIBRARY MDRIVER INITINSTANCE TERMINSTANCE
DESCRIPTION '$(FILEVER) MiniDriver2 Device Driver Sample'
PROTMODE
DATA SINGLE READWRITE LOADONCALL
CODE LOADONCALL

SEGMENTS
  DDE4_DATA32 CLASS  'DATA' NONSHARED READWRITE
  global      CLASS  'DATA' SHARED
  perprocess  CLASS  'DATA' NONSHARED

EXPORTS
  OS2_PM_DRV_DEVMODE
  OS2_PM_DRV_DEVICENAMES
  OS2_PM_DRV_ENABLE
  JobPropertiesDlgProc

IMPORTS
  DebugOutput         = PMWIN.955
  Debug32Output       = PMWIN.955
  DosQueryModFromEIP  = DOSCALL1.360
<<KEEP





#-----------------------------------------------------------------------
# build a linker response file

$(BIN)\MDRIVER.RSP: makefile setea.cmd
  @echo Updating linker response file <<$(BIN)\MDRIVER.RSP
assert.obj    +
caps.obj      +
dlg.obj       +
driver.obj    +
enable.obj    +
escape.obj    +
handler.obj   +
helper.obj    +
initterm.obj  +
newframe.obj
mdriver.drv
mdriver.map
$(DRVLIBS)
..\driver.def
<<KEEP


#-----------------------------------------------------------------------
# link the drv

$(BIN)\MDRIVER.DRV: $(OBJ) driver.res driver.def  $(BIN)\MDRIVER.RSP SETEA.CMD
  cd $(BIN)
  $(LINK) @MDRIVER.RSP
  mapsym mdriver
  rc ..\driver.res mdriver.drv
  ea -e .version=$(FILEVER) mdriver.drv
  ..\setea mdriver
  cd ..




#-----------------------------------------------------------------------
# rc file

driver.res: driver.rc def.h driver.dlg
  rc -r -I ..\IBMH $*.rc


#-----------------------------------------------------------------------
# C sources compile via rule


$(BIN)\ASSERT.OBJ:          ASSERT.C $(H)

$(BIN)\CAPS.OBJ:            CAPS.C $(H)

$(BIN)\DLG.OBJ:             DLG.C $(H)

$(BIN)\DRIVER.OBJ:          DRIVER.C $(H)

$(BIN)\ENABLE.OBJ:          ENABLE.C $(H)

$(BIN)\ESCAPE.OBJ:          ESCAPE.C $(H)

$(BIN)\HANDLER.OBJ:         HANDLER.C $(H)

$(BIN)\HELPER.OBJ:          HELPER.C $(H)

$(BIN)\INITTERM.OBJ:        INITTERM.C $(H)

$(BIN)\NEWFRAME.OBJ:        NEWFRAME.C $(H)



#-----------------------------------------------------------------------
# zip it
source.zip: *.c *.h *.rc *.def *.dlg *.cmd readme makefile
  if exist source.zip erase source.zip
  pkzip2 source.zip $**

