Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2683 lines
61 KiB

############################################################################
#
# Microsoft Windows
# Copyright (C) Microsoft Corporation, 1991 - 1992.
#
# File: makefile.inc
#
# Contents: Main project makefile
#
# History:
#
#
############################################################################
#** Make include file
#
# Definitions for compiler
#
# GCFLAGS - additional flags for the C compiler, intended only
# to be used for global changes. DONT EVER PUT THIS
# IN A MAKEFILE.
# GAFLAGS - Same as GCFLAGS, but for the assembler.
#
#
# -------------------- Build Type Control ------------------------------------
#
# The "build type" determines what kind of internal checking is done.
# Turning on checking allows for catching more internal
# consistency errors, but slows the system down.
#
# Mechanically, one changes the build type the makefile is set for by
# editing the makefile to comment in or out the OBFLAGS line of interest.
# (Separate entry points cannot easily be used for this, this is a failing
# of make. That's why you have to edit the makefile.)
#
#
############################################################################
#
# Default target is "all"
#
default: all
############################################################################
#
# Suffixes for inference rules
#
.SUFFIXES:
.SUFFIXES: .idl .tdl .tlb .dll .h .inc .exe .obj .lst .cod .cxx .cpp
.SUFFIXES: .c .s .lrf .lnk .map .sym .rc .lib .def .res .dgn .rtf .y .mc
.SUFFIXES: .i .ico .bmp .dlg .cur .cx2 .c2 .rc2 .hxx .pas .for .cbl .bas
##################################################
# TGTDIR, OBJDIR selection
#
# Each build type stores obj files and built binaries in a different
# directory below the source or distribution tree. Current directory
# naming convention is:
#
# TGTDIR=OBJ<p><o><b>
# OBJDIR=OBJ<p><o><b>
#
# <p>: i = i386
# m = MIPS
# a = ALPHA
# 2 = i286
#
# <o>: d = DOS
# 1 = NT 1.x
# n = NT 2.0 (Cairo)
# o = OS/2
# w = Win16 (used when targeting Win32s)
#
# <b>: r = Retail
# d = Debug
# p = Profile (Retail with debug info)
# <Nothing> = Release
#
# TGTEXT/RDEXT selection for MULTIDEPEND != ""
# Each build type stores depend.mk files with a different last character
# in the extension, as in "mk?". Current extension convention is:
# <1>: NT 2.0 x86
# <3>: Chicago
# <5>: NT 2.0 MIPS
# <7>: NT 2.0 Alpha
# <9>: Win 3.1
# <a>: Dos 5.0
# <c>: OS/2 1.x
# <e>: NTKERNEL x86
# <g>: NTKERNEL MIPS
# <h>: NTKERNEL Alpha
# <j>: Win32s
# <k>: NT 1.x x86
# <l>: NT 1.x MIPS
# <m>: NT 1.x Alpha
#
# As you can see the scheme gets a bit cumbersome, so if you define
# MULTIDEPEND == MERGED then similar systems use the same letter, so:
# <1>: NT 2.0 all
# <3>: NT 1.x all, Chicago, Win32s
# <9>: Win 3.1
# <a>: Dos 5.0
# <c>: OS/2 1.x
# <e>: NTKERNEL all
OBJDIR=
TGTDIR=
TGTEXT=
RDEXT=
# set BUILDTYPE based on NTDEBUG setting
# bugbug need to base on settings in makefile.def
#
!if "$(NTDEBUG)" == "retail"
BUILDTYPE=RELEASE
!else
!if "$(NTDEBUG)" == "ntsdnodbg"
BUILDTYPE=RELEASE
!else
BUILDTYPE=DEBUG
!endif
!endif
!ifndef _NTROOT
_NTROOT=\nt
!endif
!ifndef BASEDIR
BASEDIR=$(_NTDRIVE)$(_NTROOT)
!endif
!if "$(OPSYS)"==""
OPSYS=NT
!endif
!if "$(PROCESSOR_ARCHITECTURE)" == "x86"
PLAT = i
PLATFORM=I386
!elseif "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
PLAT = m
PLATFORM=MIPS
!elseif "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
PLAT = a
PLATFORM=ALPHA
!else
!error Unknown PROCESSOR_ARCHITECTURE setting "$(PROCESSOR_ARCHITECTURE)"
!endif
!if "$(BUILDTYPE)" == "DEBUG"
BLDT = d
!elseif "$(BUILDTYPE)" == "RETAIL"
BLDT = r
!elseif "$(BUILDTYPE)" == "PROFILE"
BLDT = p
!elseif "$(BUILDTYPE)" == "RELEASE"
BLDT =
!else
!error Unknown BUILDTYPE setting "$(BUILDTYPE)"
!endif
# DavidBak hack
!if "$(PERFSNAP)" == "1"
BLDT = p
!endif
!if "$(OPSYS)" == "NT" || "$(OPSYS)" == "NTKERNEL"
OPST = n
!elseif "$(OPSYS)" == "DOS"
OPST = d
!elseif "$(OPSYS)" == "DOS5"
OPST = 5
!elseif "$(OPSYS)" == "OS2"
OPST = o
!elseif "$(OPSYS)" == "WIN16"
OPST = w
!elseif "$(OPSYS)" == "NT1X"
OPST = 1
!else
!error Unknown OPSYS setting "$(OPSYS)"
!endif
OBJDIR = OBJ\$(PLATFORM)
TGTDIR = OBJ\$(PLATFORM)
!if "$(MULTIDEPEND)" == "MERGED"
! if "$(OPSYS)" == "NT"
DEXT = 1
! endif
!else # !MERGED
! if "$(OPSYS)" == "NT"
PLATDIR=DAYTONA
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
DEXT = 1
! elseif "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
DEXT = 5
! elseif "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
DEXT = 7
! endif
! elseif "$(OPSYS)" == "NTKERNEL"
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
DEXT = e
! elseif "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
DEXT = g
! elseif "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
DEXT = h
! endif
! elseif "$(OPSYS)" == "DOS" && "$(PROCESSOR_ARCHITECTURE)" == "i286"
DEXT = 9
! elseif "$(OPSYS)" == "DOS5"
DEXT = a
! elseif "$(OPSYS)" == "OS2"
DEXT = c
! elseif "$(OPSYS)" == "NT1X"
PLATDIR=DAYTONA
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
DEXT = k
! elseif "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
DEXT = l
! elseif "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
DEXT = m
! endif
! elseif "$(PROCESSOR_ARCHITECTURE)" == "x86" && "$(OPSYS)" == "WIN16"
DEXT = j
! elseif "$(PROCESSOR_ARCHITECTURE)" == "x86" && "$(OPSYS)" == "DOS"
DEXT = 3
! endif
!endif
#bugbug, what about chicago platform
RDEXT = $(DEXT)
TGTEXT = $(DEXT)
####################################################################################
#
#
#
#
RELEASE_BIN=
!IFDEF NTDBGFILES
! IF "$(PROCESSOR_ARCHITECTURE)" == "x86"
BINPLACE_FLAGS=-s $(_NT386TREE)\Symbols
! ELSE
! IF "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
BINPLACE_FLAGS=-s $(_NTMIPSTREE)\Symbols
! ELSE
! IF "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
BINPLACE_FLAGS=-s $(_NTALPHATREE)\Symbols
! ENDIF
! ENDIF
! ENDIF
!ELSE
BINPLACE_FLAGS=
!ENDIF
# The xxxTREE macros are set in the razzle cmd window.
# for cairo builds cairoxxxxxx macros will be set.
!ifdef CAIRO_PRODUCT
!ifdef _CAIROMIPSTREE
_NTMIPSTREE=$(_CAIROMIPSTREE)
!endif
!ifdef _CAIRO386TREE
_NT386TREE=$(_CAIRO386TREE)
!endif
!ifdef _CAIROALPHATREE
_NTALPHATREE=$(_CAIROALPHATREE)
!endif
!endif
!ifdef _NTMIPSTREE
RELEASE_BIN=TRUE
!endif
!ifdef _NT386TREE
RELEASE_BIN=TRUE
!endif
!ifdef _NTALPHATREE
RELEASE_BIN=TRUE
!endif
!ifndef BUILDDETAIL
BUILDDETAIL = quiet
!endif
!if "$(BUILDDETAIL)" == "FULL" || "$(BUILDDETAIL)" == "full"
COMPLOGO =
COMPRESP = KEEP
LINKLOGO =
LINKRESP = KEEP
!endif
!if "$(BUILDDETAIL)" == "KEEPCOMP" || "$(BUILDDETAIL)" == "keepcomp"
COMPLOGO =
COMPRESP = KEEP
LINKLOGO = -nologo
LINKRESP = NOKEEP
!endif
!if "$(BUILDDETAIL)" == "KEEPLINK" || "$(BUILDDETAIL)" == "keeplink"
COMPLOGO = -nologo
COMPRESP = NOKEEP
LINKLOGO =
LINKRESP = KEEP
!endif
!if "$(BUILDDETAIL)" == "QUIET" || "$(BUILDDETAIL)" == "quiet"
COMPLOGO = -nologo
COMPRESP = NOKEEP
LINKLOGO = -nologo
LINKRESP = NOKEEP
!endif
!if "$(NOLOGOS)" != ""
COMPLOGO = -nologo
LINKLOGO = -nologo
!endif
######################################################################
# Destination for messages
!ifdef NOTIME
TIMESTR=
ATSTR=
!else
TIMESTR=/H:M:S
ATSTR=at
!endif
!ifndef OUTPUT
! ifdef BUILDQUIET
OUTPUT= >nul
! else
OUTPUT=
! endif
!endif
#
# DOS doesn't let us redirect stderr output, so we use the following define
# to unify our output.
#
!if "$(HOST)" != "DOS"
OUTNUL= 1>nul 2>nul
!else
OUTNUL=
!endif
!ifndef OUTFIX
OUTFIX = $(OUTNUL)
!endif
######################################################################
#
# Set location to locate tools
# Empty toolpath so it can be used to check for invalid host type
TOOLPATH=
SDKTOOLPATH=
!if "$(HOST)" == ""
HOST = NT
!endif
HOSTBIN = .
######################################################################
#
# Set location to copy include files
HCOPY= ..\oleprx32\daytona
LIBCP=
SEDHCOPY= ..\oleprx32\daytona
######################################################################
#
# Misc tool defines
AWK= awk.exe
CAT= cat.exe
CHMODE= chmode.exe
CLASSGEN= classgen
CMP= fcom.exe
COFF= link32
COPY= copy /v
CP= $(COPY)
CTCOPY= xcopy /v /i
CVPACK= cvpack.exe
DEL= del
CVTRES= cvtres.exe
DOCGEN= docgen.exe
ECH= ech.exe
ECHOTIME= echotime
FLEX= flex.exe
GENLRF= genlrf.exe
GENORD= genord.exe
IN= $(SLMTOOLS)\in.exe
INCLUDES= includes.exe
MAPSYM= mapsym.exe
MC= mc.exe
MIDL= midl
MKHEADER= mkheader
MKTMPLAT= mktmplat
MKTYPLIB= mktyplib
MUNGE= munge.exe
OUT= out.exe
RC= rc
REGTLB= regtlb.exe
SED= sed.exe
SIFTTOOL= sifttool.exe
SORT= sort.exe
SPLITSYM= splitsym.exe
TOUCH= touch.exe
UNIQ= uniq.exe
UNREGTLB= unregtlb.exe
YACC= yacc.exe
IMPORTNT = $(SDK_PATH)
TYPESDIR = $(BASEDIR)\private\oleutest\balls
SCRIPTS = $(BASEDIR)\private\oleutest\balls
CAIROINC = $(BASEDIR)\private\cinc
BASEINC =$(TYPESDIR)\idl
PROXYINC =$(TYPESDIR)\oleprx32\$(PLATDIR)
############################################################################
#
# Object files and resource files
#
CXX_OBJS=$(CXXFILES:.cxx=.obj)
CXX_OBJS=$(CXX_OBJS) $(CPPFILES:.cpp=.obj)
C_OBJS=$(CFILES:.c=.obj)
RESFILES = $(RCFILES:.rc=.res)
TYPELIBS = $(TDLFILES:.tdl=.tlb)
MKHDR_H_FILES = $(TDLFILES:.tdl=.h)
MKHDR_C_FILES = $(TDLFILES:.tdl=.c)
MIDL_INCS=$(IDLFILES:.idl=.h)
MIDL_PROXYS=$(IDLFILES:.idl=.h)
# Hack alert:
#
# We want to use $(OBJDIR) in the replacement string, like this:
#
# CXX_OBJS = $(CXX_OBJS:.\=$(OBJDIR)\)
#
# Unfortunately, nmake wants no part of it. As a workaround, we test for
# each known value of $(OBJDIR) and perform the individual substitution
# for each.
!if "$(MKHEADER_OUT_DIR)"==""
MKHEADER_OUT_DIR=$(TYPESDIR)\oleprx32\$(PLATDIR)\
!endif
!if "$(MIDL_OUT_DIR)"==""
MIDL_PROXYS=$(MIDL_PROXYS:.\=..\oleprx32\daytona\)
MIDL_INCS=$(MIDL_INCS:.\=..\oleprx32\daytona\)
MKHDR_H_FILES=$(MKHDR_H_FILES:.\=..\oleprx32\daytona\)
MKHDR_C_FILES=$(MKHDR_C_FILES:.\=..\oleprx32\daytona\)
MIDL_HDR_OUT_DIR=..\oleprx32\daytona
!else
MIDL_INCS=$(MIDL_INCS:.\=..\oleprx32\daytona\)
MIDL_HDR_OUT_DIR=..\oleprx32\daytona
!endif
!if "$(MIDL_OUT_DIR)"==""
MIDL_OUT_DIR=..\oleprx32\$(PLATDIR)
MIDL_HDR_OUT_DIR=..\oleprx32\daytona
!endif
!if "$(OBJDIR)" == "OBJ\I386"
CXX_OBJS = $(CXX_OBJS:.\=.\OBJ\I386\)
C_OBJS = $(C_OBJS:.\=.\OBJ\I386\)
RESFILES = $(RESFILES:.\=OBJ\I386\)
TYPELIBS = $(TYPELIBS:.\=.\OBJ\i386\)
! elseif "$(OBJDIR)" == "OBJ\MIPS"
CXX_OBJS = $(CXX_OBJS:.\=.\OBJ\MIPS\)
C_OBJS = $(C_OBJS:.\=.\OBJ\MIPS\)
RESFILES = $(RESFILES:.\=OBJ\MIPS\)
TYPELIBS = $(TYPELIBS:.\=.\OBJ\MIPS\)
! elseif "$(OBJDIR)" == "OBJ\ALPHA"
CXX_OBJS = $(CXX_OBJS:.\=.\OBJ\ALPHA\)
C_OBJS = $(C_OBJS:.\=.\OBJ\ALPHA\)
RESFILES = $(RESFILES:.\=OBJ\ALPHA\)
TYPELIBS = $(TYPELIBS:.\=.\OBJ\ALPHA\)
! else
! error Unknown object directory: $(OBJDIR)
!endif # $(OBJDIR)
############################################################################
# Rules for generating .h, and .rc files from .mc files.
#
#
#
#
# bugbug, what about chicago builds?
# bugbug, maybe we should use other variable besides
# MIDL_OUT_DIR to determine which directory to generate
# message flies in.
!if "$(MESSAGE_FILES)" != ""
MCRESOURCE=$(MESSAGE_FILES:.mc=.rc)
MESSAGE_H_FILES=$(MESSAGE_FILES:.mc=.h)
!if "$(PLATDIR)" == "DAYTONA"
MESSAGE_H_FILES=$(MESSAGE_H_FILES:.\=..\..\..\..\public\sdk\inc\)
MC_OUT_DIR=..\..\..\..\public\sdk\inc
!endif
!if "$(OBJDIR)" == "OBJ\I386"
MCRESOURCE = $(MCRESOURCE:.\=.\OBJ\I386\)
!elseif "$(OBJDIR)"== "OBJ\MIPS"
MCRESOURCE = $(MCRESOURCE:.\=.\OBJ\MIPS\)
!elseif "$(OBJDIR)"== "OBJ\ALPHA"
MCRESOURCE = $(MCRESOURCE:.\=.\OBJ\ALPHA\)
!else
!error Uknown object directory : $(OBJDIR)
!endif
MCBIN= $(OBJDIR)\msg00001.bin
all: $(MESSAGE_H_FILES)
.mc{$(MC_OUT_DIR)}.h:
@echo Building $< $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
$(MC) $(MCFLAGS) $< -h $(HCOPY) $(OUTPUT)
!if "$(OPSYS)"=="NT1X" && "$(NORELEASE_CHICAGO)"==""
@-md $(HCOPY)\chicago $(OUTNUL)
@echo Build_Status Releasing $(@B).h files to $(HCOPY)\chicago
$(COPY) $(HCOPY)\$(@B).h $(HCOPY)\chicago $(OUTNUL)
!endif
clean: cleancomp
-$(DEL) $(MESSAGE_H_FILES:.mc=.h) $(MCRESOURCE) $(MCBIN) $(OUTNUL)
!endif
############################################################################
#
# Rules for generating .tlb, .hxx and .cxx files from .tdl files
# These should be before any target rules, to force code
# generation before compiling.
#
!if "$(TDLFILES)" != ""
all: $(TYPELIBS)
.tdl{$(OBJDIR)}.tlb:
@-md $(OBJDIR) $(OUTNUL)
$(MKTYPLIB) $(MKTYPLIBFLAGS) $(CINC) $(TLBDIRS) -tlb$@ $<
$(MKHEADER) $(MKHEADERFLAGS) -o $(HCOPY)\$(@B).h -u $(MKHEADER_OUT_DIR)\$(@B).c -x $(@)
$(REGTLB) $@
$(TDLFILES): $(IDLFILES)
DEPENDFILES = $(TYPELIBS) $(MKHDR_H_FILES) $(MKHDR_C_FILES) $(DEPENDFILES)
TYPELIBS = $(TYPELIBS:.\=)
CLEANFILES = $(CLEANFILES) $(TYPELIBS) $(MKHDR_H_FILES) $(MKHDR_C_FILES)
!endif
############################################################################
#
# Generate .h and .c files from .idl files
# 1
# NOTE: this rule should appear before any target rules, to force
# idl-to-h translation to happen first.
!if "$(IDLFILES)" != ""
all: $(MIDL_INCS)
clean: cleanidl
#
# Due to command line limitations (yes, even NT has them), we write a script
# to delete the idl output files.
#
cleanidl:
@type << | $(SED) -f << > idlclean.bat
$(MIDL_INCS:.h=.h
)
$(MIDL_PROXYS:.h=_?.c
)
$(MIDL_PROXYS:.h=_?.cxx
)
$(MIDL_PROXYS:.h=_?.h
)
$(MIDL_PROXYS:.h=_?.hxx
)
<<NOKEEP
1i\
\@echo off \
\@echo Build_Status Deleting MIDL output files...
/\./!d
s/^/del /g
s/$$/ $(OUTNUL)/g
<<NOKEEP
@-idlclean.bat
@-$(DEL) idlclean.bat $(OUTNUL)
DEPENDFILES = $(DEPENDFILES) $(MIDL_INCS)
!endif # IDLFILES
##################################################################
#
# Rules to build the composite .h file from midl generated files #
#
#
!if "$(ITFS_BASE)" != "" && "$(ITFS_DIR)" != ""
ITFS_H = $(ITFS_BASE).h
all: $(ITFS_DIR)\$(ITFS_H)
$(ITFS_DIR)\$(ITFS_H): $(MIDL_INCS) $(ITFS_BASE).x $(ITFS_BASE).y
@echo Build_Status Building $(ITFS_DIR)\$(ITFS_H) ...
@del $(ITFS_DIR)\$(ITFS_H) $(OUTNUL)
#
# Add the file header and base #includes.
#
@type $(ITFS_BASE).x >> $(ITFS_DIR)\$(ITFS_H)
@echo @echo off > copyall.cmd
@echo cd $(ITFS_DIR)\ >> copyall.cmd
@type << | $(SED) -f << >> copyall.cmd
$(BASE_HFILES: =
)
<<NOKEEP
/\./!d
s/\.\\//g
s/^/\@sed -e \"\/^\#include\/d\" -e \"\/\\\/\\\/ File\\\:\/d" /g
s/$$/ \>\> $(ITFS_H)/g
<<NOKEEP
@echo cd $(MAKEDIR) >> copyall.cmd
@copyall.cmd
@del copyall.cmd
#
# Copy the initial forward declarations from all the derived h files.
#
@type << >> $(ITFS_DIR)\$(ITFS_H)
// Forward declarations for typedefs in this file
<<NOKEEP
@type << > $(ITFS_DIR)\forward.sed
/\/\* Forward Declarations \*\// {
N
s/\/\* Forward Declarations \*\/\ntypedef/xtypedef/
}
/xtypedef/!d
s/xtypedef/typedef/
<<NOKEEP
@echo @echo off > forward.cmd
@echo cd $(ITFS_DIR) >> forward.cmd
@type << | $(SED) -f << >> forward.cmd
$(DERIVED_HFILES: =
)
<<NOKEEP
/\./!d
s/\.\\//g
s/^/\@sed -f forward.sed /g
s/$$/ \>\> $(ITFS_H)/g
<<NOKEEP
@echo cd $(MAKEDIR) >> forward.cmd
@forward.cmd
@del forward.cmd
@del $(ITFS_DIR)\forward.sed $(OUTNUL)
#
# Copy the derived h files in. Strip off any #includes along the way.
#
@echo @echo off > copyall.cmd
@echo cd $(ITFS_DIR)\ >> copyall.cmd
@type << | $(SED) -f << >> copyall.cmd
$(DERIVED_HFILES: =
)
<<NOKEEP
/\./!d
s/\.\\//g
s/^/\@sed -e \"\/^\#include\/d\" -e \"\/\\\/\\\/ File\\\:\/d" /g
s/$$/ \>\> $(ITFS_H)/g
<<NOKEEP
@echo cd $(MAKEDIR) >> copyall.cmd
@copyall.cmd
@del copyall.cmd
#
# Append API prototypes to the end of the file
#
@type $(ITFS_BASE).y >> $(ITFS_DIR)\$(ITFS_H)
#
# Finally, close the file #ifdef
#
@type << >> $(ITFS_DIR)\$(ITFS_H)
#ifndef RC_INVOKED
#pragma pack()
#endif // RC_INVOKED
#endif // __$(ITFS_BASE)_H__
<<NOKEEP
!if "$(OPSYS)"=="NT1X" && "$(NORELEASE_CHICAGO)" == ""
@echo "Releaseing composite .h file for Chicago" $(OUTPUT)
$(COPY) $(ITFS_DIR)\$(ITFS_BASE).h $(HCOPY)\chicago
!endif
!endif # ITFS_BASE
##################################################################
#
# Rules to build the composite .h file from mc generated files #
#
#
!if "$(MCERRS_BASE)" != "" && "$(MCERRS_DIR)" != ""
MCERRS_H = $(MCERRS_BASE).h
all: $(MCERRS_DIR)\$(MCERRS_H)
$(MCERRS_DIR)\$(MCERRS_H): $(MESSAGE_FILES)
@echo Build_Status Building $(MCERRS_DIR)\$(MCERRS_H) ...
@del $(MCERRS_DIR)\$(MCERRS_H) $(OUTNUL)
#
# Add the file header and base #includes.
#
@echo @echo off > copyall.cmd
@echo cd $(MCERRS_DIR)\ >> copyall.cmd
@type << | $(SED) -f << >> copyall.cmd
$(MESSAGE_FILES:.mc=.h
)
<<NOKEEP
/\./!d
s/\.\\//g
s/^/\@sed -e \"\/\\\/\\\/ File\\\:\/d" /g
s/$$/ \>\> $(MCERRS_H)/g
<<NOKEEP
@echo cd $(MAKEDIR) >> copyall.cmd
@copyall.cmd
@del copyall.cmd
!if "$(OPSYS)"=="NT1X" && "$(NORELEASE_CHICAGO)" == ""
@echo "Releaseing composite .h file for Chicago" $(OUTPUT)
$(COPY) $(MCERRS_DIR)\$(MCERRS_BASE).h $(HCOPY)\chicago
!endif
cleancomp:
@del $(MCERRS_DIR)\$(MCERRS_H)
!endif
############################################################################
#
# Determine target type (DLL, EXE, or LIB)
#
!ifdef TARGET
TARGET = $(TARGET:.\=)
CLEANTARGET= $(CLEANTARGET) $(TGTDIR)\$(TARGET)
#
# Is it a DLL?
#
TARGETBASE=$(TARGET:.dll=)
! if "$(TARGETBASE)" != "$(TARGET)"
all: $(YACCFILES:.y=.h) $(TGTDIR)\$(TARGET) copy
TARGETTYPE=dll
DLLFILES= $(DLLFILES) $(TGTDIR)\$(TARGET)
! else
#
# Is it an EXE?
#
TARGETBASE=$(TARGET:.exe=)
! if "$(TARGETBASE)" != "$(TARGET)"
all: $(YACCFILES:.y=.h) $(TGTDIR)\$(TARGET) copy
TARGETTYPE=exe
EXEFILES= $(EXEFILES) $(TGTDIR)\$(TARGET)
! else
#
# Is it a LIB?
#
TARGETBASE=$(TARGET:.lib=)
! if "$(TARGETBASE)" != "$(TARGET)"
all: $(YACCFILES:.y=.h) $(OBJDIR)\$(TARGET) copy
TARGETTYPE=lib
! if "$(DEFFILE)" == ""
NO_IMPLIB= TRUE
! endif
! else
#
# This is a special target used when we have files to RELEASE
# but nothing to actually build.
#
! if "$(TARGET)" == "RELEASE"
all:
! else
#
# We don't know what it is.
#
! error Unrecognized target type: $(TARGET)
! endif # !RELEASE
! endif # !.lib
! endif # !.exe
! endif # !.dll
!endif # TARGET
#
# If no name was given for a DEF file, make one up.
#
DEFEXT = f
!ifndef DEFBASE
DEFBASE = $(TARGETBASE)
!endif
!ifndef DEFFILE
DEFFILE=$(DEFBASE).def
!endif
!if "$(NO_IMPLIB)" == ""
DEFFILELIB = $(OBJDIR)\$(DEFBASE).lib
DEFFILEEXP = $(OBJDIR)\$(DEFBASE).exp
!endif
######################################################################
# Make sure INCLUDE and LIB are null.
INCLUDE=
LIB=
######################################################################
# Independent definitions for C compiler, LINK
CFLAGS= $(CFLAGS) -D_WINDOWS -ZB64
# The 16 bit OLE DOCFILE libraries do not want UNICODE defined.
!ifndef NO_UNICODE
! if "$(OPSYS)" == "NT" || "$(OPSYS)" == "NT1X" || "$(OPSYS)" == "NTKERNEL"
CFLAGS = $(CFLAGS) -DUNICODE -D_UNICODE
! endif
!endif
CINC= -I. $(CINC)
CINC= $(CINC) -I$(TYPESDIR)\oleprx32\$(PLATDIR)
CINC= $(CINC) -I$(CAIROINC) -I$(BASEINC)
######################################################################
# Debug/Retail definitions
#
# These are hardware independant debug/retail flags
#
# NOTE: NT kernel include files require that DBG be defined.
!if "$(BUILDTYPE)" == "DEBUG"
CDEBUGFLAGS = $(CDEBUGFLAGS) -DDBG=1 -DDEVL=1
!elseif "$(BUILDTYPE)" == "RETAIL"
CDEBUGFLAGS = $(CDEBUGFLAGS) -DDBG=0 -DDEVL=1
!else
CDEBUGFLAGS = $(CDEBUGFLAGS) -DDBG=0 -DDEVL=0
!endif
CFLAGS = $(CFLAGS) $(CDEBUGFLAGS)
######################################################################
#
# Generic Definitions
#
COMMON_LIBS = $(SDK_LIB_DEST)\$(PLATFORM)
CAIROLIB = $(COMMON_LIBS)\commnot.lib\
$(COMMON_LIBS)\compob32.lib\
$(COMMON_LIBS)\storag32.lib\
$(COMMON_LIBS)\propset.lib\
$(COMMON_LIBS)\ole232.lib\
$(COMMON_LIBS)\lnktrack.lib\
$(TYPESDIR)\oleprx32\$(PLATDIR)\$(OBJDIR)\uuid.lib\
$(COMMON_LIBS)\change.lib\
$(COMMON_LIBS)\events.lib\
$(COMMON_LIBS)\dsys.lib \
$(SDK_LIB_PATH)\ntdll.lib
######################################################################
#
# Win32 (NT 1.x/NT 2.0/Chicago/Win32s) Definitions
#
!if "$(PROCESSOR_ARCHITECTURE)" == "x86" || \
"$(PROCESSOR_ARCHITECTURE)" == "MIPS" || \
"$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
#--------------------------------------
# X86 Specific Flags
#--------------------------------------
CC= cl386
BUILD_EXE_COMPFLAG= cl386
BUILD_EXE_PROCTYPE=i386
CPLATFORM= -Di386=1 -D_X86_=1
CFLAGS = $(CFLAGS) -G4f -Zl -Bbb1
# Chicago doesn't have Unicode API's
! if "$(OPSYS)" == "DOS" || "$(OPSYS)" == "WIN16"
CFLAGS = $(CFLAGS) -UUNICODE -U_UNICODE
! endif
!if "$(CALLCONV)" == ""
! ifndef 386_STDCALL
386_STDCALL = TRUE
! endif
! if "$(386_STDCALL)" == "TRUE"
CFLAGS = $(CFLAGS) -Gz
! else
CFLAGS = $(CFLAGS) -Gd
! endif
!else
CFLAGS = $(CFLAGS) $(CALLCONV)
!endif
#
# Disable FPO for now. If/when we determine if the debuggers can handle
# it, and the CriticalSection code isn't dependent on the stack frame, and
# the Stack walk-back code is updated, we should turn it back on...
#
! ifndef OPTFLAGS
! if "$(BUILDTYPE)" == "DEBUG" || "$(BUILDTYPE)" == "RETAIL"
OPTFLAGS = -Ogit -Oy-
! elseif "$(BUILDTYPE)" == "RELEASE" || "$(BUILDTYPE)" == "PROFILE"
OPTFLAGS = -Owx -Oy- -Ob1
! endif
! endif
# Make sure intrinsics are always on.
OPTFLAGS = $(OPTFLAGS) -Oi
# Hack to workaround cvpack types limit when building ole2prxy.dll in
# common\types. s/b revisted once the linker and cvpack are one.
# BryanT 8/10/93
!if "$(NO_DEBUG)" == "1"
NTDEBUGTYPE = ntsd
!else
NTDEBUGTYPE = windbg
!endif
DLLENTRY = @12
DRIVERENTRY = @8
#
# (To be moved to NT section when the MIPS linker understands this flag)
#
LFLAGS = $(LFLAGS) -merge:.CRT=.data
#
# The CUDA Linker requires this if there is no entrypoint (resource only DLL)
#
! ifdef NOEXPORTS
DLLSTARTUP= -NOENTRY
! endif
LFLAGS = $(LFLAGS) -NODEFAULTLIB -OPT:REF -RELEASE
OBJFILES = $(OBJFILES) $(X86_OBJFILES)
! elseif "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
#--------------------------------------
# MIPS Specific Flags
#--------------------------------------
CC= mcl
BUILD_EXE_COMPFLAG= ClMips
BUILD_EXE_PROCTYPE=mips
CPLATFORM= -DMIPS=1 -D_MIPS_=1 -DR4000=1
CFLAGS = $(CFLAGS) -QmipsOb2000 -QmipsG2
! ifndef OPTFLAGS
! if "$(BUILDTYPE)" == "DEBUG" || "$(BUILDTYPE)" == "RETAIL"
OPTFLAGS = -Oglt
! elseif "$(BUILDTYPE)" == "RELEASE" || "$(BUILDTYPE)" == "PROFILE"
OPTFLAGS = -Owx -Ob1
! endif
! endif
DLLENTRY =
DRIVERENTRY =
! if "$(TARGETTYPE)" == "exe"
LFLAGS = $(LFLAGS) -GPSIZE:32
! endif
!ifdef NEW_LINKER
! ifdef NOEXPORTS
DLLSTARTUP= -NOENTRY
! endif
LFLAGS = $(LFLAGS) -NODEFAULTLIB -OPT:REF -RELEASE
! if "$(NO_DEBUG)" == "1"
NTDEBUGTYPE = ntsd
! else
NTDEBUGTYPE = windbg
! endif
!else
#
# The MIPS Linker doesn't use a special switch to disable the entrypoint.
#
! ifdef NOEXPORTS
DLLSTARTUP=
! endif
LFLAGS = $(LFLAGS) -IGNORE:505
#
# The MIPS Linker doesn't understand the nologo switch... Disable it for now.
#
LINKLOGO =
!endif
# BUGBUG: For GPSIZE to really be useful, the compiler switches should include
# -Gt32 and we should add libm.lib to the LIBS macros. However, I'm
# pretty sure Steve (shanson) and Sundeep haven't implemented the
# necessary code for it to work with DLL's... So for now, we just add
# if to the exe link flags in case some library we link with was built
# with -Gt... BryanT 6/20/93
OBJFILES = $(OBJFILES) $(MIPS_OBJFILES)
! elseif "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
#--------------------------------------
# ALPHA Specific Flags
#--------------------------------------
CC= claxp
BUILD_EXE_COMPFLAG= ClAlpha
BUILD_EXE_PROCTYPE=alpha
CPLATFORM= -DALPHA=1 -D_ALPHA_=1 -DJENSEN
! ifndef OPTFLAGS
! if "$(BUILDTYPE)" == "DEBUG" || "$(BUILDTYPE)" == "RETAIL"
OPTFLAGS = -Oglt
! elseif "$(BUILDTYPE)" == "RELEASE" || "$(BUILDTYPE)" == "PROFILE"
OPTFLAGS = -Owx -Ob1
! endif
! endif
DLLENTRY =
DRIVERENTRY =
#
# The ALPHA Linker doesn't use a special switch to disable the entrypoint.
#
! ifdef NOEXPORTS
DLLSTARTUP=
! endif
LFLAGS = $(LFLAGS) -IGNORE:505
#
# The ALPHA Linker doesn't understand the nologo switch... Disable it for now.
#
LINKLOGO =
OBJFILES = $(OBJFILES) $(ALPHA_OBJFILES)
! endif # PROCESSOR_ARCHITECTURE == x86 / MIPS / ALPHA
#--------------------------------------
# NT/Chicago(DOS) Specific Flags
#--------------------------------------
CPLATFORM = $(CPLATFORM) -DFLAT
CFLAGS = $(CFLAGS) -Zp8 -Ze -Gys -W3 -FI$(BASEDIR)\private\cinc\warning.h
!if "$(OPSYS)" == "NT" || "$(OPSYS)" == "NTKERNEL"
CFLAGS = $(CFLAGS) -DCAIROLE_BUILD
!endif
# WIN32 == 50 -> Win32s
# WIN32 == 100 -> NT version 1.0
# WIN32 == 200 -> Chicago version 1.0
# WIN32 == 300 -> Cairo (NT version 2.0)
!if "$(OPSYS)" == "WIN16"
CPLATFORM = $(CPLATFORM) -DWIN32=50 -D_WIN32S_=50
!elseif "$(OPSYS)" == "NT1X"
CPLATFORM = $(CPLATFORM) -DWIN32=100 -D_NT1X_=100
!elseif "$(OPSYS)" == "DOS"
CPLATFORM = $(CPLATFORM) -DWIN32=200 -D_CHICAGO_=200
!elseif "$(OPSYS)" == "NT" || "$(OPSYS)" == "NTKERNEL"
CPLATFORM = $(CPLATFORM) -DWIN32=300 -D_CAIRO_=300
!else
!error Unknown OPSYS: $(OPSYS)
!endif
!ifdef PERFSNAP
CFLAGS = $(CFLAGS) -DPERFSNAP=1
!endif
!ifdef NO_OLE
INCLUDES_FLAGS = $(INCLUDES_FLAGS) -nole2.h
CFLAGS = $(CFLAGS) -DNOOLETYPES
!else
CFLAGS = $(CFLAGS) -DINC_OLE2
!endif
IDLFLAGS = $(IDLFLAGS) -Zp8
NO_SPLITSYM = TRUE # Reenable when commnot understands .dbg files
IMAGE_TYPE_COFF = TRUE
! if "$(BUILDTYPE)" == "RELEASE"
DBGFLAGS =
! else
DBGFLAGS = -Z7
! endif
! if "$(NO_STRICT)" == ""
CFLAGS = $(CFLAGS) -DSTRICT
! else
CFLAGS = $(CFLAGS) -DNO_STRICT
! endif
CFLAGS = $(CFLAGS) $(OPTFLAGS) $(DBGFLAGS) $(CPLATFORM)
! if "$(TARGETTYPE)" != "sys" && !defined(USE_STDCRT)
USE_MSVCRT=TRUE
! endif
! ifdef USE_MSVCRT
CFLAGS= $(CFLAGS) -D_MT -D_DLL
MTHREAD= 1
! else
! if "$(TARGETTYPE)" == "dll" || "$(MTHREAD)" == "1"
CFLAGS= $(CFLAGS) -D_MT
! endif
! endif
WILDCARDOBJ = $(RTLIBDIR)\setargv.obj
! ifdef WILDCARDS
OBJFILES = $(OBJFILES) $(WILDCARDOBJ)
! endif
AFLAGS= $(AFLAGS) -Ml -W2 -Zi -t
CRTINC= $(OSINC)\crt
RTLIBDIR= $(OSLIBDIR)
! if "$(OPSYS)" == "NT" || "$(OPSYS)" == "NTKERNEL"
RTLIBST= $(RTLIBDIR)\cairost.lib $(RTLIBDIR)\libc.lib
RTLIBMT= $(RTLIBDIR)\cairomt.lib $(RTLIBDIR)\libcmt.lib
RTLIBCRTDLL= $(RTLIBDIR)\crtdll.lib
RTLIBSYS= $(RTLIBDIR)\cairoker.lib $(RTLIBDIR)\libcnt.lib
! else
RTLIBST= $(RTLIBDIR)\libc.lib
RTLIBMT= $(RTLIBDIR)\libcmt.lib
RTLIBSYS= $(RTLIBDIR)\libcnt.lib
RTLIBCRTDLL= $(RTLIBDIR)\crtdll.lib
! endif
RTLIBEXE= $(RTLIBST)
RTLIBEXEQ=
RTLIBEXEFP=
RTLIBEXEFPMT=
! ifdef USE_MSVCRT
RTLIBEXEMT= $(RTLIBCRTDLL)
RTLIBDLL= $(RTLIBCRTDLL)
! else
RTLIBEXEMT= $(RTLIBMT)
RTLIBDLL= $(RTLIBMT)
! endif
RPCLIBDIR= $(OSLIBDIR)
RPCNDRLIB= $(RPCLIBDIR)\RpcNdr.lib
RPCRTLIB= $(RPCLIBDIR)\RpcRt4.lib
RPCLIBS= $(RPCRTLIB) $(RPCLIBDIR)\ntdll.lib
! if "$(SUBSYSTEMVER)" == ""
SUBSYSTEMVER = 3.10
! endif
! if "$(NO_WINMAIN)" == ""
EXESTARTUP= -ENTRY:WinMainCRTStartup
SUBSYSTEM= WINDOWS,$(SUBSYSTEMVER)
! else
EXESTARTUP= -ENTRY:mainCRTStartup
! if "$(SUBSYSTEM)" == ""
SUBSYSTEM= CONSOLE,$(SUBSYSTEMVER)
! else # Make sure the subsystem version is set
! if "$(SUBSYSTEM)" == "$(SUBSYSTEM:,=x)"
SUBSYSTEM= $(SUBSYSTEM),$(SUBSYSTEMVER)
! endif
! endif # allows override of subsystem
! endif
#
# For a perfsnap build, we use a modified version of dllentr2.obj
#
!if "$(PERFSNAP)" == "1"
STARTUPFILE=dllpsnap.obj
!else
STARTUPFILE=dllentr2.obj
!endif
#
# BugBug, what do we do about the DllEntryPoint for Daytona builds?
# now we jus link with dllentr2.obj.
! ifndef NOEXPORTS
! ifdef USE_MSVCRT
! if "$(OPSYS)" == "NT" || "$(OPSYS)" == "NTKERNEL"
DLLSTARTUP= -ENTRY:DllEntryPoint$(DLLENTRY)
! else
DLLSTARTUP= -ENTRY:DllEntryPoint$(DLLENTRY)
! endif
! else
DLLSTARTUP= -ENTRY:DllEntryPoint$(DLLENTRY)
! endif
! endif
SYSSTARTUP= -ENTRY:DriverEntry$(DRIVERENTRY)
!ifdef USE_OLE_MC
MCFLAGS= -r $(OBJDIR) -o
!else
MCFLAGS= -r $(OBJDIR)
!endif
RCFLAGS= $(RCFLAGS) -r $(CDEBUGFLAGS) $(CPLATFORM) $(CINC) -fo
RCEXEFLAGS= $(RCEXEFLAGS)
LINK= $(COFF) -link $(LINKLOGO)
LIBUTIL= $(COFF) -lib $(LINKLOGO)
LFLAGS= $(LFLAGS) \
-MACHINE:$(PLATFORM) \
-MAP:$(OBJDIR)\$(TARGETBASE).map \
!if "$(OPSYS)" == "NT" || "$(OPSYS)" == "NTKERNEL"
-VERSION:2.0 \
!else
-VERSION:1.0 \
!endif
-SECTION:.rsrc,r \
-SECTION:.guids,r
! if "$(BUILDTYPE)" == "RELEASE"
LFLAGS= $(LFLAGS) -DEBUG:none
! else
! if "$(TARGETTYPE)" == "sys"
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
LFLAGS= $(LFLAGS) -DEBUG:notmapped,full -DEBUGTYPE:both,fixup
NTDEBUGTYPE=windbg
! else
LFLAGS= $(LFLAGS) -DEBUG:notmapped,full -DEBUGTYPE:coff
NTDEBUGTYPE=ntsd
! endif
! else
! if "$(NTDEBUGTYPE)" == "windbg"
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
LFLAGS= $(LFLAGS) -DEBUG:mapped,full -DEBUGTYPE:both,fixup
! else
LFLAGS= $(LFLAGS) -DEBUG:mapped,full -DEBUGTYPE:both
! endif
! else
LFLAGS= $(LFLAGS) -DEBUG:mapped,full -DEBUGTYPE:coff
! endif
! endif
! endif
LFLAGSEXE= $(LFLAGS) -ALIGN:0x1000 -SUBSYSTEM:$(SUBSYSTEM)
LFLAGSDLL= $(LFLAGS) -DLL -ALIGN:0x1000 -SUBSYSTEM:$(SUBSYSTEM)
LFLAGSSYS= $(LFLAGS) -DLL:system -ALIGN:0x200
# Chicago and Win32s need relocations
!if "$(OPSYS)" != "DOS" && "$(OPSYS)" != "WIN16"
LFLAGSEXE= $(LFLAGSEXE) -FIXED
!endif
LIBFLAGS= -MACHINE:$(PLATFORM) -DEBUGTYPE:BOTH
! ifndef IMAGEBASE
! if "$(TARGETTYPE)" == "sys"
IMAGEBASE = 0x10000
! elseif "$(TARGETTYPE)" == "dll" || "$(TARGETTYPE)" == "cpl"
! ifdef COFFBASE
IMAGEBASE= @$(TYPESDIR)\coffbase.txt,$(COFFBASE)
! else
! if "$(RELEASE)" != ""
!error *** BUILD ERROR - Cannot set RELEASE w/o a COFFBASE setting ***
! endif
! endif
! else
IMAGEBASE= @$(TYPESDIR)\coffbase.txt,usermode
! endif
! endif
IMAGEBASE= -BASE:$(IMAGEBASE)
SPLITSYMFLAGS= -v
!endif # $(PROCESSOR_ARCHITECTURE) == x86/MIPS/ALPHA
##################################################
# OS dependent Definitions for C compiler
#
# These are definitions which will change for each flavor of Win32
# supported (NT, DOS)
#
!if "$(PROCESSOR_ARCHITECTURE)" == "x86" || "$(PROCESSOR_ARCHITECTURE)" == "MIPS" || "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
!if "$(OPSYS)" == "NT" || "$(OPSYS)" == "NT1X"
OSLIBDIR= $(IMPORTNT)\lib\$(PLATFORM)
OSINC= $(IMPORTNT)\inc
!if "$(OPSYS)" == "NT"
CAIROOSINC=$(IMPORTNT)\inc
!elseif "$(OPSYS)" == "NT1X"
CAIROOSINC=$(IMPORTNT)\inc
!endif
RPCINC= $(IMPORTNT)\inc
!else
!error Unknown OPSYS: $(OPSYS)
!endif
OSLIBEXE= $(OSLIBDIR)\gdi32.lib $(OSLIBDIR)\kernel32.lib \
$(OSLIBDIR)\user32.lib $(OSLIBDIR)\advapi32.lib
OSLIBEXE= $(OSLIBEXE) $(EXTRAOSLIBS)
! if "$(PROFILE)" == "TRUE"
OSLIBEXE= $(OSLIBEXE) $(OSLIBDIR)\cap.lib
! endif # "$(PROFILE)" == "TRUE"
OSLIBDLL= $(OSLIBEXE)
OSLIBSYS= $(OSLIBDIR)\ntoskrnl.lib $(OSLIBDIR)\hal.lib $(EXTRAOSLIBS)
! if "$(IDLBASE)" != ""
OSLIBEXE= $(OSLIBEXE) $(RPCNDRLIB)
OSLIBDLL= $(OSLIBDLL) $(RPCNDRLIB)
! endif
!endif # PROCESSOR_ARCHITECTURE == x86/MIPS/ALPHA
CINC= $(CINC) -I$(CRTINC) -I$(CAIROOSINC) -I$(OSINC) -I$(RPCINC)
####################################################################
#
# Defines for the SDK Tools.
#
MKHEADERFLAGS = $(MKHEADERFLAGS)
MKTYPLIBFLAGS = $(MKTYPLIBFLAGS) -cpp_cmd $(CC)
MKTMPLATFLAGS = $(MKTMPLATFLAGS)
# update TLBDIRS to point to the location of the master winole
# type library. Currently this is in $(BASEINC)\$(OBJDIR)
TLBDIRS = $(TLBDIRS) -L$(BASEINC)\$(OBJDIR)
######################################################################
#
# Generic rules to build OBJs from C, and CXX files.
#
CLOBJ= $(CC) $(CFLAGS) $(OCFLAGS) $(CINC) $(GCFLAGS) -c
ALLCFLAGS = $(CFLAGS) $(OCFLAGS) $(GCFLAGS) -c
IDLMIDLFLAGS = $(MIDLFLAGS) $(IDLFLAGS)
#####################################################################
#
# Rules for generating precompiled headers
#
# BUGBUG: This business with adding a dummy function to the end of the pch
# is necessitated by the compiler not doing it for us. By doing
# it, we force the linker to add the module to the library. We
# also create a .lic (Link Include) file that will follow the library
# around and force the module to be linked in to the final image
# so cvpack can find the types data. 4-14-93 BryanT
#
# Define NEW_PCH_BUILD to eliminate this problem. Instead of generating
# a dummy function and the .lic file, we use -Yl on the compile line with
# the name of the target. This causes the compiler to add a special
# symbol to the pch file. Not turned on for the full build because
# Centaur doesn't support it yet. 9-24-93 BryanT
#
!if "$(PCHDIR)" == ""
PCHDIR = $(MAKEDIR)
!endif
CINC = -I$(PCHDIR) $(CINC)
PCH_SECRET_NAME = __@@_PchDebugInfoLibrary
DUMFUNC = $(PCH_SECRET_NAME)_$(TARGETBASE)_$(TARGETTYPE)
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
DUMINCLUDE = -INCLUDE:_$(DUMFUNC)
! else
DUMINCLUDE = -INCLUDE:$(DUMFUNC)
! endif
PCHOBJDIR = $(PCHDIR)\$(OBJDIR)
# --------------------------- PXXFILE Support ------------------------
#bugbug
#work around for precompiled header problem.
!if "$(NTNOPCH)"!=""
PXXFILE=
!endif
!if "$(PXXFILE)" != ""
PXXFILE = $(PXXFILE:.\=)
PXXSOURCE = $(PCHDIR)\$(PXXFILE)
PXXHEADER = $(PCHOBJDIR)\$(PXXFILE:.cxx=.pxh)
PRECOMPXXOBJ = $(PCHOBJDIR)\$(PXXFILE:.cxx=.obj)
PXXLIC = $(PCHOBJDIR)\$(PXXFILE:.cxx=.lxp)
PCH_CXX_OPT = -Yu -Fp$(PXXHEADER)
!if "$(PROCESSOR_ARCHITECTURE)" == "MIPS" || "$(PROCESSOR_ARCHITECTURE)" == "x86" || "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
PCH_CXX_NAME = -Yl$(TARGETBASE)_$(TARGETTYPE)
!else
PCH_CXX_NAME =
!endif
! ifndef NEW_PCH_BUILD
$(PXXHEADER) $(PXXLIC): $(PXXSOURCE)
! if "$(PCHDIR)" == "$(MAKEDIR)"
@-md $(OBJDIR) $(OUTNUL)
$(CC) $(COMPLOGO) @<<$(OBJDIR)\$(PXXFILE:.cxx=.rsp)
$(ALLCFLAGS: =
)
$(CINC: =
)
-Yc
$(PCH_CXX_NAME)
-Fp$(PXXHEADER)
-Fo$(PRECOMPXXOBJ)
-Tp$(PXXSOURCE)
<<$(COMPRESP)
@echo $(DUMINCLUDE) > $(PXXLIC)
! else
@-cd $(PCHDIR)
@-$(MAKE) -$(MAKEFLAGS)
@-cd $(MAKEDIR)
! endif
! else # NEW_PCH_BUILD
$(PXXHEADER): $(PXXSOURCE)
! if "$(PCHDIR)" == "$(MAKEDIR)"
@-md $(OBJDIR) $(OUTNUL)
$(CC) $(COMPLOGO) @<<$(OBJDIR)\$(PXXFILE:.cxx=.rsp)
$(ALLCFLAGS: =
)
$(CINC: =
)
-Yc
$(PCH_CXX_NAME)
-Fp$(PXXHEADER)
-Fo$(PRECOMPXXOBJ)
-Tp$(PXXSOURCE)
<<$(COMPRESP)
! else
@-cd $(PCHDIR)
@-$(MAKE) -$(MAKEFLAGS)
@-cd $(MAKEDIR)
! endif
! endif # NEW_PCH_BUILD
!else # PXXFILE == ""
PCH_CXX_OPT =
PRECOMPXXOBJ =
!endif
# ---------------------------- PFILE Support -------------------------
!if "$(PFILE)" != ""
PFILE = $(PFILE:.\=)
PSOURCE = $(PCHDIR)\$(PFILE)
PHEADER = $(PCHOBJDIR)\$(PFILE:.c=.ph)
PRECOMPOBJ = $(PCHOBJDIR)\$(PFILE:.c=.obj)
PLIC = $(PCHOBJDIR)\$(PFILE:.c=.lp)
PCH_C_OPT = -Yu -Fp$(PHEADER)
!if "$(PROCESSOR_ARCHITECTURE)" == "MIPS" || "$(PROCESSOR_ARCHITECTURE)" == "x86" || "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
PCH_C_NAME = -Yl$(TARGETBASE)_$(TARGETTYPE)
!else
PCH_C_NAME =
!endif
! ifndef NEW_PCH_BUILD
$(PHEADER) $(PLIC): $(PSOURCE)
@-md $(OBJDIR) $(OUTNUL)
$(CC) $(COMPLOGO) @<<$(OBJDIR)\$(PFILE:.c=.rsp)
$(ALLCFLAGS: =
)
$(CINC: =
)
-Yc
$(PCH_C_NAME)
-Fp$(PHEADER)
-Fo$(PRECOMPOBJ)
-Tc$(PSOURCE)
<<$(COMPRESP)
@echo $(DUMINCLUDE) > $(PLIC)
! else # NEW_PCH_BUILD
$(PHEADER): $(PSOURCE)
@-md $(OBJDIR) $(OUTNUL)
$(CC) $(COMPLOGO) @<<$(OBJDIR)\$(PFILE:.c=.rsp)
$(ALLCFLAGS: =
)
$(CINC: =
)
-Yc
$(PCH_C_NAME)
-Fp$(PHEADER)
-Fo$(PRECOMPOBJ)
-Tc$(PSOURCE)
<<$(COMPRESP)
! endif # NEW_PCH_BUILD
!else # PFILE == ""
PCH_C_OPT =
PRECOMPOBJ =
!endif
!ifndef NEW_PCH_BUILD
# ----------------------- Library .LIC Support ------------------------
!if "$(TARGETTYPE)" == "lib" && ("$(PXXFILE)" != "" || "$(PFILE)" != "")
$(TGTDIR)\$(TARGET): $(TGTDIR)\$(TARGETBASE).lic
$(TGTDIR)\$(TARGETBASE).lic: $(PXXLIC) $(PLIC)
@-md $(OBJDIR) $(OUTNUL)
@-$(DEL) $@ $(OUTNUL)
@for %i in ($**) do @type %i >> $@
!endif
!endif # NEW_PCH_BUILD
#####################################################################
#
# Rules for c files
#
.c{$(OBJDIR)}.obj:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
@echo $(BUILD_EXE_COMPFLAG) $< $(CC) $(COMPLOGO) @$*.rsp
@$(CC) $(COMPLOGO) @<<$*.rsp
$(ALLCFLAGS: =
)
$(CINC: =
)
$(PCH_C_OPT: =
)
-Fo$(MAKEDIR)\$*.obj
$(MAKEDIR)\$<
<<$(COMPRESP)
!ifdef SIFTBUILD
$(SIFTTOOL) $(SIFTFLAGS) $*.obj
!endif
.c{$(OBJDIR)}.lst:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
@echo $(BUILD_EXE_COMPFLAG) $< $(CC) $(COMPLOGO) -Fc$*.lst @$*.rsp
@$(CC) $(COMPLOGO) -Fc$*.lst @<<$*.rsp
$(ALLCFLAGS: =
)
$(CINC: =
)
$(PCH_C_OPT: =
)
-Fo$(MAKEDIR)\$*.obj
$(MAKEDIR)\$<
<<$(COMPRESP)
#####################################################################
#
# Rules for cxx files
#
!if "$(PROCESSOR_ARCHITECTURE)" == "x86"
CFFLAGS = +L +m7 +H63
!elseif "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
CFFLAGS = +L +m7 +H63 +E$(IMPORTNT)\h\sdk\mipsxcpt.tab +M
!elseif "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
CFFLAGS = +L +m7 +H63 +E$(IMPORTNT)\h\sdk\alphxcpt.tab +M
!endif
.cxx{$(OBJDIR)}.obj:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
@echo $(BUILD_EXE_COMPFLAG) $< $(CC) $(COMPLOGO) @$*.rsp
@$(CC) $(COMPLOGO) @<<$*.rsp
$(ALLCFLAGS: =
)
$(CINC: =
)
$(PCH_CXX_OPT: =
)
-Fo$(MAKEDIR)\$*.obj
-Tp$(MAKEDIR)\$<
<<$(COMPRESP)
!ifdef SIFTBUILD
$(SIFTTOOL) $(SIFTFLAGS) $*.obj
!endif
.cxx{$(OBJDIR)}.lst:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
@echo $(BUILD_EXE_COMPFLAG) $< $(CC) $(COMPLOGO) -Fc$*.lst @$*.rsp
@$(CC) $(COMPLOGO) -Fc$*.lst @<<$*.rsp
$(ALLCFLAGS: =
)
$(CINC: =
)
$(PCH_CXX_OPT: =
)
-Fo$*.obj
-Tp$(MAKEDIR)\$<
<<$(COMPRESP)
.cpp{$(OBJDIR)}.obj:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
@echo $(BUILD_EXE_COMPFLAG) $< $(CC) $(COMPLOGO) @$*.rsp
@$(CC) $(COMPLOGO) @<<$*.rsp
$(ALLCFLAGS: =
)
$(CINC: =
)
$(PCH_CXX_OPT: =
)
-Fo$(MAKEDIR)\$*.obj
-Tp$(MAKEDIR)\$<
<<$(COMPRESP)
!ifdef SIFTBUILD
$(SIFTTOOL) $(SIFTFLAGS) $*.obj
!endif
.cpp{$(OBJDIR)}.lst:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
@echo $(BUILD_EXE_COMPFLAG) $< $(CC) $(COMPLOGO) -Fc$*.lst @$*.rsp
@$(CC) $(COMPLOGO) -Fc$*.lst @<<$*.rsp
$(ALLCFLAGS: =
)
$(CINC: =
)
$(PCH_CXX_OPT: =
)
-Fo$*.obj
-Tp$(MAKEDIR)\$<
<<$(COMPRESP)
############################################################################
#
# Build a Version resource (NT only) for every image in the build.
#
# The user has the choice of either defining their own version resource
# script or letting the build make one for them on the fly. If the user
# defines their own, set VERSION_RC in filelist.mk to point to a valid .rc
# file (with the same format as $(VERSION_RC), below) and don't add that
# file to the RCFILES macro in filelist.mk. If the user does not define
# VERSION_RC, build a default file by using TARGET_DESCRIPTION and
# (optionally) TARGET_INTERNAL_NAME to the internal name (By default, the
# target name minus the extension).
#
!ifdef IMAGE_TYPE_COFF
! if "$(OPSYS)" != "DOS" # BUGBUG: Chicago seems to fail on version resources BryanT 9/28/93
! if "$(TARGETTYPE)" != "lib" && "$(TARGET)" != "RELEASE" && "$(TARGET)" != ""
! if "$(VERSION_RC)" == ""
VERSION_RC = $(OBJDIR)\$(TARGETBASE).rc1
! ifndef TARGET_DESCRIPTION
! if "$(RELEASE)" != ""
!error *** BUILD ERROR - TARGET_DESCRIPTION not set. Aborting. ***
! endif
! endif
! if "$(TARGET_INTERNAL_NAME)" == ""
TARGET_INTERNAL_NAME = "$(TARGETBASE)"
! endif
# Set the major file type to one of DRV, APP, DLL, STATIC LIB, or UNKNOWN.
! if "$(TARGETTYPE)" == "dll"
VFT_TYPE = VFT_DLL
! elseif "$(TARGETTYPE)" == "exe"
VFT_TYPE = VFT_APP
! elseif "$(TARGETTYPE)" == "lib"
VFT_TYPE = VFT_STATIC_LIB
! else
VFT_TYPE = VFT_UNKNOWN
! endif # if "$(TARGETTYPE)" == "sys"
# The Minor file type distinguishes the type of driver. All DRV's in Cairo
# are currently SYSTEM drivers.
! if "$(TARGETTYPE)" == "sys"
VFT_TYPE2 = VFT2_DRV_SYSTEM
! else
VFT_TYPE2 = VFT2_UNKNOWN
! endif
all: $(VERSION_RC)
$(VERSION_RC): $(TYPESDIR)\makefile.inc
@-md $(OBJDIR) $(OUTNUL)
type << > $@
#include <windows.h>
#include <ntverp.h>
#define VER_FILETYPE $(VFT_TYPE)
#define VER_FILESUBTYPE $(VFT_TYPE2)
#define VER_FILEDESCRIPTION_STR $(TARGET_DESCRIPTION)
#define VER_INTERNALNAME_STR $(TARGET_INTERNAL_NAME)
#include <common.ver>
<<NOKEEP
! endif # if "$(VERSION_RC)" == ""
RCFILES = $(VERSION_RC) $(RCFILES)
!else # TARGETTYPE != lib && TARGET != RELEASE
VERSION_RC =
! endif # TARGETTYPE != lib && TARGET != RELEASE
!endif # OPSYS == DOS BUGBUG: Chicago
!endif # IMAGE_TYPE_COFF
######################################################################
#
# Rule to build RES from RC file.
#
# Note: we mess with PATH because RC is not real clever about
# finding RCPP (it's sub-component EXE). It looks along PATH,
# so we limit PATH here in order to guarantee that RCPATH is
# in PATH, and also to avoid invoking a non-compatible RCPP that
# might just be in the user's private toolset.
#
# In the case of an NT build, COFF can't handle more than one
# resource obj. So, we build a single .rc2 file that #include's
# all the component RCFILES.
#
!ifdef IMAGE_TYPE_COFF
! if "$(RCFILES)" != ""
$(OBJDIR)\$(TARGETBASE).rc2: $(RCFILES)
@echo $(RCFILES) --^> $@ $(OUTPUT)
type << | $(SED) -f $(SCRIPTS)\rcfiles.sed > $@
$(RCFILES: =
)
<<NOKEEP
$(OBJDIR)\$(TARGETBASE).res: $(OBJDIR)\$(TARGETBASE).rc2
{$(OBJDIR)}.rc2{$(OBJDIR)}.res:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
$(RC) $(ORCFLAGS) -I$(OBJDIR) $(RCFLAGS) $(MAKEDIR)\$(<R).tmp $(MAKEDIR)\$<
$(CVTRES) -$(PLATFORM) -o $*.res $(MAKEDIR)\$(<R).tmp
! endif
!else
.rc{$(OBJDIR)}.res:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
@set oldpath=%%PATH%%
@set path=$(RCPATH)
$(RC) $(ORCFLAGS) $(RCFLAGS) $*.res $(MAKEDIR)\$<
@set path=%%oldpath%%
@set oldpath=
!endif
######################################################################
#
# Rule for building .lib files from .lrf files
.lrf{$(OBJDIR)}.lib:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
-$(DEL) $*.lib $(OUTNUL)
@echo lib32 -out:@$< $(BUILD_EXE_PROCTYPE)
@$(LIBUTIL) $(LIBFLAGS) @$<
.lrf.lib:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
if exist $*.lib $(DEL) $*.lib $(OUTNUL)
@echo lib32 -out:@$< $(BUILD_EXE_PROCTYPE)
$(LIBUTIL) $(LIBFLAGS) @$*.lrf
##################################################
#
# Rules for generating .h and .c files from .idl files
#
##
## IDLUSE == none --> generate header file only
##
.idl{$(MIDL_HDR_OUT_DIR)}.h:
@echo $< --^> $@ $(OUTPUT)
!ifdef IMAGE_TYPE_COFF
$(MIDL) @<<$*.rsp $<
$(IDLMIDLFLAGS)
$(CINC)
-no_format_opt
-no_warn
-char unsigned
-mode c_port
-proxy $(MIDL_OUT_DIR)\$(@B)_p.c
-iid $(MIDL_OUT_DIR)\$(@B)_i.c
-header $(MIDL_HDR_OUT_DIR)\$(@B).h
-caux $(MIDL_OUT_DIR)\$(@B)_x.c
-saux $(MIDL_OUT_DIR)\$(@B)_y.c
-cpp_cmd
$(CC)
-cpp_opt "$(COMPLOGO) -DMIDL_PASS $(CPLATFORM) $(OCFLAGS) $(CINC) -E -Tc"
<<$(COMPRESP)
!else
$(MIDL) $(CINC) -char unsigned -mode c_port -header $@ -cpp_cmd $(CC) -cpp_opt "$(COMPLOGO) @<<$*.rsp -Tc" $<
-DMIDL_PASS
-D$(PLATFORM)
$(OCFLAGS)
$(CINC)
-D$(PLATFORM)=1
-E
<<$(COMPRESP)
!if "$(OPSYS)"=="NT1X" && "$(NORELEASE_CHICAGO)"==""
@echo Build_Status Releasing Midl generated $(@B).h files to $(HCOPY)\chicago
copy $(MIDL_HDR)OUT_DIR)\$(@B).h $(HCOPY)\chicago
!endif
!endif
#-proxy $(MIDL_OUT_DIR)\$(@B)_p.c
##################################################
# Provide some includes prefixes
INCLUDES_PREFIX= -L$$(OBJDIR) -S$$(OBJDIR)
INCLUDES_ROOTS= $(INCLUDES_ROOTS) \
-P$$(BASEDIR)=$(BASEDIR)
OBJS=$(CXX_OBJS) \
$(C_OBJS) \
$(PRECOMPOBJ) \
$(PRECOMPXXOBJ) \
$(OBJFILES)
############################################################################
#
# Build a Link Include file.
# Basically, every library we call that has a precompiled header needs
# to have that header obj forced into the final image. The .lic file built
# with the pch provides that for us. We just make a simple one with
# NODEFAULTLIB and append any others we can find. BryanT 4/14/93
#
!ifdef IMAGE_TYPE_COFF
! ifndef NEW_PCH_BUILD
TARGETLICS = $(TGTDIR)\$(TARGETBASE).tlc
$(TARGETLICS): $(OBJS) $(LIBS)
@-md $(TGTDIR) $(OUTNUL)
@echo -NODEFAULTLIB > KTx14J.lic
@echo @echo off > $*.cmd
@$(SED) -f $(SCRIPTS)\licfiles.sed << >> $*.cmd
$(LIBS: =
)
$(OBJS: =
)
<<NOKEEP
@-$*.cmd
@-$(DEL) $@ $(OUTNUL)
@for %%i in (*.lic) do @type %i >> $@
@-$(DEL) *.lic $(OUTNUL)
! else
TARGETLICS =
! endif # NEW_PCH_BUILD
!else
TARGETLICS =
!endif
############################################################################
#
# HACK for NT COFF limitation of only 1 .res obj per image.
#
# We force a single resfile name and handle generating it with the
# .rc->.rc2->,res rules.
#
!ifdef IMAGE_TYPE_COFF
! if "$(RCFILES)" != ""
RESFILES = $(OBJDIR)\$(TARGETBASE).res
! endif
!endif
############################################################################
#
# Build a DLL or CPL (Control Panel Applet)
#
#BUGBUG BuildDLL
!if "$(TARGETTYPE)" == "dll"
! ifdef NOEXPORTS
DLLDEF=
! else
DLLDEF= $(DEFFILEEXP)
! endif
DLLOBJS= $(OBJS)
! ifdef SIFTBUILD
DLLOBJS = $(DLLOBJS) $(SIFTOBJ)
! endif # SIFTBUILD
DLLLIBS= $(LIBS) $(OSLIBDLL) $(RTLIBDLL)
DLLRES= $(RESFILES)
! ifndef NEW_PCH_BUILD
TLRSPFILE = @$(TARGETLICS)
! else
TLRSPFILE =
! endif
#
# Link the DLL.
#
$(TGTDIR)\$(TARGET): $(DLLOBJS) $(DLLLIBS) $(DLLRES) $(DLLDEF) $(TYPESDIR)\coffbase.txt $(TARGETLICS)
@$(ECHOTIME) Linking $@ $(ATSTR) $(TIMESTR)... $(OUTPUT)
@-md $(TGTDIR) $(OUTNUL)
! ifdef IMAGE_TYPE_COFF
@echo link32 -out:$@ $(BUILD_EXE_PROCTYPE)
@$(LINK) @<<$*.lnk $(TLRSPFILE)
$(DLLDEF)
$(LFLAGSDLL: =
)
$(DLLSTARTUP)
-OUT:$@
$(IMAGEBASE)
$(DLLOBJS: =
)
$(DLLRES)
$(DLLLIBS: =
)
<<$(LINKRESP)
! ifndef NO_SPLITSYM
$(SPLITSYM) $(SPLITSYMFLAGS) $@
! endif
!if "$(RELEASE_BIN)" != ""
binplace $(BINPLACE_FLAGS) $@
!endif
!if "$(NO_RELEASE_IMPORT_LIB)" == "" && "$(LIBCP)" != ""
$(COPY) $*.lib $(LIBCP)
!endif
CLEANTARGET= $(CLEANTARGET)\
$(OBJDIR)\$(TARGETBASE).lib\
$(OBJDIR)\$(TARGETBASE).exp
! else # IMAGE_TYPE_COFF
@echo link32 -out:$*.dll $(BUILD_EXE_PROCTYPE)
@$(LINK) @<<$*.lnk
$(LFLAGSDLL) $(DLLSTARTUP) $(DLLOBJS: = +^
)
$*.dll
$*.map
$(DLLLIBS: = +^
)
$(DLLDEF)
<<$(LINKRESP)
if exist $(DLLRES) $(RC) $(RCEXEFLAGS) -fe $*.dll $(DLLRES) $*.dll
$(MAPSYM) $(MAPSYMFLAGS) $*.map
#
# Generate the import library.
#
all: $(OBJDIR)\$(TARGETBASE).lib
$(OBJDIR)\$(TARGETBASE).lib: $(DLLDEF:.\=)
CLEANTARGET= $(CLEANTARGET) $(OBJDIR)\$(TARGETBASE).lib
! endif # IMAGE_TYPE_COFF
!endif # Build DLL
############################################################################
#
# Build a LIB
#
!if "$(TARGETTYPE)" == "lib"
$(OBJDIR)\$(TARGETBASE).lib: $(OBJS) $(LIBS)
@$(ECHOTIME) Building $@ $(ATSTR) $(TIMESTR)... $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
-$(DEL) $@ $(OUTNUL)
! ifdef IMAGE_TYPE_COFF
@echo lib32 -out:$@ $(BUILD_EXE_PROCTYPE)
@$(LIBUTIL) @<<$*.lnb
$(LIBFLAGS: =
)
$(OBJS: =
)
$(LIBS: =
)
-OUT:$@
<<$(LINKRESP)
! else # IMAGE_TYPE_COFF
@echo lib32 -out:$@ $(BUILD_EXE_PROCTYPE)
@$(LIBUTIL) $(LIBFLAGS) @<<$*.lnb
$(OBJDIR)\$(TARGET)
y
$(OBJS: = &^
)&
$(LIBS: = &^
)&
$*.lls
<<$(LINKRESP)
! endif # IMAGE_TYPE_COFF
!endif # Build LIB
############################################################################
#
# Build an EXE
#
!if "$(TARGETTYPE)" == "exe"
! ifdef IMAGE_TYPE_COFF
EXEDEF=
! else
! if "$(DEFFILE)" == ""
EXEDEF=
! else
EXEDEF= $(DEFFILEEXP)
! endif
! endif
EXELIBS= $(LIBS)\
! if "$(MTHREAD)" == "1"
$(RTLIBEXEMT)\
! else
$(RTLIBEXE)\
! endif
$(OSLIBEXE)
EXEOBJS= $(OBJS)
!ifdef SIFTBUILD
EXEOBJS = $(EXEOBJS) $(SIFTOBJ)
!endif # SIFTBUILD
EXERES= $(RESFILES)
#
# Link the EXE.
#
! ifndef NEW_PCH_BUILD
TLRSPFILE = @$(TARGETLICS)
! else
TLRSPFILE =
! endif
#
# Need WINSTUB.EXE to build WIN16 targets -- "DOS" "i286"
#
WINSTUB=$(RCPATH)\winstub.exe
$(TGTDIR)\$(TARGET): $(EXEOBJS) $(EXELIBS) $(EXERES) $(EXEDEF) $(TARGETLICS)
!if "$(OPSYS)" == "DOS" && "$(PROCESSOR_ARCHITECTURE)" == "i286"
$(COPY) $(WINSTUB) .
!endif
@$(ECHOTIME) Linking $@ $(ATSTR) $(TIMESTR)... $(OUTPUT)
@-md $(TGTDIR) $(OUTNUL)
! ifdef IMAGE_TYPE_COFF
@echo link32 -out:$@ $(BUILD_EXE_PROCTYPE)
@$(LINK) @<<$*.lnk $(TLRSPFILE)
$(LFLAGSEXE: =
)
$(EXESTARTUP)
$(EXEOBJS: =
)
$(EXELIBS: =
)
$(EXERES)
-OUT:$@
$(IMAGEBASE)
! if "$(NTDEBUGTYPE)" == "windbg" && "$(PROCESSOR_ARCHITECTURE)" == "x86"
-nopack
! endif
<<$(LINKRESP)
! if "$(NTDEBUGTYPE)" == "windbg" && "$(PROCESSOR_ARCHITECTURE)" == "x86"
$(CVPACK) -nologo $@
! endif
! ifndef NO_SPLITSYM
$(SPLITSYM) $(SPLITSYMFLAGS) $@
! endif
! else # IMAGE_TYPE_COFF
@echo link32 -out:$*.exe $(BUILD_EXE_PROCTYPE)
@$(LINK) @<<$*.lnk
$(LFLAGSEXE) $(EXESTARTUP) +
$(EXEOBJS: = +^
)
$*.exe
$*.map
$(EXELIBS: = +^
)
$(EXEDEF)
<<$(LINKRESP)
!if "$(OPSYS)" == "DOS" && "$(PROCESSOR_ARCHITECTURE)" == "i286"
if exist $(EXERES) $(RC) $(RCEXEFLAGS) -fe $*.exe $(EXERES) $*.exe
-$(DEL) winstub.exe
!else
if exist $(EXERES) $(RC) $(RCEXEFLAGS) -fo $*.exe $(EXERES) $*.exe
!endif
$(MAPSYM) $(MAPSYMFLAGS) $*.map
! endif # IMAGE_TYPE_COFF
!endif # Build EXE
######################################################################
# IMPLIB files (unlike their real lib counterparts)
# live in the source directory, not in a version
# specific subdirectory
!if "$(NO_IMPLIB)" == ""
! ifdef IMAGE_TYPE_COFF
$(DEFFILEEXP) $(DEFFILELIB): $(DEFFILE)
@echo $(DEFFILE) --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
$(CC) $(COMPLOGO) @<<$*.rsp 1>$*.def
$(CPLATFORM)
$(CDEBUGFLAGS)
$(CINC: =
)
-EP
-Tc $**
<<$(COMPRESP)
$(LIBUTIL) @<<$*.lsp
$(LIBFLAGS)
-OUT:$(DEFFILELIB)
-DEF:$*.def
<<$(LINKRESP)
.def{$(OBJDIR)}.lib:
@echo $< --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
$(CC) $(COMPLOGO) @<<$*.rsp 1>$(OBJDIR)\$<
$(CPLATFORM)
$(CDEBUGFLAGS)
$(CINC: =
)
-EP
-Tc $<
<<$(COMPRESP)
$(LIBUTIL) @<<$*.lsp
$(LIBFLAGS)
-OUT:$@
-DEF:$(OBJDIR)\$<
<<$(LINKRESP)
! else # IMAGE_TYPE_COFF
IMPFLAGS=-nologo -noignorecase
.def.lib:
@echo $< --^> $@ $(OUTPUT)
$(IMPLIB) $(IMPFLAGS) $@ $<
$(DEFFILEEXP): $(DEFFILE)
@echo $(DEFFILE) --^> $@ $(OUTPUT)
@-md $(OBJDIR) $(OUTNUL)
$(CC) $(COMPLOGO) @<<$*.rsp 1>$(DEFFILEEXP)
$(ALLCFLAGS: =
)
$(CINC: =
)
-EP
-Tc $**
<<$(COMPRESP)
$(DEFFILELIB): $(DEFFILEEXP)
@echo $(DEFFILEEXP) --^> $@ $(OUTPUT)
$(IMPLIB) $(IMPFLAGS) $(DEFFILELIB) $(DEFFILEEXP)
! endif # IMAGE_TYPE_COFF
!endif # NO_IMPLIB
############################################################################
#
# Cleanup
#
!if defined(TARGET) || defined(CLEANTARGET)
clean: cleanobj
cleanobj:
! if "$(HOST)" == "NT"
-$(DEL) /q $(OBJDIR) $(OUTNUL)
! else
-echo y | $(DEL) $(OBJDIR) $(OUTNUL)
! endif
-rmdir $(OBJDIR) $(OUTNUL)
cleantarget:
! if "$(HOST)" == "NT"
-$(DEL) /q $(CLEANTARGET) $(OUTNUL)
! else
-echo y | $(DEL) $(CLEANTARGET) $(OUTNUL)
! endif
!endif
!ifdef CLEANFILES
clean: cleanclean
cleanclean:
-$(DEL) $(CLEANFILES) $(OUTNUL)
!endif
!ifdef LIBCOPY
! if "$(TARGETTYPE)" == "lib" || "$(TARGETTYPE)" == "dll"
clean: cleanlibcopy
cleanlibcopy:
-$(DEL) $(LIBCOPY)\$(TARGETBASE).lib $(OUTNUL)
-$(DEL) $(LIBCOPY)\$(TARGETBASE).lic $(OUTNUL)
!if "$(OPSYS)"=="NT1X" && "$(NORELEASE_CHICAGO)" == ""
-$(DEL) $(CHICAGOLIBCOPY)\$(TARGETBASE).lib $(OUTNUL)
-$(DEL) $(CHICAGOLIBCOPY)\$(TARGETBASE).lic $(OUTNUL)
!endif
! endif
!endif
!ifdef DLLCOPY
! if "$(TARGETTYPE)" == "dll"
clean: cleandllcopy
cleandllcopy:
-$(DEL) $(DLLCOPY)\$(TARGETBASE).dll $(OUTNUL)
-$(DEL) $(DLLCOPY)\$(TARGETBASE).dbg $(OUTNUL)
! endif
!endif
!ifdef EXECOPY
! if "$(TARGETTYPE)" == "exe"
clean: cleanexecopy
cleanexecopy:
-$(DEL) $(EXECOPY)\$(TARGETBASE).exe $(OUTNUL)
-$(DEL) $(EXECOPY)\$(TARGETBASE).dbg $(OUTNUL)
! endif
!endif
!if "$(TLBCOPY)" != ""
clean: cleantlbcopy
cleantlbcopy:
@echo WARNING - Can't clean Type Library copies in $(TLBCOPY).
!endif
############################################################################
#
# Copy targets to other directories.
#
copy:
!ifdef LIBCOPY
! if "$(TARGETTYPE)" == "dll" || "$(TARGETTYPE)" == "lib"
copy: $(LIBCOPY)\$(TARGETBASE).lib
$(LIBCOPY)\$(TARGETBASE).lib: $(OBJDIR)\$(TARGETBASE).lib
@echo Copying $(TARGETBASE).lib to $(LIBCOPY)... $(OUTPUT)
@-md $(LIBCOPY) $(OUTNUL)
@-$(CHMODE) -r $(LIBCOPY)\$(TARGETBASE).lib $(OUTNUL)
@-$(CHMODE) -r $(LIBCOPY)\$(TARGETBASE).lic $(OUTNUL)
$(COPY) $(OBJDIR)\$(TARGETBASE).lib $(LIBCOPY)\$(TARGETBASE).lib
@-$(COPY) $(OBJDIR)\$(TARGETBASE).lic $(LIBCOPY)\$(TARGETBASE).lic $(OUTNUL)
!if "$(OPSYS)" == "NT1X" && "$(NORELEASE_CHICAGO)" == ""
@echo Releasing $(TARGETBASE).lib for Chicago... $(OUTPUT)
@-md $(CHICAGOLIBCOPY) $(OUTNUL)
@-$(CHMODE) -r $(CHICAGOLIBCOPY)$(TARGETBASE).lib $(OUTNUL)
@-$(CHMODE) -r $(CHICAGOLIBCOPY)$(TARGETBASE).lic $(OUTNUL)
$(COPY) $(OBJDIR)\$(TARGETBASE).lib $(CHICAGOLIBCOPY)\$(TARGETBASE).lib
@-$(COPY) $(OBJDIR)\$(TARGETBASE).lic $(CHICAGOLIBCOPY)\$(TARGETBASE).lic $(OUTNUL)
!endif
! endif # dll or lib
!endif # LIBCOPY
!ifdef DLLCOPY
! if "$(TARGETTYPE)" == "dll"
copy: $(DLLCOPY)\$(TARGETBASE).dll
$(DLLCOPY)\$(TARGETBASE).dll: $(TGTDIR)\$(TARGETBASE).dll
@echo Copying $(TARGETBASE).dll to $(DLLCOPY)... $(OUTPUT)
@-md $(DLLCOPY) $(OUTNUL)
@-$(CHMODE) -r $(DLLCOPY)\$(TARGETBASE).dll $(OUTNUL)
@-$(CHMODE) -r $(DLLCOPY)\$(TARGETBASE).dbg $(OUTNUL)
$(COPY) $(TGTDIR)\$(TARGETBASE).dll $(DLLCOPY)\$(TARGETBASE).dll
@-$(COPY) $(TGTDIR)\$(TARGETBASE).dbg $(DLLCOPY)\$(TARGETBASE).dbg $(OUTNUL)
! endif # dll
!endif # DLLCOPY
!ifdef EXECOPY
! if "$(TARGETTYPE)" == "exe"
copy: $(EXECOPY)\$(TARGETBASE).exe
$(EXECOPY)\$(TARGETBASE).exe: $(TGTDIR)\$(TARGETBASE).exe
@echo Copying $(TARGETBASE).exe to $(EXECOPY)... $(OUTPUT)
@-md $(EXECOPY) $(OUTNUL)
@-$(CHMODE) -r $(EXECOPY)\$(TARGETBASE).exe $(OUTNUL)
@-$(CHMODE) -r $(EXECOPY)\$(TARGETBASE).dbg $(OUTNUL)
$(COPY) $(TGTDIR)\$(TARGETBASE).exe $(EXECOPY)\$(TARGETBASE).exe
@-$(COPY) $(TGTDIR)\$(TARGETBASE).dbg $(EXECOPY)\$(TARGETBASE).dbg $(OUTNUL)
! endif # exe
!endif # EXECOPY
!if "$(TLBCOPY)" != "" && "$(TYPELIBS)" != ""
copy: copytlbfiles
copytlbfiles: $(TYPELIBS)
@echo Build_Status Copying Type Libraries to "$(TLBCOPY)"... $(OUTPUT)
@-md $(TLBCOPY) $(OUTNUL)
!$(COPY) $** $(TLBCOPY)
!$(UNREGTLB) $**
!$(REGTLB) $(TLBCOPY)\$(**F)
!else
copytlbfiles:
!endif
############################################################################
#
# Generate external header file
#
!ifdef HFILES
all: $(TARGETBASE).h
clean: cleanh
cleanh:
-$(DEL) $(TARGETBASE).h $(OUTNUL)
$(TARGETBASE).h: $(HFILES)
@echo Generating $(TARGETBASE).h $(OUTPUT)
$(SED) -f $(SCRIPTS)\public.sed $(HFILES) >$(TMP)\$(TARGETBASE).h
-$(CMP) -s $(TMP)\$(TARGETBASE).h $@ 2>nul || $(COPY) $(TMP)\$(TARGETBASE).h $@
-$(DEL) $(TMP)\$(TARGETBASE).h $(OUTNUL)
DEPENDFILES = $(DEPENDFILES) $(TARGETBASE).h
!endif
############################################################################
#
# Resource files dependencies
#
!if "$(RESFILES)" != ""
$(RESFILES): $(RCFILES) $(RCOBJECTS)
!endif
############################################################################
#
# Dependencies
#
!if "$(DEPENDSRC)" == "" && \
"$(CXXFILES)" == "" && \
"$(CPPFILES)" == "" && \
"$(CFILES)" == "" && \
"$(IDLFILES)" == "" && \
"$(TDLFILES)" == ""
depend:
!else
! if "$(DEPENDSRC)" == "" && \
"$(CXXFILES)" == "" && \
"$(CPPFILES)" == "" && \
"$(CFILES)" == ""
DEPENDSRC=
! else
DEPENDSRC=$(DEPENDSRC) $(CXXFILES) $(CPPFILES) $(CFILES)
! endif
depend: dependfile
!ifdef MULTIDEPEND
DEPENDFILE=depend.mk$(RDEXT)
NEWDEPENDFILE=depend.ne$(RDEXT)
!else
DEPENDFILE=depend.mk
NEWDEPENDFILE=depend.new
!endif
OBJPATTERN=$(OBJDIR:\=\\)
#########################################################################
#
# Here's where the dependencies are actually generated. We break up
# the CINC, INCLUDES_ROOTS, and src macros to put one command on each
# to ensure no one line is over 1024 bytes in length. The includes
# tool reads in 1k bytes and get's confused if any one line is split.
#
INCLUDES_FLAGS = $(INCLUDES_FLAGS) -nntos.h -nzwapi.h -dos
!if "$(OPSYS)"=="NT1X"
INCLUDES_FLAGS =$(INCLUDES_FLAGS) -nole2.h
!endif
dependfile: $(DEPENDFILES)
$(ECHOTIME) # ; # Built automatically ; # ; >$(NEWDEPENDFILE)
!if "$(DEPENDSRC)" != ""
#
# Source file dependencies
#
$(ECHOTIME) # ; # Source files ; # ; >>$(NEWDEPENDFILE)
$(INCLUDES) @<< >>$(NEWDEPENDFILE)
-e
$(INCLUDES_FLAGS)
$(INCLUDES_PREFIX)
$(CINC:-I=
-I)
$(INCLUDES_ROOTS:-P=
-P)
$(DEPENDSRC:.\=
.\)
<<NOKEEP
!endif # DEPENDSRC
#
# MIDL dependencies
#
!if "$(IDLFILES)" != ""
$(ECHOTIME) # ; # MIDL Source files ; # ; >>$(NEWDEPENDFILE)
$(INCLUDES) @<<idl.tmp >>$(NEWDEPENDFILE)
-e
$(INCLUDES_FLAGS)
$(CINC:-I=
-I)
$(INCLUDES_ROOTS:-P=
-P)
-sh
-S$$(MIDL_HDR_OUT_DIR)
$(IDLFILES:.\=
.\)
<<NOKEEP
!endif # IDLFILES
!if "$(TDLFILES)" != ""
$(ECHOTIME) # ; # MkTypeLib Source files ; # ; >>$(NEWDEPENDFILE)
$(INCLUDES) @<<tdl.tmp >>$(NEWDEPENDFILE)
-e
$(INCLUDES_FLAGS)
$(CINC:-I=
-I)
$(INCLUDES_ROOTS:-P=
-P)
-stlb
-S$$(OBJDIR)
$(TDLFILES:.\=
.\)
<<NOKEEP
!endif # IDLFILES
#
# C++ PCH dependencies
#
!if "$(PXXFILE)" != ""
$(ECHOTIME) # ; # Precompiled C++ header ; # ; ; !ifdef PXXFILE >>$(NEWDEPENDFILE)
# if exist $(PXXSOURCE) $(INCLUDES) @<< >>$(NEWDEPENDFILE)
if exist $(PXXSOURCE) $(INCLUDES) $(INCLUDES_FLAGS) -e -S$$(PCHDIR)\$$(OBJDIR) \
-L$$(PCHDIR)\$$(OBJDIR) -spxh $(CINC:-I=-I) $(INCLUDES_ROOTS:-P=-P)\
$(PXXSOURCE) >>$(NEWDEPENDFILE)
#$(INCLUDES_FLAGS)
#-e
#-S$$(PCHDIR)\$$(OBJDIR)
#-L$$(PCHDIR)\$$(OBJDIR)
#-spxh
#$(CINC:-I=
#-I)
#$(INCLUDES_ROOTS:-P=
#-P)
#$(PXXSOURCE)
#<<NOKEEP
$(SED) "s/$(OBJPATTERN)\(.*\)/$$(OBJDIR)\1 : \
$$(PCHDIR)\\$$(OBJDIR)\\$(PXXFILE:.cxx=.pxh)/" << >>$(NEWDEPENDFILE)
$(CXX_OBJS: =^
)
<<NOKEEP
$(ECHOTIME) !endif # PXXFILE ; ;>>$(NEWDEPENDFILE)
!endif
#
# C PCH dependencies
#
!if "$(PFILE)" != ""
$(ECHOTIME) # ; # Precompiled C header ; # ; ; !ifdef PFILE >>$(NEWDEPENDFILE)
if exist $(PSOURCE) $(INCLUDES) @<< >>$(NEWDEPENDFILE)
-e
$(INCLUDES_FLAGS)
-S$$(PCHDIR)\$$(OBJDIR)
-L$$(PCHDIR)\$$(OBJDIR)
-sph
$(CINC:-I=
-I)
$(INCLUDES_ROOTS:-P=
-P)
$(PSOURCE)
<<NOKEEP
$(ECHOTIME) $(C_OBJS:.obj =.obj ; )| \
$(SED) "s/$(OBJPATTERN)/$$(OBJDIR)/" | \
$(SED) "s/\.obj/.obj : $$(PCHDIR)\\$$(OBJDIR)\\$(PFILE:.c=.ph)/" >>$(NEWDEPENDFILE)
$(ECHOTIME) !endif # PFILE ; ;>>$(NEWDEPENDFILE)
!endif
@$(CMP) -s $(NEWDEPENDFILE) $(DEPENDFILE) $(OUTNUL) || \
$(COPY) $(NEWDEPENDFILE) $(DEPENDFILE) $(OUTNUL) || \
(out -f -! $(DEPENDFILE) && $(ECHOTIME) $(DEPENDFILE) checked out... & $(COPY) $(NEWDEPENDFILE) $(DEPENDFILE) $(OUTNUL))
$(DEL) $(NEWDEPENDFILE) $(OUTNUL)
!endif # DEPENDSRC
############################################################################
#
# Special Rules for Building NT-like parts of the tree. For instance,
# OFS. Defining RELEASE=NT causes the build to be performed 2 times for
# this part of the tree. Once with the current BUILDTYPE, once with the
# opposite one. In either case, we release under the current build in
# either a CHECK\NT\... tree (for DEBUG BUILDTYPE) or FREE\NT\... tree
# (for RETAIL BUILDTYPE).
#
!if ("$(RELEASE)" == "NT" && "$(BUILD_BOTH)" != "FALSE") || "$(BUILD_BOTH)" == "TRUE"
! if "$(BUILDTYPE)" == "DEBUG"
SECONDBUILDTYPE = RETAIL
! else
SECONDBUILDTYPE = DEBUG
! endif
all tree clean:
@$(MAKE) -$(MAKEFLAGS) -L BUILDTYPE=$(SECONDBUILDTYPE) RELEASETREE=$(TGTDIR:OBJ=) BUILD_BOTH=FALSE $@
!endif # RELEASE = NT