diff --git a/build.cake b/build.cake index 8c0c51f1..5685c001 100644 --- a/build.cake +++ b/build.cake @@ -23,6 +23,7 @@ var NUnitConsoleToolPath = GetToolPath ("NUnit.ConsoleRunner/tools/nunit3-consol var GenApiToolPath = GetToolPath ("Microsoft.DotNet.BuildTools.GenAPI/tools/GenAPI.exe"); var MDocPath = GetToolPath ("mdoc/mdoc.exe"); var SNToolPath = GetSNToolPath (EnvironmentVariable ("SN_EXE")); +var MSBuildToolPath = GetMSBuildToolPath (EnvironmentVariable ("MSBUILD_EXE")); var VERSION_ASSEMBLY = "1.58.0.0"; var VERSION_FILE = "1.58.0.0"; @@ -103,10 +104,7 @@ Task ("libs") if (IsRunningOnWindows ()) { // build bindings RunNuGetRestore ("binding/SkiaSharp.Windows.sln"); - DotNetBuild ("binding/SkiaSharp.Windows.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("binding/SkiaSharp.Windows.sln"); // copy build output CopyFileToDirectory ("./binding/SkiaSharp.Portable/bin/Release/SkiaSharp.dll", "./output/portable/"); @@ -120,10 +118,7 @@ Task ("libs") // build libHarfBuzzSharp bindings RunNuGetRestore ("binding/HarfBuzzSharp.Windows.sln"); - DotNetBuild ("binding/HarfBuzzSharp.Windows.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("binding/HarfBuzzSharp.Windows.sln"); // copy libHarfBuzzSharp build output CopyFileToDirectory ("./binding/HarfBuzzSharp.Portable/bin/Release/HarfBuzzSharp.dll", "./output/portable/"); @@ -137,10 +132,7 @@ Task ("libs") // build other source RunNuGetRestore ("./source/SkiaSharpSource.Windows.sln"); - DotNetBuild ("./source/SkiaSharpSource.Windows.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("./source/SkiaSharpSource.Windows.sln"); // copy the managed views CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.UWP/bin/Release/SkiaSharp.Views.UWP.dll", "./output/uwp/"); @@ -165,10 +157,7 @@ Task ("libs") if (IsRunningOnMac ()) { // build RunNuGetRestore ("binding/SkiaSharp.Mac.sln"); - DotNetBuild ("binding/SkiaSharp.Mac.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("binding/SkiaSharp.Mac.sln"); // copy build output CopyFileToDirectory ("./binding/SkiaSharp.Android/bin/Release/SkiaSharp.dll", "./output/android/"); @@ -182,10 +171,7 @@ Task ("libs") // build libHarfBuzzSharp bindings RunNuGetRestore ("binding/HarfBuzzSharp.Mac.sln"); - DotNetBuild ("binding/HarfBuzzSharp.Mac.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("binding/HarfBuzzSharp.Mac.sln"); // copy libHarfBuzzSharp build output CopyFileToDirectory ("./binding/HarfBuzzSharp.Android/bin/Release/HarfBuzzSharp.dll", "./output/android/"); @@ -199,10 +185,7 @@ Task ("libs") // build other source RunNuGetRestore ("./source/SkiaSharpSource.Mac.sln"); - DotNetBuild ("./source/SkiaSharpSource.Mac.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("./source/SkiaSharpSource.Mac.sln"); // copy other outputs CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Android/bin/Release/SkiaSharp.Views.Android.dll", "./output/android/"); @@ -230,30 +213,21 @@ Task ("libs") if (IsRunningOnLinux ()) { // build RunNuGetRestore ("binding/SkiaSharp.Linux.sln"); - DotNetBuild ("binding/SkiaSharp.Linux.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("binding/SkiaSharp.Linux.sln"); // copy build output CopyFileToDirectory ("./binding/SkiaSharp.Portable/bin/Release/SkiaSharp.dll", "./output/portable/"); // build libHarfBuzzSharp bindings RunNuGetRestore ("binding/HarfBuzzSharp.Linux.sln"); - DotNetBuild ("binding/HarfBuzzSharp.Linux.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("binding/HarfBuzzSharp.Linux.sln"); // copy libHarfBuzzSharp build output CopyFileToDirectory ("./binding/HarfBuzzSharp.Portable/bin/Release/HarfBuzzSharp.dll", "./output/portable/"); // build other source RunNuGetRestore ("./source/SkiaSharpSource.Linux.sln"); - DotNetBuild ("./source/SkiaSharpSource.Linux.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("./source/SkiaSharpSource.Linux.sln"); // copy SVG CopyFileToDirectory ("./source/SkiaSharp.Svg/SkiaSharp.Svg/bin/Release/SkiaSharp.Svg.dll", "./output/portable/"); @@ -348,25 +322,14 @@ Task ("tests") // Windows (x86 and x64) if (IsRunningOnWindows ()) { - DotNetBuild ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln", c => { - c.Configuration = "Release"; - c.Properties ["Platform"] = new [] { "x86" }; - c.Verbosity = VERBOSITY; - }); + RunMSBuildWithPlatform ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln", "x86"); RunTests("./tests/SkiaSharp.Desktop.Tests/bin/x86/Release/SkiaSharp.Desktop.Tests.dll"); - DotNetBuild ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln", c => { - c.Configuration = "Release"; - c.Properties ["Platform"] = new [] { "x64" }; - c.Verbosity = VERBOSITY; - }); + RunMSBuildWithPlatform ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln", "x64"); RunTests("./tests/SkiaSharp.Desktop.Tests/bin/x64/Release/SkiaSharp.Desktop.Tests.dll"); } // Mac OSX (Any CPU) if (IsRunningOnMac ()) { - DotNetBuild ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln"); RunTests("./tests/SkiaSharp.Desktop.Tests/bin/AnyCPU/Release/SkiaSharp.Desktop.Tests.dll"); } // .NET Core @@ -401,47 +364,22 @@ Task ("samples") if (IsRunningOnMac ()) { RunNuGetRestore ("./samples/MacSample/MacSample.sln"); - DotNetBuild ("./samples/MacSample/MacSample.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuildWithPlatform ("./samples/MacSample/MacSample.sln", "x86"); RunNuGetRestore ("./samples/FormsSample/FormsSample.Mac.sln"); - DotNetBuild ("./samples/FormsSample/FormsSample.Mac.sln", c => { - c.Configuration = "Release"; - c.Properties ["Platform"] = new [] { "iPhone" }; - c.Verbosity = VERBOSITY; - }); + RunMSBuildWithPlatform ("./samples/FormsSample/FormsSample.Mac.sln", "iPhone"); RunNuGetRestore ("./samples/TvSample/TvSample.sln"); - DotNetBuild ("./samples/TvSample/TvSample.sln", c => { - c.Configuration = "Release"; - c.Properties ["Platform"] = new [] { "iPhoneSimulator" }; - c.Verbosity = VERBOSITY; - }); + RunMSBuildWithPlatform ("./samples/TvSample/TvSample.sln", "iPhoneSimulator"); } if (IsRunningOnWindows ()) { RunNuGetRestore ("./samples/WPFSample/WPFSample.sln"); - DotNetBuild ("./samples/WPFSample/WPFSample.sln", c => { - c.Configuration = "Release"; - c.Properties ["Platform"] = new [] { "x86" }; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("./samples/WPFSample/WPFSample.sln"); RunNuGetRestore ("./samples/UWPSample/UWPSample.sln"); - DotNetBuild ("./samples/UWPSample/UWPSample.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("./samples/UWPSample/UWPSample.sln"); RunNuGetRestore ("./samples/FormsSample/FormsSample.Windows.sln"); - DotNetBuild ("./samples/FormsSample/FormsSample.Windows.sln", c => { - c.Configuration = "Release"; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("./samples/FormsSample/FormsSample.Windows.sln"); RunNuGetRestore ("./samples/WindowsSample/WindowsSample.sln"); - DotNetBuild ("./samples/WindowsSample/WindowsSample.sln", c => { - c.Configuration = "Release"; - c.Properties ["Platform"] = new [] { "x86" }; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("./samples/WindowsSample/WindowsSample.sln"); } }); @@ -513,12 +451,9 @@ Task ("update-docs") .Union (GetDirectories ("./source/packages/OpenTK.*/lib/net40*")); // add windows-specific references if (IsRunningOnWindows ()) { - // Windows.Foundation.UniversalApiContract is a winmd, so fake the dll - // types aren't needed here - DotNetBuild ("./externals/Windows.Foundation.UniversalApiContract/Windows.Foundation.UniversalApiContract.csproj", c => { - c.Verbosity = Verbosity.Quiet; - c.Verbosity = VERBOSITY; - }); + // // Windows.Foundation.UniversalApiContract is a winmd, so fake the dll + // // types aren't needed here + // RunMSBuild ("./externals/Windows.Foundation.UniversalApiContract/Windows.Foundation.UniversalApiContract.csproj"); refs = refs.Union (new DirectoryPath [] { "./externals/Windows.Foundation.UniversalApiContract/bin/Release", "C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/MonoAndroid/v1.0", @@ -871,6 +806,7 @@ Information ("NuGet.exe ToolPath: {0}", NugetToolPath); Information ("Xamarin-Component.exe ToolPath: {0}", XamarinComponentToolPath); Information ("genapi.exe ToolPath: {0}", GenApiToolPath); Information ("sn.exe ToolPath: {0}", SNToolPath); +Information ("msbuild.exe ToolPath: {0}", MSBuildToolPath); if (IS_ON_CI) { Information ("Detected that we are building on CI, {0}.", IS_ON_FINAL_CI ? "and on FINAL CI" : "but NOT on final CI"); diff --git a/cake/BuildExternals.cake b/cake/BuildExternals.cake index 15cc7cf5..91c98e3e 100644 --- a/cake/BuildExternals.cake +++ b/cake/BuildExternals.cake @@ -65,11 +65,7 @@ Task ("externals-genapi") // SkiaSharp // build the dummy project - DotNetBuild ("binding/SkiaSharp.Generic.sln", c => { - c.Configuration = "Release"; - c.Properties ["Platform"] = new [] { "\"Any CPU\"" }; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("binding/SkiaSharp.Generic.sln"); // generate the PCL FilePath input = "binding/SkiaSharp.Generic/bin/Release/SkiaSharp.dll"; @@ -84,11 +80,7 @@ Task ("externals-genapi") // HarfBuzz - DotNetBuild ("binding/HarfBuzzSharp.Generic.sln", c => { - c.Configuration = "Release"; - c.Properties ["Platform"] = new [] { "\"Any CPU\"" }; - c.Verbosity = VERBOSITY; - }); + RunMSBuild ("binding/HarfBuzzSharp.Generic.sln"); // generate the PCL input = "binding/HarfBuzzSharp.Generic/bin/Release/HarfBuzzSharp.dll"; @@ -226,10 +218,7 @@ Task ("externals-windows") }); // build libSkiaSharp - MSBuild ("native-builds/libSkiaSharp_windows/libSkiaSharp.sln", new MSBuildSettings { - Configuration = "Release", - PlatformTarget = (PlatformTarget)Enum.Parse(typeof(PlatformTarget), arch), - }); + RunMSBuildWithPlatformTarget ("native-builds/libSkiaSharp_windows/libSkiaSharp.sln", arch); // copy libSkiaSharp to output if (!DirectoryExists ("native-builds/lib/windows/" + dir)) CreateDirectory ("native-builds/lib/windows/" + dir); @@ -245,10 +234,7 @@ Task ("externals-windows") var buildHarfBuzzArch = new Action ((arch, dir) => { // build libHarfBuzzSharp - MSBuild ("native-builds/libHarfBuzzSharp_windows/libHarfBuzzSharp.sln", new MSBuildSettings { - Configuration = "Release", - PlatformTarget = (PlatformTarget)Enum.Parse(typeof(PlatformTarget), arch), - }); + RunMSBuildWithPlatformTarget ("native-builds/libHarfBuzzSharp_windows/libHarfBuzzSharp.sln", arch); // copy libHarfBuzzSharp to output if (!DirectoryExists ("native-builds/lib/windows/" + dir)) CreateDirectory ("native-builds/lib/windows/" + dir); @@ -293,10 +279,7 @@ Task ("externals-uwp") }); // build libSkiaSharp - MSBuild ("native-builds/libSkiaSharp_uwp/libSkiaSharp.sln", new MSBuildSettings { - Configuration = "Release", - PlatformTarget = (PlatformTarget)Enum.Parse(typeof(PlatformTarget), arch), - }); + RunMSBuildWithPlatformTarget ("native-builds/libSkiaSharp_uwp/libSkiaSharp.sln", arch); // copy libSkiaSharp to output if (!DirectoryExists ("native-builds/lib/uwp/" + dir)) CreateDirectory ("native-builds/lib/uwp/" + dir); @@ -313,10 +296,7 @@ Task ("externals-uwp") var buildHarfBuzzArch = new Action ((arch, dir) => { // build libHarfBuzzSharp - MSBuild ("native-builds/libHarfBuzzSharp_uwp/libHarfBuzzSharp.sln", new MSBuildSettings { - Configuration = "Release", - PlatformTarget = (PlatformTarget)Enum.Parse(typeof(PlatformTarget), arch), - }); + RunMSBuildWithPlatformTarget ("native-builds/libHarfBuzzSharp_uwp/libHarfBuzzSharp.sln", arch); // copy libHarfBuzzSharp to output if (!DirectoryExists ("native-builds/lib/uwp/" + dir)) CreateDirectory ("native-builds/lib/uwp/" + dir); diff --git a/cake/Utils.cake b/cake/Utils.cake index fdf61a27..f6d34d61 100644 --- a/cake/Utils.cake +++ b/cake/Utils.cake @@ -97,4 +97,18 @@ FilePath GetSNToolPath (string possible) } } return possible; -} \ No newline at end of file +} + +FilePath GetMSBuildToolPath (string possible) +{ + if (string.IsNullOrEmpty (possible)) { + if (IsRunningOnLinux ()) { + possible = "/usr/bin/msbuild"; + } else if (IsRunningOnMac ()) { + possible = "/Library/Frameworks/Mono.framework/Versions/Current/Commands/msbuild"; + } else if (IsRunningOnWindows ()) { + possible = null; // use the default + } + } + return possible; +} diff --git a/cake/UtilsManaged.cake b/cake/UtilsManaged.cake index 529ed3dc..450f7e4b 100644 --- a/cake/UtilsManaged.cake +++ b/cake/UtilsManaged.cake @@ -37,6 +37,31 @@ var RunDotNetCoreRestore = new Action ((solution) => }); }); +var RunMSBuildWithPlatform = new Action ((solution, platform) => +{ + MSBuild (solution, c => { + c.Configuration = "Release"; + c.Verbosity = VERBOSITY; + c.Properties ["Platform"] = new [] { platform }; + c.ToolPath = MSBuildToolPath; + }); +}); + +var RunMSBuildWithPlatformTarget = new Action ((solution, platformTarget) => +{ + MSBuild (solution, c => { + c.Configuration = "Release"; + c.Verbosity = VERBOSITY; + c.PlatformTarget = (PlatformTarget)Enum.Parse(typeof(PlatformTarget), platformTarget); + c.ToolPath = MSBuildToolPath; + }); +}); + +var RunMSBuild = new Action ((solution) => +{ + RunMSBuildWithPlatform (solution, "\"Any CPU\""); +}); + var PackageNuGet = new Action ((nuspecPath, outputPath) => { if (!DirectoryExists (outputPath)) {