Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions build.proj
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
<TraversalBuildDependsOn>
CreateOrUpdateCurrentVersionFile;
RestoreProjects;
BuildRedist;
BuildNative;
$(TraversalBuildDependsOn);
DownloadExternalTestFiles;
Expand All @@ -44,6 +45,14 @@
Properties="MSBuildWarningsAsMessages=NU1503" />
</Target>

<Target Name="BuildRedist"
Condition="'$(SkipRedistBuild)' != 'true'"
DependsOnTargets="RestoreProjects">
<Message Importance="High" Text="Building redist components..." />
<MSBuild Projects="src/Redist/build.proj"
Targets="Build" />
</Target>

<Target Name="BuildNative"
Condition="'$(SkipNativeBuild)' != 'true'"
DependsOnTargets="RestoreProjects">
Expand Down
1 change: 1 addition & 0 deletions build/Dependencies.props
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@
<MlNetMklDepsPackageVersion>0.0.0.5</MlNetMklDepsPackageVersion>
<SystemDrawingCommonPackageVersion>4.5.0</SystemDrawingCommonPackageVersion>
<BenchmarkDotNetVersion>0.11.0</BenchmarkDotNetVersion>
<TensorFlowVersion>1.10.0</TensorFlowVersion>
</PropertyGroup>
</Project>
5 changes: 4 additions & 1 deletion build/sign.proj
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@

<!-- If we are not signing nuget packages we default to sign binaries -->
<ItemGroup Condition="'$(SignNugetPackages)' != 'true'">
<FilesToSign Include="$(OutDir)**/*.dll">
<!-- Don't sign tensorflow since we don't build it. -->
<ExcludeFilesToSign Include="$(OutDir)**/tensorflow.dll" />

<FilesToSign Include="$(OutDir)**/*.dll" Exclude="@(ExcludeFilesToSign)">
<Authenticode>Microsoft</Authenticode>
</FilesToSign>
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk" DefaultTargets="Pack">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageDescription>$(MSBuildProjectName) contains the TensorFlow C library version $(TensorFlowVersion) redistributed as a NuGet package.</PackageDescription>
<PackageLicenseUrl>https://github.com/tensorflow/tensorflow/blob/master/LICENSE</PackageLicenseUrl>
<PackageProjectUrl>https://www.tensorflow.org/install/install_c</PackageProjectUrl>
<PackageReleaseNotes>https://github.com/tensorflow/tensorflow/releases/tag/v$(TensorFlowVersion)</PackageReleaseNotes>
<PackageTags>$(PackageTags) TensorFlow</PackageTags>
<!-- TODO: consider PackageIconUrl -->
</PropertyGroup>

<ItemGroup>
<Content Include="..\common\CommonPackage.props" Pack="true" PackagePath="build\netstandard2.0\$(MSBuildProjectName).props" />
Copy link
Member

@eerhardt eerhardt Aug 23, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question (probably for a lawyer): Do we need to put a license/notice in this package? or is using the PackageLicenseUrl enough to meet TF requirements? #Resolved

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have a discussion going around this and will find out all the details.


In reply to: 212419037 [](ancestors = 212419037)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TF included a license in their zips so I went ahead and placed it in the root of this package.


In reply to: 212426813 [](ancestors = 212426813,212419037)

<Content Include="$(PackageAssetsPath)$(PackageIdFolderName)\LICENSE" Pack="true" PackagePath=".\" />
</ItemGroup>
</Project>
9 changes: 9 additions & 0 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@
<WarningsNotAsErrors>$(WarningsNotAsErrors);1591</WarningsNotAsErrors>

<CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)\Source.ruleset</CodeAnalysisRuleSet>

<TargetArchitecture Condition="'$(TargetArchitecture)' == ''">x64</TargetArchitecture>

<NativeAssetsBuiltPath>$(BaseOutputPath)$(TargetArchitecture).$(Configuration)\Native</NativeAssetsBuiltPath>

<PackageRid Condition="'$(OS)' == 'Windows_NT'">win</PackageRid>
<PackageRid Condition="'$(OS)' != 'Windows_NT'">linux</PackageRid>
<PackageRid Condition="$([MSBuild]::IsOSPlatform('osx'))">osx</PackageRid>
<PackageRid>$(PackageRid)-$(TargetArchitecture)</PackageRid>
</PropertyGroup>

<ItemGroup>
Expand Down
24 changes: 8 additions & 16 deletions src/Native/build.proj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
<!-- versioning.targets will import this file, so don't import it again -->
<DisableImportVersioningProps>true</DisableImportVersioningProps>

<TargetArchitecture Condition="'$(TargetArchitecture)' == ''">x64</TargetArchitecture>
<StripNativeSymbols Condition="'$(StripNativeSymbols)' == '' and '$(Configuration)' == 'Release'">True</StripNativeSymbols>
</PropertyGroup>

Expand All @@ -26,21 +25,14 @@
</PropertyGroup>

