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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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" />

@eerhardteerhardtAug 23, 2018

Copy link
Copy Markdown
Member

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
Copy Markdown
MemberAuthor

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
Copy Markdown
MemberAuthor

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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1 @@
77218EC4DA96A73B15B8AA5637C9F21B389510A9FAF4DCF06DF5B81A5403015C6BA3EEE29BD8BA5B0694F40C671D8E6722D554C4F93F95C33F29AB491C70263C
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
B9E9CD95BC6A28297ACAB0D684FBBFAFF1F9AE893432AC2D208120D767101AC20E2C55BC79E59DBE6E5BD9EC802026694960FA12137BB303061C5A21B62BD29E
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
66F3A9522917076038AE9CCA11FE805DD516C60B3A3E156B78C2E4BD0E3E5785A9D0380C5E06411473EF14A72B72FD93F954AA3496A12D1FAF0FA3393970E700
6 changes: 6 additions & 0 deletions src/Redist/build.proj
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
<Project>
<ItemGroup>
<Project Include="*\*proj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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" />

@eerhardteerhardtAug 23, 2018

Copy link
Copy Markdown
Member

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
Copy Markdown
MemberAuthor

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
Copy Markdown
MemberAuthor

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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1 @@
77218EC4DA96A73B15B8AA5637C9F21B389510A9FAF4DCF06DF5B81A5403015C6BA3EEE29BD8BA5B0694F40C671D8E6722D554C4F93F95C33F29AB491C70263C
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
B9E9CD95BC6A28297ACAB0D684FBBFAFF1F9AE893432AC2D208120D767101AC20E2C55BC79E59DBE6E5BD9EC802026694960FA12137BB303061C5A21B62BD29E
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
66F3A9522917076038AE9CCA11FE805DD516C60B3A3E156B78C2E4BD0E3E5785A9D0380C5E06411473EF14A72B72FD93F954AA3496A12D1FAF0FA3393970E700
6 changes: 6 additions & 0 deletions src/Redist/build.proj
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
<Project>
<ItemGroup>
<Project Include="*\*proj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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" />

@eerhardteerhardtAug 23, 2018

Copy link
Copy Markdown
Member

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
Copy Markdown
MemberAuthor

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
Copy Markdown
MemberAuthor

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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1 @@
77218EC4DA96A73B15B8AA5637C9F21B389510A9FAF4DCF06DF5B81A5403015C6BA3EEE29BD8BA5B0694F40C671D8E6722D554C4F93F95C33F29AB491C70263C
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
B9E9CD95BC6A28297ACAB0D684FBBFAFF1F9AE893432AC2D208120D767101AC20E2C55BC79E59DBE6E5BD9EC802026694960FA12137BB303061C5A21B62BD29E
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
66F3A9522917076038AE9CCA11FE805DD516C60B3A3E156B78C2E4BD0E3E5785A9D0380C5E06411473EF14A72B72FD93F954AA3496A12D1FAF0FA3393970E700
6 changes: 6 additions & 0 deletions src/Redist/build.proj
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
<Project>
<ItemGroup>
<Project Include="*\*proj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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" />

@eerhardteerhardtAug 23, 2018

Copy link
Copy Markdown
Member

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
Copy Markdown
MemberAuthor

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
Copy Markdown
MemberAuthor

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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1 @@
77218EC4DA96A73B15B8AA5637C9F21B389510A9FAF4DCF06DF5B81A5403015C6BA3EEE29BD8BA5B0694F40C671D8E6722D554C4F93F95C33F29AB491C70263C
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
B9E9CD95BC6A28297ACAB0D684FBBFAFF1F9AE893432AC2D208120D767101AC20E2C55BC79E59DBE6E5BD9EC802026694960FA12137BB303061C5A21B62BD29E
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
66F3A9522917076038AE9CCA11FE805DD516C60B3A3E156B78C2E4BD0E3E5785A9D0380C5E06411473EF14A72B72FD93F954AA3496A12D1FAF0FA3393970E700
6 changes: 6 additions & 0 deletions src/Redist/build.proj
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
<Project>
<ItemGroup>
<Project Include="*\*proj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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" />

