Selaa lähdekoodia

[macOS, 3.x] Workaround Xcode 15 linker bug.

bruvzg 1 vuosi sitten
vanhempi
commit
fad3fced8f
2 muutettua tiedostoa jossa 19 lisäystä ja 1 poistoa
  1. 11 0
      methods.py
  2. 8 1
      platform/osx/detect.py

+ 11 - 0
methods.py

@@ -1080,6 +1080,17 @@ def get_compiler_version(env):
         return None
 
 
+def is_vanilla_clang(env):
+    if not using_clang(env):
+        return False
+    try:
+        version = decode_utf8(subprocess.check_output([env.subst(env["CXX"]), "--version"]).strip())
+    except (subprocess.CalledProcessError, OSError):
+        print("Couldn't parse CXX environment variable to infer compiler version.")
+        return False
+    return not version.startswith("Apple")
+
+
 def using_gcc(env):
     return "gcc" in os.path.basename(env["CC"])
 

+ 8 - 1
platform/osx/detect.py

@@ -1,6 +1,6 @@
 import os
 import sys
-from methods import detect_darwin_sdk_path
+from methods import detect_darwin_sdk_path, get_compiler_version, is_vanilla_clang
 
 
 def is_active():
@@ -88,6 +88,13 @@ def configure(env):
         env.Append(CCFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.13"])
         env.Append(LINKFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.13"])
 
+    cc_version = get_compiler_version(env) or [-1, -1]
+    vanilla = is_vanilla_clang(env)
+
+    # Workaround for Xcode 15 linker bug.
+    if not vanilla and cc_version[0] == 15 and cc_version[1] == 0:
+        env.Prepend(LINKFLAGS=["-ld_classic"])
+
     if not "osxcross" in env:  # regular native build
         if env["macports_clang"] != "no":
             mpprefix = os.environ.get("MACPORTS_PREFIX", "/opt/local")