aboutsummaryrefslogtreecommitdiff
path: root/build/Common.targets
diff options
context:
space:
mode:
authorcsharptest <roger@csharptest.net>2011-10-02 16:33:22 -0500
committerrogerk <devnull@localhost>2011-10-02 16:33:22 -0500
commitd444748edc798f48d80cb250cc3bfda913d8cfff (patch)
tree804c25c81f12dd82f109d3b960b21b729220078f /build/Common.targets
parent2e89071876750487160fef06295143837d571cd1 (diff)
downloadprotobuf-d444748edc798f48d80cb250cc3bfda913d8cfff.tar.gz
protobuf-d444748edc798f48d80cb250cc3bfda913d8cfff.tar.bz2
protobuf-d444748edc798f48d80cb250cc3bfda913d8cfff.zip
Several build related changes in this commit:
1. Refactoring of build to allow multiple target frameworks 2. Addition of multiple Silverlight versions 3. Renamed *_Silverlight2 configurations to *_Silverlight 4. Added batch files for each framework build (Build20, Build35, Build40) 5. Moved the package building into MSBuild tasks 6. BuildAll.bat now builds all packages in one build 7. Removed Generate*Package.bat batch files (replaced by BuildAll.bat) 8. Removed the ability to build with 3.5 MSBuild 9. Source is only generated with Release/2.0 build of ProtoGen 10. Removed unit testing proto files from packaging 11. Removed the remaining 'pause' statements from all batch files 12. RunBenchmarks target now builds with .NET 2.0 instead of 4.0 13. Benchmark arguments can now be specified with BenchmarkArgs parameter 14. ProtoBench now supports '/log:path' so console can still see progress 15. Updated PublishRelease.bat and *.nuspec for new build output 16. Updated ProtocolBuffers.Serialization.csproj to omit extensions for 2.0 17. Added NUnit console configurations for each .NET framework version
Diffstat (limited to 'build/Common.targets')
-rw-r--r--build/Common.targets142
1 files changed, 109 insertions, 33 deletions
diff --git a/build/Common.targets b/build/Common.targets
index 140ea8f3..4e429999 100644
--- a/build/Common.targets
+++ b/build/Common.targets
@@ -2,10 +2,43 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<!-- **********************************************************************************************
+Targets For FullBuild
+*********************************************************************************************** -->
+
+ <Target Name="_FullBuild" DependsOnTargets="_CleanOutputDirectory;_BuildProtoGen;_GenerateSource;_CopyGeneratedSource">
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;TargetVersion=2" Targets="_BuildAllConfigurations" />
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;TargetVersion=3" Targets="_BuildAllConfigurations" />
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;TargetVersion=4" Targets="_BuildAllConfigurations" />
+ </Target>
+
+ <Target Name="_BuildAllConfigurations">
+ <!-- Release Package -->
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);BuildConfiguration=Release" Targets="_BuildConfiguration" />
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);BuildConfiguration=Release_Silverlight" Targets="_BuildConfiguration" />
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);PackageName=Release-$(ForcedFrameworkVersion)" Targets="_GeneratePackage" />
+ <!-- Full Package -->
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);BuildConfiguration=Debug" Targets="_BuildConfiguration" />
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);BuildConfiguration=Debug_Silverlight" Targets="_BuildConfiguration" />
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);PackageName=Full-$(ForcedFrameworkVersion)" Targets="_GeneratePackage" />
+ </Target>
+
+ <Target Name="_BuildConfiguration" DependsOnTargets="_ReportConfig;_Clean;_BuildSolution;_Test;_PreparePackageComponent" />
+
+ <Target Name="_ReportConfig">
+ <Message Importance="high" Text="
+
+Building $(BuildConfiguration) configuration for .NET Framework $(ForcedFrameworkVersion) $(Platform)" />
+ </Target>
+
+<!-- **********************************************************************************************
+Targets For Build
+*********************************************************************************************** -->
+
<Target Name="_BuildSolution">
<Message Text="Running $(SolutionTarget) $(BuildConfiguration) with $(BuildTools) on $(SolutionFile)" Importance="normal" />
<MSBuild Targets="$(SolutionTarget)" Projects="$(SolutionFile)" ToolsVersion="$(BuildTools)"
- Properties="Configuration=$(BuildConfiguration);$(ForcedFrameworkVersion)TreatWarningsAsErrors=true;"
+ Properties="Configuration=$(BuildConfiguration);Platform=$(Platform);TargetFrameworkVersion=$(ForcedFrameworkVersion);TreatWarningsAsErrors=true;SilverlightVersion=$(SilverlightVersion)"
/>
</Target>
@@ -13,73 +46,119 @@
<RemoveDir Directories="@(WorkingDirectories)" Condition="Exists(%(WorkingDirectories.Identity))" />
<MakeDir Directories="@(WorkingDirectories)" />
- <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Clean;BuildConfiguration=$(BuildConfiguration)" Targets="_BuildSolution" ContinueOnError="true" />
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Clean;BuildConfiguration=$(BuildConfiguration);Platform=$(Platform)" Targets="_BuildSolution" ContinueOnError="true" />
</Target>
<Target Name="_Compile">
- <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;BuildConfiguration=$(BuildConfiguration)" Targets="_BuildSolution" />
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;BuildConfiguration=$(BuildConfiguration);Platform=$(Platform)" Targets="_BuildSolution" />
+ </Target>
+
+ <Target Name="Requires20">
+ <Error Text="Must be run with TargetVersion=2" Condition=" '$(TargetVersion)' != '2' " />
+ </Target>
+
+ <Target Name="RequiresRelease">
+ <Error Text="Must be run with BuildConfiguration=Release" Condition=" '$(BuildConfiguration)' != 'Release' " />
</Target>
- <Target Name="_CompileGeneratedSource" DependsOnTargets="_CopyGeneratedSource">
- <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="Step=Two;SolutionTarget=Build;BuildConfiguration=$(BuildConfiguration)" Targets="_BuildSolution" />
+ <!-- **********************************************************************************************
+Targets For GenerateSource
+*********************************************************************************************** -->
+
+ <Target Name="_BuildProtoGen">
+ <MSBuild Targets="Build" ToolsVersion="3.5"
+ Projects="$(ProjectDirectory)\src\ProtocolBuffers\ProtocolBuffers.csproj;$(ProjectDirectory)\src\ProtoGen\ProtoGen.csproj"
+ Properties="Step=_BuildProtoGen;Configuration=Release;Platform=AnyCPU;TargetFrameworkVersion=v2.0;DebugType=none;DocumentationFile=;TreatWarningsAsErrors=true;OutputPath=$(BuildOutputDirectory)\ProtoGen;" />
+ </Target>
+
+ <Target Name="_CleanTempSource">
+ <Message Importance="normal" Text="Cleaning source directory $(SourceTempDirectory)"/>
+ <RemoveDir Directories="$(SourceTempDirectory)" Condition="Exists($(SourceTempDirectory))" />
+ <MakeDir Directories="$(SourceTempDirectory)" />
</Target>
- <Target Name="_GenerateSource">
- <Exec Command="$(ProtocExePath) --proto_path=$(ProtosDirectory) --descriptor_set_out=compiled.pb @(Protos->'%(RelativeDir)%(Filename)%(Extension)', ' ')" WorkingDirectory="$(BuildTempDirectory)" />
- <Exec Command="$(ProtogenExePath) compiled.pb" WorkingDirectory="$(BuildTempDirectory)" />
+ <Target Name="_GenerateSource" DependsOnTargets="_CleanTempSource">
+ <Message Importance="high" Text="Generating source from proto files" />
+ <Exec Command="$(ProtocExePath) --proto_path=$(ProtosDirectory) --descriptor_set_out=compiled.pb @(Protos->'%(RelativeDir)%(Filename)%(Extension)', ' ')" WorkingDirectory="$(SourceTempDirectory)" />
+ <Exec Command="$(ProtogenExePath) compiled.pb" WorkingDirectory="$(SourceTempDirectory)" />
<!-- Generate the AddressBookProtos.cs directly -->
- <Exec Command="$(ProtogenExePath) --protoc_dir=$(LibDirectory) --proto_path=$(ProtosDirectory) $(ProtosDirectory)\tutorial\addressbook.proto -namespace=Google.ProtocolBuffers.Examples.AddressBook -umbrella_classname=AddressBookProtos" WorkingDirectory="$(BuildTempDirectory)" />
+ <Exec Command="$(ProtogenExePath) --protoc_dir=$(LibDirectory) --proto_path=$(ProtosDirectory) $(ProtosDirectory)\tutorial\addressbook.proto -namespace=Google.ProtocolBuffers.Examples.AddressBook -umbrella_classname=AddressBookProtos" WorkingDirectory="$(SourceTempDirectory)" />
</Target>
<Target Name="_CopyGeneratedSource" DependsOnTargets="_GenerateSource">
<Copy SourceFiles="%(GeneratedSource.Identity)" DestinationFiles="%(GeneratedSource.TargetDirectory)\%(GeneratedSource.Filename)%(GeneratedSource.Extension)" />
</Target>
- <Target Name="_Test" DependsOnTargets="_CompileGeneratedSource" Condition="$(BuildConfiguration)=='Debug' or $(BuildConfiguration)=='Release'">
+<!-- **********************************************************************************************
+Targets For Test
+*********************************************************************************************** -->
+
+ <Target Name="_Test" Condition="$(BuildConfiguration)=='Debug' or $(BuildConfiguration)=='Release'">
<CallTarget Targets="_RunTests" />
</Target>
<Target Name="_RunTests">
- <Exec Command="&quot;$(NUnitExePath)&quot; /noshadow %(TestContainer.Identity) /xml:$(BuildTempDirectory)\..\%(TestContainer.Filename).$(BuildConfiguration).xml" />
+ <Copy SourceFiles="$(NUnitExeConfig)" DestinationFiles="$(NUnitExePath).config" />
+ <Exec Command="&quot;$(NUnitExePath)&quot; /nologo /noshadow %(TestContainer.Identity) /xml:$(BuildTempDirectory)\%(TestContainer.Filename).$(BuildConfiguration).xml" />
</Target>
+
+<!-- **********************************************************************************************
+Targets For Package
+*********************************************************************************************** -->
- <!--## Package Generation ##-->
<Target Name="_CleanOutputDirectory">
- <RemoveDir Directories="$(ProjectDirectory)\build_output\Package" ContinueOnError="true" />
- <RemoveDir Directories="$(ProjectDirectory)\build_output" ContinueOnError="true" />
- <MakeDir Directories="$(ProjectDirectory)\build_output" ContinueOnError="true" />
+ <RemoveDir Directories="$(BuildOutputPackage)" ContinueOnError="true" />
+ <RemoveDir Directories="$(BuildOutputDirectory)" ContinueOnError="true" />
+ <MakeDir Directories="$(BuildOutputDirectory)" ContinueOnError="true" />
</Target>
<Target Name="_PreparePackageComponent">
- <Copy SourceFiles="@(DynamicPackageItem)" DestinationFolder="$(ProjectDirectory)\build_output\Package\$(BuildConfiguration)\%(DynamicPackageItem.TargetDirectory)\%(DynamicPackageItem.RecursiveDir)" />
+ <Copy SourceFiles="@(DynamicPackageItem)" DestinationFolder="$(BuildOutputPackage)\$(BuildConfiguration)\%(DynamicPackageItem.TargetDirectory)\%(DynamicPackageItem.RecursiveDir)" />
</Target>
<Target Name="_GeneratePackage">
- <Copy SourceFiles="@(StaticPackageItem)" DestinationFolder="$(ProjectDirectory)\build_output\Package\%(StaticPackageItem.TargetDirectory)\%(StaticPackageItem.RecursiveDir)" />
- <Exec Command="&quot;$(ZipExePath)&quot; a -tzip ..\$(PackageName) * -r" WorkingDirectory="$(ProjectDirectory)\build_output\Package" />
+ <Copy SourceFiles="@(StaticPackageItem)" DestinationFolder="$(BuildOutputPackage)\%(StaticPackageItem.TargetDirectory)\%(StaticPackageItem.RecursiveDir)" />
+ <Exec Command="&quot;$(ZipExePath)&quot; a -tzip ..\$(PackageName).zip * -r" WorkingDirectory="$(BuildOutputPackage)" />
</Target>
- <!--## Benchmark ##-->
- <Target Name="_GenerateBenchmarkSource" DependsOnTargets="_Clean;_Compile">
+
+<!-- **********************************************************************************************
+Targets For Benchmark
+*********************************************************************************************** -->
+
+ <Target Name="_GenerateBenchmarkSource">
<PropertyGroup>
<Args>$(BenchmarkProtosDirectory)\google_size.proto $(BenchmarkProtosDirectory)\google_speed.proto</Args>
</PropertyGroup>
- <Exec Command="$(ProtocExePath) --proto_path=$(BenchmarkProtosDirectory);$(ProtosDirectory) --include_imports=compiled.pb --descriptor_set_out=compiled.pb $(Args)" WorkingDirectory="$(BuildTempDirectory)" />
- <Exec Command="$(ProtogenExePath) compiled.pb" WorkingDirectory="$(BuildTempDirectory)" />
+ <Exec Command="$(ProtocExePath) --proto_path=$(BenchmarkProtosDirectory);$(ProtosDirectory) --include_imports=compiled.pb --descriptor_set_out=compiled.pb $(Args)" WorkingDirectory="$(SourceTempDirectory)" />
+ <Exec Command="$(ProtogenExePath) compiled.pb" WorkingDirectory="$(SourceTempDirectory)" />
+ </Target>
+
+ <Target Name="_CompileBenchmarkAssemblyInFramework20" Condition=" '$(MSBuildToolsVersion)' != '2.0' ">
+ <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;BuildConfiguration=$(BuildConfiguration);Platform=$(Platform)"
+ Targets="_CompileBenchmarkAssembly" ToolsVersion="2.0" />
</Target>
<Target Name="_CompileBenchmarkAssembly" DependsOnTargets="_GenerateBenchmarkSource">
+ <Error Text="Must be run with Framework 2.0" Condition=" '$(MSBuildToolsVersion)' != '2.0' " />
+
<ItemGroup>
- <BenchmarkSources Include="$(BuildTempDirectory)\GoogleSizeProtoFile.cs" />
- <BenchmarkSources Include="$(BuildTempDirectory)\GoogleSpeedProtoFile.cs" />
+ <BenchmarkSources Include="$(SourceTempDirectory)\GoogleSizeProtoFile.cs" />
+ <BenchmarkSources Include="$(SourceTempDirectory)\GoogleSpeedProtoFile.cs" />
<BenchmarkSources Include="$(SourceDirectory)\ProtoBench\Properties\AssemblyInfo.cs" />
</ItemGroup>
- <Csc TargetType="library" OutputAssembly="$(BuildTempDirectory)\BenchmarkTypes.dll" Optimize="true" Sources="@(BenchmarkSources)" References="$(SourceDirectory)\ProtocolBuffers\bin\$(BuildConfiguration)\Google.ProtocolBuffers.dll" />
+ <Csc
+ TargetType="library"
+ OutputAssembly="$(BuildTempDirectory)\BenchmarkTypes.dll"
+ Optimize="true"
+ Sources="@(BenchmarkSources)"
+ References="$(SourceDirectory)\ProtocolBuffers\bin\$(BuildConfiguration)\Google.ProtocolBuffers.dll"
+ />
</Target>
- <Target Name="_PrepareBenchmarkEnvironment" DependsOnTargets="_CompileBenchmarkAssembly">
+ <Target Name="_PrepareBenchmarkEnvironment" DependsOnTargets="_CompileBenchmarkAssemblyInFramework20">
<ItemGroup>
<BenchmarkResources Include="$(BenchmarkProtosDirectory)\google_message1.dat" />
<BenchmarkResources Include="$(BenchmarkProtosDirectory)\google_message2.dat" />
@@ -93,7 +172,6 @@
<Target Name="_RunBenchmarks" DependsOnTargets="_PrepareBenchmarkEnvironment">
<ItemGroup>
- <BenchmarkParameter Include="/v2" />
<BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SizeMessage1,BenchmarkTypes" />
<BenchmarkParameter Include="google_message1.dat" />
<BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SpeedMessage1,BenchmarkTypes" />
@@ -104,12 +182,10 @@
<BenchmarkParameter Include="google_message2.dat" />
</ItemGroup>
- <PropertyGroup>
- <BenchmarkParameterList>@(BenchmarkParameter)</BenchmarkParameterList>
- <Args>$(BenchmarkParameterList.Replace(`;`,` `))</Args>
- </PropertyGroup>
-
- <Exec Command="&quot;$(ProtoBenchExePath)&quot; @(BenchmarkParameter->'%(Identity)', ' ') > &quot;$(BuildTempDirectory)\..\BenchmarkResults.txt&quot;" WorkingDirectory="$(BuildTempDirectory)" />
+ <Message Text="Running $(ProtoBenchExePath) from $(BuildTempDirectory)" />
+ <Exec Command="&quot;$(ProtoBenchExePath)&quot; $(BenchmarkArgs) @(BenchmarkParameter->'%(Identity)', ' ') &quot;/log:$(BenchmarkOutputFile)&quot;"
+ WorkingDirectory="$(BuildTempDirectory)" />
+
</Target>
</Project> \ No newline at end of file