//-----------------------------------------------------------------------------
//	SOURCE_DLL_WIN32_RELEASE.VPC
//
//	Base Settings for all Source(TM) Projects
//-----------------------------------------------------------------------------

$IgnoreRedundancyWarning	"ON"

// Disable frame pointer omission to allow fast stack walking, necessary for
// good ETW profiling.
$Conditional  NOFPO  "1"

$MacroRequired				"SRCDIR"
$MacroRequired				"OUTBINNAME"
$MacroRequired				"OUTBINDIR"
$MacroRequired				"LIBPUBLIC"
$MacroRequired				"LIBCOMMON"
$MacroRequired				"PLATSUBDIR"
$MacroRequired				"OUTDLLEXT"
$MacroRequiredAllowEmpty	"GAMENAME"
$MacroRequiredAllowEmpty	"INTERMEDIATESUBDIR"
$MacroRequiredAllowEmpty	"_UNITYSUBDIR"
$Macro						"_SUBDIRSUFFIX"		"$INTERMEDIATESUBDIR$GAMENAME$PLATSUBDIR$_UNITYSUBDIR"

$Configuration "Release"
{
	$General	
	{
		// General
		$OutputDirectory				".\Release$_SUBDIRSUFFIX"	[!$RETAIL && !$PROFILE]
		$IntermediateDirectory			".\Release$_SUBDIRSUFFIX"	[!$RETAIL && !$PROFILE]
		$OutputDirectory				".\Retail$_SUBDIRSUFFIX"	[$RETAIL]
		$IntermediateDirectory			".\Retail$_SUBDIRSUFFIX"	[$RETAIL]
		$OutputDirectory				".\Profile$_SUBDIRSUFFIX"	[!$RETAIL && $PROFILE]
		$IntermediateDirectory			".\Profile$_SUBDIRSUFFIX"	[!$RETAIL && $PROFILE]

		$ExtensionsToDeleteOnClean
		$BuildLogFile
		$InheritedProjectPropertySheets

		// Project Defaults
		$ConfigurationType					"Dynamic Library (.dll)"
		$UseOfMFC
		$UseOfATL
		$MinimizeCRTUseInATL
		$CharacterSet						"Use Multi-Byte Character Set"
		$CommonLanguageRuntimeSupport
		$WholeProgramOptimization			"Use Link Time Code Generation" [$LTCG]
	}

	$Debugging
	{
		$Command
		$CommandArguments
		$WorkingDirectory
		$Attach
		$DebuggerType
		$Environment
		$MergeEnvironment
		$SQLDebugging
	}

	$Compiler
	{
		// General
		$AdditionalIncludeDirectories		"$SRCDIR\common;$SRCDIR\public;$SRCDIR\public\tier0;$SRCDIR\public\tier1"
		$Resolve#UsingReferences
		$DebugInformationFormat				"Program Database (/Zi)"
		$SuppressStartupBanner
		$WarningLevel						"Level 4 (/W4)"
		$TreatWarningsAsErrors
		$UseUNICODEResponseFiles

		// Optimization
		$Optimization						"Maximize Speed (/O2)"
		$InlineFunctionExpansion			"Any Suitable (/Ob2)"
		$EnableIntrinsicFunctions			"Yes (/Oi)"
		$FavorSizeOrSpeed					"Favor Fast Code (/Ot)"
		$OmitFramePointers
		$EnableFiberSafeOptimizations
		$WholeProgramOptimization

		// Preprocessor
		$PreprocessorDefinitions			"$BASE;WIN32;_WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_ALLOW_RUNTIME_LIBRARY_MISMATCH;_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH;_ALLOW_MSC_VER_MISMATCH;%(PreprocessorDefinitions)"
		$PreprocessorDefinitions			"$BASE;RELEASEASSERTS" [$RELEASEASSERTS]
		$IgnoreStandardIncludePath
		$GeneratePreprocessedFile
		$KeepComments

		// Code Generation
		$EnableStringPooling				"Yes (/GF)"
		$EnableMinimalRebuild
		$EnableC++Exceptions				"No"
		$SmallerTypeCheck
		$BasicRuntimeChecks
		$RuntimeLibrary						"Multi-threaded (/MT)"
		$StructMemberAlignment
		$BufferSecurityCheck                "No"	[$RETAIL]
		$BufferSecurityCheck                "Yes"	[!$RETAIL]
		$EnableFunctionLevelLinking			"Yes (/Gy)"
		$EnableEnhancedInstructionSet
		$FloatingPointModel					"Fast (/fp:fast)"
		$EnableFloatingPointExceptions

		// Language
		$DisableLanguageExtensions
		$DefaultCharUnsigned
		$TreatWCHAR_TAsBuiltInType
		$ForceConformanceInForLoopScope		"Yes (/Zc:forScope)"
		$EnableRunTimeTypeInfo				"Yes (/GR)"
		$OpenMPSupport

		// Precompiled Headers
		$Create/UsePrecompiledHeader		"Not Using Precompiled Headers"
		$Create/UsePCHThroughFile
		$PrecompiledHeaderFile

		// Output Files
		$ExpandAttributedSource
		$AssemblerOutput
		$ASMListLocation					"$(IntDir)/"
		$ObjectFileName						"$(IntDir)/"
		$ProgramDatabaseFileName			"$(IntDir)/"
		$GenerateXMLDocumentationFiles		"No"
		$XMLDocumentationFileName

		// Browse Information
		$EnableBrowseInformation			"None"
		$BrowseFile							"$(IntDir)/"

		// Advanced
		$CallingConvention
		$CompileAs							"Compile as C++ Code (/TP)"
		$DisableSpecificWarnings
		$ForceIncludes
		$Force#Using
		$ShowIncludes
		$UndefinePreprocessorDefinitions
		$UndefineAllPreprocessorDefinitions
		$UseFullPaths						"Yes (/FC)"
		$OmitDefaultLibraryNames
		$ErrorReporting						"Prompt Immediately (/errorReport:prompt)"

		$AdditionalOptions					"/Zm200"
		// Enable extra debugging information. This switch requires VS 2013 Update 3.
		// With VS 2013 make sure that Edit-And-Continue is disabled in the debugger settings so that
		// the debugger uses the enhanced debug information.
		// http://randomascii.wordpress.com/2013/09/11/debugging-optimized-codenew-in-visual-studio-2012/
		$AdditionalOptions					"$BASE /Zo"
		$AdditionalOptions					"$BASE /Oy-"	[$NOFPO]
	}

	$Linker
	{
		// General
		$OutputFile							"$(OutDir)/$OUTBINNAME$OUTDLLEXT"
		$ShowProgress						"Not Set"
		$Version
		$EnableIncrementalLinking			"No (/INCREMENTAL:NO)"
		$SuppressStartupBanner				"Yes (/NOLOGO)"
		$IgnoreImportLibrary
		$RegisterOutput
		$AdditionalLibraryDirectories		"$LIBCOMMON;$LIBPUBLIC"
		$LinkLibraryDependencies
		$UseLibraryDependencyInputs
		$UseUNICODEResponseFiles			"No"

		// Input
		$AdditionalDependencies
		$IgnoreAllDefaultLibraries
		$IgnoreSpecificLibrary				"libc;libcd;libcmtd;libcpmtd;libcpmtd0;libcpmtd1"
		$ModuleDefinitionFile
		$AddModuleToAssembly
		$EmbedManagedResourceFile
		$ForceSymbolReferences
		$DelayLoadedDLLs
		$AssemblyLinkResource

		// Manifest File
		$GenerateManifest					"No"
		$ManifestFile
		$AdditionalManifestDependencies
		$AllowIsolation
		//$UACExecutionLevel

		// Debugging
		$GenerateDebugInfo					"Yes (/DEBUG)"
		$GenerateProgramDatabaseFile		"$(IntDir)/$(TargetName).pdb"
		$StripPrivateSymbols
		$MapExports
		$DebuggableAssembly

		// System
		$SubSystem							"Windows (/SUBSYSTEM:WINDOWS)"
		$HeapReserveSize
		$HeapCommitSize
		$StackReserveSize
		$StackCommitSize
		$EnableLargeAddresses
		$TerminalServer
		$SwapRunFromCD
		$SwapRunFromNetwork
		$Driver

		// RandomizeBaseAddress (/DYNAMICBASE, /ASLR) is a hugely important security setting.
		// However it can cause confusion during development and can make tracking down certain
		// bugs tricky by making code/stack/heap addresses change between runs. Enable for retail,
		// but disable for development builds.
		$RandomizedBaseAddress				"true" [$RETAIL]
		$RandomizedBaseAddress				"false" [!$RETAIL]

		// Optimization
		$References							"Eliminate Unreferenced Data (/OPT:REF)"
		// COMDAT folding can be very confusing when debugging and profiling because it can
		// cause execution to go through nonsensical functions (that happen to be binary
		// equivalent to the logical function). The performance benefit is small enough that
		// it is not worth enabling in the development builds. It should be enabled on retail
		// builds.
		$EnableCOMDATFolding				"Remove Redundant COMDATs (/OPT:ICF)" [$RETAIL]
		$EnableCOMDATFolding				"No (/OPT:NOICF)" [!$RETAIL]
		$OptimizeForWindows98
		$FunctionOrder
		$ProfileGuidedDatabase
		$LinkTimeCodeGeneration

		// Embedded IDL
		$MIDLCommands
		$IgnoreEmbeddedIDL
		$MergeIDLBaseFileName
		$TypeLibrary
		$TypeLibResourceID

		// Advanced
		$EntryPoint
		$NoEntryPoint
		$SetChecksum
		$BaseAddress						"$LOADADDRESS_DEVELOPMENT"
		//$BaseAddress						"$LOADADDRESS_RETAIL" [$RETAIL]
		$FixedBaseAddress
		$TurnOffAssemblyGeneration
		$DelayLoadedDLL
		$ImportLibrary
		$MergeSections
		$TargetMachine					
		$Profile
		$CLRThreadAttribute
		$CLRImageType
		$KeyFile
		$KeyContainer
		$DelaySign
		$ErrorReporting						"Prompt Immediately (/ERRORREPORT:PROMPT)"
		$CLRUnmanagedCodeCheck
		// Most DLLs cannot yet handle SafeSEH
		$ImageHasSafeExceptionHandlers		"false"

		// Command Line
		$AdditionalOptions						
	}

	$ManifestTool
	{
		// General
		$SuppressStartupBanner				"Yes (/nologo)"
		$VerboseOutput
		$AssemblyIdentity
		$UseUNICODEResponseFiles
		$UseFAT32WorkAround

		// Input And Output
		$AdditionalManifestFiles
		$InputResourceManifests
		$EmbedManifest
		$OutputManifestFile
		$ManifestResourceFile
		$GenerateCatalogFiles
		$DependencyInformationFile

		// Isolated COM
		$TypeLibraryFile
		$RegistrarScriptFile
		$ComponentFileName
		$ReplacementsFile

		// Advanced
		$UpdateFileHashes
		$UpdateFileHashesSearchPath

		// Command Line
		$AdditionalOptions						
	}

	$XMLDocumentGenerator
	{
		// General
		$SuppressStartupBanner				"Yes (/nologo)"
		$ValidateIntelliSense
		$AdditionalDocumentFiles
		$OutputDocumentFile
		$DocumentLibraryDependencies
		$UseUNICODEResponseFiles
	}

	$BrowseInformation
	{
		$SuppressStartupBanner				"Yes (/nologo)"	
		$OutputFile							"$(OutDir)/$OUTBINNAME.bsc"
		$AdditionalOptions
	}

	$Resources
	{
		// General
		$PreprocessorDefinitions			"$BASE;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)"
		$Culture							"English (United States) (0x409)"
		$AdditionalIncludeDirectories
		$IgnoreStandardIncludePath
		$ShowProgress
		$ResourceFileName

		// Command Line
		$AdditionalOptions						
	}

	$PreBuildEvent
	{
		$CommandLine
		$Description
		$ExcludedFromBuild					"No"
	}

	$PreLinkEvent
	{	
		$CommandLine
		$Description
		$ExcludedFromBuild					"No"
	}

	$PostBuildEvent
	{
		$CommandLine
		$Description
		$ExcludedFromBuild					"No"
	}

	$CustomBuildStep
	{
		// General
		$CommandLine
		$Description
		$Outputs
		$AdditionalDependencies
	}
}