diff options
Diffstat (limited to 'modules/mono/build_scripts/mono_configure.py')
-rw-r--r-- | modules/mono/build_scripts/mono_configure.py | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/modules/mono/build_scripts/mono_configure.py b/modules/mono/build_scripts/mono_configure.py index c819ef5b30..c2d5452837 100644 --- a/modules/mono/build_scripts/mono_configure.py +++ b/modules/mono/build_scripts/mono_configure.py @@ -16,9 +16,9 @@ def module_supports_tools_on(platform): def configure(env, env_mono): # is_android = env["platform"] == "android" - # is_javascript = env["platform"] == "javascript" + # is_web = env["platform"] == "web" # 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"] @@ -128,26 +128,22 @@ def find_dotnet_app_host_dir(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 = { "windows": "win", "macos": "osx", "linuxbsd": "linux", } - - # .NET RID architectures: x86, x64, arm, or arm64 - + arch_map = { + "x86_64": "x64", + "x86_32": "x86", + "arm64": "arm64", + "arm32": "arm", + } platform = env["platform"] - if is_desktop(platform): - if env["arch"] in ["arm", "arm32"]: - 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) + return "%s-%s" % (names_map[platform], arch_map[env["arch"]]) else: raise NotImplementedError() @@ -157,6 +153,7 @@ def find_app_host_version(dotnet_cmd, search_version_str): from distutils.version import LooseVersion search_version = LooseVersion(search_version_str) + found_match = False try: env = dict(os.environ, DOTNET_CLI_UI_LANGUAGE="en-US") @@ -176,7 +173,10 @@ def find_app_host_version(dotnet_cmd, search_version_str): version = LooseVersion(version_str) if version >= search_version: - return version_str + search_version = version + found_match = True + if found_match: + return str(search_version) except (subprocess.CalledProcessError, OSError) as e: import sys @@ -291,6 +291,10 @@ def find_dotnet_executable(arch): os.path.join(dir, "arm32"), ] # search subfolders for cross compiling + # `dotnet --info` may not specify architecture. In such cases, + # we fallback to the first one we find without architecture. + sdk_path_unknown_arch = "" + for dir in search_dirs: path = os.path.join(dir, "dotnet") @@ -302,10 +306,14 @@ def find_dotnet_executable(arch): sdk_arch = find_dotnet_arch(path_with_ext) if sdk_arch == arch or arch == "": return path_with_ext + elif sdk_arch == "": + sdk_path_unknown_arch = path_with_ext else: if os.path.isfile(path) and os.access(path, os.X_OK): sdk_arch = find_dotnet_arch(path) if sdk_arch == arch or arch == "": return path + elif sdk_arch == "": + sdk_path_unknown_arch = path - return "" + return sdk_path_unknown_arch |