<PropertyGroup>
<NativeAssetsBuiltPath>$(BaseOutputPath)$(TargetArchitecture).$(Configuration)\Native</NativeAssetsBuiltPath>

<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>

<PackageRid Condition="'$(OS)' == 'Windows_NT'">win</PackageRid>
<PackageRid Condition="'$(OS)' != 'Windows_NT'">linux</PackageRid>
<PackageRid Condition="$([MSBuild]::IsOSPlatform('osx'))">osx</PackageRid>
<PackageRid>$(PackageRid)-$(TargetArchitecture)</PackageRid>
<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"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
<Project>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Directory.Build.props))\Directory.Build.props" />

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<TensorFlowConfig Include="windows" FileExtension=".zip" FilesFromArchive="lib\tensorflow.dll;include\tensorflow\c\LICENSE" Runtime="win-x64"/>
<TensorFlowConfig Include="linux" FileExtension=".tar.gz" FilesFromArchive="lib\libtensorflow.so;lib\libtensorflow_framework.so" Runtime="linux-x64" />
<TensorFlowConfig Include="darwin" FileExtension=".tar.gz" FilesFromArchive="lib\libtensorflow.so;lib\libtensorflow_framework.so" Runtime="osx-x64" />
<TensorFlowArchive Include="@(TensorFlowConfig->'https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-%(Identity)-x86_64-$(TensorFlowVersion)%(FileExtension)')" />
</ItemGroup>

<Target Name="PrepareArchives">
<ItemGroup>
<!-- set up metdata used by all targets -->
<TensorFlowArchive DownloadFile="$(IntermediateOutputPath)%(FileName)%(Extension)"
DownloadShaFile="$(IntermediateOutputPath)%(FileName)%(Extension).sha"
ExtractDirectory="$(IntermediateOutputPath)%(FileName)"
ExtractSemaphore="$(IntermediateOutputPath)%(FileName)\.extracted"
LocalShaFile="$(MSBuildProjectDirectory)\%(FileName)%(Extension).sha"/>
</ItemGroup>
</Target>

<UsingTask TaskName="DownloadFilesFromUrl" AssemblyFile="$(ToolsDir)Microsoft.DotNet.Build.Tasks.dll"/>
<Target Name="DownloadArchives"
DependsOnTargets="PrepareArchives"
Inputs="$(MSBuildProjectFile)"
Outputs="@(TensorFlowArchive->'%(DownloadFile)')">
<MakeDir Directories="$(IntermediateOutputPath)" />
<ItemGroup>
<!-- DownloadFilesFromUrl requires Url metadata is set and ignores the identity of the item -->
<_downloadFiles Include="@(TensorFlowArchive)" Url="%(Identity)" DestinationFile="%(DownloadFile)" />
</ItemGroup>
<Message Importance="High" Text="Downloading '%(_downloadFiles.Url)' to '%(_downloadFiles.DestinationFile)'." />
<DownloadFilesFromUrl Items="@(_downloadFiles)" />
</Target>

<UsingTask TaskName="GenerateChecksums" AssemblyFile="$(ToolsDir)Microsoft.DotNet.Build.Tasks.dll"/>
<UsingTask TaskName="ZipFileExtractToDirectory" AssemblyFile="$(ToolsDir)Microsoft.DotNet.Build.Tasks.dll"/>
<Target Name="ValidateAndExtractArchives"
DependsOnTargets="DownloadArchives"
Inputs="@(TensorFlowArchive->'%(DownloadFile)')"
Outputs="@(TensorFlowArchive->'%(ExtractSemaphore)')">
<!-- GenerateChecksums writes a sha checksum to the file specified by DestinationPath metadata -->
<ItemGroup>
<_filesToCheckSum Include="@(TensorFlowArchive->'%(DownloadFile)')" DestinationPath="%(DownloadShaFile)" />
</ItemGroup>
<GenerateChecksums Items="@(_filesToCheckSum)" />

<!-- If specified we'll update the checked in SHAs with the downloaded ones. -->
<Copy Condition="'$(UpdateSHA)' == 'true'"
SourceFiles="@(TensorFlowArchive->'%(DownloadShaFile)')"
DestinationFiles="@(TensorFlowArchive->'%(LocalShaFile)')" />

<Error Condition="!Exists('%(TensorFlowArchive.LocalShaFile)')" Text="SHA file '%(TensorFlowArchive.LocalShaFile)' does not exist. Build with /p:UpdateSHA=true to save it." />

<!-- Read in the SHAs as metadata on the archive items -->
<ItemGroup>
<TensorFlowArchive>
<LocalSha>$([System.IO.File]::ReadAllText('%(LocalShaFile)'))</LocalSha>
<DownloadSha>$([System.IO.File]::ReadAllText('%(DownloadShaFile)'))</DownloadSha>
</TensorFlowArchive>
</ItemGroup>
<!-- Validate that the downloaded SHAs match the expected checked in SHAs -->
<Error Condition="'%(TensorFlowArchive.LocalSha)' != '%(TensorFlowArchive.DownloadSha)'" Text="Downloaded file '%(TensorFlowArchive.DownloadFile)' has unexpected SHA.%0A expected: %(_downloadedTensorFlowArchive.LocalSha)%0A actual: %(_downloadedTensorFlowArchive.DownloadSha)%0ABuild with /p:UpdateSHA=true if you intentionally changed the URL and wish to update the SHAs, otherwise this could indicate an incomplete download or intercerpted URL and should be examined." />

