Unify bits, arch, and android_arch into env["arch"]
Fully removes the `bits` option and adapts the code that relied on it. Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
This commit is contained in:
parent
8916949b50
commit
27b0f18275
|
@ -38,19 +38,19 @@ jobs:
|
||||||
- name: Setup python and scons
|
- name: Setup python and scons
|
||||||
uses: ./.github/actions/godot-deps
|
uses: ./.github/actions/godot-deps
|
||||||
|
|
||||||
- name: Compilation (armv7)
|
- name: Compilation (arm32)
|
||||||
uses: ./.github/actions/godot-build
|
uses: ./.github/actions/godot-build
|
||||||
with:
|
with:
|
||||||
sconsflags: ${{ env.SCONSFLAGS }} android_arch=armv7
|
sconsflags: ${{ env.SCONSFLAGS }} arch=arm32
|
||||||
platform: android
|
platform: android
|
||||||
target: release
|
target: release
|
||||||
tools: false
|
tools: false
|
||||||
tests: false
|
tests: false
|
||||||
|
|
||||||
- name: Compilation (arm64v8)
|
- name: Compilation (arm64)
|
||||||
uses: ./.github/actions/godot-build
|
uses: ./.github/actions/godot-build
|
||||||
with:
|
with:
|
||||||
sconsflags: ${{ env.SCONSFLAGS }} android_arch=arm64v8
|
sconsflags: ${{ env.SCONSFLAGS }} arch=arm64
|
||||||
platform: android
|
platform: android
|
||||||
target: release
|
target: release
|
||||||
tools: false
|
tools: false
|
||||||
|
|
|
@ -26,7 +26,7 @@ jobs:
|
||||||
- name: Setup python and scons
|
- name: Setup python and scons
|
||||||
uses: ./.github/actions/godot-deps
|
uses: ./.github/actions/godot-deps
|
||||||
|
|
||||||
- name: Compilation (arm64v8)
|
- name: Compilation (arm64)
|
||||||
uses: ./.github/actions/godot-build
|
uses: ./.github/actions/godot-build
|
||||||
with:
|
with:
|
||||||
sconsflags: ${{ env.SCONSFLAGS }}
|
sconsflags: ${{ env.SCONSFLAGS }}
|
||||||
|
|
|
@ -28,7 +28,7 @@ jobs:
|
||||||
tests: false # Disabled due freeze caused by mix Mono build and CI
|
tests: false # Disabled due freeze caused by mix Mono build and CI
|
||||||
sconsflags: module_mono_enabled=yes
|
sconsflags: module_mono_enabled=yes
|
||||||
doc-test: true
|
doc-test: true
|
||||||
bin: "./bin/godot.linuxbsd.opt.tools.64.mono"
|
bin: "./bin/godot.linuxbsd.opt.tools.x86_64.mono"
|
||||||
build-mono: true
|
build-mono: true
|
||||||
proj-conv: true
|
proj-conv: true
|
||||||
artifact: true
|
artifact: true
|
||||||
|
@ -43,7 +43,7 @@ jobs:
|
||||||
# Can be turned off for PRs that intentionally break compat with godot-cpp,
|
# Can be turned off for PRs that intentionally break compat with godot-cpp,
|
||||||
# until both the upstream PR and the matching godot-cpp changes are merged.
|
# until both the upstream PR and the matching godot-cpp changes are merged.
|
||||||
godot-cpp-test: true
|
godot-cpp-test: true
|
||||||
bin: "./bin/godot.linuxbsd.double.tools.64.san"
|
bin: "./bin/godot.linuxbsd.double.tools.x86_64.san"
|
||||||
build-mono: false
|
build-mono: false
|
||||||
# Skip 2GiB artifact speeding up action.
|
# Skip 2GiB artifact speeding up action.
|
||||||
artifact: false
|
artifact: false
|
||||||
|
@ -54,7 +54,7 @@ jobs:
|
||||||
tools: true
|
tools: true
|
||||||
tests: true
|
tests: true
|
||||||
sconsflags: use_asan=yes use_ubsan=yes use_llvm=yes linker=lld
|
sconsflags: use_asan=yes use_ubsan=yes use_llvm=yes linker=lld
|
||||||
bin: "./bin/godot.linuxbsd.tools.64.llvm.san"
|
bin: "./bin/godot.linuxbsd.tools.x86_64.llvm.san"
|
||||||
build-mono: false
|
build-mono: false
|
||||||
# Skip 2GiB artifact speeding up action.
|
# Skip 2GiB artifact speeding up action.
|
||||||
artifact: false
|
artifact: false
|
||||||
|
|
|
@ -24,7 +24,7 @@ jobs:
|
||||||
target: release_debug
|
target: release_debug
|
||||||
tools: true
|
tools: true
|
||||||
tests: true
|
tests: true
|
||||||
bin: "./bin/godot.macos.opt.tools.64"
|
bin: "./bin/godot.macos.opt.tools.x86_64"
|
||||||
|
|
||||||
- name: Template (target=release, tools=no)
|
- name: Template (target=release, tools=no)
|
||||||
cache-name: macos-template
|
cache-name: macos-template
|
||||||
|
|
|
@ -29,7 +29,7 @@ jobs:
|
||||||
tests: true
|
tests: true
|
||||||
# Skip debug symbols, they're way too big with MSVC.
|
# Skip debug symbols, they're way too big with MSVC.
|
||||||
sconsflags: debug_symbols=no
|
sconsflags: debug_symbols=no
|
||||||
bin: "./bin/godot.windows.opt.tools.64.exe"
|
bin: "./bin/godot.windows.opt.tools.x86_64.exe"
|
||||||
|
|
||||||
- name: Template (target=release, tools=no)
|
- name: Template (target=release, tools=no)
|
||||||
cache-name: windows-template
|
cache-name: windows-template
|
||||||
|
|
|
@ -37,7 +37,7 @@ Godot runs on a large variety of platforms and operating systems and devices.
|
||||||
|
|
||||||
For bugs that are likely OS-specific and/or graphics-related, please also specify:
|
For bugs that are likely OS-specific and/or graphics-related, please also specify:
|
||||||
|
|
||||||
- Device (CPU model including architecture, e.g. x86, x86_64, ARM, etc.)
|
- Device (CPU model including architecture, e.g. x86_64, arm64, etc.)
|
||||||
- GPU model (and the driver version in use if you know it)
|
- GPU model (and the driver version in use if you know it)
|
||||||
|
|
||||||
**Bug reports not including the required information may be closed at the
|
**Bug reports not including the required information may be closed at the
|
||||||
|
|
21
SConstruct
21
SConstruct
|
@ -55,6 +55,7 @@ _helper_module("modules.modules_builders", "modules/modules_builders.py")
|
||||||
import methods
|
import methods
|
||||||
import glsl_builders
|
import glsl_builders
|
||||||
import gles3_builders
|
import gles3_builders
|
||||||
|
from platform_methods import architectures, architecture_aliases
|
||||||
|
|
||||||
if methods.get_cmdline_bool("tools", True):
|
if methods.get_cmdline_bool("tools", True):
|
||||||
_helper_module("editor.editor_builders", "editor/editor_builders.py")
|
_helper_module("editor.editor_builders", "editor/editor_builders.py")
|
||||||
|
@ -161,12 +162,11 @@ if profile:
|
||||||
opts = Variables(customs, ARGUMENTS)
|
opts = Variables(customs, ARGUMENTS)
|
||||||
|
|
||||||
# Target build options
|
# Target build options
|
||||||
opts.Add("p", "Platform (alias for 'platform')", "")
|
|
||||||
opts.Add("platform", "Target platform (%s)" % ("|".join(platform_list),), "")
|
opts.Add("platform", "Target platform (%s)" % ("|".join(platform_list),), "")
|
||||||
|
opts.Add("p", "Platform (alias for 'platform')", "")
|
||||||
opts.Add(BoolVariable("tools", "Build the tools (a.k.a. the Godot editor)", True))
|
opts.Add(BoolVariable("tools", "Build the tools (a.k.a. the Godot editor)", True))
|
||||||
opts.Add(EnumVariable("target", "Compilation target", "debug", ("debug", "release_debug", "release")))
|
opts.Add(EnumVariable("target", "Compilation target", "debug", ("debug", "release_debug", "release")))
|
||||||
opts.Add("arch", "Platform-dependent architecture (arm/arm64/x86/x64/mips/...)", "")
|
opts.Add(EnumVariable("arch", "CPU architecture", "auto", ["auto"] + architectures, architecture_aliases))
|
||||||
opts.Add(EnumVariable("bits", "Target platform bits", "default", ("default", "32", "64")))
|
|
||||||
opts.Add(EnumVariable("float", "Floating-point precision", "default", ("default", "32", "64")))
|
opts.Add(EnumVariable("float", "Floating-point precision", "default", ("default", "32", "64")))
|
||||||
opts.Add(EnumVariable("optimize", "Optimization type", "speed", ("speed", "size", "none")))
|
opts.Add(EnumVariable("optimize", "Optimization type", "speed", ("speed", "size", "none")))
|
||||||
opts.Add(BoolVariable("production", "Set defaults to build Godot for use in production", False))
|
opts.Add(BoolVariable("production", "Set defaults to build Godot for use in production", False))
|
||||||
|
@ -502,12 +502,17 @@ if selected_platform in platform_list:
|
||||||
# Platform specific flags
|
# Platform specific flags
|
||||||
flag_list = platform_flags[selected_platform]
|
flag_list = platform_flags[selected_platform]
|
||||||
for f in flag_list:
|
for f in flag_list:
|
||||||
if not (f[0] in ARGUMENTS): # allow command line to override platform flags
|
if not (f[0] in ARGUMENTS) or ARGUMENTS[f[0]] == "auto": # Allow command line to override platform flags
|
||||||
env[f[0]] = f[1]
|
env[f[0]] = f[1]
|
||||||
|
|
||||||
# Must happen after the flags' definition, so that they can be used by platform detect
|
# Must happen after the flags' definition, so that they can be used by platform detect
|
||||||
detect.configure(env)
|
detect.configure(env)
|
||||||
|
|
||||||
|
print(
|
||||||
|
'Building for platform "%s", architecture "%s", %s, target "%s".'
|
||||||
|
% (selected_platform, env["arch"], "editor" if env["tools"] else "template", env["target"])
|
||||||
|
)
|
||||||
|
|
||||||
# Set our C and C++ standard requirements.
|
# Set our C and C++ standard requirements.
|
||||||
# C++17 is required as we need guaranteed copy elision as per GH-36436.
|
# C++17 is required as we need guaranteed copy elision as per GH-36436.
|
||||||
# Prepending to make it possible to override.
|
# Prepending to make it possible to override.
|
||||||
|
@ -693,13 +698,7 @@ if selected_platform in platform_list:
|
||||||
)
|
)
|
||||||
suffix += ".debug"
|
suffix += ".debug"
|
||||||
|
|
||||||
if env["arch"] != "":
|
suffix += "." + env["arch"]
|
||||||
suffix += "." + env["arch"]
|
|
||||||
elif env["bits"] == "32":
|
|
||||||
suffix += ".32"
|
|
||||||
elif env["bits"] == "64":
|
|
||||||
suffix += ".64"
|
|
||||||
|
|
||||||
suffix += env.extra_suffix
|
suffix += env.extra_suffix
|
||||||
|
|
||||||
sys.path.remove(tmppath)
|
sys.path.remove(tmppath)
|
||||||
|
|
|
@ -37,7 +37,7 @@ if env["builtin_libpng"]:
|
||||||
import os
|
import os
|
||||||
|
|
||||||
# Enable ARM NEON instructions on 32-bit Android to compile more optimized code.
|
# Enable ARM NEON instructions on 32-bit Android to compile more optimized code.
|
||||||
use_neon = "android_arch" in env and env["android_arch"] == "armv7" and os.name != "nt"
|
use_neon = env["platform"] == "android" and env["arch"] == "arm32" and os.name != "nt"
|
||||||
if use_neon:
|
if use_neon:
|
||||||
env_png.Append(CPPDEFINES=[("PNG_ARM_NEON_OPT", 2)])
|
env_png.Append(CPPDEFINES=[("PNG_ARM_NEON_OPT", 2)])
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -540,7 +540,7 @@ def detect_visual_c_compiler_version(tools_env):
|
||||||
# and not scons setup environment (env)... so make sure you call the right environment on it or it will fail to detect
|
# and not scons setup environment (env)... so make sure you call the right environment on it or it will fail to detect
|
||||||
# the proper vc version that will be called
|
# the proper vc version that will be called
|
||||||
|
|
||||||
# There is no flag to give to visual c compilers to set the architecture, i.e. scons bits argument (32,64,ARM etc)
|
# There is no flag to give to visual c compilers to set the architecture, i.e. scons arch argument (x86_32, x86_64, arm64, etc.).
|
||||||
# There are many different cl.exe files that are run, and each one compiles & links to a different architecture
|
# There are many different cl.exe files that are run, and each one compiles & links to a different architecture
|
||||||
# As far as I know, the only way to figure out what compiler will be run when Scons calls cl.exe via Program()
|
# As far as I know, the only way to figure out what compiler will be run when Scons calls cl.exe via Program()
|
||||||
# is to check the PATH variable and figure out which one will be called first. Code below does that and returns:
|
# is to check the PATH variable and figure out which one will be called first. Code below does that and returns:
|
||||||
|
|
|
@ -5,14 +5,7 @@ def can_build(env, platform):
|
||||||
# as doing lightmap generation and denoising on Android or HTML5
|
# as doing lightmap generation and denoising on Android or HTML5
|
||||||
# would be a bit far-fetched.
|
# would be a bit far-fetched.
|
||||||
desktop_platforms = ["linuxbsd", "macos", "windows"]
|
desktop_platforms = ["linuxbsd", "macos", "windows"]
|
||||||
supported_arch = env["bits"] == "64"
|
return env["tools"] and platform in desktop_platforms and env["arch"] == "x86_64"
|
||||||
if env["arch"] == "arm64":
|
|
||||||
supported_arch = False
|
|
||||||
if env["arch"].startswith("ppc"):
|
|
||||||
supported_arch = False
|
|
||||||
if env["arch"].startswith("rv"):
|
|
||||||
supported_arch = False
|
|
||||||
return env["tools"] and platform in desktop_platforms and supported_arch
|
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
|
|
@ -18,7 +18,7 @@ def configure(env, env_mono):
|
||||||
# is_android = env["platform"] == "android"
|
# is_android = env["platform"] == "android"
|
||||||
# is_javascript = env["platform"] == "javascript"
|
# is_javascript = env["platform"] == "javascript"
|
||||||
# is_ios = env["platform"] == "ios"
|
# is_ios = env["platform"] == "ios"
|
||||||
# is_ios_sim = is_ios and env["arch"] in ["x86", "x86_64"]
|
# is_ios_sim = is_ios and env["arch"] in ["x86_32", "x86_64"]
|
||||||
|
|
||||||
tools_enabled = env["tools"]
|
tools_enabled = env["tools"]
|
||||||
|
|
||||||
|
@ -128,26 +128,22 @@ def find_dotnet_app_host_dir(env):
|
||||||
|
|
||||||
|
|
||||||
def determine_runtime_identifier(env):
|
def determine_runtime_identifier(env):
|
||||||
|
# The keys are Godot's names, the values are the Microsoft's names.
|
||||||
|
# List: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
|
||||||
names_map = {
|
names_map = {
|
||||||
"windows": "win",
|
"windows": "win",
|
||||||
"macos": "osx",
|
"macos": "osx",
|
||||||
"linuxbsd": "linux",
|
"linuxbsd": "linux",
|
||||||
}
|
}
|
||||||
|
arch_map = {
|
||||||
# .NET RID architectures: x86, x64, arm, or arm64
|
"x86_64": "x64",
|
||||||
|
"x86_32": "x86",
|
||||||
|
"arm64": "arm64",
|
||||||
|
"arm32": "arm",
|
||||||
|
}
|
||||||
platform = env["platform"]
|
platform = env["platform"]
|
||||||
|
|
||||||
if is_desktop(platform):
|
if is_desktop(platform):
|
||||||
if env["arch"] in ["arm", "arm32"]:
|
return "%s-%s" % (names_map[platform], arch_map[env["arch"]])
|
||||||
rid = "arm"
|
|
||||||
elif env["arch"] == "arm64":
|
|
||||||
rid = "arm64"
|
|
||||||
else:
|
|
||||||
bits = env["bits"]
|
|
||||||
bit_arch_map = {"64": "x64", "32": "x86"}
|
|
||||||
rid = bit_arch_map[bits]
|
|
||||||
return "%s-%s" % (names_map[platform], rid)
|
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
|
|
@ -75,8 +75,17 @@ namespace GodotTools.Export
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string bits = features.Contains("64") ? "64" : features.Contains("32") ? "32" : null;
|
string arch = "";
|
||||||
CompileAssembliesForDesktop(exporter, platform, isDebug, bits, aotOpts, aotTempDir, outputDataDir, assembliesPrepared, bclDir);
|
if (features.Contains("x86_64")) {
|
||||||
|
arch = "x86_64";
|
||||||
|
} else if (features.Contains("x86_32")) {
|
||||||
|
arch = "x86_32";
|
||||||
|
} else if (features.Contains("arm64")) {
|
||||||
|
arch = "arm64";
|
||||||
|
} else if (features.Contains("arm32")) {
|
||||||
|
arch = "arm32";
|
||||||
|
}
|
||||||
|
CompileAssembliesForDesktop(exporter, platform, isDebug, arch, aotOpts, aotTempDir, outputDataDir, assembliesPrepared, bclDir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +121,7 @@ namespace GodotTools.Export
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CompileAssembliesForDesktop(ExportPlugin exporter, string platform, bool isDebug, string bits, AotOptions aotOpts, string aotTempDir, string outputDataDir, IDictionary<string, string> assemblies, string bclDir)
|
public static void CompileAssembliesForDesktop(ExportPlugin exporter, string platform, bool isDebug, string arch, AotOptions aotOpts, string aotTempDir, string outputDataDir, IDictionary<string, string> assemblies, string bclDir)
|
||||||
{
|
{
|
||||||
foreach (var assembly in assemblies)
|
foreach (var assembly in assemblies)
|
||||||
{
|
{
|
||||||
|
@ -126,9 +135,9 @@ namespace GodotTools.Export
|
||||||
string outputFileName = assemblyName + ".dll" + outputFileExtension;
|
string outputFileName = assemblyName + ".dll" + outputFileExtension;
|
||||||
string tempOutputFilePath = Path.Combine(aotTempDir, outputFileName);
|
string tempOutputFilePath = Path.Combine(aotTempDir, outputFileName);
|
||||||
|
|
||||||
var compilerArgs = GetAotCompilerArgs(platform, isDebug, bits, aotOpts, assemblyPath, tempOutputFilePath);
|
var compilerArgs = GetAotCompilerArgs(platform, isDebug, arch, aotOpts, assemblyPath, tempOutputFilePath);
|
||||||
|
|
||||||
string compilerDirPath = GetMonoCrossDesktopDirName(platform, bits);
|
string compilerDirPath = GetMonoCrossDesktopDirName(platform, arch);
|
||||||
|
|
||||||
ExecuteCompiler(FindCrossCompiler(compilerDirPath), compilerArgs, bclDir);
|
ExecuteCompiler(FindCrossCompiler(compilerDirPath), compilerArgs, bclDir);
|
||||||
|
|
||||||
|
@ -432,9 +441,9 @@ MONO_AOT_MODE_LAST = 1000,
|
||||||
|
|
||||||
var androidToolPrefixes = new Dictionary<string, string>
|
var androidToolPrefixes = new Dictionary<string, string>
|
||||||
{
|
{
|
||||||
["armeabi-v7a"] = "arm-linux-androideabi-",
|
["arm32"] = "arm-linux-androideabi-",
|
||||||
["arm64-v8a"] = "aarch64-linux-android-",
|
["arm64"] = "aarch64-linux-android-",
|
||||||
["x86"] = "i686-linux-android-",
|
["x86_32"] = "i686-linux-android-",
|
||||||
["x86_64"] = "x86_64-linux-android-"
|
["x86_64"] = "x86_64-linux-android-"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -547,9 +556,9 @@ MONO_AOT_MODE_LAST = 1000,
|
||||||
{
|
{
|
||||||
var androidAbis = new[]
|
var androidAbis = new[]
|
||||||
{
|
{
|
||||||
"armeabi-v7a",
|
"arm32",
|
||||||
"arm64-v8a",
|
"arm64",
|
||||||
"x86",
|
"x86_32",
|
||||||
"x86_64"
|
"x86_64"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -560,9 +569,9 @@ MONO_AOT_MODE_LAST = 1000,
|
||||||
{
|
{
|
||||||
var abiArchs = new Dictionary<string, string>
|
var abiArchs = new Dictionary<string, string>
|
||||||
{
|
{
|
||||||
["armeabi-v7a"] = "armv7",
|
["arm32"] = "armv7",
|
||||||
["arm64-v8a"] = "aarch64-v8a",
|
["arm64"] = "aarch64-v8a",
|
||||||
["x86"] = "i686",
|
["x86_32"] = "i686",
|
||||||
["x86_64"] = "x86_64"
|
["x86_64"] = "x86_64"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -571,30 +580,25 @@ MONO_AOT_MODE_LAST = 1000,
|
||||||
return $"{arch}-linux-android";
|
return $"{arch}-linux-android";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetMonoCrossDesktopDirName(string platform, string bits)
|
private static string GetMonoCrossDesktopDirName(string platform, string arch)
|
||||||
{
|
{
|
||||||
switch (platform)
|
switch (platform)
|
||||||
{
|
{
|
||||||
case OS.Platforms.Windows:
|
case OS.Platforms.Windows:
|
||||||
case OS.Platforms.UWP:
|
case OS.Platforms.UWP:
|
||||||
{
|
{
|
||||||
string arch = bits == "64" ? "x86_64" : "i686";
|
|
||||||
return $"windows-{arch}";
|
return $"windows-{arch}";
|
||||||
}
|
}
|
||||||
case OS.Platforms.MacOS:
|
case OS.Platforms.MacOS:
|
||||||
{
|
{
|
||||||
Debug.Assert(bits == null || bits == "64");
|
|
||||||
string arch = "x86_64";
|
|
||||||
return $"{platform}-{arch}";
|
return $"{platform}-{arch}";
|
||||||
}
|
}
|
||||||
case OS.Platforms.LinuxBSD:
|
case OS.Platforms.LinuxBSD:
|
||||||
{
|
{
|
||||||
string arch = bits == "64" ? "x86_64" : "i686";
|
|
||||||
return $"linux-{arch}";
|
return $"linux-{arch}";
|
||||||
}
|
}
|
||||||
case OS.Platforms.Haiku:
|
case OS.Platforms.Haiku:
|
||||||
{
|
{
|
||||||
string arch = bits == "64" ? "x86_64" : "i686";
|
|
||||||
return $"{platform}-{arch}";
|
return $"{platform}-{arch}";
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -66,7 +66,7 @@ if env["builtin_embree"]:
|
||||||
env_raycast.Append(CPPDEFINES=["EMBREE_TARGET_SSE2", "EMBREE_LOWEST_ISA", "TASKING_INTERNAL", "NDEBUG"])
|
env_raycast.Append(CPPDEFINES=["EMBREE_TARGET_SSE2", "EMBREE_LOWEST_ISA", "TASKING_INTERNAL", "NDEBUG"])
|
||||||
|
|
||||||
if not env.msvc:
|
if not env.msvc:
|
||||||
if env["arch"] in ["x86", "x86_64"]:
|
if env["arch"] == "x86_64":
|
||||||
env_raycast.Append(CPPFLAGS=["-msse2", "-mxsave"])
|
env_raycast.Append(CPPFLAGS=["-msse2", "-mxsave"])
|
||||||
|
|
||||||
if env["platform"] == "windows":
|
if env["platform"] == "windows":
|
||||||
|
@ -83,7 +83,7 @@ if env["builtin_embree"]:
|
||||||
env_thirdparty.disable_warnings()
|
env_thirdparty.disable_warnings()
|
||||||
env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources)
|
env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources)
|
||||||
|
|
||||||
if not env["arch"] in ["x86", "x86_64"] or env.msvc:
|
if env["arch"] == "arm64" or env.msvc:
|
||||||
# Embree needs those, it will automatically use SSE2NEON in ARM
|
# Embree needs those, it will automatically use SSE2NEON in ARM
|
||||||
env_thirdparty.Append(CPPDEFINES=["__SSE2__", "__SSE__"])
|
env_thirdparty.Append(CPPDEFINES=["__SSE2__", "__SSE__"])
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,6 @@
|
||||||
def can_build(env, platform):
|
def can_build(env, platform):
|
||||||
# Depends on Embree library, which only supports x86_64 and aarch64.
|
# Depends on Embree library, which only supports x86_64 and arm64.
|
||||||
if env["arch"].startswith("rv") or env["arch"].startswith("ppc"):
|
return env["arch"] in ["x86_64", "arm64"]
|
||||||
return False
|
|
||||||
|
|
||||||
if platform == "android":
|
|
||||||
return env["android_arch"] in ["arm64v8", "x86_64"]
|
|
||||||
|
|
||||||
if platform == "javascript":
|
|
||||||
return False # No SIMD support yet
|
|
||||||
|
|
||||||
if env["bits"] == "32":
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
|
|
@ -41,13 +41,13 @@ lib = env_android.add_shared_library("#bin/libgodot", [android_objects], SHLIBSU
|
||||||
env.Depends(lib, thirdparty_obj)
|
env.Depends(lib, thirdparty_obj)
|
||||||
|
|
||||||
lib_arch_dir = ""
|
lib_arch_dir = ""
|
||||||
if env["android_arch"] == "armv7":
|
if env["arch"] == "arm32":
|
||||||
lib_arch_dir = "armeabi-v7a"
|
lib_arch_dir = "armeabi-v7a"
|
||||||
elif env["android_arch"] == "arm64v8":
|
elif env["arch"] == "arm64":
|
||||||
lib_arch_dir = "arm64-v8a"
|
lib_arch_dir = "arm64-v8a"
|
||||||
elif env["android_arch"] == "x86":
|
elif env["arch"] == "x86_32":
|
||||||
lib_arch_dir = "x86"
|
lib_arch_dir = "x86"
|
||||||
elif env["android_arch"] == "x86_64":
|
elif env["arch"] == "x86_64":
|
||||||
lib_arch_dir = "x86_64"
|
lib_arch_dir = "x86_64"
|
||||||
else:
|
else:
|
||||||
print("WARN: Architecture not suitable for embedding into APK; keeping .so at \\bin")
|
print("WARN: Architecture not suitable for embedding into APK; keeping .so at \\bin")
|
||||||
|
|
|
@ -22,7 +22,6 @@ def get_opts():
|
||||||
return [
|
return [
|
||||||
("ANDROID_SDK_ROOT", "Path to the Android SDK", get_env_android_sdk_root()),
|
("ANDROID_SDK_ROOT", "Path to the Android SDK", get_env_android_sdk_root()),
|
||||||
("ndk_platform", 'Target platform (android-<api>, e.g. "android-24")', "android-24"),
|
("ndk_platform", 'Target platform (android-<api>, e.g. "android-24")', "android-24"),
|
||||||
EnumVariable("android_arch", "Target architecture", "arm64v8", ("armv7", "arm64v8", "x86", "x86_64")),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,6 +45,7 @@ def get_ndk_version():
|
||||||
|
|
||||||
def get_flags():
|
def get_flags():
|
||||||
return [
|
return [
|
||||||
|
("arch", "arm64"), # Default for convenience.
|
||||||
("tools", False),
|
("tools", False),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -75,35 +75,37 @@ def install_ndk_if_needed(env):
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
# Validate arch.
|
||||||
|
supported_arches = ["x86_32", "x86_64", "arm32", "arm64"]
|
||||||
|
if env["arch"] not in supported_arches:
|
||||||
|
print(
|
||||||
|
'Unsupported CPU architecture "%s" for Android. Supported architectures are: %s.'
|
||||||
|
% (env["arch"], ", ".join(supported_arches))
|
||||||
|
)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
install_ndk_if_needed(env)
|
install_ndk_if_needed(env)
|
||||||
ndk_root = env["ANDROID_NDK_ROOT"]
|
ndk_root = env["ANDROID_NDK_ROOT"]
|
||||||
|
|
||||||
# Architecture
|
# Architecture
|
||||||
|
|
||||||
if env["android_arch"] not in ["armv7", "arm64v8", "x86", "x86_64"]:
|
if get_min_sdk_version(env["ndk_platform"]) < 21 and env["arch"] in ["x86_64", "arm64"]:
|
||||||
env["android_arch"] = "arm64v8"
|
print(
|
||||||
|
'WARNING: arch="%s" is not supported with "ndk_platform" lower than "android-21". Forcing platform 21.'
|
||||||
|
% env["arch"]
|
||||||
|
)
|
||||||
|
env["ndk_platform"] = "android-21"
|
||||||
|
|
||||||
print("Building for Android, platform " + env["ndk_platform"] + " (" + env["android_arch"] + ")")
|
if env["arch"] == "arm32":
|
||||||
|
|
||||||
if get_min_sdk_version(env["ndk_platform"]) < 21:
|
|
||||||
if env["android_arch"] == "x86_64" or env["android_arch"] == "arm64v8":
|
|
||||||
print(
|
|
||||||
"WARNING: android_arch="
|
|
||||||
+ env["android_arch"]
|
|
||||||
+ " is not supported by ndk_platform lower than android-21; setting ndk_platform=android-21"
|
|
||||||
)
|
|
||||||
env["ndk_platform"] = "android-21"
|
|
||||||
|
|
||||||
if env["android_arch"] == "armv7":
|
|
||||||
target_triple = "armv7a-linux-androideabi"
|
target_triple = "armv7a-linux-androideabi"
|
||||||
env.extra_suffix = ".armv7" + env.extra_suffix
|
env.extra_suffix = ".armv7" + env.extra_suffix
|
||||||
elif env["android_arch"] == "arm64v8":
|
elif env["arch"] == "arm64":
|
||||||
target_triple = "aarch64-linux-android"
|
target_triple = "aarch64-linux-android"
|
||||||
env.extra_suffix = ".armv8" + env.extra_suffix
|
env.extra_suffix = ".armv8" + env.extra_suffix
|
||||||
elif env["android_arch"] == "x86":
|
elif env["arch"] == "x86_32":
|
||||||
target_triple = "i686-linux-android"
|
target_triple = "i686-linux-android"
|
||||||
env.extra_suffix = ".x86" + env.extra_suffix
|
env.extra_suffix = ".x86" + env.extra_suffix
|
||||||
elif env["android_arch"] == "x86_64":
|
elif env["arch"] == "x86_64":
|
||||||
target_triple = "x86_64-linux-android"
|
target_triple = "x86_64-linux-android"
|
||||||
env.extra_suffix = ".x86_64" + env.extra_suffix
|
env.extra_suffix = ".x86_64" + env.extra_suffix
|
||||||
|
|
||||||
|
@ -176,14 +178,14 @@ def configure(env):
|
||||||
if get_min_sdk_version(env["ndk_platform"]) >= 24:
|
if get_min_sdk_version(env["ndk_platform"]) >= 24:
|
||||||
env.Append(CPPDEFINES=[("_FILE_OFFSET_BITS", 64)])
|
env.Append(CPPDEFINES=[("_FILE_OFFSET_BITS", 64)])
|
||||||
|
|
||||||
if env["android_arch"] == "x86":
|
if env["arch"] == "x86_32":
|
||||||
# The NDK adds this if targeting API < 24, so we can drop it when Godot targets it at least
|
# The NDK adds this if targeting API < 24, so we can drop it when Godot targets it at least
|
||||||
env.Append(CCFLAGS=["-mstackrealign"])
|
env.Append(CCFLAGS=["-mstackrealign"])
|
||||||
elif env["android_arch"] == "armv7":
|
elif env["arch"] == "arm32":
|
||||||
env.Append(CCFLAGS="-march=armv7-a -mfloat-abi=softfp".split())
|
env.Append(CCFLAGS="-march=armv7-a -mfloat-abi=softfp".split())
|
||||||
env.Append(CPPDEFINES=["__ARM_ARCH_7__", "__ARM_ARCH_7A__"])
|
env.Append(CPPDEFINES=["__ARM_ARCH_7__", "__ARM_ARCH_7A__"])
|
||||||
env.Append(CPPDEFINES=["__ARM_NEON__"])
|
env.Append(CPPDEFINES=["__ARM_NEON__"])
|
||||||
elif env["android_arch"] == "arm64v8":
|
elif env["arch"] == "arm64":
|
||||||
env.Append(CCFLAGS=["-mfix-cortex-a53-835769"])
|
env.Append(CCFLAGS=["-mfix-cortex-a53-835769"])
|
||||||
env.Append(CPPDEFINES=["__ARM_ARCH_8A__"])
|
env.Append(CPPDEFINES=["__ARM_ARCH_8A__"])
|
||||||
|
|
||||||
|
|
|
@ -588,9 +588,9 @@ zip_fileinfo EditorExportPlatformAndroid::get_zip_fileinfo() {
|
||||||
|
|
||||||
Vector<String> EditorExportPlatformAndroid::get_abis() {
|
Vector<String> EditorExportPlatformAndroid::get_abis() {
|
||||||
Vector<String> abis;
|
Vector<String> abis;
|
||||||
abis.push_back("armeabi-v7a");
|
abis.push_back("arm32");
|
||||||
abis.push_back("arm64-v8a");
|
abis.push_back("arm64");
|
||||||
abis.push_back("x86");
|
abis.push_back("x86_32");
|
||||||
abis.push_back("x86_64");
|
abis.push_back("x86_64");
|
||||||
return abis;
|
return abis;
|
||||||
}
|
}
|
||||||
|
@ -1710,7 +1710,7 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio
|
||||||
const String abi = abis[i];
|
const String abi = abis[i];
|
||||||
// All Android devices supporting Vulkan run 64-bit Android,
|
// All Android devices supporting Vulkan run 64-bit Android,
|
||||||
// so there is usually no point in exporting for 32-bit Android.
|
// so there is usually no point in exporting for 32-bit Android.
|
||||||
const bool is_default = abi == "arm64-v8a";
|
const bool is_default = abi == "arm64";
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, vformat("%s/%s", PNAME("architectures"), abi)), is_default));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, vformat("%s/%s", PNAME("architectures"), abi)), is_default));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ allprojects {
|
||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
supportedAbis = ["armv7", "arm64v8", "x86", "x86_64"]
|
supportedAbis = ["arm32", "arm64", "x86_32", "x86_64"]
|
||||||
supportedTargetsMap = [release: "release", dev: "debug", debug: "release_debug"]
|
supportedTargetsMap = [release: "release", dev: "debug", debug: "release_debug"]
|
||||||
supportedFlavors = ["editor", "template"]
|
supportedFlavors = ["editor", "template"]
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ ext {
|
||||||
// If building manually on the command line, it's recommended to use the
|
// If building manually on the command line, it's recommended to use the
|
||||||
// `./gradlew generateGodotTemplates` build command instead after running the `scons` command(s).
|
// `./gradlew generateGodotTemplates` build command instead after running the `scons` command(s).
|
||||||
// The {selectedAbis} values must be from the {supportedAbis} values.
|
// The {selectedAbis} values must be from the {supportedAbis} values.
|
||||||
selectedAbis = ["arm64v8"]
|
selectedAbis = ["arm64"]
|
||||||
}
|
}
|
||||||
|
|
||||||
def rootDir = "../../.."
|
def rootDir = "../../.."
|
||||||
|
|
|
@ -159,7 +159,7 @@ android {
|
||||||
def taskName = getSconsTaskName(flavorName, buildType, selectedAbi)
|
def taskName = getSconsTaskName(flavorName, buildType, selectedAbi)
|
||||||
tasks.create(name: taskName, type: Exec) {
|
tasks.create(name: taskName, type: Exec) {
|
||||||
executable sconsExecutableFile.absolutePath
|
executable sconsExecutableFile.absolutePath
|
||||||
args "--directory=${pathToRootDir}", "platform=android", "tools=${toolsFlag}", "target=${sconsTarget}", "android_arch=${selectedAbi}", "-j" + Runtime.runtime.availableProcessors()
|
args "--directory=${pathToRootDir}", "platform=android", "tools=${toolsFlag}", "target=${sconsTarget}", "arch=${selectedAbi}", "-j" + Runtime.runtime.availableProcessors()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Schedule the tasks so the generated libs are present before the aar file is packaged.
|
// Schedule the tasks so the generated libs are present before the aar file is packaged.
|
||||||
|
|
|
@ -370,15 +370,15 @@ bool OS_Android::_check_internal_feature_support(const String &p_feature) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#if defined(__aarch64__)
|
#if defined(__aarch64__)
|
||||||
if (p_feature == "arm64-v8a") {
|
if (p_feature == "arm64-v8a" || p_feature == "arm64") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#elif defined(__ARM_ARCH_7A__)
|
#elif defined(__ARM_ARCH_7A__)
|
||||||
if (p_feature == "armeabi-v7a" || p_feature == "armeabi") {
|
if (p_feature == "armeabi-v7a" || p_feature == "armeabi" || p_feature == "arm32") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
if (p_feature == "armeabi") {
|
if (p_feature == "armeabi" || p_feature == "arm") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -36,12 +36,22 @@ def get_opts():
|
||||||
|
|
||||||
def get_flags():
|
def get_flags():
|
||||||
return [
|
return [
|
||||||
|
("arch", "arm64"), # Default for convenience.
|
||||||
("tools", False),
|
("tools", False),
|
||||||
("use_volk", False),
|
("use_volk", False),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
# Validate arch.
|
||||||
|
supported_arches = ["x86_64", "arm64"]
|
||||||
|
if env["arch"] not in supported_arches:
|
||||||
|
print(
|
||||||
|
'Unsupported CPU architecture "%s" for iOS. Supported architectures are: %s.'
|
||||||
|
% (env["arch"], ", ".join(supported_arches))
|
||||||
|
)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
## Build type
|
## Build type
|
||||||
|
|
||||||
if env["target"].startswith("release"):
|
if env["target"].startswith("release"):
|
||||||
|
@ -64,11 +74,6 @@ def configure(env):
|
||||||
env.Append(CCFLAGS=["-flto"])
|
env.Append(CCFLAGS=["-flto"])
|
||||||
env.Append(LINKFLAGS=["-flto"])
|
env.Append(LINKFLAGS=["-flto"])
|
||||||
|
|
||||||
## Architecture
|
|
||||||
env["bits"] = "64"
|
|
||||||
if env["arch"] != "x86_64":
|
|
||||||
env["arch"] = "arm64"
|
|
||||||
|
|
||||||
## Compiler configuration
|
## Compiler configuration
|
||||||
|
|
||||||
# Save this in environment for use by other modules
|
# Save this in environment for use by other modules
|
||||||
|
|
|
@ -46,6 +46,7 @@ def get_opts():
|
||||||
|
|
||||||
def get_flags():
|
def get_flags():
|
||||||
return [
|
return [
|
||||||
|
("arch", "wasm32"),
|
||||||
("tools", False),
|
("tools", False),
|
||||||
("builtin_pcre2_with_jit", False),
|
("builtin_pcre2_with_jit", False),
|
||||||
("vulkan", False),
|
("vulkan", False),
|
||||||
|
@ -53,6 +54,15 @@ def get_flags():
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
# Validate arch.
|
||||||
|
supported_arches = ["wasm32"]
|
||||||
|
if env["arch"] not in supported_arches:
|
||||||
|
print(
|
||||||
|
'Unsupported CPU architecture "%s" for iOS. Supported architectures are: %s.'
|
||||||
|
% (env["arch"], ", ".join(supported_arches))
|
||||||
|
)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
env["initial_memory"] = int(env["initial_memory"])
|
env["initial_memory"] = int(env["initial_memory"])
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
|
@ -2,6 +2,7 @@ import os
|
||||||
import platform
|
import platform
|
||||||
import sys
|
import sys
|
||||||
from methods import get_compiler_version, using_gcc
|
from methods import get_compiler_version, using_gcc
|
||||||
|
from platform_methods import detect_arch
|
||||||
|
|
||||||
|
|
||||||
def is_active():
|
def is_active():
|
||||||
|
@ -52,10 +53,21 @@ def get_opts():
|
||||||
|
|
||||||
|
|
||||||
def get_flags():
|
def get_flags():
|
||||||
return []
|
return [
|
||||||
|
("arch", detect_arch()),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
# Validate arch.
|
||||||
|
supported_arches = ["x86_32", "x86_64", "arm32", "arm64", "rv64", "ppc32", "ppc64"]
|
||||||
|
if env["arch"] not in supported_arches:
|
||||||
|
print(
|
||||||
|
'Unsupported CPU architecture "%s" for Linux / *BSD. Supported architectures are: %s.'
|
||||||
|
% (env["arch"], ", ".join(supported_arches))
|
||||||
|
)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
## Build type
|
## Build type
|
||||||
|
|
||||||
if env["target"] == "release":
|
if env["target"] == "release":
|
||||||
|
@ -80,23 +92,7 @@ def configure(env):
|
||||||
env.Prepend(CCFLAGS=["-g3"])
|
env.Prepend(CCFLAGS=["-g3"])
|
||||||
env.Append(LINKFLAGS=["-rdynamic"])
|
env.Append(LINKFLAGS=["-rdynamic"])
|
||||||
|
|
||||||
## Architecture
|
# CPU architecture flags.
|
||||||
|
|
||||||
is64 = sys.maxsize > 2**32
|
|
||||||
if env["bits"] == "default":
|
|
||||||
env["bits"] = "64" if is64 else "32"
|
|
||||||
|
|
||||||
machines = {
|
|
||||||
"riscv64": "rv64",
|
|
||||||
"ppc64le": "ppc64",
|
|
||||||
"ppc64": "ppc64",
|
|
||||||
"ppcle": "ppc",
|
|
||||||
"ppc": "ppc",
|
|
||||||
}
|
|
||||||
|
|
||||||
if env["arch"] == "" and platform.machine() in machines:
|
|
||||||
env["arch"] = machines[platform.machine()]
|
|
||||||
|
|
||||||
if env["arch"] == "rv64":
|
if env["arch"] == "rv64":
|
||||||
# G = General-purpose extensions, C = Compression extension (very common).
|
# G = General-purpose extensions, C = Compression extension (very common).
|
||||||
env.Append(CCFLAGS=["-march=rv64gc"])
|
env.Append(CCFLAGS=["-march=rv64gc"])
|
||||||
|
@ -262,8 +258,7 @@ def configure(env):
|
||||||
env["builtin_libvorbis"] = False # Needed to link against system libtheora
|
env["builtin_libvorbis"] = False # Needed to link against system libtheora
|
||||||
env.ParseConfig("pkg-config theora theoradec --cflags --libs")
|
env.ParseConfig("pkg-config theora theoradec --cflags --libs")
|
||||||
else:
|
else:
|
||||||
list_of_x86 = ["x86_64", "x86", "i386", "i586"]
|
if env["arch"] in ["x86_64", "x86_32"]:
|
||||||
if any(platform.machine() in s for s in list_of_x86):
|
|
||||||
env["x86_libtheora_opt_gcc"] = True
|
env["x86_libtheora_opt_gcc"] = True
|
||||||
|
|
||||||
if not env["builtin_libvorbis"]:
|
if not env["builtin_libvorbis"]:
|
||||||
|
@ -405,11 +400,12 @@ def configure(env):
|
||||||
env.Append(LINKFLAGS=["-T", "platform/linuxbsd/pck_embed.legacy.ld"])
|
env.Append(LINKFLAGS=["-T", "platform/linuxbsd/pck_embed.legacy.ld"])
|
||||||
|
|
||||||
## Cross-compilation
|
## Cross-compilation
|
||||||
|
# TODO: Support cross-compilation on architectures other than x86.
|
||||||
if is64 and env["bits"] == "32":
|
host_is_64_bit = sys.maxsize > 2**32
|
||||||
|
if host_is_64_bit and env["arch"] == "x86_32":
|
||||||
env.Append(CCFLAGS=["-m32"])
|
env.Append(CCFLAGS=["-m32"])
|
||||||
env.Append(LINKFLAGS=["-m32", "-L/usr/lib/i386-linux-gnu"])
|
env.Append(LINKFLAGS=["-m32", "-L/usr/lib/i386-linux-gnu"])
|
||||||
elif not is64 and env["bits"] == "64":
|
elif not host_is_64_bit and env["arch"] == "x86_64":
|
||||||
env.Append(CCFLAGS=["-m64"])
|
env.Append(CCFLAGS=["-m64"])
|
||||||
env.Append(LINKFLAGS=["-m64", "-L/usr/lib/i686-linux-gnu"])
|
env.Append(LINKFLAGS=["-m64", "-L/usr/lib/i686-linux-gnu"])
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from methods import detect_darwin_sdk_path
|
from methods import detect_darwin_sdk_path
|
||||||
|
from platform_methods import detect_arch
|
||||||
|
|
||||||
|
|
||||||
def is_active():
|
def is_active():
|
||||||
|
@ -37,6 +38,7 @@ def get_opts():
|
||||||
|
|
||||||
def get_flags():
|
def get_flags():
|
||||||
return [
|
return [
|
||||||
|
("arch", detect_arch()),
|
||||||
("use_volk", False),
|
("use_volk", False),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -71,6 +73,15 @@ def get_mvk_sdk_path():
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
# Validate arch.
|
||||||
|
supported_arches = ["x86_64", "arm64"]
|
||||||
|
if env["arch"] not in supported_arches:
|
||||||
|
print(
|
||||||
|
'Unsupported CPU architecture "%s" for macOS. Supported architectures are: %s.'
|
||||||
|
% (env["arch"], ", ".join(supported_arches))
|
||||||
|
)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
## Build type
|
## Build type
|
||||||
|
|
||||||
if env["target"] == "release":
|
if env["target"] == "release":
|
||||||
|
@ -96,25 +107,20 @@ def configure(env):
|
||||||
env.Prepend(CCFLAGS=["-g3"])
|
env.Prepend(CCFLAGS=["-g3"])
|
||||||
env.Prepend(LINKFLAGS=["-Xlinker", "-no_deduplicate"])
|
env.Prepend(LINKFLAGS=["-Xlinker", "-no_deduplicate"])
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
# macOS no longer runs on 32-bit since 10.7 which is unsupported since 2014
|
|
||||||
# As such, we only support 64-bit
|
|
||||||
env["bits"] = "64"
|
|
||||||
|
|
||||||
## Compiler configuration
|
## Compiler configuration
|
||||||
|
|
||||||
# Save this in environment for use by other modules
|
# Save this in environment for use by other modules
|
||||||
if "OSXCROSS_ROOT" in os.environ:
|
if "OSXCROSS_ROOT" in os.environ:
|
||||||
env["osxcross"] = True
|
env["osxcross"] = True
|
||||||
|
|
||||||
|
# CPU architecture.
|
||||||
if env["arch"] == "arm64":
|
if env["arch"] == "arm64":
|
||||||
print("Building for macOS 11.0+, platform arm64.")
|
print("Building for macOS 11.0+.")
|
||||||
env.Append(ASFLAGS=["-arch", "arm64", "-mmacosx-version-min=11.0"])
|
env.Append(ASFLAGS=["-arch", "arm64", "-mmacosx-version-min=11.0"])
|
||||||
env.Append(CCFLAGS=["-arch", "arm64", "-mmacosx-version-min=11.0"])
|
env.Append(CCFLAGS=["-arch", "arm64", "-mmacosx-version-min=11.0"])
|
||||||
env.Append(LINKFLAGS=["-arch", "arm64", "-mmacosx-version-min=11.0"])
|
env.Append(LINKFLAGS=["-arch", "arm64", "-mmacosx-version-min=11.0"])
|
||||||
else:
|
elif env["arch"] == "x86_64":
|
||||||
print("Building for macOS 10.12+, platform x86_64.")
|
print("Building for macOS 10.12+.")
|
||||||
env.Append(ASFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.12"])
|
env.Append(ASFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.12"])
|
||||||
env.Append(CCFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.12"])
|
env.Append(CCFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.12"])
|
||||||
env.Append(LINKFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.12"])
|
env.Append(LINKFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.12"])
|
||||||
|
@ -185,9 +191,8 @@ def configure(env):
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
if env["builtin_libtheora"]:
|
if env["builtin_libtheora"] and env["arch"] == "x86_64":
|
||||||
if env["arch"] != "arm64":
|
env["x86_libtheora_opt_gcc"] = True
|
||||||
env["x86_libtheora_opt_gcc"] = True
|
|
||||||
|
|
||||||
## Flags
|
## Flags
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import methods
|
import methods
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
from platform_methods import detect_arch
|
||||||
|
|
||||||
|
|
||||||
def is_active():
|
def is_active():
|
||||||
|
@ -31,6 +32,7 @@ def get_opts():
|
||||||
|
|
||||||
def get_flags():
|
def get_flags():
|
||||||
return [
|
return [
|
||||||
|
("arch", detect_arch()),
|
||||||
("tools", False),
|
("tools", False),
|
||||||
("xaudio2", True),
|
("xaudio2", True),
|
||||||
("builtin_pcre2_with_jit", False),
|
("builtin_pcre2_with_jit", False),
|
||||||
|
@ -38,19 +40,17 @@ def get_flags():
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
env.msvc = True
|
# Validate arch.
|
||||||
|
supported_arches = ["x86_32", "x86_64", "arm32"]
|
||||||
if env["bits"] != "default":
|
if env["arch"] not in supported_arches:
|
||||||
print("Error: bits argument is disabled for MSVC")
|
|
||||||
print(
|
print(
|
||||||
"""
|
'Unsupported CPU architecture "%s" for UWP. Supported architectures are: %s.'
|
||||||
Bits argument is not supported for MSVC compilation. Architecture depends on the Native/Cross Compile Tools Prompt/Developer Console
|
% (env["arch"], ", ".join(supported_arches))
|
||||||
(or Visual Studio settings) that is being used to run SCons. As a consequence, bits argument is disabled. Run scons again without bits
|
|
||||||
argument (example: scons p=uwp) and SCons will attempt to detect what MSVC compiler will be executed and inform you.
|
|
||||||
"""
|
|
||||||
)
|
)
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
|
env.msvc = True
|
||||||
|
|
||||||
## Build type
|
## Build type
|
||||||
|
|
||||||
if env["target"] == "release":
|
if env["target"] == "release":
|
||||||
|
@ -101,11 +101,10 @@ def configure(env):
|
||||||
|
|
||||||
arch = ""
|
arch = ""
|
||||||
if str(os.getenv("Platform")).lower() == "arm":
|
if str(os.getenv("Platform")).lower() == "arm":
|
||||||
|
print("Compiled program architecture will be an ARM executable (forcing arch=arm32).")
|
||||||
print("Compiled program architecture will be an ARM executable. (forcing bits=32).")
|
|
||||||
|
|
||||||
arch = "arm"
|
arch = "arm"
|
||||||
env["bits"] = "32"
|
env["arch"] = "arm32"
|
||||||
env.Append(LINKFLAGS=["/MACHINE:ARM"])
|
env.Append(LINKFLAGS=["/MACHINE:ARM"])
|
||||||
env.Append(LIBPATH=[vc_base_path + "lib/store/arm"])
|
env.Append(LIBPATH=[vc_base_path + "lib/store/arm"])
|
||||||
|
|
||||||
|
@ -117,20 +116,20 @@ def configure(env):
|
||||||
compiler_version_str = methods.detect_visual_c_compiler_version(env["ENV"])
|
compiler_version_str = methods.detect_visual_c_compiler_version(env["ENV"])
|
||||||
|
|
||||||
if compiler_version_str == "amd64" or compiler_version_str == "x86_amd64":
|
if compiler_version_str == "amd64" or compiler_version_str == "x86_amd64":
|
||||||
env["bits"] = "64"
|
env["arch"] = "x86_64"
|
||||||
print("Compiled program architecture will be a x64 executable (forcing bits=64).")
|
print("Compiled program architecture will be a x64 executable (forcing arch=x86_64).")
|
||||||
elif compiler_version_str == "x86" or compiler_version_str == "amd64_x86":
|
elif compiler_version_str == "x86" or compiler_version_str == "amd64_x86":
|
||||||
env["bits"] = "32"
|
env["arch"] = "x86_32"
|
||||||
print("Compiled program architecture will be a x86 executable. (forcing bits=32).")
|
print("Compiled program architecture will be a x86 executable (forcing arch=x86_32).")
|
||||||
else:
|
else:
|
||||||
print(
|
print(
|
||||||
"Failed to detect MSVC compiler architecture version... Defaulting to 32-bit executable settings"
|
"Failed to detect MSVC compiler architecture version... Defaulting to x86 32-bit executable settings"
|
||||||
" (forcing bits=32). Compilation attempt will continue, but SCons can not detect for what architecture"
|
" (forcing arch=x86_32). Compilation attempt will continue, but SCons can not detect for what architecture"
|
||||||
" this build is compiled for. You should check your settings/compilation setup."
|
" this build is compiled for. You should check your settings/compilation setup."
|
||||||
)
|
)
|
||||||
env["bits"] = "32"
|
env["arch"] = "x86_32"
|
||||||
|
|
||||||
if env["bits"] == "32":
|
if env["arch"] == "x86_32":
|
||||||
arch = "x86"
|
arch = "x86"
|
||||||
|
|
||||||
angle_build_cmd += "Win32"
|
angle_build_cmd += "Win32"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import methods
|
import methods
|
||||||
import os
|
import os
|
||||||
|
from platform_methods import detect_arch
|
||||||
|
|
||||||
# To match other platforms
|
# To match other platforms
|
||||||
STACK_SIZE = 8388608
|
STACK_SIZE = 8388608
|
||||||
|
@ -46,6 +47,7 @@ def can_build():
|
||||||
def get_opts():
|
def get_opts():
|
||||||
from SCons.Variables import BoolVariable, EnumVariable
|
from SCons.Variables import BoolVariable, EnumVariable
|
||||||
|
|
||||||
|
# TODO: These shouldn't be hard-coded for x86.
|
||||||
mingw32 = ""
|
mingw32 = ""
|
||||||
mingw64 = ""
|
mingw64 = ""
|
||||||
if os.name == "posix":
|
if os.name == "posix":
|
||||||
|
@ -77,11 +79,14 @@ def get_opts():
|
||||||
|
|
||||||
|
|
||||||
def get_flags():
|
def get_flags():
|
||||||
return []
|
return [
|
||||||
|
("arch", detect_arch()),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def build_res_file(target, source, env):
|
def build_res_file(target, source, env):
|
||||||
if env["bits"] == "32":
|
# TODO: This shouldn't be hard-coded for x86.
|
||||||
|
if env["arch"] == "x86_32":
|
||||||
cmdbase = env["mingw_prefix_32"]
|
cmdbase = env["mingw_prefix_32"]
|
||||||
else:
|
else:
|
||||||
cmdbase = env["mingw_prefix_64"]
|
cmdbase = env["mingw_prefix_64"]
|
||||||
|
@ -100,21 +105,27 @@ def build_res_file(target, source, env):
|
||||||
|
|
||||||
|
|
||||||
def setup_msvc_manual(env):
|
def setup_msvc_manual(env):
|
||||||
|
# FIXME: This is super hacky, and probably obsolete.
|
||||||
|
# Won't work with detect_arch() used for `arch` by default.
|
||||||
|
|
||||||
"""Set up env to use MSVC manually, using VCINSTALLDIR"""
|
"""Set up env to use MSVC manually, using VCINSTALLDIR"""
|
||||||
if env["bits"] != "default":
|
if env["arch"] != "auto":
|
||||||
print(
|
print(
|
||||||
"""
|
"""
|
||||||
Bits argument is not supported for MSVC compilation. Architecture depends on the Native/Cross Compile Tools Prompt/Developer Console
|
Arch argument is not supported for MSVC manual configuration (VCINSTALLDIR configured).
|
||||||
(or Visual Studio settings) that is being used to run SCons. As a consequence, bits argument is disabled. Run scons again without bits
|
Architecture depends on the Native/Cross Compile Tools Prompt/Developer Console (or Visual Studio settings) that is being used to run SCons.
|
||||||
argument (example: scons p=windows) and SCons will attempt to detect what MSVC compiler will be executed and inform you.
|
As a consequence, the arch argument is disabled. Run scons again without arch argument (example: scons p=windows)
|
||||||
|
and SCons will attempt to detect what MSVC compiler will be executed and inform you.
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
raise SCons.Errors.UserError("Bits argument should not be used when using VCINSTALLDIR")
|
raise SCons.Errors.UserError("Arch argument should not be used when using VCINSTALLDIR")
|
||||||
|
|
||||||
# Force bits arg
|
# Force ARCH arg
|
||||||
# (Actually msys2 mingw can support 64-bit, we could detect that)
|
# (Actually msys2 mingw can support 64-bit, we could detect that)
|
||||||
env["bits"] = "32"
|
# TODO: This is wrong, but not sure what to do about it.
|
||||||
env["x86_libtheora_opt_vc"] = True
|
# We want to determine the arch and bitness in the SConstruct only.
|
||||||
|
# We can check if it's correct in here, but if it's not, it should
|
||||||
|
# just fail with an error message instead of trying to force it.
|
||||||
|
|
||||||
# find compiler manually
|
# find compiler manually
|
||||||
compiler_version_str = methods.detect_visual_c_compiler_version(env["ENV"])
|
compiler_version_str = methods.detect_visual_c_compiler_version(env["ENV"])
|
||||||
|
@ -122,17 +133,19 @@ def setup_msvc_manual(env):
|
||||||
|
|
||||||
# If building for 64bit architecture, disable assembly optimisations for 32 bit builds (theora as of writing)... vc compiler for 64bit can not compile _asm
|
# If building for 64bit architecture, disable assembly optimisations for 32 bit builds (theora as of writing)... vc compiler for 64bit can not compile _asm
|
||||||
if compiler_version_str == "amd64" or compiler_version_str == "x86_amd64":
|
if compiler_version_str == "amd64" or compiler_version_str == "x86_amd64":
|
||||||
env["bits"] = "64"
|
env["arch"] = "x86_64"
|
||||||
env["x86_libtheora_opt_vc"] = False
|
env["x86_libtheora_opt_vc"] = False
|
||||||
print("Compiled program architecture will be a 64 bit executable (forcing bits=64).")
|
print("Compiled program architecture will be a 64 bit executable (forcing arch=x86_64).")
|
||||||
elif compiler_version_str == "x86" or compiler_version_str == "amd64_x86":
|
elif compiler_version_str == "x86" or compiler_version_str == "amd64_x86":
|
||||||
print("Compiled program architecture will be a 32 bit executable. (forcing bits=32).")
|
env["arch"] = "x86_32"
|
||||||
|
env["x86_libtheora_opt_vc"] = True
|
||||||
|
print("Compiled program architecture will be a 32 bit executable (forcing arch=x86_32).")
|
||||||
else:
|
else:
|
||||||
print(
|
print(
|
||||||
"Failed to manually detect MSVC compiler architecture version... Defaulting to 32bit executable settings"
|
"Failed to manually detect MSVC compiler architecture version.\n"
|
||||||
" (forcing bits=32). Compilation attempt will continue, but SCons can not detect for what architecture this"
|
"You should check your settings/compilation setup, or avoid setting VCINSTALLDIR."
|
||||||
" build is compiled for. You should check your settings/compilation setup, or avoid setting VCINSTALLDIR."
|
|
||||||
)
|
)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
|
||||||
def setup_msvc_auto(env):
|
def setup_msvc_auto(env):
|
||||||
|
@ -141,6 +154,18 @@ def setup_msvc_auto(env):
|
||||||
# If MSVC_VERSION is set by SCons, we know MSVC is installed.
|
# If MSVC_VERSION is set by SCons, we know MSVC is installed.
|
||||||
# But we may want a different version or target arch.
|
# But we may want a different version or target arch.
|
||||||
|
|
||||||
|
# Valid architectures for MSVC's TARGET_ARCH:
|
||||||
|
# ['amd64', 'emt64', 'i386', 'i486', 'i586', 'i686', 'ia64', 'itanium', 'x86', 'x86_64', 'arm', 'arm64', 'aarch64']
|
||||||
|
# Our x86_64 and arm64 are the same, and we need to map the 32-bit
|
||||||
|
# architectures to other names since MSVC isn't as explicit.
|
||||||
|
# The rest we don't need to worry about because they are
|
||||||
|
# aliases or aren't supported by Godot (itanium & ia64).
|
||||||
|
msvc_arch_aliases = {"x86_32": "x86", "arm32": "arm"}
|
||||||
|
if env["arch"] in msvc_arch_aliases.keys():
|
||||||
|
env["TARGET_ARCH"] = msvc_arch_aliases[env["arch"]]
|
||||||
|
else:
|
||||||
|
env["TARGET_ARCH"] = env["arch"]
|
||||||
|
|
||||||
# The env may have already been set up with default MSVC tools, so
|
# The env may have already been set up with default MSVC tools, so
|
||||||
# reset a few things so we can set it up with the tools we want.
|
# reset a few things so we can set it up with the tools we want.
|
||||||
# (Ideally we'd decide on the tool config before configuring any
|
# (Ideally we'd decide on the tool config before configuring any
|
||||||
|
@ -149,21 +174,14 @@ def setup_msvc_auto(env):
|
||||||
env["MSVC_SETUP_RUN"] = False # Need to set this to re-run the tool
|
env["MSVC_SETUP_RUN"] = False # Need to set this to re-run the tool
|
||||||
env["MSVS_VERSION"] = None
|
env["MSVS_VERSION"] = None
|
||||||
env["MSVC_VERSION"] = None
|
env["MSVC_VERSION"] = None
|
||||||
env["TARGET_ARCH"] = None
|
|
||||||
if env["bits"] != "default":
|
|
||||||
env["TARGET_ARCH"] = {"32": "x86", "64": "x86_64"}[env["bits"]]
|
|
||||||
if "msvc_version" in env:
|
if "msvc_version" in env:
|
||||||
env["MSVC_VERSION"] = env["msvc_version"]
|
env["MSVC_VERSION"] = env["msvc_version"]
|
||||||
env.Tool("msvc")
|
env.Tool("msvc")
|
||||||
env.Tool("mssdk") # we want the MS SDK
|
env.Tool("mssdk") # we want the MS SDK
|
||||||
# Note: actual compiler version can be found in env['MSVC_VERSION'], e.g. "14.1" for VS2015
|
# Note: actual compiler version can be found in env['MSVC_VERSION'], e.g. "14.1" for VS2015
|
||||||
# Get actual target arch into bits (it may be "default" at this point):
|
print("Found MSVC version %s, arch %s" % (env["MSVC_VERSION"], env["TARGET_ARCH"]))
|
||||||
if env["TARGET_ARCH"] in ("amd64", "x86_64"):
|
if env["arch"] == "x86_32":
|
||||||
env["bits"] = "64"
|
|
||||||
else:
|
|
||||||
env["bits"] = "32"
|
|
||||||
print("Found MSVC version %s, arch %s, bits=%s" % (env["MSVC_VERSION"], env["TARGET_ARCH"], env["bits"]))
|
|
||||||
if env["TARGET_ARCH"] in ("amd64", "x86_64"):
|
|
||||||
env["x86_libtheora_opt_vc"] = False
|
env["x86_libtheora_opt_vc"] = False
|
||||||
|
|
||||||
|
|
||||||
|
@ -244,7 +262,7 @@ def configure_msvc(env, manual_msvc_config):
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
env.AppendUnique(CPPDEFINES=["NOMINMAX"]) # disable bogus min/max WinDef.h macros
|
env.AppendUnique(CPPDEFINES=["NOMINMAX"]) # disable bogus min/max WinDef.h macros
|
||||||
if env["bits"] == "64":
|
if env["arch"] == "x86_64":
|
||||||
env.AppendUnique(CPPDEFINES=["_WIN64"])
|
env.AppendUnique(CPPDEFINES=["_WIN64"])
|
||||||
|
|
||||||
## Libs
|
## Libs
|
||||||
|
@ -328,10 +346,10 @@ def configure_mingw(env):
|
||||||
env.Append(CCFLAGS=["-msse2"])
|
env.Append(CCFLAGS=["-msse2"])
|
||||||
|
|
||||||
if env["optimize"] == "speed": # optimize for speed (default)
|
if env["optimize"] == "speed": # optimize for speed (default)
|
||||||
if env["bits"] == "64":
|
if env["arch"] == "x86_32":
|
||||||
env.Append(CCFLAGS=["-O3"])
|
|
||||||
else:
|
|
||||||
env.Append(CCFLAGS=["-O2"])
|
env.Append(CCFLAGS=["-O2"])
|
||||||
|
else:
|
||||||
|
env.Append(CCFLAGS=["-O3"])
|
||||||
else: # optimize for size
|
else: # optimize for size
|
||||||
env.Prepend(CCFLAGS=["-Os"])
|
env.Prepend(CCFLAGS=["-Os"])
|
||||||
|
|
||||||
|
@ -365,15 +383,12 @@ def configure_mingw(env):
|
||||||
if os.name != "nt":
|
if os.name != "nt":
|
||||||
env["PROGSUFFIX"] = env["PROGSUFFIX"] + ".exe" # for linux cross-compilation
|
env["PROGSUFFIX"] = env["PROGSUFFIX"] + ".exe" # for linux cross-compilation
|
||||||
|
|
||||||
if env["bits"] == "default":
|
|
||||||
if os.name == "nt":
|
|
||||||
env["bits"] = "64" if "PROGRAMFILES(X86)" in os.environ else "32"
|
|
||||||
else: # default to 64-bit on Linux
|
|
||||||
env["bits"] = "64"
|
|
||||||
|
|
||||||
mingw_prefix = ""
|
mingw_prefix = ""
|
||||||
|
|
||||||
if env["bits"] == "32":
|
# TODO: This doesn't seem to be working, or maybe I just have
|
||||||
|
# MinGW set up incorrectly. It always gives me x86_64 builds,
|
||||||
|
# even though arch == "x86_32" and the file name has x86_32 in it.
|
||||||
|
if env["arch"] == "x86_32":
|
||||||
if env["use_static_cpp"]:
|
if env["use_static_cpp"]:
|
||||||
env.Append(LINKFLAGS=["-static"])
|
env.Append(LINKFLAGS=["-static"])
|
||||||
env.Append(LINKFLAGS=["-static-libgcc"])
|
env.Append(LINKFLAGS=["-static-libgcc"])
|
||||||
|
@ -460,11 +475,18 @@ def configure_mingw(env):
|
||||||
|
|
||||||
|
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
# Validate arch.
|
||||||
|
supported_arches = ["x86_32", "x86_64", "arm32", "arm64"]
|
||||||
|
if env["arch"] not in supported_arches:
|
||||||
|
print(
|
||||||
|
'Unsupported CPU architecture "%s" for Windows. Supported architectures are: %s.'
|
||||||
|
% (env["arch"], ", ".join(supported_arches))
|
||||||
|
)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
# At this point the env has been set up with basic tools/compilers.
|
# At this point the env has been set up with basic tools/compilers.
|
||||||
env.Prepend(CPPPATH=["#platform/windows"])
|
env.Prepend(CPPPATH=["#platform/windows"])
|
||||||
|
|
||||||
print("Configuring for Windows: target=%s, bits=%s" % (env["target"], env["bits"]))
|
|
||||||
|
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
env["ENV"] = os.environ # this makes build less repeatable, but simplifies some things
|
env["ENV"] = os.environ # this makes build less repeatable, but simplifies some things
|
||||||
env["ENV"]["TMP"] = os.environ["TMP"]
|
env["ENV"]["TMP"] = os.environ["TMP"]
|
||||||
|
|
|
@ -9,7 +9,7 @@ from platform_methods import subprocess_main
|
||||||
|
|
||||||
def make_debug_mingw(target, source, env):
|
def make_debug_mingw(target, source, env):
|
||||||
mingw_prefix = ""
|
mingw_prefix = ""
|
||||||
if env["bits"] == "32":
|
if env["arch"] == "x86_32":
|
||||||
mingw_prefix = env["mingw_prefix_32"]
|
mingw_prefix = env["mingw_prefix_32"]
|
||||||
else:
|
else:
|
||||||
mingw_prefix = env["mingw_prefix_64"]
|
mingw_prefix = env["mingw_prefix_64"]
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
|
import platform
|
||||||
import uuid
|
import uuid
|
||||||
import functools
|
import functools
|
||||||
import subprocess
|
import subprocess
|
||||||
|
@ -71,9 +72,42 @@ def run_in_subprocess(builder_function):
|
||||||
|
|
||||||
|
|
||||||
def subprocess_main(namespace):
|
def subprocess_main(namespace):
|
||||||
|
|
||||||
with open(sys.argv[1]) as json_file:
|
with open(sys.argv[1]) as json_file:
|
||||||
data = json.load(json_file)
|
data = json.load(json_file)
|
||||||
|
|
||||||
fn = namespace[data["fn"]]
|
fn = namespace[data["fn"]]
|
||||||
fn(*data["args"])
|
fn(*data["args"])
|
||||||
|
|
||||||
|
|
||||||
|
# CPU architecture options.
|
||||||
|
architectures = ["x86_32", "x86_64", "arm32", "arm64", "rv64", "ppc32", "ppc64", "wasm32"]
|
||||||
|
architecture_aliases = {
|
||||||
|
"x86": "x86_32",
|
||||||
|
"x64": "x86_64",
|
||||||
|
"amd64": "x86_64",
|
||||||
|
"armv7": "arm32",
|
||||||
|
"armv8": "arm64",
|
||||||
|
"arm64v8": "arm64",
|
||||||
|
"aarch64": "arm64",
|
||||||
|
"rv": "rv64",
|
||||||
|
"riscv": "rv64",
|
||||||
|
"riscv64": "rv64",
|
||||||
|
"ppcle": "ppc32",
|
||||||
|
"ppc": "ppc32",
|
||||||
|
"ppc64le": "ppc64",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def detect_arch():
|
||||||
|
host_machine = platform.machine().lower()
|
||||||
|
if host_machine in architectures:
|
||||||
|
return host_machine
|
||||||
|
elif host_machine in architecture_aliases.keys():
|
||||||
|
return architecture_aliases[host_machine]
|
||||||
|
elif "86" in host_machine:
|
||||||
|
# Catches x86, i386, i486, i586, i686, etc.
|
||||||
|
return "x86_32"
|
||||||
|
else:
|
||||||
|
print("Unsupported CPU architecture: " + host_machine)
|
||||||
|
print("Falling back to x86_64.")
|
||||||
|
return "x86_64"
|
||||||
|
|
Loading…
Reference in New Issue