aboutsummaryrefslogblamecommitdiff
path: root/build/Common.targets
blob: 7682b19eeb06b6ce47201d78520e54a34b92126d (plain) (tree)
1
2
3
4
5
6
7
8
9
                                      
 

                                                                                        




                                                                                                                         


                                                                                                                                                             
                                                                                              



                                         

                                                                                                                                                                                                                              
                         

                                                                                                                                                                                                                            






                                                                                                                             
                                                                                                





                                                                                                   


                                                                                                                                
                                                                                                              



                        

                                                                                                        
 
                                                                                                                                                                                                                                   
           
 
                          
                                                                                                                                                                                                              


                            
                                                                                                     



                                                                                                                   

           




                                                                                                     
                                                 







                                                                                                                                                                                                                            

           



                                                                                                                                                                                                          
           
 

                                                                                                                                                                    

           



                                                                                                   
                       

                                      
 
                           
                  
                                                                                      




                                                                                                                                                                                                     
           



                                                                                                   
  
                                       


                                                                              


                                          
                                                                                                                                                                                                          


                                  

                                                                                                                                                                

           




























































                                                                                                                                                                             




                                                                                                   



                                                                                                               






                                                                                                                                                                                                                    


                                                                                       

                                                                                                   
               

                                                                                   
                                                                                             

                






                                                                                                           

           
                                                                                                        



                                                                                                                              
                                                                                                                                                          

















                                                                                                             



                                                                                                                                                       
           
 
         
<?xml version="1.0" encoding="utf-8"?>

<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=NET20;BuildTools=3.5" Targets="_BuildAllConfigurations" />
    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;TargetVersion=CF35;BuildTools=3.5" Targets="_BuildAllConfigurations" />
    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;TargetVersion=SL40;BuildTools=4.0" Targets="_BuildAllConfigurations" />
    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="" Targets="_CompletePackages" />
  </Target>

  <Target Name="_BuildAllConfigurations">
    <!-- Release Package -->
    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);BuildTools=$(BuildTools);BuildConfiguration=Release" Targets="_BuildConfiguration" />
    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);PackageName=Release-$(TargetVersion)" Targets="_GeneratePackage" />
    <!-- Full Package -->
    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);BuildTools=$(BuildTools);BuildConfiguration=Debug" Targets="_BuildConfiguration" />
    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;Platform=$(Platform);TargetVersion=$(TargetVersion);PackageName=Full-$(TargetVersion)" 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 $(TargetVersion) $(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);Platform=$(Platform);TreatWarningsAsErrors=true;"
             />
  </Target>

  <Target Name="_Clean">
    <RemoveDir Directories="@(WorkingDirectories)" Condition="Exists(%(WorkingDirectories.Identity))" />
    <MakeDir Directories="@(WorkingDirectories)" />

    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Clean;BuildConfiguration=$(BuildConfiguration);Platform=$(Platform);TargetVersion=$(TargetVersion)" Targets="_BuildSolution" ContinueOnError="true" />
  </Target>

  <Target Name="_Compile">
    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;BuildConfiguration=$(BuildConfiguration);Platform=$(Platform);TargetVersion=$(TargetVersion)" Targets="_BuildSolution" />
  </Target>

  <Target Name="Requires20">
    <Error Text="Must be run with TargetVersion=NET20" Condition=" '$(TargetVersion)' != 'NET20' " />
  </Target>

  <Target Name="RequiresRelease">
    <Error Text="Must be run with BuildConfiguration=Release" Condition=" '$(BuildConfiguration)' != 'Release' " />
  </Target>

  <!-- **********************************************************************************************
Targets For GenerateSource
*********************************************************************************************** -->

  <Target Name="_BuildProtoGen">
    <MSBuild Targets="Rebuild" 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" 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)" />
  </Target>

  <Target Name="_CopyGeneratedSource" DependsOnTargets="_GenerateSource">
    <Copy SourceFiles="%(GeneratedSource.Identity)" DestinationFiles="%(GeneratedSource.TargetDirectory)\%(GeneratedSource.Filename)%(GeneratedSource.Extension)" />
  </Target>

