diff --git a/MathNet.Numerics.CUDA.sln b/MathNet.Numerics.CUDA.sln
new file mode 100644
index 00000000..71c4c878
--- /dev/null
+++ b/MathNet.Numerics.CUDA.sln
@@ -0,0 +1,225 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27130.2026
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{5A0892FF-82CE-40FC-BCE1-73810C615F52}"
+ ProjectSection(SolutionItems) = preProject
+ src\NativeProviders\Common\lapack_common.h = src\NativeProviders\Common\lapack_common.h
+ src\NativeProviders\Common\WindowsDLL.cpp = src\NativeProviders\Common\WindowsDLL.cpp
+ src\NativeProviders\Common\wrapper_common.h = src\NativeProviders\Common\wrapper_common.h
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Numerics", "src\Numerics\Numerics.csproj", "{B7CAE5F4-A23F-4438-B5BE-41226618B695}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CUDA", "src\NativeProviders\Windows\CUDA\CUDAWrapper.vcxproj", "{5A52B796-7F41-4C90-8DE2-F3F391C4482C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Numerics.Tests.CUDA", "src\Numerics.Tests\Numerics.Tests.CUDA.csproj", "{E79C0395-01DC-4BC9-B86C-ED45790892C5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestData", "src\TestData\TestData.csproj", "{AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Readme", "Readme", "{77CF160D-3AE0-45A2-8224-6322C28C2685}"
+ ProjectSection(SolutionItems) = preProject
+ README.md = README.md
+ RELEASENOTES-CUDA.md = RELEASENOTES-CUDA.md
+ RELEASENOTES.md = RELEASENOTES.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{9275D8F1-84B4-404F-AC1F-EE1211C9F744}"
+ ProjectSection(SolutionItems) = preProject
+ docs\content\Build.md = docs\content\Build.md
+ docs\content\Compatibility.md = docs\content\Compatibility.md
+ docs\content\Contributing.md = docs\content\Contributing.md
+ docs\content\Contributors.md = docs\content\Contributors.md
+ docs\content\License.md = docs\content\License.md
+ docs\content\MKL.md = docs\content\MKL.md
+ docs\content\Packages.md = docs\content\Packages.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{97C9717A-68C7-4C86-B30E-E4FC54C43A13}"
+ ProjectSection(SolutionItems) = preProject
+ build\build-framework.fsx = build\build-framework.fsx
+ build.fsx = build.fsx
+ paket.dependencies = paket.dependencies
+ paket.lock = paket.lock
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmark", "src\Benchmark\Benchmark.csproj", "{F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ Release-CUDA|Any CPU = Release-CUDA|Any CPU
+ Release-CUDA|Mixed Platforms = Release-CUDA|Mixed Platforms
+ Release-CUDA|Win32 = Release-CUDA|Win32
+ Release-CUDA|x64 = Release-CUDA|x64
+ Release-Signed|Any CPU = Release-Signed|Any CPU
+ Release-Signed|Mixed Platforms = Release-Signed|Mixed Platforms
+ Release-Signed|Win32 = Release-Signed|Win32
+ Release-Signed|x64 = Release-Signed|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Win32.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|x64.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Win32.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Win32.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|x64.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|x64.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-CUDA|Any CPU.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-CUDA|Any CPU.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-CUDA|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-CUDA|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-CUDA|Win32.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-CUDA|Win32.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-CUDA|x64.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-CUDA|x64.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Win32.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|x64.Build.0 = Release|Any CPU
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Debug|Win32.Build.0 = Debug|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Debug|x64.ActiveCfg = Debug|x64
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Debug|x64.Build.0 = Debug|x64
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release|Any CPU.ActiveCfg = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release|Win32.ActiveCfg = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release|Win32.Build.0 = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release|x64.ActiveCfg = Release|x64
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release|x64.Build.0 = Release|x64
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-CUDA|Any CPU.ActiveCfg = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-CUDA|Mixed Platforms.ActiveCfg = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-CUDA|Mixed Platforms.Build.0 = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-CUDA|Win32.ActiveCfg = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-CUDA|Win32.Build.0 = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-CUDA|x64.ActiveCfg = Release|x64
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-CUDA|x64.Build.0 = Release|x64
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-Signed|Any CPU.ActiveCfg = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-Signed|Mixed Platforms.Build.0 = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-Signed|Win32.ActiveCfg = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-Signed|Win32.Build.0 = Release|Win32
+ {5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-Signed|x64.ActiveCfg = Release|Win32
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release|Win32.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release|Win32.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release|x64.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release|x64.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-CUDA|Any CPU.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-CUDA|Any CPU.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-CUDA|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-CUDA|Mixed Platforms.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-CUDA|Win32.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-CUDA|Win32.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-CUDA|x64.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-CUDA|x64.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Win32.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Win32.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|x64.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-CUDA|Any CPU.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-CUDA|Any CPU.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-CUDA|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-CUDA|Mixed Platforms.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-CUDA|Win32.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-CUDA|Win32.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-CUDA|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-CUDA|x64.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Win32.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|x64.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Win32.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|x64.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Win32.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Win32.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|x64.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|x64.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Any CPU.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Any CPU.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Mixed Platforms.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Win32.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Win32.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|x64.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|x64.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Win32.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|x64.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {AAF80ABD-8FA0-46CC-8ABF-529E5CA7A734}
+ EndGlobalSection
+EndGlobal
diff --git a/MathNet.Numerics.MKL.sln b/MathNet.Numerics.MKL.sln
new file mode 100644
index 00000000..76d46b47
--- /dev/null
+++ b/MathNet.Numerics.MKL.sln
@@ -0,0 +1,226 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27130.2026
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{5A0892FF-82CE-40FC-BCE1-73810C615F52}"
+ ProjectSection(SolutionItems) = preProject
+ src\NativeProviders\Common\lapack_common.h = src\NativeProviders\Common\lapack_common.h
+ src\NativeProviders\Common\WindowsDLL.cpp = src\NativeProviders\Common\WindowsDLL.cpp
+ src\NativeProviders\Common\wrapper_common.h = src\NativeProviders\Common\wrapper_common.h
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MKL", "src\NativeProviders\Windows\MKL\MKLWrapper.vcxproj", "{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Numerics", "src\Numerics\Numerics.csproj", "{B7CAE5F4-A23F-4438-B5BE-41226618B695}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Numerics.Tests.MKL", "src\Numerics.Tests\Numerics.Tests.MKL.csproj", "{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestData", "src\TestData\TestData.csproj", "{AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Readme", "Readme", "{77CF160D-3AE0-45A2-8224-6322C28C2685}"
+ ProjectSection(SolutionItems) = preProject
+ README.md = README.md
+ RELEASENOTES-MKL.md = RELEASENOTES-MKL.md
+ RELEASENOTES.md = RELEASENOTES.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{9275D8F1-84B4-404F-AC1F-EE1211C9F744}"
+ ProjectSection(SolutionItems) = preProject
+ docs\content\Build.md = docs\content\Build.md
+ docs\content\Compatibility.md = docs\content\Compatibility.md
+ docs\content\Contributing.md = docs\content\Contributing.md
+ docs\content\Contributors.md = docs\content\Contributors.md
+ docs\content\License.md = docs\content\License.md
+ docs\content\MKL.md = docs\content\MKL.md
+ docs\content\Packages.md = docs\content\Packages.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{97C9717A-68C7-4C86-B30E-E4FC54C43A13}"
+ ProjectSection(SolutionItems) = preProject
+ build\build-framework.fsx = build\build-framework.fsx
+ build.fsx = build.fsx
+ paket.dependencies = paket.dependencies
+ paket.lock = paket.lock
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmark", "src\Benchmark\Benchmark.csproj", "{F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ Release-MKL|Any CPU = Release-MKL|Any CPU
+ Release-MKL|Mixed Platforms = Release-MKL|Mixed Platforms
+ Release-MKL|Win32 = Release-MKL|Win32
+ Release-MKL|x64 = Release-MKL|x64
+ Release-Signed|Any CPU = Release-Signed|Any CPU
+ Release-Signed|Mixed Platforms = Release-Signed|Mixed Platforms
+ Release-Signed|Win32 = Release-Signed|Win32
+ Release-Signed|x64 = Release-Signed|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Debug|Win32.Build.0 = Debug|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Debug|x64.ActiveCfg = Debug|x64
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Debug|x64.Build.0 = Debug|x64
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release|Any CPU.ActiveCfg = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release|Win32.ActiveCfg = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release|Win32.Build.0 = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release|x64.ActiveCfg = Release|x64
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release|x64.Build.0 = Release|x64
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|Any CPU.ActiveCfg = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|Mixed Platforms.ActiveCfg = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|Mixed Platforms.Build.0 = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|Win32.ActiveCfg = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|Win32.Build.0 = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|x64.ActiveCfg = Release|x64
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|x64.Build.0 = Release|x64
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|Any CPU.ActiveCfg = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|Mixed Platforms.Build.0 = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|Win32.ActiveCfg = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|Win32.Build.0 = Release|Win32
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|x64.ActiveCfg = Release|x64
+ {C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|x64.Build.0 = Release|x64
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Win32.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|x64.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Win32.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Win32.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|x64.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|x64.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|Any CPU.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|Any CPU.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|Win32.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|Win32.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|x64.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|x64.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Win32.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|x64.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release|Win32.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release|Win32.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release|x64.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release|x64.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|Any CPU.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|Any CPU.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|Mixed Platforms.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|Win32.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|Win32.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|x64.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|x64.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Win32.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Win32.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|x64.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-MKL|Any CPU.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-MKL|Any CPU.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-MKL|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-MKL|Mixed Platforms.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-MKL|Win32.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-MKL|Win32.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-MKL|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-MKL|x64.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Win32.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|x64.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Win32.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|x64.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Win32.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Win32.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|x64.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|x64.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Any CPU.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Any CPU.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Mixed Platforms.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Win32.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Win32.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|x64.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|x64.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Win32.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|x64.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {AAF80ABD-8FA0-46CC-8ABF-529E5CA7A734}
+ EndGlobalSection
+EndGlobal
diff --git a/MathNet.Numerics.OpenBLAS.sln b/MathNet.Numerics.OpenBLAS.sln
new file mode 100644
index 00000000..e1433667
--- /dev/null
+++ b/MathNet.Numerics.OpenBLAS.sln
@@ -0,0 +1,223 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27130.2026
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{5A0892FF-82CE-40FC-BCE1-73810C615F52}"
+ ProjectSection(SolutionItems) = preProject
+ src\NativeProviders\Common\lapack_common.h = src\NativeProviders\Common\lapack_common.h
+ src\NativeProviders\Common\WindowsDLL.cpp = src\NativeProviders\Common\WindowsDLL.cpp
+ src\NativeProviders\Common\wrapper_common.h = src\NativeProviders\Common\wrapper_common.h
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Numerics", "src\Numerics\Numerics.csproj", "{B7CAE5F4-A23F-4438-B5BE-41226618B695}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenBLAS", "src\NativeProviders\Windows\OpenBLAS\OpenBLASWrapper.vcxproj", "{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Numerics.Tests.OpenBLAS", "src\Numerics.Tests\Numerics.Tests.OpenBLAS.csproj", "{96B903EF-3EE1-4569-803C-0482D2F5ED37}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestData", "src\TestData\TestData.csproj", "{AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Readme", "Readme", "{77CF160D-3AE0-45A2-8224-6322C28C2685}"
+ ProjectSection(SolutionItems) = preProject
+ README.md = README.md
+ RELEASENOTES-OpenBLAS.md = RELEASENOTES-OpenBLAS.md
+ RELEASENOTES.md = RELEASENOTES.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{9275D8F1-84B4-404F-AC1F-EE1211C9F744}"
+ ProjectSection(SolutionItems) = preProject
+ docs\content\Build.md = docs\content\Build.md
+ docs\content\Compatibility.md = docs\content\Compatibility.md
+ docs\content\Contributing.md = docs\content\Contributing.md
+ docs\content\Contributors.md = docs\content\Contributors.md
+ docs\content\License.md = docs\content\License.md
+ docs\content\MKL.md = docs\content\MKL.md
+ docs\content\Packages.md = docs\content\Packages.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{97C9717A-68C7-4C86-B30E-E4FC54C43A13}"
+ ProjectSection(SolutionItems) = preProject
+ build\build-framework.fsx = build\build-framework.fsx
+ build.fsx = build.fsx
+ paket.dependencies = paket.dependencies
+ paket.lock = paket.lock
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmark", "src\Benchmark\Benchmark.csproj", "{F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ Release-OpenBLAS|Any CPU = Release-OpenBLAS|Any CPU
+ Release-OpenBLAS|Mixed Platforms = Release-OpenBLAS|Mixed Platforms
+ Release-OpenBLAS|Win32 = Release-OpenBLAS|Win32
+ Release-OpenBLAS|x64 = Release-OpenBLAS|x64
+ Release-Signed|Any CPU = Release-Signed|Any CPU
+ Release-Signed|Mixed Platforms = Release-Signed|Mixed Platforms
+ Release-Signed|Win32 = Release-Signed|Win32
+ Release-Signed|x64 = Release-Signed|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|Win32.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Debug|x64.Build.0 = Debug|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Win32.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|Win32.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|x64.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release|x64.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Any CPU.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Win32.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Win32.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|x64.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|x64.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Win32.Build.0 = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|x64.Build.0 = Release|Any CPU
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Win32.Build.0 = Debug|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|x64.ActiveCfg = Debug|x64
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|x64.Build.0 = Debug|x64
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Any CPU.ActiveCfg = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Win32.ActiveCfg = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Win32.Build.0 = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|x64.ActiveCfg = Release|x64
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|x64.Build.0 = Release|x64
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|Win32.ActiveCfg = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|Win32.Build.0 = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|x64.ActiveCfg = Release|x64
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|x64.Build.0 = Release|x64
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Any CPU.ActiveCfg = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Mixed Platforms.Build.0 = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Win32.ActiveCfg = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Win32.Build.0 = Release|Win32
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|x64.ActiveCfg = Release|x64
+ {CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|x64.Build.0 = Release|x64
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Any CPU.Build.0 = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Win32.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Win32.Build.0 = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|x64.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|x64.Build.0 = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|Win32.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|Win32.Build.0 = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|x64.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|x64.Build.0 = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Win32.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|Win32.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release|x64.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-OpenBLAS|Any CPU.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-OpenBLAS|Mixed Platforms.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-OpenBLAS|Win32.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-OpenBLAS|Win32.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-OpenBLAS|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-OpenBLAS|x64.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|Win32.Build.0 = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {AF3253C9-4DB5-45A0-98CF-C105FDA9DA47}.Release-Signed|x64.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Win32.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|x64.Build.0 = Debug|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Win32.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Win32.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|x64.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|x64.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Any CPU.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Mixed Platforms.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Win32.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Win32.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|x64.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|x64.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Win32.Build.0 = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|x64.ActiveCfg = Release|Any CPU
+ {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|x64.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {AAF80ABD-8FA0-46CC-8ABF-529E5CA7A734}
+ EndGlobalSection
+EndGlobal
diff --git a/build.fsx b/build.fsx
index 8046ee0d..f1ca992c 100644
--- a/build.fsx
+++ b/build.fsx
@@ -166,6 +166,10 @@ let mklLinuxNuGetPackage = nugetPackage "MathNet.Numerics.MKL.Linux" mklRelease
let mklLinux32NuGetPackage = nugetPackage "MathNet.Numerics.MKL.Linux-x86" mklRelease
let mklLinux64NuGetPackage = nugetPackage "MathNet.Numerics.MKL.Linux-x64" mklRelease
+let mklWinProject = nativeProject "MathNet.Numerics.MKL" "src/NativeProviders/Windows/MKL/MKLWrapper.vcxproj" [mklWinNuGetPackage; mklWin32NuGetPackage; mklWin64NuGetPackage]
+let mklLinuxProject = nativeBashScriptProject "MathNet.Numerics.MKL" "src/NativeProviders/Linux/mkl_build.sh" [mklLinuxNuGetPackage; mklLinux32NuGetPackage; mklLinux64NuGetPackage]
+let mklSolution = solution "MKL" "MathNet.Numerics.MKL.sln" [mklWinProject; mklLinuxProject] [mklWinZipPackage; mklLinuxZipPackage]
+
// CUDA NATIVE PROVIDER PACKAGES
@@ -195,6 +199,9 @@ let cudaWinBundle =
let cudaWinZipPackage = zipPackage "MathNet.Numerics.CUDA.Win" "Math.NET Numerics CUDA Native Provider for Windows" cudaRelease false
let cudaWinNuGetPackage = nugetPackage "MathNet.Numerics.CUDA.Win" cudaRelease
+let cudaWinProject = nativeProject "MathNet.Numerics.CUDA" "src/NativeProviders/Windows/CUDA/CUDAWrapper.vcxproj" [cudaWinNuGetPackage]
+let cudaSolution = solution "CUDA" "MathNet.Numerics.CUDA.sln" [cudaWinProject] [cudaWinZipPackage]
+
// OpenBLAS NATIVE PROVIDER PACKAGES
@@ -230,6 +237,9 @@ let openBlasWinBundle =
let openBlasWinZipPackage = zipPackage "MathNet.Numerics.OpenBLAS.Win" "Math.NET Numerics OpenBLAS Native Provider for Windows" openBlasRelease false
let openBlasWinNuGetPackage = nugetPackage "MathNet.Numerics.OpenBLAS.Win" openBlasRelease
+let openBlasWinProject = nativeProject "MathNet.Numerics.OpenBLAS" "src/NativeProviders/Windows/OpenBLAS/OpenBLASWrapper.vcxproj" [openBlasWinNuGetPackage]
+let openBlasSolution = solution "OpenBLAS" "MathNet.Numerics.OpenBLAS.sln" [openBlasWinProject] [openBlasWinZipPackage]
+
// ALL
@@ -290,7 +300,7 @@ Target "Build" (fun _ ->
collectBinariesSN numericsSolution
zip numericsStrongNameZipPackage numericsSolution.OutputZipDir numericsSolution.OutputLibStrongNameDir (fun f -> f.Contains("MathNet.Numerics.") || f.Contains("System.Threading.") || f.Contains("FSharp.Core."))
if isWindows then
- packSN numericsSolution.SolutionFile
+ packSN numericsSolution
collectNuGetPackages numericsSolution
// Normal Build (without strong name, with certificate signature)
@@ -301,7 +311,7 @@ Target "Build" (fun _ ->
collectBinaries numericsSolution
zip numericsZipPackage numericsSolution.OutputZipDir numericsSolution.OutputLibDir (fun f -> f.Contains("MathNet.Numerics.") || f.Contains("System.Threading.") || f.Contains("FSharp.Core."))
if isWindows then
- pack numericsSolution.SolutionFile
+ pack numericsSolution
collectNuGetPackages numericsSolution
// NuGet Sign (all or nothing)
@@ -320,8 +330,8 @@ Target "DataBuild" (fun _ ->
collectBinariesSN dataSolution
zip dataStrongNameZipPackage dataSolution.OutputZipDir dataSolution.OutputLibStrongNameDir (fun f -> f.Contains("MathNet.Numerics.Data."))
if isWindows then
- packSN dataTextProject.ProjectFile
- packSN dataMatlabProject.ProjectFile
+ packProjectSN dataTextProject
+ packProjectSN dataMatlabProject
collectNuGetPackages dataSolution
// Normal Build (without strong name, with certificate signature)
@@ -332,8 +342,8 @@ Target "DataBuild" (fun _ ->
collectBinaries dataSolution
zip dataZipPackage dataSolution.OutputZipDir dataSolution.OutputLibDir (fun f -> f.Contains("MathNet.Numerics.Data."))
if isWindows then
- pack dataTextProject.ProjectFile
- pack dataMatlabProject.ProjectFile
+ packProject dataTextProject
+ packProject dataMatlabProject
collectNuGetPackages dataSolution
// NuGet Sign (all or nothing)
@@ -342,18 +352,48 @@ Target "DataBuild" (fun _ ->
)
"Prepare" ==> "DataBuild"
-Target "MklWin32Build" (fun _ -> buildConfig32 "Release-MKL" !! "MathNet.Numerics.NativeProviders.sln")
-Target "MklWin64Build" (fun _ -> buildConfig64 "Release-MKL" !! "MathNet.Numerics.NativeProviders.sln")
+Target "MklWin32Build" (fun _ ->
+
+ //CleanDirs (!! "src/**/obj/" ++ "src/**/bin/" )
+ restore mklSolution
+ buildConfig32 "Release-MKL" !! "MathNet.Numerics.MKL.sln"
+
+ )
+Target "MklWin64Build" (fun _ ->
+
+ //CleanDirs (!! "src/**/obj/" ++ "src/**/bin/" )
+ restore mklSolution
+ buildConfig64 "Release-MKL" !! "MathNet.Numerics.MKL.sln"
+
+ )
Target "MklWinBuild" DoNothing
"Prepare" ==> "MklWin32Build" ==> "MklWinBuild"
"Prepare" ==> "MklWin64Build" ==> "MklWinBuild"
-Target "CudaWin64Build" (fun _ -> buildConfig64 "Release-CUDA" !! "MathNet.Numerics.NativeProviders.sln")
+Target "CudaWin64Build" (fun _ ->
+
+ //CleanDirs (!! "src/**/obj/" ++ "src/**/bin/" )
+ restore cudaSolution
+ buildConfig64 "Release-CUDA" !! "MathNet.Numerics.CUDA.sln"
+
+ )
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 "OpenBlasWin32Build" (fun _ ->
+
+ //CleanDirs (!! "src/**/obj/" ++ "src/**/bin/" )
+ restore openBlasSolution
+ buildConfig32 "Release-OpenBLAS" !! "MathNet.Numerics.OpenBLAS.sln"
+
+ )
+Target "OpenBlasWin64Build" (fun _ ->
+
+ //CleanDirs (!! "src/**/obj/" ++ "src/**/bin/" )
+ restore openBlasSolution
+ buildConfig64 "Release-OpenBLAS" !! "MathNet.Numerics.OpenBLAS.sln"
+
+ )
Target "OpenBlasWinBuild" DoNothing
"Prepare" ==> "OpenBlasWin32Build" ==> "OpenBlasWinBuild"
"Prepare" ==> "OpenBlasWin64Build" ==> "OpenBlasWinBuild"
@@ -397,22 +437,22 @@ let testMKL framework = test "src/Numerics.Tests" "Numerics.Tests.MKL.csproj" fr
Target "MklTest" DoNothing
Target "MklTestCore2.0" (fun _ -> testMKL "netcoreapp2.0")
Target "MklTestNET40" (fun _ -> testMKL "net40")
-"Build" ==> "MklTestCore2.0" ==> "MklTest"
-"Build" =?> ("MklTestNET40", isWindows) ==> "MklTest"
+"MklWinBuild" ==> "MklTestCore2.0" ==> "MklTest"
+"MklWinBuild" =?> ("MklTestNET40", isWindows) ==> "MklTest"
let testOpenBLAS framework = test "src/Numerics.Tests" "Numerics.Tests.OpenBLAS.csproj" framework
Target "OpenBlasTest" DoNothing
Target "OpenBlasTestCore2.0" (fun _ -> testOpenBLAS "netcoreapp2.0")
Target "OpenBlasTestNET40" (fun _ -> testOpenBLAS "net40")
-"Build" ==> "OpenBlasTestCore2.0" ==> "OpenBlasTest"
-"Build" =?> ("OpenBlasTestNET40", isWindows) ==> "OpenBlasTest"
+"OpenBlasWinBuild" ==> "OpenBlasTestCore2.0" ==> "OpenBlasTest"
+"OpenBlasWinBuild" =?> ("OpenBlasTestNET40", isWindows) ==> "OpenBlasTest"
let testCUDA framework = test "src/Numerics.Tests" "Numerics.Tests.CUDA.csproj" framework
Target "CudaTest" DoNothing
Target "CudaTestCore2.0" (fun _ -> testCUDA "netcoreapp2.0")
Target "CudaTestNET40" (fun _ -> testCUDA "net40")
-"Build" ==> "CudaTestCore2.0" ==> "CudaTest"
-"Build" =?> ("CudaTestNET40", isWindows) ==> "CudaTest"
+"CudaWinBuild" ==> "CudaTestCore2.0" ==> "CudaTest"
+"CudaWinBuild" =?> ("CudaTestNET40", isWindows) ==> "CudaTest"
let testData framework = test "src/Data.Tests" "Data.Tests.csproj" framework
Target "DataTest" DoNothing
@@ -437,47 +477,47 @@ Target "OpenBlasWinPack" DoNothing
// ZIP
Target "MklWinZip" (fun _ ->
- CreateDir "out/MKL/packages/Zip"
- zip mklWinZipPackage "out/MKL/packages/Zip" "out/MKL/Windows" (fun f -> f.Contains("MathNet.Numerics.MKL.") || f.Contains("libiomp5md.dll")))
+ CreateDir mklSolution.OutputZipDir
+ zip mklWinZipPackage mklSolution.OutputZipDir "out/MKL/Windows" (fun f -> f.Contains("MathNet.Numerics.MKL.") || f.Contains("libiomp5md.dll")))
"MklWinBuild" ==> "MklWinZip" ==> "MklWinPack"
Target "MklLinuxZip" (fun _ ->
- CreateDir "out/MKL/packages/Zip"
- zip mklLinuxZipPackage "out/MKL/packages/Zip" "out/MKL/Linux" (fun f -> f.Contains("MathNet.Numerics.MKL.") || f.Contains("libiomp5.so")))
+ CreateDir mklSolution.OutputZipDir
+ zip mklLinuxZipPackage mklSolution.OutputZipDir "out/MKL/Linux" (fun f -> f.Contains("MathNet.Numerics.MKL.") || f.Contains("libiomp5.so")))
// "MklLinuxBuild" ==> "MklLinuxZip" ==> "MklLinuxPack"
"MklLinuxZip" ==> "MklLinuxPack"
Target "CudaWinZip" (fun _ ->
- CreateDir "out/CUDA/packages/Zip"
- zip cudaWinZipPackage "out/CUDA/packages/Zip" "out/CUDA/Windows" (fun f -> f.Contains("MathNet.Numerics.CUDA.") || f.Contains("cublas") || f.Contains("cudart") || f.Contains("cusolver")))
+ CreateDir cudaSolution.OutputZipDir
+ zip cudaWinZipPackage cudaSolution.OutputZipDir "out/CUDA/Windows" (fun f -> f.Contains("MathNet.Numerics.CUDA.") || f.Contains("cublas") || f.Contains("cudart") || f.Contains("cusolver")))
"CudaWinBuild" ==> "CudaWinZip" ==> "CudaWinPack"
Target "OpenBlasWinZip" (fun _ ->
- CreateDir "out/OpenBLAS/packages/Zip"
- zip openBlasWinZipPackage "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")))
+ CreateDir openBlasSolution.OutputZipDir
+ zip openBlasWinZipPackage openBlasSolution.OutputZipDir "out/OpenBLAS/Windows" (fun f -> f.Contains("MathNet.Numerics.OpenBLAS.") || f.Contains("libgcc") || f.Contains("libgfortran") || f.Contains("libopenblas") || f.Contains("libquadmath")))
"OpenBlasWinBuild" ==> "OpenBlasWinZip" ==> "OpenBlasWinPack"
// NUGET
Target "MklWinNuGet" (fun _ ->
- CreateDir "out/MKL/packages/NuGet"
- nugetPackExtension mklWinBundle "out/MKL/packages/NuGet")
+ CreateDir mklSolution.OutputNuGetDir
+ nugetPackExtension mklWinBundle mklSolution.OutputNuGetDir)
"MklWinBuild" ==> "MklWinNuGet" ==> "MklWinPack"
Target "MklLinuxNuGet" (fun _ ->
- CreateDir "out/MKL/packages/NuGet"
- nugetPackExtension mklLinuxBundle "out/MKL/packages/NuGet")
+ CreateDir mklSolution.OutputNuGetDir
+ nugetPackExtension mklLinuxBundle mklSolution.OutputNuGetDir)
// "MklLinuxBuild" ==> "MklLinuxNuGet" ==> "MklLinuxPack"
"MklLinuxNuGet" ==> "MklLinuxPack"
Target "CudaWinNuGet" (fun _ ->
- CreateDir "out/CUDA/packages/NuGet"
- nugetPackExtension cudaWinBundle "out/CUDA/packages/NuGet")
+ CreateDir cudaSolution.OutputNuGetDir
+ nugetPackExtension cudaWinBundle cudaSolution.OutputNuGetDir)
"CudaWinBuild" ==> "CudaWinNuGet" ==> "CudaWinPack"
Target "OpenBlasWinNuGet" (fun _ ->
- CreateDir "out/OpenBLAS/packages/NuGet"
- nugetPackExtension openBlasWinBundle "out/OpenBLAS/packages/NuGet")
+ CreateDir openBlasSolution.OutputNuGetDir
+ nugetPackExtension openBlasWinBundle openBlasSolution.OutputNuGetDir)
"OpenBlasWinBuild" ==> "OpenBlasWinNuGet" ==> "OpenBlasWinPack"
@@ -554,15 +594,15 @@ Target "PublishApi" (fun _ -> publishApi numericsRelease)
Target "PublishArchive" (fun _ -> publishArchive numericsSolution)
Target "DataPublishArchive" (fun _ -> publishArchive dataSolution)
-Target "MklPublishArchive" (fun _ -> publishArchiveManual "out/MKL/packages/Zip" "out/MKL/packages/NuGet" [mklWinZipPackage; mklLinuxZipPackage] [mklWinNuGetPackage; mklWin32NuGetPackage; mklWin64NuGetPackage; mklLinuxNuGetPackage; mklLinux32NuGetPackage; mklLinux64NuGetPackage])
-Target "CudaPublishArchive" (fun _ -> publishArchiveManual "out/CUDA/packages/Zip" "out/CUDA/packages/NuGet" [cudaWinZipPackage] [cudaWinNuGetPackage])
-Target "OpenBlasPublishArchive" (fun _ -> publishArchiveManual "out/OpenBLAS/packages/Zip" "out/OpenBLAS/packages/NuGet" [openBlasWinZipPackage] [openBlasWinNuGetPackage])
+Target "MklPublishArchive" (fun _ -> publishArchive mklSolution)
+Target "CudaPublishArchive" (fun _ -> publishArchive cudaSolution)
+Target "OpenBlasPublishArchive" (fun _ -> publishArchive openBlasSolution)
Target "PublishNuGet" (fun _ -> publishNuGet !! (numericsSolution.OutputNuGetDir > "/*.nupkg"))
Target "DataPublishNuGet" (fun _ -> publishNuGet !! (dataSolution.OutputNuGetDir > "/*.nupkg"))
-Target "MklPublishNuGet" (fun _ -> publishNuGet !! "out/MKL/packages/NuGet/*.nupkg")
-Target "CudaPublishNuGet" (fun _ -> publishNuGet !! "out/CUDA/packages/NuGet/*.nupkg")
-Target "OpenBlasPublishNuGet" (fun _ -> publishNuGet !! "out/OpenBLAS/packages/NuGet/*.nupkg")
+Target "MklPublishNuGet" (fun _ -> publishNuGet !! (mklSolution.OutputNuGetDir > "/*.nupkg"))
+Target "CudaPublishNuGet" (fun _ -> publishNuGet !! (cudaSolution.OutputNuGetDir > "/*.nupkg"))
+Target "OpenBlasPublishNuGet" (fun _ -> publishNuGet !! (openBlasSolution.OutputNuGetDir > "/*.nupkg"))
Target "Publish" DoNothing
Dependencies "Publish" [ "PublishTag"; "PublishDocs"; "PublishApi"; "PublishArchive"; "PublishNuGet" ]
diff --git a/build/build-framework.fsx b/build/build-framework.fsx
index 1246c5f7..3fff3242 100644
--- a/build/build-framework.fsx
+++ b/build/build-framework.fsx
@@ -109,13 +109,32 @@ type NuGetPackage =
{ Id: string
Release: Release }
-type Project =
+type VisualStudioProject =
{ AssemblyName: string
ProjectFile: string
OutputDir: string
Release: Release
NuGetPackages: NuGetPackage list }
+type NativeVisualStudioProject =
+ { BinaryName: string
+ ProjectFile: string
+ OutputDir: string
+ Release: Release
+ NuGetPackages: NuGetPackage list }
+
+type NativeBashScriptProject =
+ { BinaryName: string
+ BashScriptFile: string
+ OutputDir: string
+ Release: Release
+ NuGetPackages: NuGetPackage list }
+
+type Project =
+ | VisualStudio of VisualStudioProject
+ | NativeVisualStudio of NativeVisualStudioProject
+ | NativeBashScript of NativeBashScriptProject
+
type Solution =
{ Key: string
SolutionFile: string
@@ -170,18 +189,51 @@ let nugetPackage packageId release =
Release = release }
let project assemblyName projectFile nuGetPackages =
- { Project.AssemblyName = assemblyName
+ { VisualStudioProject.AssemblyName = assemblyName
ProjectFile = projectFile
OutputDir = (Path.GetDirectoryName projectFile) > "bin" > "Release"
NuGetPackages = nuGetPackages
Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne }
+ |> Project.VisualStudio
+
+let nativeProject binaryName projectFile nuGetPackages =
+ { NativeVisualStudioProject.BinaryName = binaryName
+ ProjectFile = projectFile
+ OutputDir = (Path.GetDirectoryName projectFile) > "bin" > "Release"
+ NuGetPackages = nuGetPackages
+ Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne }
+ |> Project.NativeVisualStudio
+
+let nativeBashScriptProject binaryName bashScriptFile nuGetPackages =
+ { NativeBashScriptProject.BinaryName = binaryName
+ BashScriptFile = bashScriptFile
+ OutputDir = (Path.GetDirectoryName bashScriptFile) > "bin" > "Release"
+ NuGetPackages = nuGetPackages
+ Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne }
+ |> Project.NativeBashScript
+
+
+let projectOutputDir = function
+ | VisualStudio p -> p.OutputDir
+ | NativeVisualStudio p -> p.OutputDir
+ | NativeBashScript p -> p.OutputDir
+
+let projectRelease = function
+ | VisualStudio p -> p.Release
+ | NativeVisualStudio p -> p.Release
+ | NativeBashScript p -> p.Release
+
+let projectNuGetPackages = function
+ | VisualStudio p -> p.NuGetPackages
+ | NativeVisualStudio p -> p.NuGetPackages
+ | NativeBashScript p -> p.NuGetPackages
let solution key solutionFile projects zipPackages =
{ Solution.Key = key
SolutionFile = solutionFile
Projects = projects
ZipPackages = zipPackages
- Release = List.concat [ projects |> List.map (fun p -> p.Release); zipPackages |> List.map (fun p -> p.Release) ] |> List.distinct |> List.exactlyOne
+ Release = List.concat [ projects |> List.map projectRelease; zipPackages |> List.map (fun p -> p.Release) ] |> List.distinct |> List.exactlyOne
OutputDir = "out" > key
OutputLibDir = "out" > key > "Lib"
OutputLibStrongNameDir = "out" > key > "Lib-StrongName"
@@ -240,19 +292,22 @@ let patchVersionInResource path (release:Release) =
path
let patchVersionInProjectFile (project:Project) =
- let semverSplit = project.Release.PackageVersion.IndexOf('-')
- let prefix = if semverSplit <= 0 then project.Release.PackageVersion else project.Release.PackageVersion.Substring(0, semverSplit)
- let suffix = if semverSplit <= 0 then "" else project.Release.PackageVersion.Substring(semverSplit+1)
- ReplaceInFile
- (regex_replace """\.*\""" (sprintf """%s""" project.Release.PackageVersion)
- >> regex_replace """\.*\""" (sprintf """%s""" project.Release.PackageVersion)
- >> regex_replace """\.*\""" (sprintf """%s""" project.Release.AssemblyVersion)
- >> regex_replace """\.*\""" (sprintf """%s""" project.Release.AssemblyVersion)
- >> regex_replace """\.*\""" (sprintf """%s""" prefix)
- >> regex_replace """\.*\""" (sprintf """%s""" suffix)
- >> regex_replace_singleline """\.*\""" (sprintf """%s""" project.Release.ReleaseNotes))
- project.ProjectFile
-
+ match project with
+ | VisualStudio p ->
+ let semverSplit = p.Release.PackageVersion.IndexOf('-')
+ let prefix = if semverSplit <= 0 then p.Release.PackageVersion else p.Release.PackageVersion.Substring(0, semverSplit)
+ let suffix = if semverSplit <= 0 then "" else p.Release.PackageVersion.Substring(semverSplit+1)
+ ReplaceInFile
+ (regex_replace """\.*\""" (sprintf """%s""" p.Release.PackageVersion)
+ >> regex_replace """\.*\""" (sprintf """%s""" p.Release.PackageVersion)
+ >> regex_replace """\.*\""" (sprintf """%s""" p.Release.AssemblyVersion)
+ >> regex_replace """\.*\""" (sprintf """%s""" p.Release.AssemblyVersion)
+ >> regex_replace """\.*\""" (sprintf """%s""" prefix)
+ >> regex_replace """\.*\""" (sprintf """%s""" suffix)
+ >> regex_replace_singleline """\.*\""" (sprintf """%s""" p.Release.ReleaseNotes))
+ p.ProjectFile
+ | NativeVisualStudio _ -> ()
+ | NativeBashScript _ -> ()
// --------------------------------------------------------------------------------------
// BUILD
@@ -266,8 +321,15 @@ let restoreSN (solution:Solution) = msbuildSN [ "Restore" ] "Release" solution.S
let build (solution:Solution) = msbuild [ (if hasBuildParam "incremental" then "Build" else "Rebuild") ] "Release" solution.SolutionFile
let buildSN (solution:Solution) = msbuildSN [ (if hasBuildParam "incremental" then "Build" else "Rebuild") ] "Release" solution.SolutionFile
-let pack project = dotnet rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" project)
-let packSN project = dotnetSN rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" project)
+let pack (solution:Solution) = dotnet rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" solution.SolutionFile)
+let packSN (solution:Solution) = dotnetSN rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" solution.SolutionFile)
+
+let packProject = function
+ | VisualStudio p -> dotnet rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" p.ProjectFile)
+ | _ -> failwith "Project type not supported"
+let packProjectSN = function
+ | VisualStudio p -> dotnetSN rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" p.ProjectFile)
+ | _ -> failwith "Project type not supported"
//let buildConfig config subject = MSBuild "" (if hasBuildParam "incremental" then "Build" else "Rebuild") [ "Configuration", config ] subject |> ignore
//let build subject = buildConfig "Release" subject
@@ -281,13 +343,19 @@ let buildConfig64 config subject = MSBuild "" (if hasBuildParam "incremental" th
// --------------------------------------------------------------------------------------
let collectBinaries (solution:Solution) =
- solution.Projects |> List.iter (fun project -> CopyDir solution.OutputLibDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml")))
+ solution.Projects |> List.iter (function
+ | VisualStudio project -> CopyDir solution.OutputLibDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml"))
+ | _ -> failwith "Project type not supported")
let collectBinariesSN (solution:Solution) =
- solution.Projects |> List.iter (fun project -> CopyDir solution.OutputLibStrongNameDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml")))
+ solution.Projects |> List.iter (function
+ | VisualStudio project -> CopyDir solution.OutputLibStrongNameDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml"))
+ | _ -> failwith "Project type not supported")
let collectNuGetPackages (solution:Solution) =
- solution.Projects |> List.iter (fun project -> CopyDir solution.OutputNuGetDir project.OutputDir (fun n -> n.EndsWith(".nupkg")))
+ solution.Projects |> List.iter (function
+ | VisualStudio project -> CopyDir solution.OutputNuGetDir project.OutputDir (fun n -> n.EndsWith(".nupkg"))
+ | _ -> failwith "Project type not supported")
// --------------------------------------------------------------------------------------
@@ -349,7 +417,9 @@ let provideNuGetExtraFiles path (bundle:Bundle) (pack:Package) =
// SIGN
let sign fingerprint timeserver (solution: Solution) =
- let files = solution.Projects |> Seq.collect (fun p -> !! (p.OutputDir + "/**/" + p.AssemblyName + ".dll"))
+ let files = solution.Projects |> Seq.collect (function
+ | VisualStudio project -> !! (project.OutputDir + "/**/" + project.AssemblyName + ".dll")
+ | _ -> failwith "Project type not supported")
let fileArgs = files |> Seq.map (sprintf "\"%s\"") |> String.concat " "
let optionsArgs = sprintf """/v /fd sha256 /sha1 "%s" /tr "%s" /td sha256""" fingerprint timeserver
let arguments = sprintf """sign %s %s""" optionsArgs fileArgs
@@ -570,5 +640,5 @@ let publishArchive (solution:Solution) =
let zipOutPath = solution.OutputZipDir
let nugetOutPath = solution.OutputNuGetDir
let zipPackages = solution.ZipPackages
- let nugetPackages = solution.Projects |> List.collect (fun p -> p.NuGetPackages) |> List.distinct
+ let nugetPackages = solution.Projects |> List.collect projectNuGetPackages |> List.distinct
publishArchiveManual zipOutPath nugetOutPath zipPackages nugetPackages
diff --git a/src/Benchmark/Benchmark.csproj b/src/Benchmark/Benchmark.csproj
index 6b7d984a..db0c6b55 100644
--- a/src/Benchmark/Benchmark.csproj
+++ b/src/Benchmark/Benchmark.csproj
@@ -8,6 +8,11 @@
Benchmark
false
+
+
+
+
+
diff --git a/src/NativeProviders/Common/lapack_common.h b/src/NativeProviders/Common/lapack_common.h
index 6865f9b4..99ad8990 100644
--- a/src/NativeProviders/Common/lapack_common.h
+++ b/src/NativeProviders/Common/lapack_common.h
@@ -42,7 +42,7 @@ inline void shift_ipiv_up(int m, int ipiv[])
}
}
-template
+template
inline T* Clone(const int m, const int n, const T* a)
{
auto clone = new T[m*n];
@@ -50,7 +50,7 @@ inline T* Clone(const int m, const int n, const T* a)
return clone;
}
-template
+template
inline void copyBtoX (int m, int n, int bn, T b[], T x[])
{
for (auto i = 0; i < n; ++i)
diff --git a/src/NativeProviders/Common/wrapper_common.h b/src/NativeProviders/Common/wrapper_common.h
index a6f5a6d6..e3f01e46 100644
--- a/src/NativeProviders/Common/wrapper_common.h
+++ b/src/NativeProviders/Common/wrapper_common.h
@@ -1,10 +1,14 @@
#ifndef WRAPPER_COMMON_H
#define WRAPPER_COMMON_H
+#ifndef __MS_VC_INSTALL_PATH
+#define __MS_VC_INSTALL_PATH C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.14.26428
+#endif
+
#ifdef _WINDOWS
#define DLLEXPORT __declspec( dllexport )
#else
#define DLLEXPORT
#endif
-#endif
+#endif
diff --git a/src/NativeProviders/OpenBLAS/lapack.h b/src/NativeProviders/OpenBLAS/lapack.h
index 3c9fe4b5..30d40bbe 100644
--- a/src/NativeProviders/OpenBLAS/lapack.h
+++ b/src/NativeProviders/OpenBLAS/lapack.h
@@ -7,5 +7,3 @@
#include "cblas.h"
#include "lapacke.h"
-
-
diff --git a/src/NativeProviders/OpenBLAS/resource.h b/src/NativeProviders/OpenBLAS/resource.h
index 27e2900c..ac60d04d 100644
--- a/src/NativeProviders/OpenBLAS/resource.h
+++ b/src/NativeProviders/OpenBLAS/resource.h
@@ -3,7 +3,7 @@
// Used by resource.rc
// Next default values for new objects
-//
+//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
diff --git a/src/NativeProviders/Windows/ATLAS/ATLASWrapper.vcxproj b/src/NativeProviders/Windows/ATLAS/ATLASWrapper.vcxproj
index fe606179..3fa48f68 100644
--- a/src/NativeProviders/Windows/ATLAS/ATLASWrapper.vcxproj
+++ b/src/NativeProviders/Windows/ATLAS/ATLASWrapper.vcxproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -23,31 +23,32 @@
Win32Proj
ATLASWrapper
ATLAS
+ 10.0.10586.0
DynamicLibrary
true
- v140
+ v141
Unicode
DynamicLibrary
true
- v140
+ v141
Unicode
DynamicLibrary
false
- v140
+ v141
true
Unicode
DynamicLibrary
false
- v140
+ v141
true
Unicode
diff --git a/src/NativeProviders/Windows/CUDA/CUDAWrapper.vcxproj b/src/NativeProviders/Windows/CUDA/CUDAWrapper.vcxproj
index 56675e27..66e99daa 100644
--- a/src/NativeProviders/Windows/CUDA/CUDAWrapper.vcxproj
+++ b/src/NativeProviders/Windows/CUDA/CUDAWrapper.vcxproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -34,31 +34,32 @@
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}
CUDA
CUDA
+ 10.0.10586.0
DynamicLibrary
true
- v140
+ v141
MultiByte
DynamicLibrary
true
- v140
+ v141
MultiByte
DynamicLibrary
false
- v140
+ v141
true
MultiByte
DynamicLibrary
false
- v140
+ v141
true
MultiByte
diff --git a/src/NativeProviders/Windows/MKL/MKLWrapper.vcxproj b/src/NativeProviders/Windows/MKL/MKLWrapper.vcxproj
index daeb07d5..3950f5bd 100644
--- a/src/NativeProviders/Windows/MKL/MKLWrapper.vcxproj
+++ b/src/NativeProviders/Windows/MKL/MKLWrapper.vcxproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -30,44 +30,44 @@
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}
MKLWrapper
MKL
- 8.1
+ 10.0.10586.0
DynamicLibrary
- v140
+ v141
MultiByte
true
Parallel
DynamicLibrary
- v140
+ v141
MultiByte
Parallel
DynamicLibrary
- v140
+ v141
MultiByte
Parallel
DynamicLibrary
- v140
+ v141
MultiByte
true
Parallel
DynamicLibrary
- v140
+ v141
MultiByte
Parallel
DynamicLibrary
- v140
+ v141
MultiByte
Parallel
@@ -158,7 +158,7 @@
$(OutDir)$(TargetName).lib
- copy "$(INTEL_DEV_REDIST)redist\ia32\compiler\libiomp5md.dll" $(OutputPath)
+ copy "$(INTEL_DEV_REDIST)redist\ia32_win\compiler\libiomp5md.dll" $(OutputPath)
@@ -184,7 +184,7 @@
$(OutDir)$(TargetName).lib
- copy "$(INTEL_DEV_REDIST)redist\ia32\compiler\libiomp5md.dll" $(OutputPath)
+ copy "$(INTEL_DEV_REDIST)redist\ia32_win\compiler\libiomp5md.dll" $(OutputPath)
@@ -211,7 +211,7 @@
$(OutDir)$(TargetName).lib
- copy "$(INTEL_DEV_REDIST)redist\intel64\compiler\libiomp5md.dll" $(OutputPath)
+ copy "$(INTEL_DEV_REDIST)redist\intel64_win\compiler\libiomp5md.dll" $(OutputPath)
@@ -240,7 +240,7 @@
$(OutDir)$(TargetName).lib
- copy "$(INTEL_DEV_REDIST)redist\intel64\compiler\libiomp5md.dll" $(OutputPath)
+ copy "$(INTEL_DEV_REDIST)redist\intel64_win\compiler\libiomp5md.dll" $(OutputPath)
@@ -267,7 +267,7 @@
$(OutDir)$(TargetName).lib
- copy "$(INTEL_DEV_REDIST)redist\ia32\compiler\libiomp5md.dll" $(OutputPath)
+ copy "$(INTEL_DEV_REDIST)redist\ia32_win\compiler\libiomp5md.dll" $(OutputPath)
@@ -297,7 +297,7 @@
$(OutDir)$(TargetName).lib
- copy "$(INTEL_DEV_REDIST)redist\intel64\compiler\libiomp5md.dll" $(OutputPath)
+ copy "$(INTEL_DEV_REDIST)redist\intel64_win\compiler\libiomp5md.dll" $(OutputPath)
@@ -321,4 +321,4 @@
-
\ No newline at end of file
+
diff --git a/src/NativeProviders/Windows/OpenBLAS/OpenBLASWrapper.vcxproj b/src/NativeProviders/Windows/OpenBLAS/OpenBLASWrapper.vcxproj
index 42d9295e..56f248fe 100644
--- a/src/NativeProviders/Windows/OpenBLAS/OpenBLASWrapper.vcxproj
+++ b/src/NativeProviders/Windows/OpenBLAS/OpenBLASWrapper.vcxproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -22,28 +22,29 @@
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}
OpenBLASWrapper
OpenBLAS
+ 10.0.10586.0
DynamicLibrary
- v140
+ v141
MultiByte
true
DynamicLibrary
- v140
+ v141
MultiByte
DynamicLibrary
- v140
+ v141
MultiByte
true
DynamicLibrary
- v140
+ v141
MultiByte
@@ -62,7 +63,7 @@
- $(ProjectDir)..\..\..\..\..\libs\OpenBLAS
+ $(ProjectDir)..\..\..\..\..\libs\OpenBLAS
$(OpenBlasPath)\include\
$(OpenBlasPath)\x86\
$(OpenBlasPath)\x64\
@@ -220,4 +221,4 @@
-
\ No newline at end of file
+
diff --git a/src/Numerics.Tests/Numerics.Tests.CUDA.csproj b/src/Numerics.Tests/Numerics.Tests.CUDA.csproj
index 54596316..b464083b 100644
--- a/src/Numerics.Tests/Numerics.Tests.CUDA.csproj
+++ b/src/Numerics.Tests/Numerics.Tests.CUDA.csproj
@@ -2,8 +2,8 @@
Exe
+ false
net461;netcoreapp1.1;netcoreapp2.0
- 2.0.7
false
MathNet.Numerics.Tests.CUDA
MathNet.Numerics.Tests
@@ -18,6 +18,9 @@
+
+
+
diff --git a/src/Numerics.Tests/Numerics.Tests.MKL.csproj b/src/Numerics.Tests/Numerics.Tests.MKL.csproj
index a0eb1a51..1524c965 100644
--- a/src/Numerics.Tests/Numerics.Tests.MKL.csproj
+++ b/src/Numerics.Tests/Numerics.Tests.MKL.csproj
@@ -2,8 +2,8 @@
Exe
+ false
net461;netcoreapp1.1;netcoreapp2.0
- 2.0.7
false
MathNet.Numerics.Tests.MKL
MathNet.Numerics.Tests
@@ -18,6 +18,9 @@
+
+
+
diff --git a/src/Numerics.Tests/Numerics.Tests.OpenBLAS.csproj b/src/Numerics.Tests/Numerics.Tests.OpenBLAS.csproj
index dadcf950..674ad283 100644
--- a/src/Numerics.Tests/Numerics.Tests.OpenBLAS.csproj
+++ b/src/Numerics.Tests/Numerics.Tests.OpenBLAS.csproj
@@ -2,8 +2,8 @@
Exe
+ false
net461;netcoreapp1.1;netcoreapp2.0
- 2.0.7
false
MathNet.Numerics.Tests.OpenBLAS
MathNet.Numerics.Tests
@@ -18,6 +18,9 @@
+
+
+
diff --git a/src/Numerics.Tests/Numerics.Tests.csproj b/src/Numerics.Tests/Numerics.Tests.csproj
index 886496e3..3cfa17d8 100644
--- a/src/Numerics.Tests/Numerics.Tests.csproj
+++ b/src/Numerics.Tests/Numerics.Tests.csproj
@@ -17,6 +17,9 @@
+
+
+