<!-- The archives are valid, lets extract them, ensuring an empty directory -->
<RemoveDir Directories="@(TensorFlowArchive->'%(ExtractDirectory)')" />
<MakeDir Directories="@(TensorFlowArchive->'%(ExtractDirectory)')" />
<ZipFileExtractToDirectory Condition="'%(TensorFlowArchive.FileExtension)' == '.zip'"
SourceArchive="%(TensorFlowArchive.DownloadFile)"
DestinationDirectory="%(TensorFlowArchive.ExtractDirectory)"
OverwriteDestination="true" />

<Message Importance="High" Condition="'%(TensorFlowArchive.FileExtension)' == '.tar.gz'" Text="Decompressing '%(TensorFlowArchive.DownloadFile)' to '%(TensorFlowArchive.ExtractDirectory)'." />
<Exec Condition="'%(TensorFlowArchive.FileExtension)' == '.tar.gz'"
WorkingDirectory="%(TensorFlowArchive.ExtractDirectory)"
Command="tar -xzmf &quot;$([MSBuild]::MakeRelative('%(TensorFlowArchive.ExtractDirectory)', '%(TensorFlowArchive.DownloadFile)'))&quot;" />
<Touch Files="@(TensorFlowArchive->'%(ExtractSemaphore)')" AlwaysCreate="true" />
</Target>

<!-- Select the files we want to copy out of each archive. -->
<Target Name="GetFilesFromArchive"
DependsOnTargets="ValidateAndExtractArchives" >
<ItemGroup>
<!-- batch rather than transform so that we can split FilesFromArchive metadata -->
<_fileFromArchive Include="%(TensorFlowArchive.FilesFromArchive)" ExtractDirectory="%(TensorFlowArchive.ExtractDirectory)" Runtime="%(TensorFlowArchive.Runtime)" />
<_fileFromArchive DestinationFile="%(FileName)%(Extension)"/>
<!-- rename the .so to .dylib -->
<_fileFromArchive Condition="'%(Runtime)' == 'osx-x64'" DestinationFile="%(FileName).dylib" />
<_fileFromArchive PackagePath="runtimes\%(_fileFromArchive.Runtime)\native\%(_fileFromArchive.DestinationFile)" />

<!-- put the LICENSE in the root -->
<_fileFromArchive Condition="'%(DestinationFile)' == 'LICENSE'" PackagePath="%(_fileFromArchive.DestinationFile)" Runtime="" />

<!-- copy to packaging location -->
<FilesFromArchive Include="%(_fileFromArchive.ExtractDirectory)\%(_fileFromArchive.Identity)"
TargetPath="$(PackageAssetsPath)$(MSBuildProjectName)\%(_fileFromArchive.PackagePath)" />

<!-- copy to NativeAssets location, only for current RID, so that they may be used by tests -->
<FilesFromArchive Condition="'$(PackageRID)' == '%(_fileFromArchive.Runtime)'"
Include="%(_fileFromArchive.ExtractDirectory)\%(_fileFromArchive.Identity)"
TargetPath="$(NativeAssetsBuiltPath)\%(_fileFromArchive.DestinationFile)" />
</ItemGroup>
</Target>

<Target Name="CopyFilesFromArchive"
DependsOnTargets="GetFilesFromArchive">
<Message Importance="High" Text="@(FilesFromArchive) -> %(FilesFromArchive.TargetPath)" />
<Copy SourceFiles="@(FilesFromArchive)"
DestinationFiles="@(FilesFromArchive->'%(TargetPath)')" />
</Target>

<!-- Define Build to do the work of downloading and copying assets -->
<Target Name="Build"
DependsOnTargets="CopyFilesFromArchive" />

<Target Name="Clean">
<RemoveDir Directories="$(IntermediateOutputPath)" />
</Target>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
77218EC4DA96A73B15B8AA5637C9F21B389510A9FAF4DCF06DF5B81A5403015C6BA3EEE29BD8BA5B0694F40C671D8E6722D554C4F93F95C33F29AB491C70263C
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
B9E9CD95BC6A28297ACAB0D684FBBFAFF1F9AE893432AC2D208120D767101AC20E2C55BC79E59DBE6E5BD9EC802026694960FA12137BB303061C5A21B62BD29E
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
66F3A9522917076038AE9CCA11FE805DD516C60B3A3E156B78C2E4BD0E3E5785A9D0380C5E06411473EF14A72B72FD93F954AA3496A12D1FAF0FA3393970E700
6 changes: 6 additions & 0 deletions src/Redist/build.proj
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<Project>
<ItemGroup>
<Project Include="*\*proj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>