-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
build.proj
121 lines (94 loc) · 6.91 KB
/
build.proj
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
<Project>
<PropertyGroup>
<!-- versioning.targets will import this file, so don't import it again -->
<DisableImportVersioningProps>true</DisableImportVersioningProps>
<StripNativeSymbols Condition="'$(StripNativeSymbols)' == '' and '$(Configuration)' == 'Release'">True</StripNativeSymbols>
</PropertyGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Directory.Build.props))\Directory.Build.props" />
<!-- Target that builds all the native binaries in the Native folder -->
<Target Name="Build" DependsOnTargets="BuildNativeUnix;BuildNativeWindows;PreparePackageAssets" />
<PropertyGroup>
<PlaceholderFile>$(PkgDir)_._</PlaceholderFile>
</PropertyGroup>
<PropertyGroup Condition="'$(OS)' != 'Windows_NT'">
<GenerateVersionSourceFile>true</GenerateVersionSourceFile>
<NativeVersionSourceFile>$(RootIntermediateOutputPath)version.c</NativeVersionSourceFile>
</PropertyGroup>
<PropertyGroup Condition="'$(OS)' == 'Windows_NT'">
<GenerateNativeVersionInfo>true</GenerateNativeVersionInfo>
</PropertyGroup>
<PropertyGroup>
<NativeLibPrefix Condition="'$(OS)' != 'Windows_NT'">lib</NativeLibPrefix>
<NativeLibExtension Condition="'$(OS)' == 'Windows_NT'">.dll</NativeLibExtension>
<NativeLibExtension Condition="'$(OS)' != 'Windows_NT'">.so</NativeLibExtension>
<NativeLibExtension Condition="$([MSBuild]::IsOSPlatform('osx'))">.dylib</NativeLibExtension>
<NativeLibSymbolExtension Condition="'$(OS)' == 'Windows_NT'">.pdb</NativeLibSymbolExtension>
<NativeLibSymbolExtension Condition="'$(OS)' != 'Windows_NT'">.so.dbg</NativeLibSymbolExtension>
<NativeLibSymbolExtension Condition="$([MSBuild]::IsOSPlatform('osx'))">.dylib.dwarf</NativeLibSymbolExtension>
</PropertyGroup>
<Target Name="BuildNativeUnix"
Condition="'$(OS)' != 'Windows_NT'"
DependsOnTargets="GenerateVersionSourceFile">
<PropertyGroup>
<StripArgs Condition="'$(StripNativeSymbols)' == 'True'">--stripSymbols</StripArgs>
<!-- mkllibrpath is used as rpath on macOS by binaries such as SymSDGNative and MklProxyNative to locate mkl library.
We are shipping 2 native assemblies in different nuget packages, and one has a reference on the other and MacOS needs to have
the rpath in the assembly to where it should load the referenced assembly and since .NET Core can run assemblies out of a NuGet cache,
we need to add the NuGet cache relative location. -->
<BuildArgs>--configuration $(Configuration) --arch $(TargetArchitecture) $(StripArgs) --mkllibpath $(PackagesDir)mlnetmkldeps/$(MlNetMklDepsPackageVersion)/runtimes/$(PackageRid)/native --mkllibrpath ../../../../../microsoft.ml.mkl.redist/$(Version)/runtimes/$(PackageRid)/native</BuildArgs>
</PropertyGroup>
<Message Text="$(MSBuildProjectDirectory)/build.sh $(BuildArgs)" Importance="High"/>
<Exec Command=""$(MSBuildProjectDirectory)/build.sh" $(BuildArgs)" />
</Target>
<Target Name="BuildNativeWindows"
Condition="'$(OS)' == 'Windows_NT'"
DependsOnTargets="GenerateVersionHeader">
<PropertyGroup>
<BuildArgs>$(Configuration) $(TargetArchitecture) --mkllibpath $(PackagesDir)mlnetmkldeps\$(MlNetMklDepsPackageVersion)\runtimes\$(PackageRid)\native</BuildArgs>
</PropertyGroup>
<!-- Run script that invokes Cmake to create VS files, and then calls msbuild to compile them -->
<Message Text="$(MSBuildProjectDirectory)\build.cmd $(BuildArgs)" Importance="High"/>
<Exec Command=""$(MSBuildProjectDirectory)\build.cmd" $(BuildArgs)" />
</Target>
<Target Name="PreparePackageAssets">
<!-- Copy MklImports into the native assets folder, so it can be treated like a regularly built native assembly - packaged into our NuGet packages, and used by tests. -->
<Copy SourceFiles="$(PackagesDir)mlnetmkldeps\$(MlNetMklDepsPackageVersion)\runtimes\$(PackageRid)\native\$(NativeLibPrefix)MklImports$(NativeLibExtension)"
DestinationFolder="$(NativeAssetsBuiltPath)" />
<ItemGroup Condition="'$(UseIntrinsics)' != 'true'">
<NativePackageAsset Include="$(NativeAssetsBuiltPath)\$(NativeLibPrefix)CpuMathNative$(NativeLibExtension)"
RelativePath="Microsoft.ML.CpuMath\runtimes\$(PackageRid)\native" />
</ItemGroup>
<ItemGroup Condition="'$(UseIntrinsics)' == 'true'">
<NativePackageAsset Include="$(NativeAssetsBuiltPath)\$(NativeLibPrefix)CpuMathNative$(NativeLibExtension)"
RelativePath="Microsoft.ML.CpuMath\runtimes\$(PackageRid)\nativeassets\netstandard2.0" />
<NativePackageAsset Include="$(PlaceholderFile)"
RelativePath="Microsoft.ML.CpuMath\runtimes\$(PackageRid)\nativeassets\netcoreapp3.0" />
</ItemGroup>
<ItemGroup>
<NativePackageAsset Include="$(NativeAssetsBuiltPath)\$(NativeLibPrefix)LdaNative$(NativeLibExtension)"
RelativePath="Microsoft.ML\runtimes\$(PackageRid)\native" />
<NativePackageAsset Include="$(NativeAssetsBuiltPath)\$(NativeLibPrefix)FactorizationMachineNative$(NativeLibExtension)"
RelativePath="Microsoft.ML\runtimes\$(PackageRid)\native" />
<NativePackageAsset Include="$(NativeAssetsBuiltPath)\$(NativeLibPrefix)SymSgdNative$(NativeLibExtension)"
RelativePath="Microsoft.ML.HalLearners\runtimes\$(PackageRid)\native" />
<NativePackageAsset Include="$(NativeAssetsBuiltPath)\$(NativeLibPrefix)MklProxyNative$(NativeLibExtension)"
RelativePath="Microsoft.ML.Mkl.Redist\runtimes\$(PackageRid)\native" />
<NativePackageAsset Include="$(NativeAssetsBuiltPath)\$(NativeLibPrefix)MatrixFactorizationNative$(NativeLibExtension)"
RelativePath="Microsoft.ML.Recommender\runtimes\$(PackageRid)\native" />
<NativePackageAsset Include="$(NativeAssetsBuiltPath)\$(NativeLibPrefix)FastTreeNative$(NativeLibExtension)"
RelativePath="Microsoft.ML.FastTree\runtimes\$(PackageRid)\native" />
</ItemGroup>
<ItemGroup>
<NativePackageAsset Condition="('$(OS)' == 'Windows_NT' OR '$(StripNativeSymbols)' == 'True')
AND '%(NativePackageAsset.Identity)' != '$(PlaceholderFile)'"
Include="@(NativePackageAsset->'%(RootDir)%(Directory)%(Filename)$(NativeLibSymbolExtension)')" />
</ItemGroup>
<ItemGroup>
<NativePackageAsset Include="$(NativeAssetsBuiltPath)\$(NativeLibPrefix)MklImports$(NativeLibExtension)"
RelativePath="Microsoft.ML.Mkl.Redist\runtimes\$(PackageRid)\native" />
</ItemGroup>
<Copy SourceFiles="@(NativePackageAsset)"
DestinationFolder="$(PackageAssetsPath)%(NativePackageAsset.RelativePath)" />
</Target>
<Import Project="$(ToolsDir)/versioning.targets" />
</Project>