2025-04-27 07:49:33 -04:00

1123 lines
27 KiB
Makefile

# rules.mak
# Copyright 1992 Microsoft Corp.
#
##
# Include file for make files
# Provides a consistent definition of macros and Inference Rules
##
## Project Specific Flags
#
################
##
## Override these environment variable to make sure we are
## getting only our tools, libraries and include files
##
################
INIT=
INCLUDE=
LIB=
PATH=$(PATH)
################
##
## Set up global derived variables
##
################
!IFNDEF TargetEnvironment
#If TargetEnvironment is not defined these line of text should make nmake error.
#Define the target environment to be WINPROC, IFBGPROC, IFFGPROC or BOSS
!ERROR -- Variable "TargetEnvironment" must be defined \
Use WINPROC, WINDRV, IFBGPROC, IFFGPROC, BOSS, WFW
!ENDIF
!IFNDEF OBJDIR
#If Object Directory is not defined these line of text should make nmake error.
#OBJDIR = .
!ENDIF
# Short Cut for win32 compatablity
!IF "$(TargetEnvironment)" == "WIN32"
WIN32=1
!endif
##
# These are set to the default versions in use. They maybe overridden by
# command line arguments
!IFDEF MASM510
MASMver = MASM.510
ASM = $(TOOLS_PATH)\$(MASMver)\bin\masm.exe
!ELSE
MASMver = MASM.610
ASM = $(TOOLS_PATH)\$(MASMver)\bin\ml.exe
!ENDIF
## CC compiler Modifiers
## Overrides for the default Compiler
## DEFINE C600 C700
!IFDEF WIN32
STDCver = MSVCNT.200
CCname = cl.exe
!ELSE
!IFDEF C600
STDCver = C.600
CCname = cl.exe
!ELSE
!IFDEF C700
STDCver = C.700
CCname = cl.exe
!ELSE
# The default Version of "C"
!if "$(COUNTRY)" == "JAPAN"
STDCver = MSVC.15J
CCname = cl.exe
!else
STDCver = MSVC.150
CCname = cl.exe
!endif
!ENDIF
!ENDIF
!ENDIF
!ifdef WIN4
WIN4VER=457
WINver = WIN4.100\$(WIN4VER)\SDK
DDKver = WIN4.100\$(WIN4VER)\DDK
WFWver =
!else ifdef WINNT
WINver = NT.100\SDK
DDKver = NT.100\DDK
WFWver =
!else # Standard Win31 Stuff
!if "$(COUNTRY)" == "JAPAN"
WINver = WINDEV.31J
DDKver = WINDDK.31
WFWver = WFWSDK.311
!else
WINver = WINDEV.31
DDKver = WINDDK.31
WFWver = WFWSDK.311
!endif
!endif
WINTOOLS_PATH = $(TOOLS_PATH)\$(WINver)
WFWTOOLS_PATH = $(TOOLS_PATH)\$(WFWver)
STDCTOOLS_PATH = $(TOOLS_PATH)\$(STDCver)
!ifdef WIN4
WINDDK_PATH = $(TOOLS_PATH)\$(DDKver)
!else # Standard Win31 Stuff
WINDDK_PATH = $(TOOLS_PATH)\$(DDKver)\286
!endif
#
# Independent Bin tools
# the environment variable PROCESSOR_LEVEL is set in the NT
# environment and not in other environments
TOOLDOSbin = $(TOOLS_PATH)\bin
!IF "$(PROCESSOR_LEVEL)" == ""
# Standard DOS/WINDOWS environment
TOOLbin = $(TOOLS_PATH)\bin
!ELSE
# For NT, the tools live elsewhere...
# TOOLbin = $(TOOLS_PATH)\bin.nt
TOOLbin = $(SYSTEMROOT)\mstools
!ENDIF
# Library files
MFClibpath = $(STDCTOOLS_PATH)\mfc\lib
STDClibpath = $(STDCTOOLS_PATH)\lib
# Windows Library Files
!ifdef WIN32
!ifdef WIN4
WINlibpath = $(WINTOOLS_PATH)\lib32
!else ifdef WINNT
WINlibpath = $(WINTOOLS_PATH)\lib
!else
WINlibpath = # No Default
!endif
!else
!ifdef WIN4
WINlibpath = $(WINTOOLS_PATH)\lib16
!else
!ifndef UseMSCVOnly
WINlibpath = $(WINTOOLS_PATH)\lib;$(WFWTOOLS_PATH)\lib
!endif
!endif
!endif
!IFDEF WIN32
IFAXlibpath = $(RootPath)\ifaxdev\lib32
!ELSE
IFAXlibpath = $(RootPath)\ifaxdev\lib
!ENDIF
DDKlibpath = $(WINDDK_PATH)\lib
# "C" header files
MFChpath = $(STDCTOOLS_PATH)\mfc\include
STDChpath = $(STDCTOOLS_PATH)\include
# Windows Include Files
!IFDEF WIN32
!ifdef WIN4
WINhpath = $(WINTOOLS_PATH)\inc32;$(WINTOOLS_PATH)\inc16
!else ifdef WINNT
WINhpath = $(WINTOOLS_PATH)\inc
!else
WINhpath = . ## avoid the stupid 32-bit RC bug
!endif
!ELSE
!ifdef WIN4
WINhpath = $(WINTOOLS_PATH)\inc16
!else
!ifndef UseMSCVOnly
WINhpath = $(WINTOOLS_PATH)\include;$(WFWTOOLS_PATH)\include
!endif
!endif
!ENDIF
IFAXhpath = $(RootPath)\ifaxdev\h
DDKhpath = $(WINDDK_PATH)\inc
# masm include files
STDCincpath = $(STDCTOOLS_PATH)\include
WINincpath = $(WINTOOLS_PATH)\include;$(WFWTOOLS_PATH)\include;$(TOOLS_PATH)\$(MASMver)\include
IFAXincpath = $(RootPath)\ifaxdev\h
DDKincpath = $(WINDDK_PATH)\inc
## Standard Names
## SGS Tools -- Found in the Compiler Version Directory
ASM = $(TOOLS_PATH)\$(MASMver)\bin\ml.exe
!if "$(COVERAGE)" == "1"
CC = $(CCname)
!else
CC = $(STDCTOOLS_PATH)\bin\$(CCname)
!endif
RC = $(STDCTOOLS_PATH)\bin\rc.exe
!ifdef WIN4
!ifndef WIN32
RC = $(WINTOOLS_PATH)\binw16\rc.exe
!endif
!endif
LIBUTIL = $(STDCTOOLS_PATH)\bin\lib.exe
IMPLIB = $(STDCTOOLS_PATH)\bin\implib.exe
LINK = $(STDCTOOLS_PATH)\bin\link.exe
MARKEXE = $(STDCTOOLS_PATH)\bin\mark.exe
CVPACK = $(STDCTOOLS_PATH)\bin\cvpack.exe
MAPSYM = $(STDCTOOLS_PATH)\bin\mapsym.exe
## Rom Tools
ROMLINK = $(TOOLS_PATH)\ll386\bin\xlink386.exe
ROMLIB = $(TOOLS_PATH)\ll386\bin\xlib386.exe
## Independent Tools
MAKE =$(TOOLbin)\nmake /NOLOGO
MV =$(TOOLbin)\mv
AWK =$(TOOLbin)\awk
CHMODE =$(TOOLbin)\chmode
COPY =$(TOOLbin)\cp
CP =$(COPY)
OUT =$(TOOLbin)\out
IN =$(TOOLbin)\in
DELNODE =$(TOOLbin)\delnode
GREP =$(TOOLbin)\grep
TOUCH =$(TOOLbin)\touch
WALK =$(TOOLbin)\walk
CAT =$(TOOLbin)\cat
CHMOD =$(TOOLbin)\chmod
RM =$(TOOLbin)\rm
EXP =$(SystemRoot)\idw\exp.exe # exception to our rule...
# Dos Only Tools
CTAGS =$(TOOLDOSbin)\ctags
BIND =$(TOOLDOSbin)\bind
SED =$(SystemRoot)\idw\sed
INCLUDES =$(TOOLDOSbin)\mkdep
################
##
## Turn on compiler,masm and Linker debug flags if
## macro DEBUG is defined
##
################
# Gobal Variables Explained for Compiler, Asm, and Linker
# CFLAGS
!ifdef C_OptFlag
C_OptimizationFlags=C_OptFlag
!endif
## CFLAG switches -- Define or undefine to control option generation
# CC_Zopt_NoPackStruct -- define to Not Pack Struct
# CC_Zopt_NoSuppressLibSrch -- Define to allow Default Lib search
# CC_WarningLevel -- set to warning level desired level 0, 1, 2, 3
# CC_StackCheck -- Define to insert Stack Check Code
# CC_NoInlineCode -- If Defined do not Allow Inline Optimizations
# C_OptimizationFlags -- Optimation flags -0
# C_DebugFlag -- Options when DEBUG is defined
# x86Instruction -- Refer to the -G option 0=8083, 1=186, 2=286, 3=386, 4=486
# MemoryModel -- Memory Model see -A options S,M,C or L
# Prolog -- Type of prolog to use -G options types
# A_DebugFlag -- Debug flags defined when DEBUG is defined
# AFLAGS -- Standard AFLAGS
# L_DebugFlag
# C_TargetIncludepath -- Environ Format Include Path xxx;xxx/yyy
# A_TargetIncludepath -- Same as above
# WINlibpath -- Windows Library Path
# STDClibpath -- Standard "C" Library Path
# LIBRARIES -- Environment Variable for Library Paths
# OBJDIR -- Where the objects are placed
# LibType --
################################################# WINPROC
!IF "$(TargetEnvironment)" == "WINPROC"
!IF "$(MemModel)" == ""
MemModel=S
!ENDIF
!IF "$(LibType)" == "dll"
Prolog= -GD -GEf
MemoryModel=$(MemModel)w
STARTUPOBJ = libentry.obj
!ELSE
!ifdef WIN4
Prolog= -GA # Protect mode Prolog
!else
Prolog= -Gw # Real Mode Prolog
!endif
MemoryModel=$(MemModel)
STARTUPOBJ =
!ENDIF
!IF "$(DEBUG)" == "ON"
C_DebugFlag=-Zi -Od -DDEBUG
A_DebugFlag=-Zi -DDEBUG
L_DebugFlag=/CO
## DEBUGUTILOBJ=$(RootPath)\ifaxdev\lib\wintimer.obj
!ENDIF
!ifdef WIN4
!ifdef DEBUG
x86Instruction = 2
!else
x86Instruction = 3
!endif
!else
x86Instruction = 2
!endif
!ifdef WINhpath
C_TargetIncludepath=$(WINhpath);$(STDChpath)
!else
C_TargetIncludepath=$(STDChpath)
!endif
A_TargetIncludepath=$(WINincpath)
LIBRULES=.
!ifdef LocalLibPath
LIBRULES=$(LIBRULES);$(LocalLibPath)
!endif
!ifdef OBJDIR
LIBRULES=$(OBJDIR);$(LIBRULES)
!endif
!ifdef IFAXlibpath
LIBRULES=$(IFAXlibpath);$(LIBRULES)
!endif
!ifdef STDClibpath
LIBRULES=$(STDClibpath);$(LIBRULES)
!endif
!ifdef WINlibpath
LIBRULES=$(WINlibpath);$(LIBRULES)
!endif
#LIBRULES=$(LocalLibPath);$(OBJDIR);$(IFAXlibpath);$(STDClibpath);$(WINlibpath)
!ifndef NoLIBRARIES
LIBRARIES=$(MemModel)$(LibType)cew libw
!endif
!ifdef UseMFC # add MFC to path
C_TargetIncludepath=$(C_TargetIncludepath);$(MFChpath)
LIBRULES=$(LIBRULES);$(MFClibpath)
!endif
################################################# DOS
!ELSE IF "$(TargetEnvironment)" == "DOS"
!IF "$(MemModel)" == ""
MemModel=L
!ENDIF
Prolog=
MemoryModel=$(MemModel)
STARTUPOBJ =
!IF "$(DEBUG)" == "ON"
C_DebugFlag=-Zi -Od -DDEBUG
A_DebugFlag=-Zi -DDEBUG
L_DebugFlag=/CO /map
!ENDIF
x86Instruction = 2
C_TargetIncludepath=$(STDChpath)
A_TargetIncludepath=
LIBRULES=$(LocalLibPath);$(OBJDIR);$(STDClibpath)
!ifndef NoLIBRARIES
LIBRARIES=$(MemModel)$(LibType)ce
!endif
################################################# WINKERN section
!ELSE IF "$(TargetEnvironment)" == "WINKERN"
!IF "$(DEBUG)" == "ON"
C_DebugFlag=-Zd -DDEBUG
A_DebugFlag=-Zd -DDEBUG
!ENDIF
C_OptimizationFlags=b1cgilnot
MemoryModel = snw
x86Instruction = 2
C_TargetIncludepath=$(STDChpath)
A_TargetIncludepath=
################################################# -- BOSS Section
!ELSE IF "$(TargetEnvironment)" == "BOSS"
!IF "$(DEBUG)" == "ON"
C_DebugFlag=-Zd -DDEBUG
A_DebugFlag=-Zd -DDEBUG
!ENDIF
C_OptimizationFlags=b1cgilnot
MemoryModel = lnw
x86Instruction = 2
C_TargetIncludepath=$(STDChpath)
A_TargetIncludepath=
LIBRULES = $(LocalLibPath);$(OBJDIR);$(STDClibpath)
LIBRARIES =
################################################# -- WFWDRV Section
!ELSE IF "$(TargetEnvironment)" == "WFWDRV"
! IF "$(DEBUG)" == "ON"
C_DebugFlag=-Od -Zi -DDEBUG
A_DebugFlag=-Zi -DDEBUG
L_DebugFlag=/CO /map
#DEBUGUTILOBJ=$(RootPath)\ifaxdev\lib\wintimer.obj
! ENDIF
C_TargetIncludepath=$(DDKhpath);$(STDChpath);$(IFAXhpath);$(WINhpath)
A_TargetIncludepath=$(DDKincpath)
x86Instruction = 2
Prolog = -GD -GEf
MemoryModel = Sw
LIBRULES = $(LocalLibPath);$(OBJDIR);$(DDKlibpath);$(STDClibpath);$(IFAXlibpath);$(WINlibpath)
LIBRARIES = ifwfw sdllcew libw
STARTUPOBJ = libentry.obj
################################################# -- WINDRV Section
!ELSE IF "$(TargetEnvironment)" == "WINDRV"
! IF "$(DEBUG)" == "ON"
C_DebugFlag=-Od -Zi -DDEBUG
A_DebugFlag=-Zi -DDEBUG
L_DebugFlag=/CO /map
#DEBUGUTILOBJ=$(RootPath)\ifaxdev\lib\wintimer.obj
! ENDIF
C_TargetIncludepath=$(DDKhpath);$(STDChpath);$(IFAXhpath);$(WINhpath)
A_TargetIncludepath=$(DDKincpath)
x86Instruction = 2
Prolog = -GD -GEf
MemoryModel = Sw
LIBRULES = $(LocalLibPath);$(OBJDIR);$(DDKlibpath);$(STDClibpath);$(IFAXlibpath);$(WINlibpath)
LIBRARIES = iffgproc sdllcew libw
STARTUPOBJ = libentry.obj
################################################# -- WIN 32 Sections
!ELSE IF "$(TargetEnvironment)" == "WIN32"
WIN32=1
RCDEFINES=/DWIN32=1
x86Instruction=3
CC_Zopt_NoDebug=1 # No -Zd option
TargetDefines=/D_X86_ /DNO_STRICT /DNULL=0 /D_MT /D_DLL /YX
!IF "$(DEBUG)" == "ON"
RCDEFINES=$(RCDEFINES) -DDEBUG
CC_Zopt_CodeView=1
C_OptimizationFlags=d # No Optimize
C_DebugFlag=-DDEBUG
A_DebugFlag=-Zd -DDEBUG
L_DebugFlag=/DEBUG:FULL /DEBUGTYPE:CV /PDB:NONE
!ELSE
!ifndef C_OptimizationFlags # Retail
C_OptimizationFlags=s # Max Optimizations
!endif
CC_Zopt_NoDebug=1
!ENDIF
C_TargetIncludepath=$(IFAXhpath);$(WINhpath);$(STDChpath)
A_TargetIncludepath=$(IFAXincpath)
!if "$(COUNTRY)" == "JAPAN"
AFLAGS = -c -W2 -Zd $(A_DebugFlag) $(LocalAFLAGS) -DJAPAN
!else
AFLAGS = -c -W2 -Zd $(A_DebugFlag) $(LocalAFLAGS)
!endif
LIBRULES = $(LocalLibPath);$(OBJDIR);$(IFAXlibpath);$(WINlibpath);$(STDClibpath);
LIBRARIES = kernel32.lib user32.lib gdi32.lib
!ifndef MSVCRT
MSVCRT=msvcrt.lib
!endif
!ifdef UseMFC # add MFC to path
C_TargetIncludepath=$(C_TargetIncludepath);$(MFChpath)
LIBRULES=$(LIBRULES);$(MFClibpath)
!endif
# Build up the Libraries List
!ifdef UseIFKERNELlib
LIBRARIES = $(LIBRARIES) awkrnl32.lib
!endif
# STARTUPOBJ = libentry.obj
################################################# -- WFW BG DLLs Section
!ELSE IF "$(TargetEnvironment)" == "WFWBG"
! IF "$(DEBUG)" == "ON"
C_DebugFlag=-Od -Zi -DDEBUG
A_DebugFlag=-Zi -DDEBUG
L_DebugFlag=/CO /map
! ELSE
!IFNDEF C_OptimizationFlags
C_OptimizationFlags=b1cgilnot
!ENDIF
! ENDIF
C_TargetIncludepath=$(IFAXhpath);$(WINhpath);$(STDChpath)
A_TargetIncludepath=$(IFAXincpath)
x86Instruction = 2
!IF "$(LibType)" == "dll"
Prolog = -GD -GEf
MemoryModel = Sw
!ELSE
Prolog = ERROR
MemoryModel = ERROR
!ENDIF
LIBRULES = $(LocalLibPath);$(OBJDIR);$(IFAXlibpath);$(STDClibpath);$(WINlibpath)
! IF "$(LibType)" == "dll"
LIBRARIES = wfwbg snocrtdw
STARTUPOBJ = libentry.obj
! ELSE
LIBRARIES = ERROR
STARTUPOBJ = ERROR
! ENDIF
################################################# -- WFW Section
!ELSE IF "$(TargetEnvironment)" == "WFW"
! IF "$(DEBUG)" == "ON"
C_DebugFlag=-Od -Zi -DDEBUG
A_DebugFlag=-Zi -DDEBUG
L_DebugFlag=/CO /map
! ENDIF
C_TargetIncludepath=$(IFAXhpath);$(WINhpath);$(STDChpath)
A_TargetIncludepath=$(IFAXincpath)
x86Instruction = 2
!if "$(MemModel)" == ""
MemModel = S
!endif
!IF "$(LibType)" == "dll"
Prolog = -GD -GEf
MemoryModel = $(MemModel)w
!ELSE
Prolog = -Gw
MemoryModel = $(MemModel)
!ENDIF
LIBRULES = $(LocalLibPath);$(OBJDIR);$(IFAXlibpath);$(STDClibpath);$(WINlibpath)
! IF "$(LibType)" == "dll"
LIBRARIES = ifwfw $(MemModel)dllcew
STARTUPOBJ = libentry.obj
! ELSE
LIBRARIES = slibcew ifwfw
STARTUPOBJ =
! ENDIF
################################################# -- IF?? Section
!ELSE
# Do not redefine if someone already defined it
!IFNDEF IFAX
IFAX=1
!ENDIF
!IF "$(DEBUG)" == "ON"
C_DebugFlag=-Od -Zi -DDEBUG
A_DebugFlag=-Zi -DDEBUG
L_DebugFlag=/CO
!ELSE
!IFNDEF C_OptimizationFlags
C_OptimizationFlags=b1cgilnot
!ENDIF
!ENDIF
C_TargetIncludepath=$(IFAXhpath);$(WINhpath);$(STDChpath)
A_TargetIncludepath=$(IFAXincpath);$(WINincpath)
!IFNDEF x86Instruction
x86Instruction = 2
!ENDIF
!IFNDEF MemModel
MemModel=S
!ENDIF
!IF "$(LibType)" == "dll"
Prolog = -GD -GEf
MemoryModel=$(MemModel)w
!ELSE
Prolog = -Gw
MemoryModel=$(MemModel)
!ENDIF
! IF "$(TargetEnvironment)" == "IFBGPROC"
LIBRULES=$(LocalLibPath);$(OBJDIR);$(IFAXlibpath);$(STDClibpath);$(WINlibpath)
! IF "$(LibType)" == "dll"
LIBRARIES = ifbgproc $(MemModel)nocrtdw
STARTUPOBJ = libentry.obj
! ELSE
LIBRARIES = $(MemModel)nocrtw ifbgproc
STARTUPOBJ =
! ENDIF
! ELSE IF "$(TargetEnvironment)" == "IFFGPROC"
LIBRULES=$(LocalLibPath);$(OBJDIR);$(IFAXlibpath);$(STDClibpath);$(WINlibpath)
! IF "$(LibType)" == "dll"
LIBRARIES = iffgproc $(MemModel)nocrtdw
STARTUPOBJ = libentry.obj
! ELSE
LIBRARIES = $(MemModel)libcew iffgproc
STARTUPOBJ =
! ENDIF
! ENDIF
!ENDIF
!if "$(COVERAGE)" == "1"
LIBRARIES = $(LIBRARIES) \COVER\COVWIN$(MemModel).LIB \COVER\atexit$(MemModel).LIB
!endif
## ML flags
!IF "$(COUNTRY)" == "JAPAN"
AFLAGS = -c -W2 -Zd $(A_DebugFlag) -Fo$(OBJDIR)\ $(LocalAFLAGS) -DJAPAN
!ELSE
AFLAGS = -c -W2 -Zd $(A_DebugFlag) -Fo$(OBJDIR)\ $(LocalAFLAGS)
!ENDIF
!IFNDEF CC_WarningLevel
CC_WarningLevel=3
!ENDIF
!IFNDEF CC_StackCheck
CC_StackCheck=s
!ENDIF
## In Line Code Optimization -- Generate Intrinsic Functions
!IFNDEF CC_NoInlineCode
CC_InlineOpt=i
!ENDIF
# use -Oi so that we can use inline versions of memcpy etc without having
C_OptimizationFlags1=/O$(C_OptimizationFlags)$(CC_InlineOpt)
G_OptFlags=/Gf$(x86Instruction)$(CC_StackCheck) $(Prolog)
# -Gf pools string constants.
!IFDEF IFAX
CC_IFAXDefine=-DIFAX=$(IFAX)
!ELSE
CC_IFAXDefine=
!ENDIF
!IFDEF WIN4
CC_WIN4Define=-DWIN4
!ELSE
CC_WIN4Define=
!ENDIF
!IF "$(COUNTRY)" == "JAPAN"
CC_Defines=/D$(TargetEnvironment) $(TargetDefines) $(CC_IFAXDefine) $(CC_WIN4Define) /DJAPAN
RC=$(RC) /DJAPAN
!ELSE
CC_Defines=/D$(TargetEnvironment) $(TargetDefines) $(CC_IFAXDefine) $(CC_WIN4Define)
!ENDIF
########################################################
# CC Option flags
# CC_Zopt_NoPackStruct -- define to Not Pack Struct
# CC_Zopt_NoSuppressLibSrch -- Define to allow Default Lib search
# CC_WarningLevel -- set to warning level desired level 0, 1, 2, 3
# CC_StackCheck -- Define to insert Stack Check Code
# CC_Zopt_NoDebug -- define Add debug
!IF "$(SHIP_BUILD)" == "ON"
CC_Zopt_NoDebug = 1
!ENDIF
!IFNDEF CC_Zopt_NoPackStruct
CC_Zopt_p = p
!ENDIF
!IFNDEF CC_Zopt_NoDebug # On By default
CC_Zopt_d=d
!ENDIF
!IFNDEF CC_Zopt_NoSuppressLibSrch # On by Default
CC_Zopt_l = l
!ENDIF
!IFDEF CC_Zopt_CodeView # Off By default
CC_Zopt_i=i
!ENDIF
!IFNDEF CC_Zopt_NoEnableExtensions # On By default
CC_Zopt_e=e
!ENDIF
CC_Zopt = $(CC_Zopt_l)$(CC_Zopt_p)$(CC_Zopt_d)$(CC_Zopt_i)$(CC_Zopt_e)
# d = line numbers
# e = enable extensions
# i = codeview info
# l = library search
# p = pack structures
# !IF "$(SHIP_BUILD)" == "ON"
# CFLAGS = $(CFLAGS) /WX
# !ENDIF
!IFNDEF WIN32
MemoryFlag=/A$(MemoryModel)
!ENDIF
CFLAGS = $(C_DebugFlag) $(C_OptimizationFlags1) /Z$(CC_Zopt) /W$(CC_WarningLevel) \
$(MemoryFlag) $(CC_Defines) /Fo$(OBJDIR)\ /Fd$(OBJDIR)\ $(G_OptFlags)
!if "$(COVERAGE)" == "1"
COVPREP=\cover\covprep
CFLAGS = $(CFLAGS) -DCOVERAGE
!else
COVPREP=
!endif
CIncludePaths = .;$(LocalCIncludePaths);$(C_TargetIncludepath)
AIncludePaths = $(LocalAIncludePaths);.;$(A_TargetIncludepath)
!ifdef NoLibMain
LibMain=
!else
!ifndef LibMain
LibMain=/ENTRY:LibMain
!endif
!endif
#### Link options used in targets.mak:
# /BA suppresses prompts for library files and objects
# /LI generates line numbers in map falls.
!ifndef LFLAG_NoLineNumbers
LFLAG_LineNumbers=/LI
!endif
!ifndef LFLAG_NoFARCALL
LFLAG_FARCALL = /FARCALL
!endif
!IFDEF WIN32
LFLAGS = /NODEFAULTLIB $(L_DebugFlag)
!IF "$(LibType)" == "dll"
LFLAGS = $(LFLAGS) /DLL $(LibMain)
!ENDIF
!ELSE ## !WIN32
LFLAGS = /BA /NOD /NOE /ONERR:NOEXE
# add new /PACKC, PACKD, FARCALL options which compact & speed up
# any large/medium model modules. ALIGN saves tons of disk space
# but linker croaks if we have /LI and /MAP:FULL with /ALIGN
!IF ("$(TargetEnvironment)"=="IFBGPROC") || ("$(TargetEnvironment)"=="IFFGPROC")
### LFLAGS = $(LFLAGS) /PACKC /PACKD $(LFLAG_FARCALL) ## used by SHIP & non-SHIP
LFLAGS = $(LFLAGS) $(LFLAG_FARCALL) ## used by SHIP & non-SHIP
LinkOptFlags = /ALIGN:16 ## used by SHIP build only
!ENDIF
!IF "$(SHIP_BUILD)" == "ON"
LFLAGS = $(LFLAGS) $(LinkOptFlags)
!ELSE ## not SHIP_BUILD
LFLAGS = $(LFLAGS) /MAP:FULL $(LFLAG_LineNumbers) $(L_DebugFlag)
!ENDIF ## end of SHIP_BUILD
!ENDIF ## end of !IFDEF WIN32
# if Linking A windows 4 object mark it as so, this amoung other
# things allow the correct page color to be used.
!IFDEF WIN4
!IFDEF WIN32 # BUT NOT IF WIN 16
LFLAGS=-subsystem:windows,4.0 -merge:.bss=.data -merge:.rdata=.text $(LFLAGS)
!ENDIF
!ENDIF
## Ctags options - vi and emacs only, oh well
CTAGS_options =
## include program options for macros in a dependency string
INCLUDES_options = -n -s.obj $(LocalCCmdIncPaths) -I$(IFAXhpath)
## h2inc file options
# -c Leave comments in place
# -d Create typedef macrosasm
# -m Create struct macros
H2INC_options = -d -m
##############################################################################
# Inference Rules
##############################################################################
.SUFFIXES:
.SUFFIXES: .obj .c .cpp .asm .res .rc .sym .map
!IFDEF MASM510
.asm.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<;
.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<,$(@D)\;
{$(SRCDIR1)}.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<,$(@D)\;
{$(SRCDIR2)}.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<,$(@D)\;
{$(SRCDIR3)}.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<,$(@D)\;
{$(SRCDIR4)}.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<,$(@D)\;
.asm.lst:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) -L $<,,$*.lst,,
!ELSE
.asm.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set ML=$(AFLAGS)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<
.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set ML=$(AFLAGS)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<
{$(SRCDIR1)}.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set ML=$(AFLAGS)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<
{$(SRCDIR2)}.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set ML=$(AFLAGS)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<
{$(SRCDIR3)}.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set ML=$(AFLAGS)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<
{$(SRCDIR4)}.asm{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set ML=$(AFLAGS)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<
.asm.lst:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(AIncludePaths)
set ML=$(AFLAGS)
set PATH=$(PATH)
$(ASM) $(LocalAFLAGS) $<
!ENDIF
#### C Rules
.c.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set PATH=$(PATH)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
.c{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set PATH=$(PATH)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
{$(SRCDIR1)}.c{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set PATH=$(PATH)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
{$(SRCDIR2)}.c{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set PATH=$(PATH)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
{$(SRCDIR3)}.c{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
set PATH=$(PATH)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
{$(SRCDIR4)}.c{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
set PATH=$(PATH)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
.c.cod:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
set PATH=$(PATH)
$(COVPREP) $(CC) $(LocalCFLAGS) -Fc$(OBJDIR)\ $<
.c.i:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set CL=$(CFLAGS) $(LocalCFLAGS)
set PATH=$(PATH)
$(COVPREP) $(CC) -C -P $<
.c.p:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set CL=$(CFLAGS) $(LocalCFLAGS)
set PATH=$(PATH)
$(COVPREP) $(CC) -Zg $< > $*.p
#### C++ Rules
.cpp.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
set PATH=$(PATH)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
.cpp{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set PATH=$(PATH)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
{$(SRCDIR1)}.cpp{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set PATH=$(PATH)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
{$(SRCDIR2)}.cpp{$(OBJDIR)}.obj:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set PATH=$(PATH)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
$(COVPREP) $(CC) $(LocalCFLAGS) $<
.cpp.cod:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set CL=-c $(CFLAGS)
set PATH=$(PATH)
$(COVPREP) $(CC) $(LocalCFLAGS) -Fc$(OBJDIR)\ $<
#### Miscellaneous
.obj.exe:
@echo Attempting link from inference rules $<
.obj.dll:
@echo Attempting link from inference rules $<
.map.sym:
$(MAPSYM) $<
{$(OBJDIR)}.map{$(OBJDIR)}.sym:
cd $(OBJDIR)
$(MAPSYM) $(<F)
cd ..
.h.inc:
$(H2INC) $(H2INC_options) $< -o $@
#### Resource Compilation
.rc.res:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set PATH=$(PATH)
$(RC) $(RCDEFINES) $(LocalRCFLAGS) /r /Fo$@ $<
.rc{$(OBJDIR)}.res:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set PATH=$(PATH)
$(RC) $(RCDEFINES) $(LocalRCFLAGS) /r /Fo$@ $<
{$(SRCDIR1)}.rc{$(OBJDIR)}.res:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set PATH=$(PATH)
$(RC) $(RCDEFINES) $(LocalRCFLAGS) /r /Fo$@ $<
{$(RES_DIR)}.rc{$(OBJDIR)}.res:
@if not exist $(OBJDIR) mkdir $(OBJDIR)
set INCLUDE=$(CIncludePaths)
set PATH=$(PATH)
$(RC) $(RCDEFINES) $(LocalRCFLAGS) /r /Fo$@ $<
set INCLUDE=$(CIncludePaths)