<!-- **********************************************************************************************
Targets For Test
*********************************************************************************************** -->
  
  <Target Name="_Test">
    <CallTarget Targets="_RunTests" />
  </Target>

  <Target Name="_RunTests">
    <!-- NUnit -->
    <Copy SourceFiles="$(NUnitExeConfig)" DestinationFiles="$(NUnitExePath).config" />
    <Exec Condition="$(BuildConfiguration)=='Debug' or $(BuildConfiguration)=='Release'"
      Command="&quot;$(NUnitExePath)&quot; /nologo /noshadow %(TestContainer.Identity) /xml:$(BuildTempDirectory)\%(TestContainer.Filename).xml" />
    <!-- StatLight -->
    <Exec Condition="$(BuildConfiguration)=='Debug_Silverlight' or $(BuildConfiguration)=='Release_Silverlight'"
      Command="&quot;$(StatLightExePath)&quot; -x %(StatLightTestContainer.Identity) --ReportOutputFileType=NUnit --ReportOutputFile=$(BuildTempDirectory)\%(StatLightTestContainer.Filename).xml" />
  </Target>

<!-- **********************************************************************************************
Targets For Package
*********************************************************************************************** -->
  
  <Target Name="_CleanOutputDirectory">
    <RemoveDir Directories="$(BuildOutputPackage)" ContinueOnError="true" />
    <RemoveDir Directories="$(BuildOutputDirectory)" ContinueOnError="true" />
    <MakeDir Directories="$(BuildOutputDirectory)" ContinueOnError="true" />
  </Target>
  
  <Target Name="_PreparePackageComponent">
    <Copy SourceFiles="@(DynamicPackageItem)" DestinationFolder="$(BuildOutputPackage)\$(BuildConfiguration)\$(TargetVersion)\%(DynamicPackageItem.TargetDirectory)\%(DynamicPackageItem.RecursiveDir)" />
  </Target>

  <Target Name="_GeneratePackage">
    <Copy SourceFiles="@(StaticPackageItem)" DestinationFolder="$(BuildOutputPackage)\%(StaticPackageItem.TargetDirectory)\%(StaticPackageItem.RecursiveDir)" />
    <Exec Command="&quot;$(ZipExePath)&quot; a -tzip ..\$(PackageName).zip * -r" WorkingDirectory="$(BuildOutputPackage)" />
  </Target>

  <Target Name="_CompletePackages">
    <ItemGroup>
      <ReleasePackageItem Include="$(BuildOutputDirectory)\ProtoGen\*">
        <TargetDirectory>\Protoc</TargetDirectory>
      </ReleasePackageItem>
      <!-- RELEASE -->
      <ReleasePackageItem Include="$(BuildOutputDirectory)\v2.0\Release\*">
        <TargetDirectory>\Release\v2.0</TargetDirectory>
      </ReleasePackageItem>
      <ReleasePackageItem Include="$(BuildOutputDirectory)\v2.0\Release_Silverlight\*">
        <TargetDirectory>\Release_Silverlight\v2.0</TargetDirectory>
      </ReleasePackageItem>
      <ReleasePackageItem Include="$(BuildOutputDirectory)\v3.5\Release\*">
        <TargetDirectory>\Release\v3.5</TargetDirectory>
      </ReleasePackageItem>
      <ReleasePackageItem Include="$(BuildOutputDirectory)\v3.5\Release_Silverlight\*">
        <TargetDirectory>\Release_Silverlight\v3.0</TargetDirectory>
      </ReleasePackageItem>
      <ReleasePackageItem Include="$(BuildOutputDirectory)\v4.0\Release\*">
        <TargetDirectory>\Release\v4.0</TargetDirectory>
      </ReleasePackageItem>
      <ReleasePackageItem Include="$(BuildOutputDirectory)\v4.0\Release_Silverlight\*">
        <TargetDirectory>\Release_Silverlight\v4.0</TargetDirectory>
      </ReleasePackageItem>
      <!-- DEBUG -->
      <DebugPackageItem Include="$(BuildOutputDirectory)\v2.0\Debug\*">
        <TargetDirectory>\Debug\v2.0</TargetDirectory>
      </DebugPackageItem>
      <DebugPackageItem Include="$(BuildOutputDirectory)\v2.0\Debug_Silverlight\*">
        <TargetDirectory>\Debug_Silverlight\v2.0</TargetDirectory>
      </DebugPackageItem>
      <DebugPackageItem Include="$(BuildOutputDirectory)\v3.5\Debug\*">
        <TargetDirectory>\Debug\v3.5</TargetDirectory>
      </DebugPackageItem>
      <DebugPackageItem Include="$(BuildOutputDirectory)\v3.5\Debug_Silverlight\*">
        <TargetDirectory>\Debug_Silverlight\v3.0</TargetDirectory>
      </DebugPackageItem>
      <DebugPackageItem Include="$(BuildOutputDirectory)\v4.0\Debug\*">
        <TargetDirectory>\Debug\v4.0</TargetDirectory>
      </DebugPackageItem>
      <DebugPackageItem Include="$(BuildOutputDirectory)\v4.0\Debug_Silverlight\*">
        <TargetDirectory>\Debug_Silverlight\v4.0</TargetDirectory>
      </DebugPackageItem>
    </ItemGroup>
    
    <RemoveDir Directories="$(BuildOutputDirectory)\Release;$(BuildOutputDirectory)\Full" ContinueOnError="true" />
    <MakeDir Directories="$(BuildOutputDirectory)\Release;$(BuildOutputDirectory)\Full" ContinueOnError="true" />

    <!-- Copy files for Release -->
    <Copy SourceFiles="@(StaticPackageItem)" DestinationFolder="$(BuildOutputDirectory)\Release\%(StaticPackageItem.TargetDirectory)\%(StaticPackageItem.RecursiveDir)" />
    <Copy SourceFiles="@(ReleasePackageItem)" DestinationFolder="$(BuildOutputDirectory)\Release\%(ReleasePackageItem.TargetDirectory)\%(ReleasePackageItem.RecursiveDir)" />
    <Exec Command="&quot;$(ZipExePath)&quot; a -tzip $(BuildOutputDirectory)\release-binaries.zip * -r" WorkingDirectory="$(BuildOutputDirectory)\Release" />

    <!-- Copy files for Debug -->
    <Copy SourceFiles="@(StaticPackageItem)" DestinationFolder="$(BuildOutputDirectory)\Full\%(StaticPackageItem.TargetDirectory)\%(StaticPackageItem.RecursiveDir)" />
    <Copy SourceFiles="@(ReleasePackageItem)" DestinationFolder="$(BuildOutputDirectory)\Full\%(ReleasePackageItem.TargetDirectory)\%(ReleasePackageItem.RecursiveDir)" />
    <Copy SourceFiles="@(DebugPackageItem)" DestinationFolder="$(BuildOutputDirectory)\Full\%(DebugPackageItem.TargetDirectory)\%(DebugPackageItem.RecursiveDir)" />
    <Exec Command="&quot;$(ZipExePath)&quot; a -tzip $(BuildOutputDirectory)\full-binaries.zip * -r" WorkingDirectory="$(BuildOutputDirectory)\Full" />

  </Target>
  
