#***********************************************************************
# The makefile for the IBMVGA32
#
#       IBM Confidential
#
#       Copyright (c) IBM Corporation 1987, 1989, 1991
#
#       All Rights Reserved
#
#*****************************************************************************

#***********************************************************************
#  Dot directive definition area (usually just suffixes)
#***********************************************************************

.SUFFIXES: .c .asm .dec .h .inc .mac .rc .res .obj .exe .def

#***********************************************************************
# Location of the Compilers (plus include and lib files) and other Tools,
# relative to the specified base directory.
#***********************************************************************

BASEDIR    = ..\..\..

H         = $(BASEDIR)\h
H386      = $(BASEDIR)\ibmc\cinclude
HGRE      = $(BASEDIR)\hgre
HIBM      = $(BASEDIR)\ibmh
INC       = $(BASEDIR)\inc32
INCENG    = $(BASEDIR)\src\pmgre32
INCGRE    = $(BASEDIR)\incgre
VGAINC    = ..\vgainc
FONTDIR   = $(BASEDIR)\src\fonts
HRC       = ..\$(HIBM)

LIB       = $(BASEDIR)\lib
LIB386    = $(BASEDIR)\ibmc\clib
LIBGRE    = $(BASEDIR)\libgre

LINKLIBS  = OS2386p.LIB OS2386.LIB
TOOLSPATH = $(BASEDIR)\..\ibmc\cbin;$(BASEDIR)\..\masm60\binp;$(BASEDIR)\..\tools;

#*****************************************************************************
# Project Macro definitions                                                          *
#*****************************************************************************

#!IFDEF SEAMLESS                 We will always build seamless
#SDEF        = S
#!ELSE
#SDEF        =
#!ENDIF

DEKKODIR    = DEKKO

!IFDEF DEBUG
PROJ        = IBMVGAD           # Project name
PROJDEF     = IBMVGADS
!ELSE
!IFDEF DEKKO
PROJ        = IBMVGAK           # Project name
PROJDEF     = IBMVGARS          # link dekko with retail def
!ELSE
PROJ        = IBMVGAR           # Project name
PROJDEF     = IBMVGARS
!ENDIF
!ENDIF

#PROJ2  = SVGA

#*****************************************************************************
# Build files and Directories
#*****************************************************************************

PROJDIR     = $(MAKEDIR)             # Project Directory

!IFDEF DEBUG
OBJDIR      = DEBUG                  # Directory to put object files
!ELSE
!IFDEF RETAIL
OBJDIR      = RETAIL                 # Directory to put object files
!ELSE
OBJDIR      = DEKKO                  # Directory to put object files
!ENDIF
!ENDIF

#*****************************************************************************
# Assembler options
#*****************************************************************************
AS     = ML                         # Assembler being used
# /c  Do not link.
# /Cp Preserve case of all user identifiers.
# /Zi Generates Codeview info.
# /Sg Turns on listing of Assembler generated code such as .IF, .WHILE...
#     /Sg is ignored unless the /Fl option is specified.
# /Fl Generates listing (.LST) file.

AFLAGS =    /c /Cp /Zi /Sg /DINCL_32 \
!IFDEF DEBUG
            /DFIREWALLS \
!ELSE
!IFDEF DEKKO
            /DDEKKO_BUILD \
!ENDIF
!ENDIF
            /DDCAF \
            /DSEAMLESS \
            /DINCL_PS55 \
            /DINCL_OPTIONS

AINC   = -I$(MAKEDIR) -I$(HGRE) -I$(H) -I$(INCENG) -I$(INC)

ASMD   = $(AS) $(AFLAGS) $(AINC) # Assembly Command

#*****************************************************************************
# Create Directories if they don't exist
#*****************************************************************************

!if [if not exist $(OBJDIR) mkdir $(OBJDIR)]
!endif

#*****************************************************************************
# Set up environment variables
#*****************************************************************************

!if [set INCLUDE=$(MAKEDIR);$(VGAINC);$(INCGRE);$(INCENG);$(INC)] || \
    [set LIB=$(LIB);$(LIBGRE)]                          || \
    [set PATH=$(TOOLSPATH);$(PATH)]
!endif

#*****************************************************************************
# Resource Compiler Macro definitions                                                          *
#*****************************************************************************
RC          = rc                    # Resource Compiler
RF          =                       # Flags

#*****************************************************************************
# Linker Macro definitions
#*****************************************************************************
LINKER      = LINK386                     # Linker being used
LFLAGS      = /MAP /NOD /EXEPACK /ALIGN:4 # Link options

#*****************************************************************************
# Object files
#$(OBJDIR)\Exports.OBJ
#$(OBJDIR)\cursors.obj
#*****************************************************************************
OBJS1 = $(OBJDIR)\BMSUP.OBJ    $(OBJDIR)\BOUNDS.OBJ   $(OBJDIR)\BUNDLE.OBJ   \
        $(OBJDIR)\CELLCP.OBJ   $(OBJDIR)\CELLSCAN.OBJ $(OBJDIR)\CLIP.OBJ

