From d55ed0cb154f72ca80c725344f91a294f00ca813 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Thu, 14 Nov 2024 09:48:34 +0200 Subject: [PATCH] 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) --- SConstruct | 38 +++++++++++++++----------------------- methods.py | 6 ++++-- platform/macos/detect.py | 5 ++--- 3 files changed, 21 insertions(+), 28 deletions(-) diff --git a/SConstruct b/SConstruct index 5a3a8f49ebd..16e9d59d91a 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 d89185f5858..89c59273520 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 cab91fd33ca..3575e93c688 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"])