@eerhardteerhardtAug 23, 2018

Copy link
Copy Markdown
Member

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
Copy Markdown
MemberAuthor

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
Copy Markdown
MemberAuthor

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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1 @@
77218EC4DA96A73B15B8AA5637C9F21B389510A9FAF4DCF06DF5B81A5403015C6BA3EEE29BD8BA5B0694F40C671D8E6722D554C4F93F95C33F29AB491C70263C
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
B9E9CD95BC6A28297ACAB0D684FBBFAFF1F9AE893432AC2D208120D767101AC20E2C55BC79E59DBE6E5BD9EC802026694960FA12137BB303061C5A21B62BD29E
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
66F3A9522917076038AE9CCA11FE805DD516C60B3A3E156B78C2E4BD0E3E5785A9D0380C5E06411473EF14A72B72FD93F954AA3496A12D1FAF0FA3393970E700
6 changes: 6 additions & 0 deletions src/Redist/build.proj
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
<Project>
<ItemGroup>
<Project Include="*\*proj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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" />

@eerhardteerhardtAug 23, 2018

Copy link
Copy Markdown
Member

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
Copy Markdown
MemberAuthor

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
Copy Markdown
MemberAuthor

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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1 @@
77218EC4DA96A73B15B8AA5637C9F21B389510A9FAF4DCF06DF5B81A5403015C6BA3EEE29BD8BA5B0694F40C671D8E6722D554C4F93F95C33F29AB491C70263C
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
B9E9CD95BC6A28297ACAB0D684FBBFAFF1F9AE893432AC2D208120D767101AC20E2C55BC79E59DBE6E5BD9EC802026694960FA12137BB303061C5A21B62BD29E
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
66F3A9522917076038AE9CCA11FE805DD516C60B3A3E156B78C2E4BD0E3E5785A9D0380C5E06411473EF14A72B72FD93F954AA3496A12D1FAF0FA3393970E700
6 changes: 6 additions & 0 deletions src/Redist/build.proj
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
<Project>
<ItemGroup>
<Project Include="*\*proj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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" />

@eerhardteerhardtAug 23, 2018

Copy link
Copy Markdown
Member

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
Copy Markdown
MemberAuthor

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
Copy Markdown
MemberAuthor

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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1 @@
77218EC4DA96A73B15B8AA5637C9F21B389510A9FAF4DCF06DF5B81A5403015C6BA3EEE29BD8BA5B0694F40C671D8E6722D554C4F93F95C33F29AB491C70263C
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
B9E9CD95BC6A28297ACAB0D684FBBFAFF1F9AE893432AC2D208120D767101AC20E2C55BC79E59DBE6E5BD9EC802026694960FA12137BB303061C5A21B62BD29E
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
66F3A9522917076038AE9CCA11FE805DD516C60B3A3E156B78C2E4BD0E3E5785A9D0380C5E06411473EF14A72B72FD93F954AA3496A12D1FAF0FA3393970E700
6 changes: 6 additions & 0 deletions src/Redist/build.proj
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
<Project>
<ItemGroup>
<Project Include="*\*proj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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" />

@eerhardteerhardtAug 23, 2018

Copy link
Copy Markdown
Member

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
Copy Markdown
MemberAuthor

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
Copy Markdown
MemberAuthor

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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1 @@
77218EC4DA96A73B15B8AA5637C9F21B389510A9FAF4DCF06DF5B81A5403015C6BA3EEE29BD8BA5B0694F40C671D8E6722D554C4F93F95C33F29AB491C70263C
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
B9E9CD95BC6A28297ACAB0D684FBBFAFF1F9AE893432AC2D208120D767101AC20E2C55BC79E59DBE6E5BD9EC802026694960FA12137BB303061C5A21B62BD29E
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
66F3A9522917076038AE9CCA11FE805DD516C60B3A3E156B78C2E4BD0E3E5785A9D0380C5E06411473EF14A72B72FD93F954AA3496A12D1FAF0FA3393970E700
6 changes: 6 additions & 0 deletions src/Redist/build.proj
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
<Project>
<ItemGroup>
<Project Include="*\*proj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
</Project>