diff --git a/Source/Editor/Cooker/CookingData.h b/Source/Editor/Cooker/CookingData.h
index bf6b0123a..d155380e6 100644
--- a/Source/Editor/Cooker/CookingData.h
+++ b/Source/Editor/Cooker/CookingData.h
@@ -115,6 +115,12 @@ API_ENUM() enum class BuildPlatform
///
API_ENUM(Attributes="EditorDisplay(null, \"Mac x64\")")
MacOSx64 = 12,
+
+ ///
+ /// MacOS (ARM64 Apple Silicon)
+ ///
+ API_ENUM(Attributes="EditorDisplay(null, \"Mac ARM64\")")
+ MacOSARM64 = 13,
};
extern FLAXENGINE_API const Char* ToString(const BuildPlatform platform);
diff --git a/Source/Editor/Cooker/GameCooker.cpp b/Source/Editor/Cooker/GameCooker.cpp
index 15ea13153..84b4333a9 100644
--- a/Source/Editor/Cooker/GameCooker.cpp
+++ b/Source/Editor/Cooker/GameCooker.cpp
@@ -139,6 +139,8 @@ const Char* ToString(const BuildPlatform platform)
return TEXT("PlayStation 5");
case BuildPlatform::MacOSx64:
return TEXT("Mac x64");
+ case BuildPlatform::MacOSARM64:
+ return TEXT("Mac ARM64");
default:
return TEXT("?");
}
@@ -340,6 +342,9 @@ PlatformTools* GameCooker::GetTools(BuildPlatform platform)
case BuildPlatform::MacOSx64:
result = New(ArchitectureType::x64);
break;
+ case BuildPlatform::MacOSARM64:
+ result = New(ArchitectureType::ARM64);
+ break;
#endif
}
Tools.Add(platform, result);
@@ -470,7 +475,7 @@ void GameCooker::GetCurrentPlatform(PlatformType& platform, BuildPlatform& build
buildPlatform = BuildPlatform::PS5;
break;
case PlatformType::Mac:
- buildPlatform = BuildPlatform::MacOSx64;
+ buildPlatform = PLATFORM_ARCH_ARM ? BuildPlatform::AndroidARM64 : BuildPlatform::MacOSx64;
break;
default: ;
}
diff --git a/Source/Editor/Cooker/GameCooker.cs b/Source/Editor/Cooker/GameCooker.cs
index 5ffa5fd25..aa7a51f24 100644
--- a/Source/Editor/Cooker/GameCooker.cs
+++ b/Source/Editor/Cooker/GameCooker.cs
@@ -103,6 +103,7 @@ namespace FlaxEditor
case BuildPlatform.AndroidARM64: return PlatformType.Android;
case BuildPlatform.XboxScarlett: return PlatformType.XboxScarlett;
case BuildPlatform.Switch: return PlatformType.Switch;
+ case BuildPlatform.MacOSARM64:
case BuildPlatform.MacOSx64: return PlatformType.Mac;
default: throw new ArgumentOutOfRangeException(nameof(buildPlatform), buildPlatform, null);
}
diff --git a/Source/Editor/Cooker/Platform/Mac/MacPlatformTools.cpp b/Source/Editor/Cooker/Platform/Mac/MacPlatformTools.cpp
index 56b1c8a4d..f6a4658a7 100644
--- a/Source/Editor/Cooker/Platform/Mac/MacPlatformTools.cpp
+++ b/Source/Editor/Cooker/Platform/Mac/MacPlatformTools.cpp
@@ -201,7 +201,15 @@ bool MacPlatformTools::OnPostProcess(CookingData& data)
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("LSMinimumSystemVersionByArchitecture"));
xml_node LSMinimumSystemVersionByArchitecture = dict.append_child(PUGIXML_TEXT("dict"));
- LSMinimumSystemVersionByArchitecture.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("x86_64"));
+ switch (_arch)
+ {
+ case ArchitectureType::x64:
+ LSMinimumSystemVersionByArchitecture.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("x86_64"));
+ break;
+ case ArchitectureType::ARM64:
+ LSMinimumSystemVersionByArchitecture.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("arm64"));
+ break;
+ }
LSMinimumSystemVersionByArchitecture.append_child(PUGIXML_TEXT("string")).set_child_value(PUGIXML_TEXT("10.14"));
#undef ADD_ENTRY
diff --git a/Source/Editor/Cooker/Steps/CompileScriptsStep.cpp b/Source/Editor/Cooker/Steps/CompileScriptsStep.cpp
index ae865e14a..10b7eebad 100644
--- a/Source/Editor/Cooker/Steps/CompileScriptsStep.cpp
+++ b/Source/Editor/Cooker/Steps/CompileScriptsStep.cpp
@@ -204,6 +204,10 @@ bool CompileScriptsStep::Perform(CookingData& data)
platform = TEXT("Mac");
architecture = TEXT("x64");
break;
+ case BuildPlatform::MacOSARM64:
+ platform = TEXT("Mac");
+ architecture = TEXT("ARM64");
+ break;
default:
LOG(Error, "Unknown or unsupported build platform.");
return true;
diff --git a/Source/Editor/Cooker/Steps/CookAssetsStep.cpp b/Source/Editor/Cooker/Steps/CookAssetsStep.cpp
index 92ebf39f6..e0b11963b 100644
--- a/Source/Editor/Cooker/Steps/CookAssetsStep.cpp
+++ b/Source/Editor/Cooker/Steps/CookAssetsStep.cpp
@@ -528,6 +528,7 @@ bool ProcessShaderBase(CookAssetsStep::AssetCookData& data, ShaderAssetBase* ass
#endif
#if PLATFORM_TOOLS_MAC
case BuildPlatform::MacOSx64:
+ case BuildPlatform::MacOSARM64:
{
const char* platformDefineName = "PLATFORM_MAC";
COMPILE_PROFILE(Vulkan_SM5, SHADER_FILE_CHUNK_INTERNAL_VULKAN_SM5_CACHE);
diff --git a/Source/Editor/Scripting/ScriptsBuilder.cpp b/Source/Editor/Scripting/ScriptsBuilder.cpp
index 0ec002cc2..a9dda1ae1 100644
--- a/Source/Editor/Scripting/ScriptsBuilder.cpp
+++ b/Source/Editor/Scripting/ScriptsBuilder.cpp
@@ -387,6 +387,8 @@ void ScriptsBuilder::GetBinariesConfiguration(const Char*& target, const Char*&
architecture = TEXT("x64");
#elif PLATFORM_ARCH_X86
architecture = TEXT("x86");
+#elif PLATFORM_ARCH_ARM64
+ architecture = TEXT("arm64");
#else
#error "Unknown architecture"
#endif
diff --git a/Source/Engine/Platform/Mac/MacDefines.h b/Source/Engine/Platform/Mac/MacDefines.h
index e1f57b80b..a10dda524 100644
--- a/Source/Engine/Platform/Mac/MacDefines.h
+++ b/Source/Engine/Platform/Mac/MacDefines.h
@@ -7,10 +7,17 @@
#include "../Unix/UnixDefines.h"
// Platform description
+#define PLATFORM_TYPE PlatformType::Mac
+#if __aarch64__
+#define PLATFORM_64BITS 1
+#define PLATFORM_ARCH_ARM64 1
+#define PLATFORM_ARCH ArchitectureType::ARM64
+#else
+sss;
#define PLATFORM_64BITS 1
#define PLATFORM_ARCH_X64 1
#define PLATFORM_ARCH ArchitectureType::x64
-#define PLATFORM_TYPE PlatformType::Mac
+#endif
#define PLATFORM_DESKTOP 1
#define PLATFORM_CACHE_LINE_SIZE 128
#define PLATFORM_HAS_HEADLESS_MODE 1
diff --git a/Source/FlaxEditor.Build.cs b/Source/FlaxEditor.Build.cs
index ed2b0e960..85facb2a6 100644
--- a/Source/FlaxEditor.Build.cs
+++ b/Source/FlaxEditor.Build.cs
@@ -28,6 +28,7 @@ public class FlaxEditor : EngineTarget
Architectures = new[]
{
TargetArchitecture.x64,
+ TargetArchitecture.ARM64,
};
GlobalDefinitions.Add("USE_EDITOR");
Win32ResourceFile = Path.Combine(Globals.EngineRoot, "Source", "FlaxEditor.rc");
diff --git a/Source/Tools/Flax.Build/Build/Platform.cs b/Source/Tools/Flax.Build/Build/Platform.cs
index 2bf388224..fd51d2802 100644
--- a/Source/Tools/Flax.Build/Build/Platform.cs
+++ b/Source/Tools/Flax.Build/Build/Platform.cs
@@ -314,7 +314,7 @@ namespace Flax.Build
case TargetPlatform.PS5: return targetArchitecture == TargetArchitecture.x64;
case TargetPlatform.Android: return targetArchitecture == TargetArchitecture.ARM64;
case TargetPlatform.Switch: return targetArchitecture == TargetArchitecture.ARM64;
- case TargetPlatform.Mac: return targetArchitecture == TargetArchitecture.x64;
+ case TargetPlatform.Mac: return targetArchitecture == TargetArchitecture.ARM64 || targetArchitecture == TargetArchitecture.x64;
default: return false;
}
}
diff --git a/Source/Tools/Flax.Build/Platforms/Mac/MacToolchain.cs b/Source/Tools/Flax.Build/Platforms/Mac/MacToolchain.cs
index bc6482fff..41ddb2d60 100644
--- a/Source/Tools/Flax.Build/Platforms/Mac/MacToolchain.cs
+++ b/Source/Tools/Flax.Build/Platforms/Mac/MacToolchain.cs
@@ -131,10 +131,23 @@ namespace Flax.Build.Platforms
commonArgs.Add("-pipe");
commonArgs.Add("-x");
commonArgs.Add("objective-c++");
- commonArgs.Add("-std=c++14");
commonArgs.Add("-stdlib=libc++");
AddArgsCommon(options, commonArgs);
+ switch (compileEnvironment.CppVersion)
+ {
+ case CppVersion.Cpp14:
+ commonArgs.Add("-std=c++14");
+ break;
+ case CppVersion.Cpp17:
+ case CppVersion.Latest:
+ commonArgs.Add("-std=c++17");
+ break;
+ case CppVersion.Cpp20:
+ commonArgs.Add("-std=c++20");
+ break;
+ }
+
switch (Architecture)
{
case TargetArchitecture.x64:
diff --git a/Source/Tools/Flax.Build/Platforms/Unix/UnixToolchain.cs b/Source/Tools/Flax.Build/Platforms/Unix/UnixToolchain.cs
index 6bbb8707f..b137fb650 100644
--- a/Source/Tools/Flax.Build/Platforms/Unix/UnixToolchain.cs
+++ b/Source/Tools/Flax.Build/Platforms/Unix/UnixToolchain.cs
@@ -226,6 +226,7 @@ namespace Flax.Build.Platforms
switch (architecture)
{
case TargetArchitecture.x64: return "x86_64-apple-macos" + Configuration.MacOSXMinVer;
+ case TargetArchitecture.ARM64: return "aarch64-apple-macos" + Configuration.MacOSXMinVer;
default: throw new InvalidArchitectureException(architecture);
}
default: throw new InvalidPlatformException(platform);