diff --git a/platform/ios/detect.py b/platform/ios/detect.py index dd87de04dfd..16c9f5ac9ef 100644 --- a/platform/ios/detect.py +++ b/platform/ios/detect.py @@ -25,6 +25,7 @@ def get_opts(): return [ ("vulkan_sdk_path", "Path to the Vulkan SDK", ""), + ("SWIFT_FRONTEND", "Path to the swift-frontend binary", ""), # APPLE_TOOLCHAIN_PATH Example: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain (("APPLE_TOOLCHAIN_PATH", "IOS_TOOLCHAIN_PATH"), "Path to the Apple toolchain", ""), (("APPLE_SDK_PATH", "IOS_SDK_PATH"), "Path to the iOS SDK", ""), diff --git a/platform/macos/detect.py b/platform/macos/detect.py index 9ea4f3447b8..cfedad09704 100644 --- a/platform/macos/detect.py +++ b/platform/macos/detect.py @@ -29,6 +29,7 @@ def get_opts(): return [ ("osxcross_sdk", "OSXCross SDK version", "darwin16"), + ("SWIFT_FRONTEND", "Path to the swift-frontend binary", ""), ("MACOS_SDK_PATH", "Path to the macOS SDK", ""), ("vulkan_sdk_path", "Path to the Vulkan SDK", ""), EnumVariable("macports_clang", "Build using Clang from MacPorts", "no", ["no", "5.0", "devel"], ignorecase=2), diff --git a/platform/visionos/detect.py b/platform/visionos/detect.py index 787d51e5d9c..dc0a7de9cea 100644 --- a/platform/visionos/detect.py +++ b/platform/visionos/detect.py @@ -24,6 +24,7 @@ def get_opts(): from SCons.Variables import BoolVariable return [ + ("SWIFT_FRONTEND", "Path to the swift-frontend binary", ""), # APPLE_TOOLCHAIN_PATH Example: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain ("APPLE_TOOLCHAIN_PATH", "Path to the Apple toolchain", ""), (("APPLE_SDK_PATH", "VISIONOS_SDK_PATH"), "Path to the visionOS SDK", ""), diff --git a/platform_methods.py b/platform_methods.py index 09774cc54e3..af9134ae8bc 100644 --- a/platform_methods.py +++ b/platform_methods.py @@ -270,7 +270,16 @@ def setup_swift_builder(env, apple_platform, sdk_path, current_path, bridging_he env["ALL_SWIFT_FILES"] = all_swift_files env["CURRENT_PATH"] = current_path - frontend_path = "$APPLE_TOOLCHAIN_PATH/usr/bin/swift-frontend" + if "SWIFT_FRONTEND" in env and env["SWIFT_FRONTEND"] != "": + frontend_path = env["SWIFT_FRONTEND"] + elif "osxcross" not in env: + frontend_path = "$APPLE_TOOLCHAIN_PATH/usr/bin/swift-frontend" + else: + frontend_path = None + + if frontend_path is None: + raise Exception("Swift frontend path is not set. Please set SWIFT_FRONTEND.") + bridging_header_path = current_path + "/" + bridging_header_filename env["SWIFTC"] = frontend_path + " -frontend -c" # Swift compiler env["SWIFTCFLAGS"] = [ @@ -290,6 +299,14 @@ def setup_swift_builder(env, apple_platform, sdk_path, current_path, bridging_he "-I./", # Pass the current directory as the header root so bridging headers can include files from any point of the hierarchy ] + if "osxcross" in env: + env.Append( + SWIFTCFLAGS=[ + "-resource-dir", + "/root/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift", + ] + ) + if env["debug_symbols"]: env.Append(SWIFTCFLAGS=["-g"])