<!-- **********************************************************************************************
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="$(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="$(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" 
      />
  </Target>

  <Target Name="_PrepareBenchmarkEnvironment" DependsOnTargets="_CompileBenchmarkAssemblyInFramework20">
    <ItemGroup>
      <BenchmarkResources Include="$(BenchmarkProtosDirectory)\google_message1.dat" />
      <BenchmarkResources Include="$(BenchmarkProtosDirectory)\google_message2.dat" />
      <BenchmarkResources Include="$(SourceDirectory)\ProtocolBuffers\bin\$(BuildConfiguration)\Google.ProtocolBuffers.dll" />
      <BenchmarkResources Include="$(SourceDirectory)\ProtocolBuffers.Serialization\bin\$(BuildConfiguration)\Google.ProtocolBuffers.Serialization.dll" />
      <BenchmarkResources Include="$(SourceDirectory)\ProtoBench\bin\$(BuildConfiguration)\ProtoBench.exe" />
    </ItemGroup>

    <Copy SourceFiles="@(BenchmarkResources)" DestinationFolder="$(BuildTempDirectory)" />
  </Target>

  <Target Name="_RunBenchmarks" DependsOnTargets="_PrepareBenchmarkEnvironment">
    <ItemGroup>
      <BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SizeMessage1,BenchmarkTypes" />
      <BenchmarkParameter Include="google_message1.dat" />
      <BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SpeedMessage1,BenchmarkTypes" />
      <BenchmarkParameter Include="google_message1.dat" />
      <BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SizeMessage2,BenchmarkTypes" />
      <BenchmarkParameter Include="google_message2.dat" />
      <BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SpeedMessage2,BenchmarkTypes" />
      <BenchmarkParameter Include="google_message2.dat" />
    </ItemGroup>

    <Message Text="Running $(ProtoBenchExePath) from $(BuildTempDirectory)" />
    <Exec Command="&quot;$(ProtoBenchExePath)&quot; $(BenchmarkArgs) @(BenchmarkParameter->'%(Identity)', ' ') &quot;/log:$(BenchmarkOutputFile)&quot;"
          WorkingDirectory="$(BuildTempDirectory)" />

  </Target>

</Project>