summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYevhen Babiichuk (DustDFG) <dfgdust@gmail.com>2024-11-14 09:48:34 +0200
committerYevhen Babiichuk (DustDFG) <dfgdust@gmail.com>2024-11-15 12:59:46 +0200
commitd55ed0cb154f72ca80c725344f91a294f00ca813 (patch)
treefee615d2d2f68a63e93fa9d752a0cef129d90dcb
parent673f396677654220d7e1d5b6fb5ed3b50126b4e6 (diff)
downloadredot-engine-d55ed0cb154f72ca80c725344f91a294f00ca813.tar.gz
Buildsystem: Refactor compiler detection code
* Delete old check for gcc 8 as we support 9 or higher * Flatten branches for clang and apple clang * Renamed is_vanilla_clang to is_apple_clang to be more clear Signed-off-by: Yevhen Babiichuk (DustDFG) <dfgdust@gmail.com>
-rw-r--r--SConstruct38
-rw-r--r--methods.py6
-rw-r--r--platform/macos/detect.py5
3 files changed, 21 insertions, 28 deletions
diff --git a/SConstruct b/SConstruct
index 5a3a8f49eb..16e9d59d91 100644
--- a/SConstruct
+++ b/SConstruct
@@ -656,40 +656,32 @@ elif methods.using_gcc(env):
"to switch to posix threads."
)
Exit(255)
- if env["debug_paths_relative"] and cc_version_major < 8:
- print_warning("GCC < 8 doesn't support -ffile-prefix-map, disabling `debug_paths_relative` option.")
- env["debug_paths_relative"] = False
elif methods.using_clang(env):
# Apple LLVM versions differ from upstream LLVM version \o/, compare
# in https://en.wikipedia.org/wiki/Xcode#Toolchain_versions
- if env["platform"] == "macos" or env["platform"] == "ios":
- vanilla = methods.is_vanilla_clang(env)
- if vanilla and cc_version_major < 6:
- print_error(
- "Detected Clang version older than 6, which does not fully support "
- "C++17. Supported versions are Clang 6 and later."
- )
- Exit(255)
- elif not vanilla and cc_version_major < 10:
+ if methods.is_apple_clang(env):
+ if cc_version_major < 10:
print_error(
"Detected Apple Clang version older than 10, which does not fully "
"support C++17. Supported versions are Apple Clang 10 and later."
)
Exit(255)
- if env["debug_paths_relative"] and not vanilla and cc_version_major < 12:
+ elif env["debug_paths_relative"] and cc_version_major < 12:
print_warning(
"Apple Clang < 12 doesn't support -ffile-prefix-map, disabling `debug_paths_relative` option."
)
env["debug_paths_relative"] = False
- elif cc_version_major < 6:
- print_error(
- "Detected Clang version older than 6, which does not fully support "
- "C++17. Supported versions are Clang 6 and later."
- )
- Exit(255)
- if env["debug_paths_relative"] and cc_version_major < 10:
- print_warning("Clang < 10 doesn't support -ffile-prefix-map, disabling `debug_paths_relative` option.")
- env["debug_paths_relative"] = False
+ else:
+ if cc_version_major < 6:
+ print_error(
+ "Detected Clang version older than 6, which does not fully support "
+ "C++17. Supported versions are Clang 6 and later."
+ )
+ Exit(255)
+ elif env["debug_paths_relative"] and cc_version_major < 10:
+ print_warning("Clang < 10 doesn't support -ffile-prefix-map, disabling `debug_paths_relative` option.")
+ env["debug_paths_relative"] = False
+
elif env.msvc:
# Ensure latest minor builds of Visual Studio 2017/2019.
# https://github.com/godotengine/godot/pull/94995#issuecomment-2336464574
@@ -753,7 +745,7 @@ else:
project_path = Dir("#").abspath
env.Append(CCFLAGS=[f"-ffile-prefix-map={project_path}=."])
else:
- if methods.using_clang(env) and not methods.is_vanilla_clang(env):
+ if methods.is_apple_clang(env):
# Apple Clang, its linker doesn't like -s.
env.Append(LINKFLAGS=["-Wl,-S", "-Wl,-x", "-Wl,-dead_strip"])
else:
diff --git a/methods.py b/methods.py
index d89185f585..89c5927352 100644
--- a/methods.py
+++ b/methods.py
@@ -652,7 +652,9 @@ def detect_darwin_sdk_path(platform, env):
raise
-def is_vanilla_clang(env):
+def is_apple_clang(env):
+ if env["platform"] not in ["macos", "ios"]:
+ return False
if not using_clang(env):
return False
try:
@@ -660,7 +662,7 @@ def is_vanilla_clang(env):
except (subprocess.CalledProcessError, OSError):
print_warning("Couldn't parse CXX environment variable to infer compiler version.")
return False
- return not version.startswith("Apple")
+ return version.startswith("Apple")
def get_compiler_version(env):
diff --git a/platform/macos/detect.py b/platform/macos/detect.py
index cab91fd33c..3575e93c68 100644
--- a/platform/macos/detect.py
+++ b/platform/macos/detect.py
@@ -2,7 +2,7 @@ import os
import sys
from typing import TYPE_CHECKING
-from methods import detect_darwin_sdk_path, get_compiler_version, is_vanilla_clang, print_error, print_warning
+from methods import detect_darwin_sdk_path, get_compiler_version, is_apple_clang, print_error, print_warning
from platform_methods import detect_arch, detect_mvk, validate_arch
if TYPE_CHECKING:
@@ -101,10 +101,9 @@ def configure(env: "SConsEnvironment"):
cc_version = get_compiler_version(env)
cc_version_major = cc_version["apple_major"]
cc_version_minor = cc_version["apple_minor"]
- vanilla = is_vanilla_clang(env)
# Workaround for Xcode 15 linker bug.
- if not vanilla and cc_version_major == 1500 and cc_version_minor == 0:
+ if is_apple_clang(env) and cc_version_major == 1500 and cc_version_minor == 0:
env.Prepend(LINKFLAGS=["-ld_classic"])
env.Append(CCFLAGS=["-fobjc-arc"])