Support ARM64 architecture under Windows
This commit is contained in:
@@ -286,11 +286,24 @@ namespace Flax.Build
|
||||
var subdir = "Binaries/Editor/";
|
||||
switch (Platform.BuildTargetPlatform)
|
||||
{
|
||||
case TargetPlatform.Windows: return subdir + "Win64";
|
||||
case TargetPlatform.Windows:
|
||||
{
|
||||
switch (Platform.BuildTargetArchitecture)
|
||||
{
|
||||
case TargetArchitecture.x64:
|
||||
return subdir + "Win64";
|
||||
case TargetArchitecture.x86:
|
||||
return subdir + "Win32";
|
||||
case TargetArchitecture.ARM64:
|
||||
return subdir + "ARM64";
|
||||
default:
|
||||
throw new NotImplementedException($"{Platform.BuildTargetPlatform}: {Platform.BuildTargetArchitecture}");
|
||||
}
|
||||
}
|
||||
case TargetPlatform.Linux: return subdir + "Linux";
|
||||
case TargetPlatform.Mac: return subdir + "Mac";
|
||||
}
|
||||
throw new NotImplementedException();
|
||||
throw new NotImplementedException(Platform.BuildTargetPlatform.ToString());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -306,7 +319,7 @@ namespace Flax.Build
|
||||
|
||||
switch (targetPlatform)
|
||||
{
|
||||
case TargetPlatform.Windows: return targetArchitecture == TargetArchitecture.x64 || targetArchitecture == TargetArchitecture.x86;
|
||||
case TargetPlatform.Windows: return targetArchitecture == TargetArchitecture.x64 || targetArchitecture == TargetArchitecture.x86 || targetArchitecture == TargetArchitecture.ARM64;
|
||||
case TargetPlatform.XboxScarlett: return targetArchitecture == TargetArchitecture.x64;
|
||||
case TargetPlatform.XboxOne: return targetArchitecture == TargetArchitecture.x64;
|
||||
case TargetPlatform.UWP: return targetArchitecture == TargetArchitecture.x64;
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace Flax.Build.Platforms
|
||||
var outputType = project.OutputType ?? configuration.Target.OutputType;
|
||||
if (outputType != TargetOutputType.Executable && configuration.Name.StartsWith("Editor."))
|
||||
{
|
||||
var editorFolder = configuration.Architecture == TargetArchitecture.x64 ? "Win64" : "Win32";
|
||||
var editorFolder = configuration.Architecture == TargetArchitecture.x64 ? "Win64" : (configuration.Architecture == TargetArchitecture.ARM64 ? "ARM64" : "Win32");
|
||||
vcUserFileContent.AppendLine(string.Format(" <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='{0}'\">", configuration.Name));
|
||||
vcUserFileContent.AppendLine(string.Format(" <LocalDebuggerCommand>{0}\\FlaxEditor.exe</LocalDebuggerCommand>", Path.Combine(Globals.EngineRoot, "Binaries", "Editor", editorFolder, configuration.ConfigurationName)));
|
||||
vcUserFileContent.AppendLine(" <LocalDebuggerCommandArguments>-project \"$(SolutionDir)\" -skipCompile</LocalDebuggerCommandArguments>");
|
||||
@@ -108,6 +108,9 @@ namespace Flax.Build.Platforms
|
||||
case TargetArchitecture.x64:
|
||||
name = "Win64";
|
||||
break;
|
||||
case TargetArchitecture.ARM64:
|
||||
name = "ARM64";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,6 +74,12 @@ namespace Flax.Build.Platforms
|
||||
options.LinkEnv.InputLibraries.Add("ole32.lib");
|
||||
options.LinkEnv.InputLibraries.Add("oleaut32.lib");
|
||||
options.LinkEnv.InputLibraries.Add("delayimp.lib");
|
||||
|
||||
if (options.Architecture == TargetArchitecture.ARM64)
|
||||
{
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("USE_SOFT_INTRINSICS");
|
||||
options.LinkEnv.InputLibraries.Add("softintrin.lib");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -405,7 +405,7 @@ namespace Flax.Build.Platforms
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("_CRT_SECURE_NO_DEPRECATE");
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("_CRT_SECURE_NO_WARNINGS");
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("_WINDOWS");
|
||||
if (Architecture == TargetArchitecture.x64)
|
||||
if (Architecture == TargetArchitecture.x64 || Architecture == TargetArchitecture.ARM64)
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("WIN64");
|
||||
}
|
||||
|
||||
@@ -790,9 +790,11 @@ namespace Flax.Build.Platforms
|
||||
args.Add("/MACHINE:x64");
|
||||
break;
|
||||
case TargetArchitecture.ARM:
|
||||
case TargetArchitecture.ARM64:
|
||||
args.Add("/MACHINE:ARM");
|
||||
break;
|
||||
case TargetArchitecture.ARM64:
|
||||
args.Add("/MACHINE:ARM64");
|
||||
break;
|
||||
default: throw new InvalidArchitectureException(Architecture);
|
||||
}
|
||||
|
||||
|
||||
@@ -199,6 +199,26 @@ namespace Flax.Build.Projects.VisualStudio
|
||||
if (includePaths.Count != 0)
|
||||
vcProjectFileContent.AppendLine(string.Format(" <NMakeIncludeSearchPath>$(NMakeIncludeSearchPath);{0}</NMakeIncludeSearchPath>", string.Join(";", includePaths)));
|
||||
|
||||
var additionalOptions = new List<string>();
|
||||
additionalOptions.Add("$(AdditionalOptions)");
|
||||
switch (configuration.TargetBuildOptions.CompileEnv.CppVersion)
|
||||
{
|
||||
case CppVersion.Cpp14:
|
||||
additionalOptions.Add("/std:c++14");
|
||||
break;
|
||||
case CppVersion.Cpp17:
|
||||
additionalOptions.Add("/std:c++17");
|
||||
break;
|
||||
case CppVersion.Cpp20:
|
||||
additionalOptions.Add("/std:c++20");
|
||||
break;
|
||||
case CppVersion.Latest:
|
||||
additionalOptions.Add("/std:c++latest");
|
||||
break;
|
||||
}
|
||||
|
||||
vcProjectFileContent.AppendLine(string.Format(" <AdditionalOptions>{0}</AdditionalOptions>", string.Join(" ", additionalOptions)));
|
||||
|
||||
vcProjectFileContent.AppendLine(" </PropertyGroup>");
|
||||
}
|
||||
|
||||
@@ -326,34 +346,18 @@ namespace Flax.Build.Projects.VisualStudio
|
||||
vcProjectFileContent.AppendLine(" </ItemGroup>");
|
||||
vcFiltersFileContent.AppendLine(" </ItemGroup>");
|
||||
|
||||
// IntelliSense information
|
||||
|
||||
var additionalOptions = new List<string>();
|
||||
switch (project.Configurations[0].TargetBuildOptions.CompileEnv.CppVersion)
|
||||
{
|
||||
case CppVersion.Cpp14:
|
||||
additionalOptions.Add("/std:c++14");
|
||||
break;
|
||||
case CppVersion.Cpp17:
|
||||
additionalOptions.Add("/std:c++17");
|
||||
break;
|
||||
case CppVersion.Cpp20:
|
||||
additionalOptions.Add("/std:c++20");
|
||||
break;
|
||||
case CppVersion.Latest:
|
||||
additionalOptions.Add("/std:c++latest");
|
||||
break;
|
||||
// IntelliSense information
|
||||
vcProjectFileContent.AppendLine(" <PropertyGroup>");
|
||||
vcProjectFileContent.AppendLine(string.Format(" <NMakePreprocessorDefinitions>$(NMakePreprocessorDefinitions){0}</NMakePreprocessorDefinitions>", (project.Defines.Count > 0 ? (";" + string.Join(";", project.Defines)) : "")));
|
||||
vcProjectFileContent.AppendLine(string.Format(" <NMakeIncludeSearchPath>$(NMakeIncludeSearchPath){0}</NMakeIncludeSearchPath>", (project.SearchPaths.Length > 0 ? (";" + string.Join(";", project.SearchPaths)) : "")));
|
||||
vcProjectFileContent.AppendLine(" <NMakeForcedIncludes>$(NMakeForcedIncludes)</NMakeForcedIncludes>");
|
||||
vcProjectFileContent.AppendLine(" <NMakeAssemblySearchPath>$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>");
|
||||
vcProjectFileContent.AppendLine(" <NMakeForcedUsingAssemblies>$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>");
|
||||
vcProjectFileContent.AppendLine(" <AdditionalOptions>$(AdditionalOptions)</AdditionalOptions>");
|
||||
vcProjectFileContent.AppendLine(" </PropertyGroup>");
|
||||
}
|
||||
|
||||
vcProjectFileContent.AppendLine(" <PropertyGroup>");
|
||||
vcProjectFileContent.AppendLine(string.Format(" <NMakePreprocessorDefinitions>$(NMakePreprocessorDefinitions){0}</NMakePreprocessorDefinitions>", (project.Defines.Count > 0 ? (";" + string.Join(";", project.Defines)) : "")));
|
||||
vcProjectFileContent.AppendLine(string.Format(" <NMakeIncludeSearchPath>$(NMakeIncludeSearchPath){0}</NMakeIncludeSearchPath>", (project.SearchPaths.Length > 0 ? (";" + string.Join(";", project.SearchPaths)) : "")));
|
||||
vcProjectFileContent.AppendLine(" <NMakeForcedIncludes>$(NMakeForcedIncludes)</NMakeForcedIncludes>");
|
||||
vcProjectFileContent.AppendLine(" <NMakeAssemblySearchPath>$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>");
|
||||
vcProjectFileContent.AppendLine(" <NMakeForcedUsingAssemblies>$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>");
|
||||
vcProjectFileContent.AppendLine(string.Format(" <AdditionalOptions>{0}</AdditionalOptions>", string.Join(" ", additionalOptions)));
|
||||
vcProjectFileContent.AppendLine(" </PropertyGroup>");
|
||||
|
||||
foreach (var platform in platforms)
|
||||
{
|
||||
if (platform is IVisualStudioProjectCustomizer customizer)
|
||||
|
||||
Reference in New Issue
Block a user