Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
366 lines
12 KiB
Makefile
366 lines
12 KiB
Makefile
# Makefile for use with MSI to build custom actions, tests or tools.
|
|
#
|
|
# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
|
|
# EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
|
|
# WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
#
|
|
# Copyright (C) 1997 Microsoft Corporation. All Rights Reserved.
|
|
#
|
|
# Must define the following (unless optional or default is indicated) using one of:
|
|
# 1. command line to nmake.exe (syntax: MACRO=value) (highest precedence)
|
|
# 2. in outer makefile that !include this (typically a header section in .CPP file)
|
|
# 3. environment variable
|
|
#
|
|
# MODULENAME= base name of .cpp file to build .exe or .dll with same base name
|
|
# SUBSYSTEM= "console" or "windows" for EXE, do not define if DLL unless "RESOURCE"
|
|
# UNICODE=1 to compile Unicode executables (default is ANSI)
|
|
# ENTRY= entrypoints (comma separated) for DLL or non-standard entry point for EXE
|
|
# VERSION= "SHIP" or "DEBUG" or "CVPACK" or "NOBSC"(no browser files, the default)
|
|
|
|
# Options to generate a version resource (recommended)
|
|
#
|
|
# FILEVERSION= specify MM.mm to generate version resource (=MSI to track MSI version)
|
|
# PRODUCTVERSION= product version for resource, defaults to FILEVERSION
|
|
# DESCRIPTION= description for use in version resource (if FILEVERSION defined)
|
|
# COMPANYNAME= company name to use in version resource (if FILEVERSION defined)
|
|
|
|
# Build options that will generally need to be set
|
|
#
|
|
# INCLUDE= include path for compiler, should include MSI.H, MSIQUERY.H (unless MSIPROJ set)
|
|
# LIB= lib path for use by linker, should include MSI.LIB (unless MSIPROJ set)
|
|
|
|
# Options that may be used in special cases, not needed for simple builds
|
|
#
|
|
# ADDCPP= optional comma-separated list of additional CPP files to compile
|
|
# DEPEND= optional list of additional make dependents, normally include files
|
|
# LINKLIBS= additional libraries to link, standard libraries are:
|
|
# kernel32.lib user32.lib advapi32.lib libc.lib version.lib gdi32.lib
|
|
# BUILDDIR= to override default: SHIP|DEBUG|CVPACK under current dir (unless MSIPROJ set)
|
|
# MSILIB= full path to MSI import lib, defaults to MSI.LIB using lib path search rules
|
|
# VCBIN= directory of all MSVC executables, else uses MSDevDir & MSVCDir, else PATH
|
|
# Note: For VC5 use, if MSDevDir is defined, then MSVCDir must also be defined (VCVARS32.BAT)
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# directory resolution
|
|
#-----------------------------------------------------------------------------
|
|
|
|
!ifndef MODULENAME
|
|
!error Must define MODULENAME to base name of .cpp file
|
|
!endif
|
|
|
|
!ifndef MODULESRC
|
|
MODULESRC = .
|
|
!endif
|
|
|
|
!ifndef VERSION
|
|
VERSION = NOBSC
|
|
!endif
|
|
!if "$(VERSION)"=="SHIP"
|
|
_subdir_ = SHIP
|
|
!else if "$(VERSION)"=="DEBUG" || "$(VERSION)"=="NOBSC"
|
|
_subdir_ = DEBUG
|
|
!else if "$(VERSION)"=="CVPACK"
|
|
_subdir_ = CVPACK
|
|
!else
|
|
!error Must define VERSION to SHIP or CVPACK, or DEBUG or NOBSC(default)
|
|
!endif
|
|
|
|
!ifdef MSIPROJ
|
|
BUILDDIR = $(MSIPROJ)\build\$(_subdir_)
|
|
COMMONDIR = $(MSIPROJ)\build\common
|
|
MSICPP = -I$(COMMONDIR)
|
|
!else
|
|
!ifndef BUILDDIR
|
|
BUILDDIR = $(MODULESRC)\$(_subdir_)
|
|
!endif
|
|
!endif
|
|
|
|
OBJDIR = $(BUILDDIR)\OBJECT
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# build model processing
|
|
#-----------------------------------------------------------------------------
|
|
|
|
!ifdef PROCESSOR_ARCHITECTURE
|
|
PLATFORM = $(PROCESSOR_ARCHITECTURE)
|
|
!else
|
|
PLATFORM = x86
|
|
!endif
|
|
!if "$(PLATFORM)" == "x86" || "$(PLATFORM)" == "X86"
|
|
_machine_ = /MACHINE:IX86
|
|
!else if "$(PLATFORM)" == "alpha" || "$(PLATFORM)" == "ALPHA"
|
|
_machine_ = /MACHINE:ALPHA
|
|
!else
|
|
!error Must define PLATFORM to x86 or ALPHA
|
|
!endif
|
|
|
|
ALIGN = -align:0x1000
|
|
|
|
_objects_ = $(OBJDIR)\$(MODULENAME).obj
|
|
!ifdef SUBSYSTEM
|
|
!if defined(ENTRY)
|
|
ENTRY = /ENTRY:$(ENTRY)
|
|
!else if "$(SUBSYSTEM)" == "console" || "$(SUBSYSTEM)" == "CONSOLE"
|
|
!ifdef UNICODE
|
|
ENTRY = /ENTRY:wmainCRTStartup
|
|
!else
|
|
ENTRY = /ENTRY:mainCRTStartup
|
|
!endif
|
|
!endif
|
|
!if "$(SUBSYSTEM)" == "resource" || "$(SUBSYSTEM)" == "RESOURCE"
|
|
SUBSYSTEM = /DLL
|
|
TARGET = $(MODULENAME).dll
|
|
_objects_ =
|
|
ALIGN = -align:0x1000
|
|
ENTRY = /NOENTRY $(_machine_)
|
|
!else if "$(SUBSYSTEM)" == "windows" || "$(SUBSYSTEM)" == "WINDOWS"
|
|
SUBSYSTEM = /SUBSYSTEM:$(SUBSYSTEM),4.0
|
|
TARGET = $(MODULENAME).exe
|
|
EXCEPTIONS = -GX
|
|
!ifdef UNICODE
|
|
ENTRY = /ENTRY:wWinMainCRTStartup
|
|
!else
|
|
ENTRY = /ENTRY:WinMainCRTStartup
|
|
!endif
|
|
!else
|
|
SUBSYSTEM = /SUBSYSTEM:$(SUBSYSTEM),4.0
|
|
TARGET = $(MODULENAME).exe
|
|
EXCEPTIONS = -GX
|
|
!endif
|
|
!else # DLL
|
|
!if defined(AUTOMATION) && "$(AUTOMATION)" != "NOEXCEPTIONS"
|
|
EXCEPTIONS = -GX
|
|
!else
|
|
EXCEPTIONS = # exceptions not supported in DLL at this time
|
|
!endif
|
|
SUBSYSTEM = /DLL
|
|
TARGET = $(MODULENAME).dll
|
|
!if defined(ENTRY)
|
|
ENTRY = /EXPORT:$(ENTRY:,= /EXPORT:)
|
|
!endif
|
|
!if defined(AUTOMATION)
|
|
ENTRY = $(ENTRY) /EXPORT:DllGetClassObject /EXPORT:DllCanUnloadNow /EXPORT:DllRegisterServer /EXPORT:DllUnregisterServer
|
|
!endif
|
|
!endif # SUBSYTEM | DLL
|
|
|
|
!if !defined(MSILIB) && "$(_objects_)" != ""
|
|
!ifdef MSIPROJ
|
|
MSILIB = $(BUILDDIR)\Msi.lib # should be COMMONDIR?
|
|
!else
|
|
MSILIB = Msi.lib
|
|
!endif
|
|
!endif
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# default build target object dependencies
|
|
#-----------------------------------------------------------------------------
|
|
|
|
all: $(BUILDDIR)\$(TARGET)
|
|
|
|
!if defined(ADDCPP) && [echo _objects_=$(_objects_) $(OBJDIR)\$(ADDCPP:,=.obj $(OBJDIR^)\).obj > $(OBJDIR)\obj.tmp] == 0
|
|
!include $(OBJDIR)\obj.tmp
|
|
!endif
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# tools
|
|
#-----------------------------------------------------------------------------
|
|
|
|
!ifdef VCBIN
|
|
_vcbin_ = $(VCBIN)\#
|
|
_msdevbin_ = $(VCBIN)\#
|
|
!else # VCBIN not defined
|
|
!ifdef MSVCDIR # VC5
|
|
_vcbin_ = $(MSVCDIR)\bin\#
|
|
!endif
|
|
!ifdef MSDEVDIR # VC vars set
|
|
_msdevbin_ = $(MSDEVDIR)\bin\#
|
|
!ifndef MSVCDIR # VC 4.x
|
|
_vcbin_ = $(MSDEVDIR)\bin\#
|
|
!endif
|
|
!endif
|
|
!endif
|
|
|
|
CC = "$(_vcbin_)cl"
|
|
RC = "$(_msdevbin_)rc"
|
|
LINK = "$(_vcbin_)link"
|
|
BSCMAKE = "$(_vcbin_)bscmake"
|
|
MKTYPLIB= "$(_vcbin_)mktyplib" /cpp_cmd $(_vcbin_)cl
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# flags
|
|
#-----------------------------------------------------------------------------
|
|
|
|
DFLAGS = -DWIN -D_WIN32 -DWIN32
|
|
|
|
cppflags = -c -W3 -WX -DSTRICT -nologo -J -Gf $(EXCEPTIONS) $(DFLAGS)
|
|
linkcommon = /NODEFAULTLIB /MAP $(ALIGN)
|
|
linkexe = $(lflags)
|
|
linkdll = $(lflags) -entry:_DllMainCRTStartup@12 -dll
|
|
linkDEBUG = -debug:full -debugtype:cv
|
|
linkCVPACK = -debug:full -debugtype:both,fixup /opt:ref
|
|
|
|
!ifdef UNICODE
|
|
cppflags = $(cppflags) -DUNICODE -D_UNICODE
|
|
!endif
|
|
|
|
!if "$(VERSION)"=="DEBUG"
|
|
#cppflags= $(cppflags) /Fd$(@D)\msitool.pdb -Zi -DDEBUG /Fr$(@R).sbr -Ob1
|
|
#cppflags= $(cppflags) /Fd$(@D)\msitool.pdb -Zi -DDEBUG /Fr$(@R).sbr -Ox
|
|
cppflags = $(cppflags) /Fd$(@D)\msitool.pdb -Zi -DDEBUG /Fr$(@R).sbr
|
|
linkflags = $(linkcommon) $(linkDEBUG)
|
|
!else if "$(VERSION)"=="NOBSC"
|
|
cppflags = $(cppflags) /Fd$(@D)\msitool.pdb -Zi -DDEBUG
|
|
linkflags = $(linkcommon) $(linkDEBUG)
|
|
!else if "$(VERSION)"=="SHIP"
|
|
cppflags = $(cppflags) -Ox -Gy
|
|
linkflags = $(linkcommon)
|
|
!else
|
|
cppflags= $(cppflags) -DCVPACK
|
|
linkflags = $(linkcommon) $(linkCVPACK)
|
|
!endif
|
|
!ifdef LINKBASE
|
|
linkflags = $(linkflags) /BASE:$(LINKBASE)
|
|
!endif
|
|
|
|
rcflags = -r -d_RC32 $(DFLAGS) -i $(OBJDIR)
|
|
!if "$(VERSION)"=="DEBUG" || "$(VERSION)"=="NOBSC"
|
|
rcflags = $(rcflags) -DDEBUG
|
|
!endif
|
|
|
|
impflags = -nologo
|
|
bscflags = -nologo -n
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
!if "$(_objects_)" != ""
|
|
LIBS = kernel32.lib user32.lib advapi32.lib libc.lib version.lib gdi32.lib
|
|
!endif
|
|
!ifdef AUTOMATION
|
|
_typelib_ = $(OBJDIR)\$(MODULENAME).tlb
|
|
!endif
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# MSI header file dependencies
|
|
#-----------------------------------------------------------------------------
|
|
|
|
!if "$(FILEVERSION)"=="Msi" || "$(FILEVERSION)"=="msi"
|
|
FILEVERSION = MSI
|
|
!endif
|
|
!if "$(PRODUCTVERSION)"=="Msi" || "$(PRODUCTVERSION)"=="msi"
|
|
PRODUCTVERSION = MSI
|
|
!endif
|
|
!ifdef MSIPROJ
|
|
_depend_ = $(DEPEND:,= ) $(COMMONDIR)\msiquery.h
|
|
!if "$(FILEVERSION)"=="MSI" || "$(PRODUCTVERSION)"=="MSI"
|
|
_depend_ = $(_depend_) $(OBJDIR)\verdate.h
|
|
!endif
|
|
!else
|
|
_depend_ = $(DEPEND:,= )
|
|
!endif
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# version resource generation
|
|
#-----------------------------------------------------------------------------
|
|
|
|
!if defined(FILEVERSION) && (defined(MSIPROJ) || !("$(FILEVERSION)"=="MSI" || "$(PRODUCTVERSION)"=="MSI"))
|
|
!ifndef PRODUCTVERSION
|
|
PRODUCTVERSION = $(FILEVERSION)
|
|
!endif
|
|
!ifndef COMPANYNAME
|
|
COMPANYNAME = Microsoft Corporation
|
|
!endif
|
|
$(OBJDIR)\$(MODULENAME).res : $(MODULESRC)\$(MODULENAME).cpp $(MAKEFILE) $(_typelib_)
|
|
$(RC) $(rcflags) -Fo$(OBJDIR)\$(MODULENAME).res <<$(OBJDIR)\$(MODULENAME).rc
|
|
#include "$(MODULESRC)\$(MODULENAME).cpp"
|
|
!if "$(FILEVERSION)"=="MSI" || "$(PRODUCTVERSION)"=="MSI"
|
|
#include "$(OBJDIR)\verdate.h"
|
|
!endif
|
|
VS_VERSION_INFO VERSIONINFO
|
|
!if "$(FILEVERSION)"=="MSI"
|
|
FILEVERSION nVersionMajor,nVersionMinor,0,nVersionBuild
|
|
!else
|
|
FILEVERSION $(FILEVERSION:.=,)
|
|
!endif
|
|
!if "$(PRODUCTVERSION)"=="MSI"
|
|
PRODUCTVERSION nVersionMajor,nVersionMinor,0,nVersionBuild
|
|
!else
|
|
PRODUCTVERSION $(PRODUCTVERSION:.=,)
|
|
!endif
|
|
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
|
!if "$(VERSION)"=="DEBUG" || "$(VERSION)"=="NOBSC"
|
|
FILEFLAGS VS_FF_DEBUG
|
|
!else
|
|
FILEFLAGS 0L
|
|
!endif
|
|
FILEOS VOS__WINDOWS32
|
|
!if "$(SUBSYSTEM)"=="/DLL"
|
|
FILETYPE VFT_DLL
|
|
!else
|
|
FILETYPE VFT_APP
|
|
!endif
|
|
FILESUBTYPE 0L
|
|
{
|
|
BLOCK "StringFileInfo"
|
|
{
|
|
BLOCK "040904E4"
|
|
{
|
|
VALUE "CompanyName", "$(COMPANYNAME)\0"
|
|
VALUE "FileDescription", "$(DESCRIPTION)\0"
|
|
!if "$(FILEVERSION)"=="MSI"
|
|
VALUE "FileVersion", szVerNum
|
|
!else
|
|
VALUE "FileVersion", "$(FILEVERSION)\0"
|
|
!endif
|
|
VALUE "InternalName", "$(TARGET) $(VERSION)\0"
|
|
VALUE "LegalCopyright", "Copyright \251 $(COMPANYNAME) 1997\0"
|
|
VALUE "ProductName", "MSI\0"
|
|
!if "$(PRODUCTVERSION)"=="MSI"
|
|
VALUE "ProductVersion", szVerNum
|
|
!else
|
|
VALUE "ProductVersion", "$(PRODUCTVERSION)\0"
|
|
!endif
|
|
}
|
|
}
|
|
BLOCK "VarFileInfo" { VALUE "Translation", 0x409, 0x4E4 }
|
|
}
|
|
<<KEEP
|
|
!else #!defined(FILEVERSION)
|
|
$(OBJDIR)\$(MODULENAME).res : $(MODULESRC)\$(MODULENAME).cpp $(_typelib_) $(OBJDIR)
|
|
$(RC) $(rcflags) -Fo$@ $(MODULESRC)\$(MODULENAME).cpp
|
|
!endif #defined(FILEVERSON)
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# build rules
|
|
#-----------------------------------------------------------------------------
|
|
|
|
.SUFFIXES : .exe .obj .cpp .res .rc
|
|
|
|
## can't find path! MAKEFILE = MsiTool.mak # build targets are dependent upon makefile changes
|
|
|
|
$(BUILDDIR) :
|
|
if not exist $(BUILDDIR)\NUL md $(BUILDDIR)
|
|
|
|
$(OBJDIR) : $(BUILDDIR)
|
|
if not exist $(BUILDDIR)\OBJECT\NUL md $(BUILDDIR)\OBJECT
|
|
|
|
{$(MODULESRC)}.cpp{$(OBJDIR)}.obj:
|
|
$(CC) $(cppflags) -Fo$*.obj $(MSICPP) $<
|
|
|
|
!if "$(_objects_)" != ""
|
|
$(_objects_) : $(_depend_) $(OBJDIR)
|
|
!endif
|
|
|
|
!ifdef AUTOMATION
|
|
$(OBJDIR)\$(MODULENAME).tlb : $(MODULESRC)\$(MODULENAME).cpp
|
|
$(MKTYPLIB) /w0 $(MODULESRC)\$(MODULENAME).cpp /tlb $(OBJDIR)\$(MODULENAME).tlb
|
|
!endif
|
|
|
|
$(BUILDDIR)\$(TARGET): $(MAKEFILE) $(_objects_) $(OBJDIR)\$(MODULENAME).res
|
|
$(LINK) -out:$@ $(linkflags) $(SUBSYSTEM) $(ENTRY) @<<$(OBJDIR)\$(MODULENAME).lrf
|
|
$(_objects_)
|
|
$(OBJDIR)\$(MODULENAME).res
|
|
$(MSILIB) $(LINKLIBS) $(LIBS)
|
|
<<KEEP
|
|
!if "$(VERSION)"=="DEBUG" && "$(_objects_)" != ""
|
|
$(BSCMAKE) $(bscflags) -o $(BUILDDIR)\$(*B) $(_objects_:.obj=.sbr)
|
|
!endif |