############################################################################ # # 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

# OBJDIR=OBJ

# #

: i = i386 # m = MIPS # a = ALPHA # 2 = i286 # # : d = DOS # 1 = NT 1.x # n = NT 2.0 (Cairo) # o = OS/2 # w = Win16 (used when targeting Win32s) # # : r = Retail # d = Debug # p = Profile (Retail with debug info) # = 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 # : Dos 5.0 # : OS/2 1.x # : NTKERNEL x86 # : NTKERNEL MIPS # : NTKERNEL Alpha # : Win32s # : NT 1.x x86 # : NT 1.x MIPS # : 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 # : Dos 5.0 # : OS/2 1.x # : 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 ) <> $(ITFS_DIR)\$(ITFS_H) @echo @echo off > copyall.cmd @echo cd $(ITFS_DIR)\ >> copyall.cmd @type << | $(SED) -f << >> copyall.cmd $(BASE_HFILES: = ) <\> $(ITFS_H)/g <> 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 < $(ITFS_DIR)\forward.sed /\/\* Forward Declarations \*\// { N s/\/\* Forward Declarations \*\/\ntypedef/xtypedef/ } /xtypedef/!d s/xtypedef/typedef/ < forward.cmd @echo cd $(ITFS_DIR) >> forward.cmd @type << | $(SED) -f << >> forward.cmd $(DERIVED_HFILES: = ) <\> $(ITFS_H)/g <> 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: = ) <\> $(ITFS_H)/g <> 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__ < copyall.cmd @echo cd $(MCERRS_DIR)\ >> copyall.cmd @type << | $(SED) -f << >> copyall.cmd $(MESSAGE_FILES:.mc=.h ) <\> $(MCERRS_H)/g <> 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 #include #define VER_FILETYPE $(VFT_TYPE) #define VER_FILESUBTYPE $(VFT_TYPE2) #define VER_FILEDESCRIPTION_STR $(TARGET_DESCRIPTION) #define VER_INTERNALNAME_STR $(TARGET_INTERNAL_NAME) #include < $@ $(OUTPUT) type << | $(SED) -f $(SCRIPTS)\rcfiles.sed > $@ $(RCFILES: = ) < $@ $(OUTPUT) @-md $(OBJDIR) $(OUTNUL) $(RC) $(ORCFLAGS) -I$(OBJDIR) $(RCFLAGS) $(MAKEDIR)\$( $@ $(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: = ) <> $@ @-$(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:.\= .\) <>$(NEWDEPENDFILE) $(INCLUDES) @<>$(NEWDEPENDFILE) -e $(INCLUDES_FLAGS) $(CINC:-I= -I) $(INCLUDES_ROOTS:-P= -P) -sh -S$$(MIDL_HDR_OUT_DIR) $(IDLFILES:.\= .\) <>$(NEWDEPENDFILE) $(INCLUDES) @<>$(NEWDEPENDFILE) -e $(INCLUDES_FLAGS) $(CINC:-I= -I) $(INCLUDES_ROOTS:-P= -P) -stlb -S$$(OBJDIR) $(TDLFILES:.\= .\) <>$(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) #<>$(NEWDEPENDFILE) $(CXX_OBJS: =^ ) <>$(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) <>$(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