Browse Source

Native: OpenBLAS integrated into FAKE build system

pull/312/head
Christoph Ruegg 11 years ago
parent
commit
cb64d2633e
  1. 1
      MathNet.Numerics.sln
  2. 101
      build.fsx
  3. 74
      build/MathNet.Numerics.OpenBLAS.Win.targets

1
MathNet.Numerics.sln

@ -32,6 +32,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{A4A66FA9
build\MathNet.Numerics.Extension.nuspec = build\MathNet.Numerics.Extension.nuspec
build\MathNet.Numerics.MKL.Win.targets = build\MathNet.Numerics.MKL.Win.targets
build\MathNet.Numerics.nuspec = build\MathNet.Numerics.nuspec
build\MathNet.Numerics.OpenBLAS.Win.targets = build\MathNet.Numerics.OpenBLAS.Win.targets
paket.dependencies = paket.dependencies
paket.lock = paket.lock
EndProjectSection

101
build.fsx

@ -58,6 +58,13 @@ let cudaPackageVersion = cudaRelease.NugetVersion
let cudaReleaseNotes = cudaRelease.Notes |> List.map (fun l -> l.Replace("*","").Replace("`","")) |> toLines
trace (sprintf " Math.NET Numerics CUDA Provider v%s" cudaPackageVersion)
let openBlasRelease = LoadReleaseNotes "RELEASENOTES-OpenBLAS.md"
let openBlasBuildPart = "0"
let openBlasAssemblyVersion = openBlasRelease.AssemblyVersion + "." + openBlasBuildPart
let openBlasPackageVersion = openBlasRelease.NugetVersion
let openBlasReleaseNotes = openBlasRelease.Notes |> List.map (fun l -> l.Replace("*","").Replace("`","")) |> toLines
trace (sprintf " Math.NET Numerics OpenBLAS Provider v%s" openBlasPackageVersion)
let dataRelease = LoadReleaseNotes "RELEASENOTES-Data.md"
let dataBuildPart = "0"
let dataAssemblyVersion = dataRelease.AssemblyVersion + "." + dataBuildPart
@ -306,6 +313,42 @@ let cudaWinBundle =
Packages = [ cudaWinPack ] }
// OpenBLAS NATIVE PROVIDER PACKAGES
let openBlasWinPack =
{ Id = "MathNet.Numerics.OpenBLAS.Win"
Version = openBlasPackageVersion
Title = "Math.NET Numerics - OpenBLAS Native Provider for Windows (x64 and x86)"
Summary = ""
Description = "OpenBLAS native libraries for Math.NET Numerics."
ReleaseNotes = openBlasReleaseNotes
Tags = "math numeric statistics probability integration interpolation linear algebra matrix fft native openblas"
Authors = [ "Kuan Bartel"; "Christoph Ruegg"; "Marcus Cuda" ]
Dependencies =
[ { FrameworkVersion=""
Dependencies=[ "MathNet.Numerics", "3.7.0" ] } ]
Files =
[ @"..\..\build\MathNet.Numerics.OpenBLAS.Win.targets", Some "build", None;
@"..\..\out\OpenBLAS\Windows\x64\libgcc_s_seh-1.dll", Some @"build\x64", None;
@"..\..\out\OpenBLAS\Windows\x64\libgfortran-3.dll", Some @"build\x64", None;
@"..\..\out\OpenBLAS\Windows\x64\libopenblas.dll", Some @"build\x64", None;
@"..\..\out\OpenBLAS\Windows\x64\libquadmath-0.dll", Some @"build\x64", None;
@"..\..\out\OpenBLAS\Windows\x64\MathNet.Numerics.OpenBLAS.dll", Some @"build\x64", None;
@"..\..\out\OpenBLAS\Windows\x86\libgcc_s_sjlj-1.dll", Some @"build\x86", None;
@"..\..\out\OpenBLAS\Windows\x86\libgfortran-3.dll", Some @"build\x86", None;
@"..\..\out\OpenBLAS\Windows\x86\libopenblas.dll", Some @"build\x86", None;
@"..\..\out\OpenBLAS\Windows\x86\libquadmath-0.dll", Some @"build\x86", None;
@"..\..\out\OpenBLAS\Windows\x86\MathNet.Numerics.OpenBLAS.dll", Some @"build\x86", None ] }
let openBlasWinBundle =
{ Id = "MathNet.Numerics.OpenBLAS.Win"
Version = openBlasPackageVersion
Title = "Math.NET Numerics OpenBLAS Native Provider for Windows"
ReleaseNotesFile = "RELEASENOTES-OpenBLAS.md"
FsLoader = false
Packages = [ openBlasWinPack ] }
// DATA EXTENSION PACKAGES
let dataTextPack =
@ -386,7 +429,11 @@ Target "ApplyVersion" (fun _ ->
ReplaceInFile
(regex_replace @"\d+\.\d+\.\d+\.\d+" cudaAssemblyVersion
>> regex_replace @"\d+,\d+,\d+,\d+" (replace "." "," cudaAssemblyVersion))
"src/NativeProviders/CUDA/resource.rc")
"src/NativeProviders/CUDA/resource.rc"
ReplaceInFile
(regex_replace @"\d+\.\d+\.\d+\.\d+" openBlasAssemblyVersion
>> regex_replace @"\d+,\d+,\d+,\d+" (replace "." "," openBlasAssemblyVersion))
"src/NativeProviders/OpenBLAS/resource.rc")
Target "Prepare" DoNothing
"Start"
@ -428,6 +475,12 @@ Target "CudaWin64Build" (fun _ -> buildConfig64 "Release-CUDA" !! "MathNet.Numer
Target "CudaWinBuild" DoNothing
"Prepare" ==> "CudaWin64Build" ==> "CudaWinBuild"
Target "OpenBlasWin32Build" (fun _ -> buildConfig32 "Release-OpenBLAS" !! "MathNet.Numerics.NativeProviders.sln")
Target "OpenBlasWin64Build" (fun _ -> buildConfig64 "Release-OpenBLAS" !! "MathNet.Numerics.NativeProviders.sln")
Target "OpenBlasWinBuild" DoNothing
"Prepare" ==> "OpenBlasWin32Build" ==> "OpenBlasWinBuild"
"Prepare" ==> "OpenBlasWin64Build" ==> "OpenBlasWinBuild"
Target "DataBuild" (fun _ -> build !! "MathNet.Numerics.Data.sln")
"Prepare" ==> "DataBuild"
@ -485,6 +538,28 @@ Target "CudaWin64Test" (fun _ ->
Target "CudaWinTest" DoNothing
"CudaWin64Test" ==> "CudaWinTest"
Target "OpenBlasWin32Test" (fun _ ->
ActivateFinalTarget "CloseTestRunner"
!! "out/OpenBLAS/Windows/*UnitTests*.dll"
|> NUnit (fun p ->
{ p with
ToolName = "nunit-console-x86.exe"
DisableShadowCopy = true
TimeOut = TimeSpan.FromMinutes 60.
OutputFile = "TestResults.xml" }))
Target "OpenBlasWin64Test" (fun _ ->
ActivateFinalTarget "CloseTestRunner"
!! "out/OpenBLAS/Windows/*UnitTests*.dll"
|> NUnit (fun p ->
{ p with
ToolName = "nunit-console.exe"
DisableShadowCopy = true
TimeOut = TimeSpan.FromMinutes 60.
OutputFile = "TestResults.xml" }))
Target "OpenBlasWinTest" DoNothing
"OpenBlasWin32Test" ==> "OpenBlasWinTest"
"OpenBlasWin64Test" ==> "OpenBlasWinTest"
Target "DataTest" (fun _ -> test !! "out/Data/test/**/*UnitTests*.dll")
@ -565,6 +640,10 @@ Target "CudaWinZip" (fun _ ->
CreateDir "out/CUDA/packages/Zip"
cudaWinBundle |> zip "out/CUDA/packages/Zip" "out/CUDA/Windows" (fun f -> f.Contains("MathNet.Numerics.CUDA.") || f.Contains("cublas") || f.Contains("cudart") || f.Contains("cusolver")))
Target "OpenBlasWinZip" (fun _ ->
CreateDir "out/OpenBLAS/packages/Zip"
openBlasWinBundle |> zip "out/OpenBLAS/packages/Zip" "out/OpenBLAS/Windows" (fun f -> f.Contains("MathNet.Numerics.OpenBLAS.") || f.Contains("libgcc") || f.Contains("libgfortran") || f.Contains("libopenblas") || f.Contains("libquadmath")))
Target "DataZip" (fun _ ->
CleanDir "out/Data/packages/Zip"
dataBundle |> zip "out/Data/packages/Zip" "out/Data/lib" (fun f -> f.Contains("MathNet.Numerics.Data.")))
@ -631,6 +710,10 @@ Target "CudaWinNuGet" (fun _ ->
CreateDir "out/CUDA/packages/NuGet"
nugetPackExtension cudaWinBundle "out/CUDA/packages/NuGet")
Target "OpenBlasWinNuGet" (fun _ ->
CreateDir "out/OpenBLAS/packages/NuGet"
nugetPackExtension openBlasWinBundle "out/OpenBLAS/packages/NuGet")
Target "DataNuGet" (fun _ ->
CleanDir "out/Data/packages/NuGet"
nugetPackExtension dataBundle "out/Data/packages/NuGet")
@ -738,6 +821,7 @@ let publishReleaseTag title prefix version notes =
Target "PublishTag" (fun _ -> publishReleaseTag "Math.NET Numerics" "" packageVersion releaseNotes)
Target "MklPublishTag" (fun _ -> publishReleaseTag "Math.NET Numerics MKL Provider" "mkl-" mklPackageVersion mklReleaseNotes)
Target "CudaPublishTag" (fun _ -> publishReleaseTag "Math.NET Numerics CUDA Provider" "cuda-" cudaPackageVersion cudaReleaseNotes)
Target "OpenBlasPublishTag" (fun _ -> publishReleaseTag "Math.NET Numerics OpenBLAS Provider" "openblas-" openBlasPackageVersion openBlasReleaseNotes)
Target "DataPublishTag" (fun _ -> publishReleaseTag "Math.NET Numerics Data Extensions" "data-" dataPackageVersion dataReleaseNotes)
Target "PublishMirrors" (fun _ ->
@ -782,6 +866,7 @@ let publishNuGet packageFiles =
Target "PublishNuGet" (fun _ -> !! "out/packages/NuGet/*.nupkg" -- "out/packages/NuGet/*.symbols.nupkg" |> publishNuGet)
Target "MklPublishNuGet" (fun _ -> !! "out/MKL/packages/NuGet/*.nupkg" |> publishNuGet)
Target "CudaPublishNuGet" (fun _ -> !! "out/CUDA/packages/NuGet/*.nupkg" |> publishNuGet)
Target "OpenBlasPublishNuGet" (fun _ -> !! "out/OpenBLAS/packages/NuGet/*.nupkg" |> publishNuGet)
Target "DataPublishNuGet" (fun _ -> !! "out/Data/packages/NuGet/*.nupkg" |> publishNuGet)
Target "Publish" DoNothing
@ -798,6 +883,10 @@ Target "CudaPublish" DoNothing
"CudaPublishTag" ==> "CudaPublish"
"CudaPublishNuGet" ==> "CudaPublish"
Target "OpenBlasPublish" DoNothing
"OpenBlasPublishTag" ==> "OpenBlasPublish"
"OpenBlasPublishNuGet" ==> "OpenBlasPublish"
Target "DataPublish" DoNothing
"DataPublishTag" ==> "DataPublish"
"DataPublishNuGet" ==> "DataPublish"
@ -829,16 +918,20 @@ match buildServer with
"MklWin32Build" ==> "MklWin32Test" |> ignore
"MklWin64Build" ==> "MklWin64Test" |> ignore
"CudaWin64Build" ==> "CudaWin64Test" |> ignore
"OpenBlasWin32Build" ==> "OpenBlasWin32Test" |> ignore
"OpenBlasWin64Build" ==> "OpenBlasWin64Test" |> ignore
"DataBuild" ==> "DataTest" |> ignore
// build --> package
"Build" ==> "Zip" |> ignore
"MklWinBuild" ==> "MklWinZip" |> ignore
"CudaWinBuild" ==> "CudaWinZip" |> ignore
"OpenBlasWinBuild" ==> "OpenBlasWinZip" |> ignore
"DataBuild" ==> "DataZip" |> ignore
"Build" ==> "NuGet" |> ignore
"MklWinBuild" ==> "MklWinNuGet" |> ignore
"CudaWinBuild" ==> "CudaWinNuGet" |> ignore
"OpenBlasWinBuild" ==> "OpenBlasWinNuGet" |> ignore
"DataBuild" ==> "DataNuGet" |> ignore
// build --> docs
@ -873,6 +966,12 @@ Target "CudaWinAll" DoNothing
"CudaWinNuGet" ==> "CudaWinAll"
"CudaWinTest" ==> "CudaWinAll"
Target "OpenBlasWinAll" DoNothing
"OpenBlasWinBuild" ==> "OpenBlasWinAll"
"OpenBlasWinZip" ==> "OpenBlasWinAll"
"OpenBlasWinNuGet" ==> "OpenBlasWinAll"
"OpenBlasWinTest" ==> "OpenBlasWinAll"
Target "DataAll" DoNothing
"DataBuild" ==> "DataAll"
"DataZip" ==> "DataAll"

74
build/MathNet.Numerics.OpenBLAS.Win.targets

@ -0,0 +1,74 @@
<!--
*
* MathNet.Numerics.OpenBLAS.Win.targets
*
* WARNING: This MSBuild file requires MSBuild 4.0 features.
*
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
******************************************************************************
** MathNet Interop Library Build Items **
******************************************************************************
-->
<ItemGroup>
<MathNetInteropFiles Condition="'$(MSBuildThisFileDirectory)' != '' And
HasTrailingSlash('$(MSBuildThisFileDirectory)')"
Include="$(MSBuildThisFileDirectory)**\*.dll" />
</ItemGroup>
<!--
******************************************************************************
** MathNet Interop Library Build Targets **
******************************************************************************
-->
<Target Name="CopyMathNetInteropFiles"
Condition="'$(CopyMathNetInteropFiles)' != 'false' And
'$(OutputPath)' != '' And
HasTrailingSlash('$(OutputPath)') And
Exists('$(OutputPath)')"
Inputs="@(MathNetInteropFiles)"
Outputs="@(MathNetInteropFiles -> '$(OutputPath)%(RecursiveDir)%(Filename)%(Extension)')">
<!--
NOTE: Copy "MathNet.Numerics.OpenBLAS.dll" and all related files, for every
architecture that we support, to the build output directory.
-->
<Copy SourceFiles="@(MathNetInteropFiles)"
DestinationFiles="@(MathNetInteropFiles -> '$(OutputPath)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<!--
******************************************************************************
-->
<Target Name="CleanMathNetInteropFiles"
Condition="'$(CleanMathNetInteropFiles)' != 'false' And
'$(OutputPath)' != '' And
HasTrailingSlash('$(OutputPath)') And
Exists('$(OutputPath)')">
<!--
NOTE: Delete "MathNet.Numerics.OpenBLAS.dll" and all related files, for every
architecture that we support, from the build output directory.
-->
<Delete Files="@(MathNetInteropFiles -> '$(OutputPath)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<!--
******************************************************************************
** MathNet Interop Library Build Properties **
******************************************************************************
-->
<PropertyGroup>
<BuildDependsOn>
$(BuildDependsOn);
CopyMathNetInteropFiles;
</BuildDependsOn>
<CleanDependsOn>
$(CleanDependsOn);
CleanMathNetInteropFiles;
</CleanDependsOn>
</PropertyGroup>
</Project>
Loading…
Cancel
Save