OnnxRuntime.CSharp.proj 8.06 KB
Newer Older
gaoqiong's avatar
gaoqiong committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?xml version="1.0" encoding="utf-8"?>
<!--
This is the master msbuild project file for all csharp components. 
This is created so that the NuGet dependencies are restored before the projects are built during a CI build.
CMake creates a target to this project
-->

<Project DefaultTargets="Build">
  
  <PropertyGroup>
    <OrtPackageId Condition=" '$(OrtPackageId)' == '' ">Microsoft.ML.OnnxRuntime</OrtPackageId>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
    <DotNetExe Condition= " '$(DotNetExe)' == '' ">dotnet</DotNetExe>
    <NugetExe Condition= " '$(NugetExe)' == '' ">nuget</NugetExe>
    <TargetArchitecture Condition=" '$(TargetArchitecture)' == '' ">x64</TargetArchitecture>
    <IsReleaseBuild Condition=" '$(IsReleaseBuild)' == '' ">false</IsReleaseBuild>
    <IsLinuxBuild Condition=" '$(IsLinuxBuild)' == '' ">false</IsLinuxBuild>
    <ExecutionProvider Condition=" '$(ExecutionProvider)' == '' ">None</ExecutionProvider>

    <!--internal build related properties-->
    <OnnxRuntimeSourceDirectory Condition="'$(OnnxRuntimeSourceDirectory)'==''">..</OnnxRuntimeSourceDirectory>
    <GenerateNuspecScript>..\tools\nuget\generate_nuspec_for_native_nuget.py</GenerateNuspecScript>
  </PropertyGroup>

  <PropertyGroup Condition="'$(IsLinuxBuild)'=='true'">
    <!--internal build related properties for Linux -->
    <OnnxRuntimeBuildDirectory Condition="'$(OnnxRuntimeBuildDirectory)'==''">..\build\Linux</OnnxRuntimeBuildDirectory>
    <OnnxRuntimePackagesDirectory Condition="'$(OnnxRuntimePackagesDirectory)'==''">$(OnnxRuntimeBuildDirectory)\packages</OnnxRuntimePackagesDirectory>
    <NativeBuildOutputDir>$(OnnxRuntimeBuildDirectory)\$(Configuration)</NativeBuildOutputDir>
  </PropertyGroup>

  <PropertyGroup Condition="'$(IsLinuxBuild)'=='false'">
    <!--internal build related properties for Windows -->
    <OnnxRuntimeBuildDirectory Condition="'$(OnnxRuntimeBuildDirectory)'==''">..\build\Windows</OnnxRuntimeBuildDirectory>
    <OnnxRuntimePackagesDirectory Condition="'$(OnnxRuntimePackagesDirectory)'==''">$(OnnxRuntimeBuildDirectory)\packages</OnnxRuntimePackagesDirectory>
    <NativeBuildOutputDir>$(OnnxRuntimeBuildDirectory)\$(Configuration)\$(Configuration)</NativeBuildOutputDir>
  </PropertyGroup>

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

  <Target Name="Build">
    <Error Text="Building via this file is not supported. Please build using the appropriate .sln file in this directory." />
  </Target>

  <Target Name="RunTest">
    <Message Importance="High" Text="Running CSharp tests..." />
    <Exec Command="$(DotNetExe) test test\Microsoft.ML.OnnxRuntime.Tests\Microsoft.ML.OnnxRuntime.Tests.csproj -c $(Configuration) --no-build --blame -v n" ConsoleToMSBuild="true">
      <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
    </Exec>
  </Target>

   <Target Name="ObtainPackageVersion" BeforeTargets="Build;CreatePackage;CreateWindowsAIPackage">
    <ReadLinesFromFile File="..\VERSION_NUMBER">
      <Output TaskParameter="Lines" ItemName="MajorVersionNumber"/>
    </ReadLinesFromFile>   
    <Exec Command="git rev-parse --short HEAD" ConsoleToMSBuild="true">
        <Output TaskParameter="ConsoleOutput" PropertyName="GitCommitHashShort" />
    </Exec>
    <Exec Command="git rev-parse HEAD" ConsoleToMSBuild="true">
        <Output TaskParameter="ConsoleOutput" PropertyName="GitCommitHash" />
    </Exec>
    <ConvertToAbsolutePath Paths="$(OnnxRuntimeBuildDirectory)">
      <Output TaskParameter="AbsolutePaths" PropertyName="OnnxRuntimeBuildDirectoryAbs"/>
    </ConvertToAbsolutePath>
    <ConvertToAbsolutePath Paths="$(NativeBuildOutputDir)">
      <Output TaskParameter="AbsolutePaths" PropertyName="NativeBuildOutputDirAbs"/>
    </ConvertToAbsolutePath>
    <ConvertToAbsolutePath Paths="$(OnnxRuntimePackagesDirectory)">
      <Output TaskParameter="AbsolutePaths" PropertyName="OnnxRuntimePackagesDirectoryAbs"/>
    </ConvertToAbsolutePath>
    <ConvertToAbsolutePath Paths="$(OnnxRuntimeSourceDirectory)">
      <Output TaskParameter="AbsolutePaths" PropertyName="OnnxRuntimeSourceDirectoryAbs"/>
    </ConvertToAbsolutePath>    
    <PropertyGroup>
      <CurrentDate>$([System.DateTime]::UtcNow.ToString(yyyyMMdd))</CurrentDate>
      <CurrentTime>$([System.DateTime]::UtcNow.ToString(hhmm))</CurrentTime>
      <PackageVersion>@(MajorVersionNumber)</PackageVersion>
      <Version>$(PackageVersion)</Version>
      <PackageVersion Condition="'$(IsReleaseBuild)'!='True'">$(PackageVersion)-dev-$(CurrentDate)-$(CurrentTime)-$(GitCommitHashShort)</PackageVersion>
    </PropertyGroup>
    <Message Importance="High" Text="PackageVersion=$(PackageVersion)" />
  </Target>
  
  <Target Name="CreatePackage">
    <Message Importance="High" Text="Bundling managed assemblies into a NuGet package ..." />
    <MSBuild Projects="src\Microsoft.ML.OnnxRuntime\Microsoft.ML.OnnxRuntime.csproj"
             Targets="CopyMiscFiles;Pack"
            Properties="NoBuild=true;Platform=AnyCPU;PackageVersion=$(PackageVersion);OrtPackageId=$(OrtPackageId);SelectedTargets=All"/> 

    <Message Importance="High" Text="Generating nuspec for the native Nuget package ..." />
    <Exec ContinueOnError="False" Command="python $(GenerateNuspecScript) --package_version $(PackageVersion) --package_name $(OrtPackageId) --target_architecture $(TargetArchitecture) --build_config $(Configuration) --native_build_path $(NativeBuildOutputDirAbs) --packages_path $(OnnxRuntimePackagesDirectoryAbs) --ort_build_path $(OnnxRuntimeBuildDirectoryAbs) --sources_path $(OnnxRuntimeSourceDirectoryAbs) --commit_id $(GitCommitHash) --is_release_build $(IsReleaseBuild) --execution_provider $(ExecutionProvider)" ConsoleToMSBuild="true">
        <Output TaskParameter="ConsoleOutput" PropertyName="GenerateNuspecOutput" />
    </Exec>

    <Message Importance="High" Text="Bundling native shared library artifacts into a NuGet package ..." />
    <Exec ContinueOnError="False" Command="$(NugetExe) pack NativeNuget.nuspec" ConsoleToMSBuild="true" WorkingDirectory="$(NativeBuildOutputDirAbs)" Condition=" '$(OS)' == 'Windows_NT'">
      <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
    </Exec>

    <Exec ContinueOnError="False" Command="$(NugetExe) pack NativeNuget.nuspec" ConsoleToMSBuild="true" WorkingDirectory="$(NativeBuildOutputDirAbs)" Condition=" '$(OS)' != 'Windows_NT'">
      <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
    </Exec>

    <Copy
    SourceFiles="$(NativeBuildOutputDirAbs)\$(OrtPackageId).$(PackageVersion).nupkg"
    DestinationFolder="$(NativeBuildOutputDirAbs)\nuget-artifacts"
    />
  </Target>

  <ItemGroup>
    <LicenseFile Include="$(OnnxRuntimeSourceDirectory)\LICENSE"/>
  </ItemGroup>

  <Target Name="CreateWindowsAIPackage">  
    <Copy SourceFiles="@(LicenseFile)" DestinationFiles="@(LicenseFile->'$(OnnxRuntimeSourceDirectory)\%(Filename).txt')"/>

    <Message Importance="High" Text="Generating nuspec for the Microsoft.AI.MachineLearning Nuget package ..." />
    <Exec ContinueOnError="False" Command="python ..\tools\nuget\generate_nuspec_for_native_nuget.py --package_version $(PackageVersion) --package_name Microsoft.AI.MachineLearning --target_architecture $(TargetArchitecture) --build_config $(Configuration) --native_build_path $(NativeBuildOutputDirAbs) --packages_path $(OnnxRuntimePackagesDirectoryAbs) --ort_build_path $(OnnxRuntimeBuildDirectoryAbs) --sources_path $(OnnxRuntimeSourceDirectoryAbs) --commit_id $(GitCommitHash) --is_release_build $(IsReleaseBuild)" ConsoleToMSBuild="true">
      <Output TaskParameter="ConsoleOutput" PropertyName="GenerateNuspecOutput" />
    </Exec>

    <Message Importance="High" Text="Bundling native shared library artifacts into a NuGet package ..." />
    <Exec ContinueOnError="False" Command="$(NugetExe) pack NativeNuget.nuspec -Symbols -SymbolPackageFormat snupkg" ConsoleToMSBuild="true" WorkingDirectory="$(NativeBuildOutputDirAbs)">
      <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
    </Exec>
  </Target>

</Project>