mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-14 20:48:00 +00:00
### Description The local build of the native library was being included by almost every project, but is only needed to run tests. Due to the multiple inclusions attempting to use a pre-built package was clashing with any local builds that were available. Create a helper file to include either a local built of a pre-built package and include that in the two test projects. Cleanup various miscellaous things. ### Motivation and Context Create setup to simplify running on-device tests with the nuget packages.
184 lines
11 KiB
XML
184 lines
11 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 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=" '$(BuildDate)'!='' ">$(BuildDate)</CurrentDate>
|
|
<CurrentTime Condition=" '$(BuildTime)'!='' ">$(BuildTime)</CurrentTime>
|
|
<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="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="RenameFilesToPack;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>
|