Browse Source

SCons: Better validation for platform-specific opt-in drivers

This replaces cryptic compilation errors with a clear error message
and early build termination.
Rémi Verschelde 1 year ago
parent
commit
6e9bcc0f18
6 changed files with 20 additions and 8 deletions
  1. 3 3
      SConstruct
  2. 10 0
      drivers/SCsub
  3. 4 2
      modules/mono/config.py
  4. 1 1
      platform/ios/detect.py
  5. 1 1
      platform/macos/detect.py
  6. 1 1
      platform/windows/detect.py

+ 3 - 3
SConstruct

@@ -218,11 +218,11 @@ opts.Add(BoolVariable("deprecated", "Enable compatibility code for deprecated an
 opts.Add(EnumVariable("precision", "Set the floating-point precision level", "single", ("single", "double")))
 opts.Add(BoolVariable("minizip", "Enable ZIP archive support using minizip", True))
 opts.Add(BoolVariable("brotli", "Enable Brotli for decompresson and WOFF2 fonts support", True))
-opts.Add(BoolVariable("xaudio2", "Enable the XAudio2 audio driver", False))
+opts.Add(BoolVariable("xaudio2", "Enable the XAudio2 audio driver on supported platforms", False))
 opts.Add(BoolVariable("vulkan", "Enable the vulkan rendering driver", True))
 opts.Add(BoolVariable("opengl3", "Enable the OpenGL/GLES3 rendering driver", True))
-opts.Add(BoolVariable("d3d12", "Enable the Direct3D 12 rendering driver", False))
-opts.Add(BoolVariable("metal", "Enable the Metal rendering driver (Apple arm64 only)", False))
+opts.Add(BoolVariable("d3d12", "Enable the Direct3D 12 rendering driver on supported platforms", False))
+opts.Add(BoolVariable("metal", "Enable the Metal rendering driver on supported platforms (Apple arm64 only)", False))
 opts.Add(BoolVariable("openxr", "Enable the OpenXR driver", True))
 opts.Add(BoolVariable("use_volk", "Use the volk library to load the Vulkan loader dynamically", True))
 opts.Add(BoolVariable("disable_exceptions", "Force disabling exception handling code", True))

+ 10 - 0
drivers/SCsub

@@ -3,6 +3,7 @@
 Import("env")
 
 env.drivers_sources = []
+supported = env.get("supported", [])
 
 # OS drivers
 SConscript("unix/SCsub")
@@ -17,6 +18,9 @@ if env["platform"] == "windows":
     if not env.msvc:
         SConscript("backtrace/SCsub")
 if env["xaudio2"]:
+    if "xaudio2" not in supported:
+        print("Target platform '{}' does not support the XAudio2 audio driver. Aborting.".format(env["platform"]))
+        Exit(255)
     SConscript("xaudio2/SCsub")
 
 # Midi drivers
@@ -28,12 +32,18 @@ SConscript("winmidi/SCsub")
 if env["vulkan"]:
     SConscript("vulkan/SCsub")
 if env["d3d12"]:
+    if "d3d12" not in supported:
+        print("Target platform '{}' does not support the D3D12 rendering driver. Aborting.".format(env["platform"]))
+        Exit(255)
     SConscript("d3d12/SCsub")
 if env["opengl3"]:
     SConscript("gl_context/SCsub")
     SConscript("gles3/SCsub")
     SConscript("egl/SCsub")
 if env["metal"]:
+    if "metal" not in supported:
+        print("Target platform '{}' does not support the Metal rendering driver. Aborting.".format(env["platform"]))
+        Exit(255)
     SConscript("metal/SCsub")
 
 # Core dependencies

+ 4 - 2
modules/mono/config.py

@@ -11,9 +11,11 @@ def can_build(env, platform):
 def configure(env):
     # Check if the platform has marked mono as supported.
     supported = env.get("supported", [])
-
     if "mono" not in supported:
-        raise RuntimeError("This module does not currently support building for this platform")
+        import sys
+
+        print("The 'mono' module does not currently support building for this platform. Aborting.")
+        sys.exit(255)
 
     env.add_module_version_string("mono")
 

+ 1 - 1
platform/ios/detect.py

@@ -52,7 +52,7 @@ def get_flags():
         "target": "template_debug",
         "use_volk": False,
         "metal": True,
-        "supported": ["mono"],
+        "supported": ["metal", "mono"],
         "builtin_pcre2_with_jit": False,
     }
 

+ 1 - 1
platform/macos/detect.py

@@ -57,7 +57,7 @@ def get_flags():
         "arch": detect_arch(),
         "use_volk": False,
         "metal": True,
-        "supported": ["mono"],
+        "supported": ["metal", "mono"],
     }
 
 

+ 1 - 1
platform/windows/detect.py

@@ -247,7 +247,7 @@ def get_flags():
 
     return {
         "arch": arch,
-        "supported": ["mono"],
+        "supported": ["d3d12", "mono", "xaudio2"],
     }