mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-16 21:00:14 +00:00
### Description
Update the C# nuget build infrastructure to make building a test nuget
package more user friendly and to simplify
- Remove usage of dotnet and msbuild in CIs
- was temporary requirement until .net 6 MAUI was added to the released
Visual Studio
- remove SelectedTargets property and its usage
- Add property for excluding mobile targets
- generally we exclude based on the nuget package name
- can now specify `/p:IncludeMobileTargets=false` on the command line to
force exclusion
- support building test package using build.py `--build_nuget` better
- limit inclusion of xamarin targets as building with them requires a
lot more infrastructure
- use msbuild directly if xamarin targets are included. use dotnet
otherwise.
- remove quoting of property values as it doesn't appear to be necessary
and breaks when msbuild is being used
- add infrastructure to be able to pack the nuget package on linux with
`dotnet pack`
- `nuget pack` is not user friendly as-per comments in changes
- requires stub csproj to provide the nuspec path
- Remove netstandard1.0 targets from nuspec
- we removed support from the actual bindings previously
- Remove usage of nuget-staging directory when creating nuget package on
linux
- the nuspec file element has a fully qualified path for a source file
so there is no obvious benefit to copying to a staging directory prior
to packing
### Motivation and Context
Address issues with 1P users trying to create test nuget packages
locally.
Long overdue cleanup of CI complexity.
158 lines
9.9 KiB
XML
158 lines
9.9 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>
|
|
|
|
<!-- 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>
|
|
|
|
<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>
|
|
<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="CreatePackage">
|
|
<!-- Create Microsoft.ML.OnnxRuntime.Managed with the C# bindings using the C# project -->
|
|
<Message Importance="High" Text="Creating Microsoft.ML.OnnxRuntime.Managed nuget package..." />
|
|
<MSBuild Projects="src\Microsoft.ML.OnnxRuntime\Microsoft.ML.OnnxRuntime.csproj"
|
|
Targets="CopyMiscFiles;Pack"
|
|
Properties="NoBuild=true;Platform=AnyCPU;PackageVersion=$(PackageVersion);OrtPackageId=$(OrtPackageId);IncludeMobileTargets=$(IncludeMobileTargets)"/>
|
|
|
|
<!-- Manually create the nuspec for the native Microsoft.ML.OnnxRuntime package -->
|
|
<Message Importance="High" Text="Generating nuspec for the native Microsoft.ML.OnnxRuntime 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)"
|
|
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 NativeNuget.nuspec"
|
|
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>
|
|
|
|
<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>
|