Pārlūkot izejas kodu

Merge pull request #109912 from Repiteo/ci/d3d12-dependency-fix

CI: Fix detection of Windows D3D12 dependencies
Thaddeus Crews 2 nedēļas atpakaļ
vecāks
revīzija
f20ef37ccb
1 mainītis faili ar 20 papildinājumiem un 5 dzēšanām
  1. 20 5
      misc/scripts/install_d3d12_sdk_windows.py

+ 20 - 5
misc/scripts/install_d3d12_sdk_windows.py

@@ -1,5 +1,9 @@
 #!/usr/bin/env python
 
+if __name__ != "__main__":
+    raise SystemExit(f'Utility script "{__file__}" should not be used as a module!')
+
+import argparse
 import os
 import shutil
 import subprocess
@@ -10,6 +14,14 @@ sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "../
 
 from misc.utility.color import Ansi, color_print
 
+parser = argparse.ArgumentParser(description="Install D3D12 dependencies for Windows platforms.")
+parser.add_argument(
+    "--mingw_prefix",
+    default=os.getenv("MINGW_PREFIX", ""),
+    help="Explicitly specify a path containing the MinGW bin folder.",
+)
+args = parser.parse_args()
+
 # Base Godot dependencies path
 # If cross-compiling (no LOCALAPPDATA), we install in `bin`
 deps_folder = os.getenv("LOCALAPPDATA")
@@ -74,10 +86,11 @@ print("Mesa NIR installed successfully.\n")
 # MinGW needs DLLs converted with dlltool.
 # We rely on finding gendef/dlltool to detect if we have MinGW.
 # Check existence of needed tools for generating mingw library.
-gendef = shutil.which("gendef") or ""
-dlltool = shutil.which("dlltool") or ""
-if dlltool == "":
-    dlltool = shutil.which("x86_64-w64-mingw32-dlltool") or ""
+pathstr = os.environ.get("PATH", "")
+if args.mingw_prefix:
+    pathstr = os.path.join(args.mingw_prefix, "bin") + os.pathsep + pathstr
+gendef = shutil.which("x86_64-w64-mingw32-gendef", path=pathstr) or shutil.which("gendef", path=pathstr) or ""
+dlltool = shutil.which("x86_64-w64-mingw32-dlltool", path=pathstr) or shutil.which("dlltool", path=pathstr) or ""
 has_mingw = gendef != "" and dlltool != ""
 
 color_print(f"{Ansi.BOLD}[2/3] WinPixEventRuntime")
@@ -107,7 +120,9 @@ if has_mingw:
     )
     os.chdir(cwd)
 else:
-    print("MinGW wasn't found, so only MSVC support is provided for WinPixEventRuntime.")
+    print(
+        'MinGW support requires "dlltool" and "gendef" dependencies, so only MSVC support is provided for WinPixEventRuntime. Did you forget to provide a `--mingw_prefix`?'
+    )
 print(f"WinPixEventRuntime {pix_version} installed successfully.\n")
 
 # DirectX 12 Agility SDK