Browse Source

🔨 Fatal error for wrong GCC on macOS Native Sim

Scott Lahteine 8 months ago
parent
commit
a7444021c6
1 changed files with 37 additions and 21 deletions
  1. 37 21
      buildroot/share/PlatformIO/scripts/simulator.py

+ 37 - 21
buildroot/share/PlatformIO/scripts/simulator.py

@@ -17,37 +17,53 @@ if pioutil.is_pio_build():
     env['PROGNAME'] = "MarlinSimulator"
 
     #
-    # If Xcode is installed add the path to its Frameworks folder,
-    # or if Mesa is installed try to use its GL/gl.h.
+    # Check for a valid GCC and available OpenGL on macOS
     #
-
+    emsg = ''
+    fatal = 0
     import sys
     if sys.platform == 'darwin':
 
-        #
-        # Silence half of the ranlib warnings. (No equivalent for 'ARFLAGS')
-        #
-        env['RANLIBFLAGS'] += [ "-no_warning_for_no_symbols" ]
+        import shutil
+        gcc = shutil.which('gcc')
+        if gcc == '' or gcc == '/usr/bin/gcc':
+            if gcc == '':
+                emsg = "\u001b[31mNo GCC found in your configured shell PATH."
+            elif gcc == '/usr/bin/gcc':
+                emsg = "\u001b[31mCan't build Marlin Native on macOS using the included version of GCC (clang)."
+            emsg += "\n\u001b[31mSee 'native.ini' for instructions to install GCC with MacPorts or Homebrew."
+            fatal = 1
 
-        # Default paths for Xcode and a lucky GL/gl.h dropped by Mesa
-        xcode_path = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
-        mesa_path = "/opt/local/include/GL/gl.h"
+        else:
 
-        import os.path
+            #
+            # Silence half of the ranlib warnings. (No equivalent for 'ARFLAGS')
+            #
+            env['RANLIBFLAGS'] += [ "-no_warning_for_no_symbols" ]
 
-        if os.path.exists(xcode_path):
+            # Default paths for Xcode and a lucky GL/gl.h dropped by Mesa
+            xcode_path = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
+            mesa_path = "/opt/local/include/GL/gl.h"
 
-            env['BUILD_FLAGS'] += [ "-F" + xcode_path ]
-            print("Using OpenGL framework headers from Xcode.app")
+            import os.path
 
-        elif os.path.exists(mesa_path):
+            if os.path.exists(xcode_path):
 
-            env['BUILD_FLAGS'] += [ '-D__MESA__' ]
-            print("Using OpenGL header from", mesa_path)
+                env['BUILD_FLAGS'] += [ "-F" + xcode_path ]
+                emsg = "\u001b[33mUsing OpenGL framework headers from Xcode.app"
 
-        else:
+            elif os.path.exists(mesa_path):
+
+                env['BUILD_FLAGS'] += [ '-D__MESA__' ]
+                emsg = f"\u001b[33mUsing OpenGL header from {mesa_path}"
+
+            else:
+
+                emsg = "\u001b[31mNo OpenGL headers found. Install Xcode for matching headers, or use 'sudo port install mesa' to get a GL/gl.h."
+                fatal = 1
 
-            print("\n\nNo OpenGL headers found. Install Xcode for matching headers, or use 'sudo port install mesa' to get a GL/gl.h.\n\n")
+    # Print error message, if any
+    if emsg: print(f"\n\n{emsg}\n\n")
 
-            # Break out of the PIO build immediately
-            sys.exit(1)
+    # Break out of the PIO build immediately
+    if fatal: sys.exit(1)