diff --git a/Source/Engine/Platform/Mac/MacPlatform.cpp b/Source/Engine/Platform/Mac/MacPlatform.cpp index 93377e2c8..be5e2fe24 100644 --- a/Source/Engine/Platform/Mac/MacPlatform.cpp +++ b/Source/Engine/Platform/Mac/MacPlatform.cpp @@ -544,7 +544,7 @@ String MacPlatform::GetExecutableFilePath() uint32 size = PATH_MAX; String result; if (_NSGetExecutablePath(buf, &size) == 0) - result.SetUTF8(buf, size); + result.SetUTF8(buf, StringUtils::Length(buf)); return result; } diff --git a/Source/ThirdParty/mono-2.0/mono.Build.cs b/Source/ThirdParty/mono-2.0/mono.Build.cs index 25a035e33..cc9f4c405 100644 --- a/Source/ThirdParty/mono-2.0/mono.Build.cs +++ b/Source/ThirdParty/mono-2.0/mono.Build.cs @@ -92,8 +92,8 @@ public class mono : DepsModule break; case TargetPlatform.Mac: options.PublicDefinitions.Add("USE_MONO_DYNAMIC_LIB"); - options.DependencyFiles.Add(Path.Combine(depsRoot, "libmonosgen-2.0.dylib")); - options.Libraries.Add(Path.Combine(depsRoot, "libmonosgen-2.0.dylib")); + options.DependencyFiles.Add(Path.Combine(depsRoot, "libmonosgen-2.0.1.dylib")); + options.Libraries.Add(Path.Combine(depsRoot, "libmonosgen-2.0.1.dylib")); break; default: throw new InvalidPlatformException(options.Platform.Target); } diff --git a/Source/Tools/Flax.Build/Deploy/VCEnvironment.cs b/Source/Tools/Flax.Build/Deploy/VCEnvironment.cs index 4cb28f221..bf90e7a3c 100644 --- a/Source/Tools/Flax.Build/Deploy/VCEnvironment.cs +++ b/Source/Tools/Flax.Build/Deploy/VCEnvironment.cs @@ -50,6 +50,7 @@ namespace Flax.Deploy switch (Platform.BuildPlatform.Target) { case TargetPlatform.Linux: + case TargetPlatform.Mac: { // Use msbuild from Mono toolPath = UnixPlatform.Which("msbuild"); @@ -111,6 +112,7 @@ namespace Flax.Deploy switch (Platform.BuildPlatform.Target) { case TargetPlatform.Linux: + case TargetPlatform.Mac: { // Use csc from Mono toolPath = UnixPlatform.Which("csc"); diff --git a/Source/Tools/Flax.Build/Deps/Dependencies/mono.cs b/Source/Tools/Flax.Build/Deps/Dependencies/mono.cs index eb7672deb..8a0ee4b34 100644 --- a/Source/Tools/Flax.Build/Deps/Dependencies/mono.cs +++ b/Source/Tools/Flax.Build/Deps/Dependencies/mono.cs @@ -461,6 +461,13 @@ namespace Flax.Deps.Dependencies Utilities.WriteFileIfChanged(mCorePath, contents); } + private void DeployDylib(string srcPath, string dstFolder) + { + var dstPath = Path.Combine(dstFolder, Path.GetFileName(srcPath)); + Utilities.FileCopy(srcPath, dstPath); + MacPlatform.FixInstallNameId(dstPath); + } + /// public override void Build(BuildOptions options) { @@ -568,6 +575,8 @@ namespace Flax.Deps.Dependencies var dstMonoEditorLibs = Path.Combine(options.PlatformsFolder, "Editor", platform.ToString(), "Mono", "lib", "mono"); Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "4.5"), Path.Combine(dstMonoLibs, "4.5"), false, true, "*.dll"); Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "4.5"), Path.Combine(dstMonoEditorLibs, "4.5"), false, true, "*.dll"); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "gac"), Path.Combine(dstMonoLibs, "gac"), true, true, "*.dll"); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "gac"), Path.Combine(dstMonoEditorLibs, "gac"), true, true, "*.dll"); Utilities.FileCopy(Path.Combine(srcMonoLibs, "4.5", "csc.exe"), Path.Combine(dstMonoEditorLibs, "4.5", "csc.exe"), true); Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "4.5", "Facades"), Path.Combine(dstMonoEditorLibs, "4.5", "Facades"), false, true, "*.dll"); Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "4.5-api"), Path.Combine(dstMonoEditorLibs, "4.5-api"), false, true, "*.dll"); @@ -730,6 +739,44 @@ namespace Flax.Deps.Dependencies var buildDir = Path.Combine(root, "build-mac"); // Build mono + //SetupDirectory(buildDir, true); + var archName = "x86_64-apple-darwin18"; + Utilities.Run(Path.Combine(root, "autogen.sh"), string.Format("--host={0} --prefix={1} {2}", archName, buildDir, string.Join(" ", monoOptions)), null, root); + Utilities.Run("make", null, null, root, Utilities.RunOptions.None); + Utilities.Run("make", "install", null, root, Utilities.RunOptions.None); + + // Deploy binaries + var depsFolder = GetThirdPartyFolder(options, platform, TargetArchitecture.x64); + Directory.CreateDirectory(depsFolder); + DeployDylib(Path.Combine(buildDir, "lib", "libmonosgen-2.0.1.dylib"), depsFolder); + var gameLibOutput = Path.Combine(options.PlatformsFolder, "Mac", "Binaries", "Mono", "lib"); + Directory.CreateDirectory(gameLibOutput); + DeployDylib(Path.Combine(buildDir, "lib", "libMonoPosixHelper.dylib"), gameLibOutput); + DeployDylib(Path.Combine(buildDir, "lib", "libmono-btls-shared.dylib"), gameLibOutput); + DeployDylib(Path.Combine(buildDir, "lib", "libmono-native.dylib"), gameLibOutput); + var editorLibOutput = Path.Combine(options.PlatformsFolder, "Editor", "Mac", "Mono", "lib"); + Directory.CreateDirectory(editorLibOutput); + DeployDylib(Path.Combine(buildDir, "lib", "libMonoPosixHelper.dylib"), editorLibOutput); + DeployDylib(Path.Combine(buildDir, "lib", "libmono-btls-shared.dylib"), editorLibOutput); + DeployDylib(Path.Combine(buildDir, "lib", "libmono-native.dylib"), editorLibOutput); + var editoBinOutput = Path.Combine(options.PlatformsFolder, "Editor", "Mac", "Mono", "bin"); + Directory.CreateDirectory(editoBinOutput); + Utilities.FileCopy(Path.Combine(buildDir, "bin", "mono-sgen"), Path.Combine(editoBinOutput, "mono")); + Utilities.Run("strip", "mono", null, editoBinOutput, Utilities.RunOptions.None); + var srcMonoLibs = Path.Combine(buildDir, "lib", "mono"); + var dstMonoLibs = Path.Combine(options.PlatformsFolder, platform.ToString(), "Binaries", "Mono", "lib", "mono"); + var dstMonoEditorLibs = Path.Combine(options.PlatformsFolder, "Editor", platform.ToString(), "Mono", "lib", "mono"); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "4.5"), Path.Combine(dstMonoLibs, "4.5"), false, true, "*.dll"); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "4.5"), Path.Combine(dstMonoEditorLibs, "4.5"), false, true, "*.dll"); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "gac"), Path.Combine(dstMonoLibs, "gac"), true, true, "*.dll"); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "gac"), Path.Combine(dstMonoEditorLibs, "gac"), true, true, "*.dll"); + Utilities.FileCopy(Path.Combine(srcMonoLibs, "4.5", "csc.exe"), Path.Combine(dstMonoEditorLibs, "4.5", "csc.exe"), true); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "4.5", "Facades"), Path.Combine(dstMonoEditorLibs, "4.5", "Facades"), false, true, "*.dll"); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "4.5-api"), Path.Combine(dstMonoEditorLibs, "4.5-api"), false, true, "*.dll"); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "xbuild", "14.0"), Path.Combine(dstMonoEditorLibs, "xbuild", "14.0"), true, true); + Utilities.DirectoryCopy(Path.Combine(srcMonoLibs, "xbuild-frameworks", ".NETFramework", "v4.5"), Path.Combine(dstMonoEditorLibs, "xbuild-frameworks", ".NETFramework", "v4.5"), true, true); + Utilities.FilesDelete(dstMonoLibs, "*.pdb", true); + Utilities.FilesDelete(dstMonoEditorLibs, "*.pdb", true); break; } }