//----------------------------------------------------------------------------- // SOURCE_DLL_WIN32_BASE.VPC // // Base Settings for all Source(TM) Projects //----------------------------------------------------------------------------- $Include "$SRCDIR\vpc_scripts\version.vpc" $Macro NOAPPENDPLATSUBDIR "1" [!$WIN64] $MacroRequired "PLATSUBDIR" $MacroRequired "SRCDIR" $MacroRequired "OUTBINNAME" "$PROJECTNAME" $MacroRequired "OUTBINDIR" // These are convenient for adjusting directory paths based on platform // but they must be used without absolute consistency to avoid dependency // problems. It appears that if VPC compares $LIBPUBLIC to $SRCDIR\lib\public // it will decide that they are not equal, even if the *value* of $LIBPUBLIC // is $SRCDIR\lib\public. These macros can safely be used in copy commands // and other areas that VPC doesn't use for dependency tracking. $Macro LIBPUBLIC "$SRCDIR\lib\public" $Macro LIBCOMMON "$SRCDIR\lib\common" // Fix up directories for targets like win64 $Macro OUTBINDIR "$OUTBINDIR$PLATSUBDIR" [!$NOAPPENDPLATSUBDIR && !$NOMODIFYOUTBINDIR] $Macro LIBPUBLIC "$LIBPUBLIC$PLATSUBDIR" [!$NOAPPENDPLATSUBDIR] $Macro LIBCOMMON "$LIBCOMMON$PLATSUBDIR" [!$NOAPPENDPLATSUBDIR] $Include "$SRCDIR\vpc_scripts\loadaddress.vpc" $Include "$SRCDIR\vpc_scripts\source_dll_win32_debug.vpc" $Include "$SRCDIR\vpc_scripts\source_dll_win32_release.vpc" $Include "$SRCDIR\vpc_scripts\source_win32_base.vpc" $IgnoreRedundancyWarning "ON" $Linux { -$File "$SRCDIR\lib\public\tier0.lib" $file "$SRCDIR\linux\tier0_i686.so" -$File "$SRCDIR\lib\public\vstdlib.lib" [!$WIN64] -$File "$SRCDIR\lib\public\$PLATFORM\vstdlib.lib" [$WIN64] $file "$SRCDIR\linux\vstdlib_i686.so" } // Common Configuration $Configuration { $General [$VS2010] { $TargetName "$OUTBINNAME" } $PreBuildEvent { $CommandLine "if EXIST $OUTBINDIR\$(TargetFileName) for /f $QUOTEdelims=$QUOTE %%A in ('attrib $QUOTE$OUTBINDIR\$(TargetFileName)$QUOTE') do set valveTmpIsReadOnly=$QUOTE%%A$QUOTE" "\n" \ "set valveTmpIsReadOnlyLetter=%valveTmpIsReadOnly:~6,1%" "\n" \ "if $QUOTE%valveTmpIsReadOnlyLetter%$QUOTE==$QUOTER$QUOTE del /q $QUOTE$(TargetDir)$QUOTE$(TargetFileName)" "\n" \ "$CRCCHECK" [!$SOURCESDK] } $PostBuildEvent [!$ANALYZE] { $CommandLine "if not exist $QUOTE$OUTBINDIR$QUOTE mkdir $QUOTE$OUTBINDIR$QUOTE" "\n" $CommandLine "$BASE" "call $SRCDIR\vpc_scripts\valve_p4_edit.cmd $QUOTE$OUTBINDIR\$(TargetFileName)$QUOTE $SRCDIR" "\n" [!$SOURCESDK] $CommandLine "$BASE" "copy $QUOTE$(TargetDir)$QUOTE$(TargetFileName) $QUOTE$OUTBINDIR\$(TargetFileName)$QUOTE" "\n" \ "if ERRORLEVEL 1 goto BuildEventFailed" "\n" \ "if exist $QUOTE$(TargetDir)$QUOTE$(TargetName).map copy $QUOTE$(TargetDir)$QUOTE$(TargetName).map $OUTBINDIR\$(TargetName).map" "\n" $CommandLine "$BASE" "call $SRCDIR\vpc_scripts\valve_p4_edit.cmd $OUTBINDIR\$(TargetName).pdb $SRCDIR" "\n" [!$SOURCESDK] $CommandLine "$BASE" "copy $QUOTE$(TargetDir)$QUOTE$(TargetName).pdb $OUTBINDIR\$(TargetName).pdb" "\n" \ "if ERRORLEVEL 1 goto BuildEventFailed" "\n" \ "goto BuildEventOK" "\n" \ ":BuildEventFailed" "\n" \ "echo *** ERROR! PostBuildStep FAILED for $(ProjectName)! EXE or DLL is probably running. ***" "\n" \ "del /q $QUOTE$(TargetDir)$QUOTE$(TargetFileName)" "\n" \ "exit 1" "\n" \ ":BuildEventOK" "\n" $CommandLine "$BASE" "\n" \ "call $SRCDIR\devtools\bin\vsign.bat -sign $OUTBINDIR\$(TargetFileName)" "\n" [$RETAIL && !$SOURCESDK] $CommandLine "$BASE" "\n" \ "call $SRCDIR\devtools\bin\vsign.bat -signvalve $OUTBINDIR\$(TargetFileName)" "\n" [!$RETAIL && !$SOURCESDK] $Description "Publishing to $OUTBINDIR" $ExcludedFromBuild "No" } $Linker { // Suppress this warning using the undocumented /ignore linker switch // schemalib.lib(schemaclassinfo.obj) : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library $AdditionalOptions "$BASE /ignore:4221" $AdditionalDependencies "%(AdditionalDependencies)" [$VS2010] $TargetMachine "MachineX86 (/MACHINE:X86)" [$WIN32] $TargetMachine "MachineX64 (/MACHINE:X64)" [$WIN64] // This option is from the devil. Basically, it causes the link inputs // to vary depending on what is in the solution. This is anathema // to the way that we use projects and solutions here at Valve. // It also exposes a bug in VS2005 causing files to be recompiled/linked // even if nothing changed. $LinkLibraryDependencies "false" } } // Skeleton Project - All derived projects get this as a starting base $Project { $Folder "Source Files" { $File "$SRCDIR\public\tier0\memoverride.cpp" { $Configuration { $Compiler { $Create/UsePrecompiledHeader "Not Using Precompiled Headers" } } } // Implement __imp__EncodePointer and __imp__DecodePointer so that we can run on XP SP1 // when building with VS 2010. $File "$SRCDIR\public\tier0\pointeroverride.asm" [$WIN32 && $VS2010] { $Configuration { $CustomBuildStep { // General $CommandLine "$QUOTE$(VCInstallDir)bin\ml.exe$QUOTE /safeseh /c /Cp /Zi /Fo$QUOTE$(IntDir)\$(InputName).obj$QUOTE $QUOTE$(InputPath)$QUOTE" $Description "Compiling pointeroverride.asm" $Outputs "$(IntDir)\$(InputName).obj" } } } $File "$SRCDIR\common\debug_dll_check.cpp" [!$SOURCESDK] { $Configuration { $Compiler { $Create/UsePrecompiledHeader "Not Using Precompiled Headers" } } } } $Folder "Link Libraries" { $DynamicFile "$SRCDIR\lib\public\tier0.lib" [!$WIN64] $DynamicFile "$SRCDIR\lib\public\tier1.lib" [!$WIN64] $DynamicFile "$SRCDIR\lib\public\vstdlib.lib" [!$WIN64] $DynamicFile "$SRCDIR\lib\public\$PLATFORM\tier0.lib" [$WIN64] $DynamicFile "$SRCDIR\lib\public\$PLATFORM\tier1.lib" [$WIN64] $DynamicFile "$SRCDIR\lib\public\$PLATFORM\vstdlib.lib" [$WIN64] } }