@echo off
rem Primary build script. Usage
rem build.bat [x64] [SN]
rem
rem The first argument is x64 for 64-bit dlls. (Defaults to x86)
rem Supply SN as the second argument to strong-name the assemblies.
rem
rem To build for the x64 you need to build from the "Visual Studio x64 Cross Tools Command Prompt"
rem
set DotNetFWVersion=2.0
if "%~1"=="x64" (
set X64=true
shift
) else (
set X64=false
)
if "%~1"=="SN" (
set CompilingSN=true
) else (
set CompilingSN=false
)
if "%X64%"=="true" (
if "%CompilingSN%"=="true" (
set OutputPath=%CD%\..\bin\nt.x64.sn
) else (
set OutputPath=%CD%\..\bin\nt.x64
)
)
if "%X64%"=="false" (
if "%CompilingSN%"=="true" (
set OutputPath=%CD%\..\bin\nt.x86.sn
) else (
set OutputPath=%CD%\..\bin\nt.x86
)
)
if not exist "%OutputPath%" mkdir "%OutputPath%"
set SrcPath=%CD%\..\src
set BasePath=%CD%\..
call :Compile_P4DN_Assembly
call :Compile_P4API_Assembly
if exist "%OutputPath%\P4.Net.snk" del "%OutputPath%\P4.Net.snk"
goto :eof
:usage
echo build.bat [x64] [SN]
echo.
echo The first argument is x64 for 64-bit dlls. (Defaults to x86)
echo Supply SN as the second argument to strong-name the assemblies.
echo.
echo To build for the x64 you need to build from the "Visual Studio x64 Cross Tools Command Prompt"
ehco.
goto :eof
:Compile_P4DN_Assembly
rem set the source files
set sources= "%SrcPath%\p4dn\AssemblyInfo.cpp"
set sources= %sources% "%SrcPath%\p4dn\ClientApi_m.cpp"
set sources= %sources% "%SrcPath%\p4dn\ClientUserDelegate.cpp"
set sources= %sources% "%SrcPath%\p4dn\ClientUser_m.cpp"
set sources= %sources% "%SrcPath%\p4dn\Error_m.cpp"
set sources= %sources% "%SrcPath%\p4dn\NoEcho_m.cpp"
set sources= %sources% "%SrcPath%\p4dn\Options_m.cpp"
set sources= %sources% "%SrcPath%\p4dn\P4String.cpp"
set sources= %sources% "%SrcPath%\p4dn\Spec_m.cpp"
set sources= %sources% "%SrcPath%\p4dn\Stdafx.cpp"
set sources= %sources% "%SrcPath%\p4dn\MergeData_m.cpp"
set sources= %sources% "%SrcPath%\p4dn\P4MapMaker.cpp"
if '%CompilingSN%'=='true' (
set sources= %sources% ""%SrcPath%\p4dn\SNAssemblyInfo.cpp"
copy /y "%BasePath%\build\P4.Net.snk" "%OutputPath%\P4.Net.snk" >nul
)
rem point to the P4API header files
set FLAGS=/Od /I "%BasePath%\ext\p4api_vs2005_dyn\include\p4"
rem VS compiler switches
set FLAGS=%FLAGS% /D "WIN32" /D "OS_NT" /D "_WINDLL" /D "_MBCS"
rem P4API compiler switches
set FLAGS=%FLAGS% /D "CASE_INSENSITIVE"
set FLAGS=%FLAGS% /FD /EHa
set FLAGS=%FLAGS% /MD
set FLAGS=%FLAGS% /W0 /nologo /c /Zi /TP
set FLAGS=%FLAGS% /clr
rem now compile
cl %FLAGS% %sources%
rem set the output assembly
set FLAGS=/OUT:"%OutputPath%\p4dn.dll"
set FLAGS=%FLAGS% /NOLOGO /DLL
set FLAGS=%FLAGS% /NODEFAULTLIB:"LIBCMT.lib" /NODEFAULTLIB:"LIBCMTD.lib"
set FLAGS=%FLAGS% /FIXED:No
set FLAGS=%FLAGS% Ws2_32.lib
set FLAGS=%FLAGS% msvcrt.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
set FLAGS=%FLAGS% advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
rem Build against the 2003 version of P4API, otherwise a dependency on VS2005 SP1 VC runtime is
rem introduced... and that is not widely deployed on windows machines
rem Unfortunately, not an option of x64, Perforce only supplies lib with SP1 dependencies
if "%X64%"=="true" set FLAGS=%FLAGS% "%BasePath%\ext\p4api_vs2005_dyn_x64\lib\libclient.lib"
if "%X64%"=="true" set FLAGS=%FLAGS% "%BasePath%\ext\p4api_vs2005_dyn_x64\lib\librpc.lib"
if "%X64%"=="true" set FLAGS=%FLAGS% "%BasePath%\ext\p4api_vs2005_dyn_x64\lib\libsupp.lib"
if "%X64%"=="true" set FLAGS=%FLAGS% /MACHINE:X64
if "%X64%"=="false" set FLAGS=%FLAGS% "%BasePath%\ext\p4api_vs2003_dyn\lib\libclient.lib"
if "%X64%"=="false" set FLAGS=%FLAGS% "%BasePath%\ext\p4api_vs2003_dyn\lib\librpc.lib"
if "%X64%"=="false" set FLAGS=%FLAGS% "%BasePath%\ext\p4api_vs2003_dyn\lib\libsupp.lib"
if "%X64%"=="false" set FLAGS=%FLAGS% /MACHINE:X86
set FLAGS=%FLAGS% /MANIFEST /MANIFESTFILE:"%OutputPath%\p4dn.dll.intermediate.manifest"
rem and now we link...
link %FLAGS% "*.obj"
rem embed the manifest file
mt /nologo /outputresource:"%OutputPath%\p4dn.dll;#2" /manifest "%OutputPath%\p4dn.dll.intermediate.manifest"
rem del /q "%OutputPath%\p4dn.dll.intermediate.manifest"
if '%CompilingSN%'=='true' (
sn -q -R "%OutputPath%\p4dn.dll" "%BasePath%\build\P4.Net.snk"
)
rem now clean-up
del /q "*.obj"
del /q "*.pdb"
del /q "*.idb"
goto :eof
:Compile_P4API_Assembly
set FLAGS=/target:library
set FLAGS=%FLAGS% /reference:"%OutputPath%\p4dn.dll"
set FLAGS=%FLAGS% /w:0 /o
set FLAGS=%FLAGS% "/out:%OutputPath%\p4api.dll"
set FLAGS=%FLAGS% /nologo "/doc:%OutputPath%\p4api.xml"
set SOURCES="%SrcPath%\P4API\*.cs" "%SrcPath%\P4API\Exceptions\*.cs" "%SrcPath%\P4API\Record\*.cs"
if '%CompilingSN%'=='true' (
set SOURCES= %SOURCES% "%SrcPath%\P4API\StrongName\SNAssemblyInfo.cs"
)
echo Compiling p4api.dll...
csc %FLAGS% %SOURCES%
goto :eof