mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-14 20:48:00 +00:00
### Description 1. Update donwload-artifacts to flex-downloadartifacts to make it eaiser to debug. 2. Move the native files into Gpu.Windows and Gpu-linux packages. Onnxruntime-Gpu has dependency on them. 3. update the package validation as well 4. Add 2 stages to run E2E test for GPU.Windows and GPU.Linux for example:  ### Motivation and Context Single Onnxruntime.Gpu Package size has already excceded the Nuget size limit. We split the package into some smaller packages to make them can be published. For compatibility, the user can install or upgrade Onnxruntime.Gpu, which will install Gpu.Windows and Gpu.Linux automatically. And the user can only install Gpu.Windows and Gpu.Linux directly. ### Test Link 1. In ORT_NIGHTLY 2. Install the preview version in nuget-int. (nuget source: https://apiint.nugettest.org/v3/index.json) --------- Co-authored-by: Scott McKay <skottmckay@gmail.com>
187 lines
12 KiB
XML
187 lines
12 KiB
XML
<?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>
|
|
<ReleaseVersionSuffix></ReleaseVersionSuffix>
|
|
<IsWindowsBuild Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">true</IsWindowsBuild>
|
|
<IsLinuxBuild Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true'">true</IsLinuxBuild>
|
|
<ExecutionProvider Condition=" '$(ExecutionProvider)' == '' ">None</ExecutionProvider>
|
|
<IsPlatformSpecificSubPackage Condition=" '$(IsPlatformSpecificSubPackage)' == '' ">false</IsPlatformSpecificSubPackage>
|
|
<NuSpecName Condition=" '$(NuSpecName)' == '' ">NativeNuget.nuspec</NuSpecName>
|
|
|
|
<!-- include Xamarin/MAUI Android and iOS target frameworks? Command line property overrides this value. -->
|
|
<IncludeMobileTargets>true</IncludeMobileTargets>
|
|
|
|
<!--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>
|
|
<PythonExe>python3</PythonExe>
|
|
</PropertyGroup>
|
|
|
|
<PropertyGroup Condition="'$(IsWindowsBuild)'=='true'">
|
|
<!--internal build related properties for Windows -->
|
|
<OnnxRuntimeBuildDirectory Condition="'$(OnnxRuntimeBuildDirectory)'==''">..\build\Windows</OnnxRuntimeBuildDirectory>
|
|
<OnnxRuntimePackagesDirectory Condition="'$(OnnxRuntimePackagesDirectory)'==''">$(OnnxRuntimeBuildDirectory)\packages</OnnxRuntimePackagesDirectory>
|
|
<NativeBuildOutputDir>$(OnnxRuntimeBuildDirectory)\$(Configuration)\$(Configuration)</NativeBuildOutputDir>
|
|
<PythonExe>python</PythonExe>
|
|
</PropertyGroup>
|
|
|
|
<PropertyGroup>
|
|
<!-- If we create multiple nuget packages in one job, major package and dependent packages version should be the same-->
|
|
<!-- CurrentDate and CurrentTime are only used for dev packages-->
|
|
<CurrentDate Condition="'$(CurrentDate)'==''">$([System.DateTime]::UtcNow.ToString(yyyyMMdd))</CurrentDate>
|
|
<CurrentTime Condition="'$(CurrentTime)'==''">$([System.DateTime]::UtcNow.ToString(hhmm))</CurrentTime>
|
|
</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;CreateNativePackage">
|
|
<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>
|
|
<PackageVersion>@(MajorVersionNumber)</PackageVersion>
|
|
<PackageVersion>$(PackageVersion)$(ReleaseVersionSuffix)</PackageVersion>
|
|
<Version>$(PackageVersion)</Version>
|
|
<PackageVersion Condition="'$(IsReleaseBuild)'!='True'">$(PackageVersion)-dev-$(CurrentDate)-$(CurrentTime)-$(GitCommitHashShort)</PackageVersion>
|
|
</PropertyGroup>
|
|
<Message Importance="High" Text="PackageVersion=$(PackageVersion)" />
|
|
</Target>
|
|
|
|
<Target Name="CreateNativePackage">
|
|
<!-- Create the nuspec for the native OnnxRuntime package -->
|
|
<Message Importance="High" Text="Generating nuspec for the native $(OrtPackageId) nuget package..." />
|
|
<Exec Command="$(PythonExe) $(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) --nuspec_name $(NuSpecName)"
|
|
ContinueOnError="False"
|
|
ConsoleToMSBuild="true">
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="GenerateNuspecOutput" />
|
|
</Exec>
|
|
|
|
<!-- run `nuget pack` on Windows or `dotnet pack` on Linux to create the native nupkg -->
|
|
<Message Importance="High" Text="Bundling native shared library artifacts into Microsoft.ML.OnnxRuntime nuget package..." />
|
|
<Exec Condition=" '$(IsWindowsBuild)' == 'true'"
|
|
Command="$(NugetExe) pack $(NuSpecName)"
|
|
WorkingDirectory="$(NativeBuildOutputDirAbs)"
|
|
ContinueOnError="False"
|
|
ConsoleToMSBuild="true">
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
|
|
</Exec>
|
|
|
|
<!-- build.py uses dotnet to build on linux so we know it's available.
|
|
nuget needs to be run using mono to work correctly, but installing mono on WSL breaks interop
|
|
(see https://github.com/microsoft/WSL/issues/8531). in order to play nicely with both we use `dotnet pack`
|
|
to pack the native nuget package using a stub csproj to provide the nuspec file path.
|
|
-->
|
|
<Exec Condition="'$(IsLinuxBuild)' == 'true'"
|
|
Command="dotnet pack tools/linux_pack/LinuxPackNativeNuget.csproj /p:Configuration=$(Configuration) /p:OnnxRuntimeBuildDirectory=$(NativeBuildOutputDirAbs)"
|
|
ContinueOnError="False"
|
|
ConsoleToMSBuild="true" >
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
|
|
</Exec>
|
|
<!-- copy the nupkg to the build output directory so its location is consistent on all platforms -->
|
|
<Copy Condition="'$(IsLinuxBuild)' == 'true'"
|
|
SourceFiles="tools/linux_pack/bin/$(Configuration)/$(OrtPackageId).$(PackageVersion).nupkg"
|
|
DestinationFolder="$(NativeBuildOutputDirAbs)" />
|
|
|
|
<Copy SourceFiles="$(NativeBuildOutputDirAbs)\$(OrtPackageId).$(PackageVersion).nupkg"
|
|
DestinationFolder="$(NativeBuildOutputDirAbs)\nuget-local-artifacts"
|
|
/>
|
|
</Target>
|
|
|
|
<Target Name="CreatePackage">
|
|
<!-- Validate no missing UnmanagedFunctionPointer attributes on delegates. -->
|
|
<Exec Condition="'$(IsWindowsBuild)' == 'true' AND $(OrtPackageId) == 'Microsoft.ML.OnnxRuntime'"
|
|
Command="$(PythonExe) tools/ValidateNativeDelegateAttributes.py"
|
|
ContinueOnError="False">
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="GenerateNuspecOutput" />
|
|
</Exec>
|
|
|
|
<!-- Create Microsoft.ML.OnnxRuntime.Managed with the C# bindings using the C# project -->
|
|
<Message Condition="'$(IsPlatformSpecificSubPackage)'!='True'" Importance="High" Text="Creating Microsoft.ML.OnnxRuntime.Managed nuget package..." />
|
|
<MSBuild Condition="'$(IsPlatformSpecificSubPackage)'!='True'" Projects="src\Microsoft.ML.OnnxRuntime\Microsoft.ML.OnnxRuntime.csproj"
|
|
Targets="CopyMiscFiles;Pack"
|
|
Properties="NoBuild=true;Platform=AnyCPU;PackageVersion=$(PackageVersion);OrtPackageId=$(OrtPackageId);IncludeMobileTargets=$(IncludeMobileTargets)"/>
|
|
|
|
<MSBuild Projects ="$(MSBuildProjectFullPath)"
|
|
Targets ="CreateNativePackage" />
|
|
|
|
</Target>
|
|
|
|
<Target Name="CreateAllGpuPackages" AfterTargets="CreatePackage" Condition="'$(OrtPackageId)' == 'Microsoft.ML.OnnxRuntime.Gpu'">
|
|
<MSBuild Projects ="$(MSBuildProjectFullPath)"
|
|
Properties="NuSpecName=NativeGpuWinNuget.nuspec;OrtPackageId=Microsoft.ML.OnnxRuntime.Gpu.Windows"
|
|
Targets ="CreateNativePackage" />
|
|
<MSBuild Projects ="$(MSBuildProjectFullPath)"
|
|
Properties="NuSpecName=NativeGpuLinuxNuget.nuspec;OrtPackageId=Microsoft.ML.OnnxRuntime.Gpu.Linux"
|
|
Targets ="CreateNativePackage" />
|
|
</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>
|