OBJS2 = $(OBJDIR)\DATA.OBJ     $(OBJDIR)\DRAWBORD.OBJ \
        $(OBJDIR)\DRAWLINE.OBJ $(OBJDIR)\ENABLE.OBJ   $(OBJDIR)\ENUMCLIP.OBJ

OBJS3 = $(OBJDIR)\ERROR.OBJ    $(OBJDIR)\ESCAPE.OBJ   $(OBJDIR)\EXIT.OBJ     \
        $(OBJDIR)\EXPORTS.OBJ  $(OBJDIR)\FIREWALL.OBJ $(OBJDIR)\GETCLIP.OBJ

OBJS4 = $(OBJDIR)\INIT.OBJ     $(OBJDIR)\major01.obj  $(OBJDIR)\major0b.obj  \
        $(OBJDIR)\MARKER.OBJ   $(OBJDIR)\MEMMAN.OBJ   $(OBJDIR)\MKVALID2.OBJ

OBJS5 = $(OBJDIR)\PELSUP.OBJ   $(OBJDIR)\QUERY.OBJ    $(OBJDIR)\RECT.OBJ     \
        $(OBJDIR)\RESOLVEC.OBJ $(OBJDIR)\scancorr.obj $(OBJDIR)\SLCORR.OBJ

OBJS6 = $(OBJDIR)\THUNK.OBJ    $(OBJDIR)\VALIDATE.OBJ $(OBJDIR)\VIO.OBJ      \
        $(OBJDIR)\WINATTRS.OBJ $(OBJDIR)\WINBITS.OBJ  $(OBJDIR)\WINSTR.OBJ

OBJS7 = $(OBJDIR)\32CALLBK.OBJ $(OBJDIR)\FSRTHUNK.OBJ $(OBJDIR)\DATE.OBJ     \
        $(OBJDIR)\EXPAND.OBJ   $(OBJDIR)\SCBOUNDS.OBJ $(OBJDIR)\SCRAREA.OBJ

!IFDEF DEKKO

OBJS8 = $(DEKKODIR)\DISPATCH.OBJ $(DEKKODIR)\ENTER.OBJ $(OBJDIR)\DEKKO32.OBJ

!ELSE

OBJS8 = $(OBJDIR)\DISPATCH.OBJ $(OBJDIR)\ENTER.OBJ

!ENDIF

OBJS9 = $(OBJDIR)\dbcsinit.obj $(OBJDIR)\dbcscp.obj   \
        $(OBJDIR)\dbcsfont.obj $(OBJDIR)\dbcsattr.obj \
        $(OBJDIR)\winquery.obj $(OBJDIR)\math.obj     \
        $(OBJDIR)\oeminit.obj  $(OBJDIR)\DBCSTHNK.obj

OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) $(OBJS6) $(OBJS7) $(OBJS8) $(OBJS9)


RESS = $(OBJDIR)\IBMVGA32.RES

#*****************************************************************************
# Inference rules                                                            *
#*****************************************************************************

{$(PROJDIR)}.ASM{$(OBJDIR)}.OBJ:
   $(ASMD) /Fo $@ $<

{$(PROJDIR)}.ASM{$(DEKKODIR)}.OBJ:
   $(ASMD) /Fo $@ $<

{$(PROJDIR)}.RC{$(OBJDIR)}.RES:
   CD $(OBJDIR)
   $(RC) -r -p -I $(HRC) $< $(@B).RES
   CD ..

#*****************************************************************************
# Build the DLL
# Final product must be first item in process
#
# Please DON'T remove the following lines
#
#*****************************************************************************

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

ALL: debug retail dekko

debug:
    $(MAKE) /f makefile DEBUG=1  makeall -$(MAKEFLAGS)

retail:
    $(MAKE) /f makefile RETAIL=1 makeall -$(MAKEFLAGS)

dekko:
    $(MAKE) /f makefile DEKKO=1  makeall -$(MAKEFLAGS)

makeall:    $(OBJDIR)\$(PROJ).dll

$(RESS):  $(@B).RC


#****************************************************************************
#   Module Versioning
#****************************************************************************
$(OBJDIR)\$(PROJDEF).def: $(PROJDEF).def makefile
  cd $(OBJDIR)
  copy ..\$(PROJDEF).def $(PROJDEF).def
  echo #1 $(FILEVER) >  rep.in
  echo #2 $(OBJDIR)  >> rep.in
  rep -f rep.in $(PROJDEF).def
  cd ..

$(OBJDIR)\$(PROJ).dll: $(OBJS) $(RESS) $(OBJDIR)\$(PROJDEF).def
        $(LINKER) @<<$(@B).lnk
$(OBJS1)   +
$(OBJS2)   +
$(OBJS3)   +
$(OBJS4)   +
$(OBJS5)   +
$(OBJS6)   +
$(OBJS7)   +
$(OBJS8)   +
$(OBJS9)
$@ $(LFLAGS)
$(OBJDIR)\$(PROJ).map
$(LINKLIBS)
$(OBJDIR)\$(PROJDEF).def
<<keep
!IFDEF DEBUG
        $(RC) -x -p $(OBJDIR)\ibmvga32.res $(@)
!ENDIF
        cd $(OBJDIR)
        mapsym $(PROJ).map
        cd ..
        if exist vgadone.cmd vgadone

#***********************************************************************
