summaryrefslogtreecommitdiffstats
path: root/waftools/detections/compiler_swift.py
diff options
context:
space:
mode:
Diffstat (limited to 'waftools/detections/compiler_swift.py')
-rw-r--r--waftools/detections/compiler_swift.py193
1 files changed, 0 insertions, 193 deletions
diff --git a/waftools/detections/compiler_swift.py b/waftools/detections/compiler_swift.py
deleted file mode 100644
index 854d1a6db8..0000000000
--- a/waftools/detections/compiler_swift.py
+++ /dev/null
@@ -1,193 +0,0 @@
-import re
-import string
-import os.path
-from waflib import Utils
-from distutils.version import StrictVersion
-
-def __run(cmd):
- try:
- output = Utils.subprocess.check_output(cmd, stderr=Utils.subprocess.STDOUT, universal_newlines=True)
- return output.strip()
- except Exception:
- return ""
-
-def __add_swift_flags(ctx):
- ctx.env.SWIFT_FLAGS = [
- "-frontend", "-c", "-sdk", ctx.env.MACOS_SDK,
- "-enable-objc-interop", "-emit-objc-header", "-parse-as-library",
- "-target", "x86_64-apple-macosx10.10"
- ]
-
- verRe = re.compile("(?i)version\s?([\d.]+)")
- ctx.env.SWIFT_VERSION = verRe.search(__run([ctx.env.SWIFT, '-version'])).group(1)
-
- # prevent possible breakages with future swift versions
- if StrictVersion(ctx.env.SWIFT_VERSION) >= StrictVersion("6.0"):
- ctx.env.SWIFT_FLAGS.extend([ "-swift-version", "5" ])
-
- if ctx.is_debug_build():
- ctx.env.SWIFT_FLAGS.append("-g")
-
- if ctx.is_optimization():
- ctx.env.SWIFT_FLAGS.append("-O")
-
-def __add_static_swift_library_linking_flags(ctx, swift_library):
- ctx.env.append_value('LINKFLAGS', [
- '-L%s' % swift_library,
- '-Xlinker', '-force_load_swift_libs', '-lc++',
- ])
-
-def __add_dynamic_swift_library_linking_flags(ctx, swift_library):
- ctx.env.append_value('LINKFLAGS', [ '-L%s' % swift_library ])
-
- #ABI compatibility
- if StrictVersion(ctx.env.SWIFT_VERSION) >= StrictVersion("5.0"):
- ctx.env.append_value('LINKFLAGS', [
- '-Xlinker', '-rpath', '-Xlinker', '/usr/lib/swift',
- '-L/usr/lib/swift',
- ])
-
- ctx.env.append_value('LINKFLAGS', [
- '-Xlinker', '-rpath', '-Xlinker', swift_library,
- ])
-
-def __find_swift_library(ctx):
- swift_libraries = {}
- #look for set lib paths in passed environment variables
- if 'SWIFT_LIB_DYNAMIC' in ctx.environ:
- swift_libraries['SWIFT_LIB_DYNAMIC'] = ctx.environ['SWIFT_LIB_DYNAMIC']
- if 'SWIFT_LIB_STATIC' in ctx.environ:
- swift_libraries['SWIFT_LIB_STATIC'] = ctx.environ['SWIFT_LIB_STATIC']
-
- #search for swift libs relative to the swift compiler executable
- swift_library_relative_paths = {
- 'SWIFT_LIB_DYNAMIC': '../../lib/swift/macosx',
- 'SWIFT_LIB_STATIC': '../../lib/swift_static/macosx'
- }
-
- for lib_type, path in swift_library_relative_paths.items():
- if lib_type not in swift_libraries:
- lib_path = os.path.join(ctx.env.SWIFT, path)
- swift_library = ctx.root.find_dir(lib_path)
- if swift_library is not None:
- swift_libraries[lib_type] = swift_library.abspath()
-
- #fall back to xcode-select path
- swift_library_paths = {
- 'SWIFT_LIB_DYNAMIC': [
- 'Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx',
- 'usr/lib/swift/macosx'
- ],
- 'SWIFT_LIB_STATIC': [
- 'Toolchains/XcodeDefault.xctoolchain/usr/lib/swift_static/macosx',
- 'usr/lib/swift_static/macosx'
- ]
- }
- dev_path = __run(['xcode-select', '-p'])[1:]
-
- for lib_type, paths in swift_library_paths.items():
- for path in paths:
- if lib_type not in swift_libraries:
- swift_library = ctx.root.find_dir([dev_path, path])
- if swift_library is not None:
- swift_libraries[lib_type] = swift_library.abspath()
- break
- else:
- break
-
- #check if library paths were found
- ctx.start_msg('Checking for dynamic Swift Library')
- if 'SWIFT_LIB_DYNAMIC' in swift_libraries:
- ctx.end_msg(swift_libraries['SWIFT_LIB_DYNAMIC'])
- else:
- ctx.end_msg(False)
-
- ctx.start_msg('Checking for static Swift Library')
- if 'SWIFT_LIB_STATIC' in swift_libraries:
- ctx.end_msg(swift_libraries['SWIFT_LIB_STATIC'])
- ctx.env['SWIFT_LIB_STATIC'] = swift_libraries['SWIFT_LIB_STATIC']
- else:
- ctx.end_msg(False)
-
- enableStatic = getattr(ctx.options, 'enable_swift-static')
- if (enableStatic) and 'SWIFT_LIB_STATIC' in swift_libraries:
- __add_static_swift_library_linking_flags(ctx, swift_libraries['SWIFT_LIB_STATIC'])
- else:
- __add_dynamic_swift_library_linking_flags(ctx, swift_libraries['SWIFT_LIB_DYNAMIC'])
-
-def __find_macos_sdk(ctx):
- ctx.start_msg('Checking for macOS SDK')
- sdk = None
- sdk_build_version = None
- sdk_version = None
-
- #look for set macOS SDK paths and version in passed environment variables
- if 'MACOS_SDK' in ctx.environ:
- sdk = ctx.environ['MACOS_SDK']
- if 'MACOS_SDK_VERSION' in ctx.environ:
- ctx.env.MACOS_SDK_VERSION = ctx.environ['MACOS_SDK_VERSION']
-
- #find macOS SDK paths and version
- if not sdk:
- sdk = __run(['xcrun', '--sdk', 'macosx', '--show-sdk-path'])
- if not ctx.env.MACOS_SDK_VERSION:
- #show-sdk-build-version: is not available on older command line tools, but return a build version (eg 17A360)
- #show-sdk-version: is always available, but on older dev tools it's only the major version
- sdk_build_version = __run(['xcrun', '--sdk', 'macosx', '--show-sdk-build-version' ])
- sdk_version = __run(['xcrun', '--sdk', 'macosx', '--show-sdk-version' ])
-
- if sdk:
- ctx.env.MACOS_SDK = sdk
- build_version = '10.10.0'
-
- if not ctx.env.MACOS_SDK_VERSION:
- #convert build version to a version string
- #first 2 two digits are the major version, starting with 15 which is 10.11 (offset of 4)
- #1 char is the minor version, A => 0, B => 1 and ongoing
- #las digits are bugfix version, which are nor relevant for us
- #eg 16E185 => 10.12.4, 17A360 => 10.13, 18B71 => 10.14.1
- if sdk_build_version and isinstance(sdk_build_version, str):
- verRe = re.compile("(\d+)(\D+)(\d+)")
- version_parts = verRe.search(sdk_build_version)
- major = int(version_parts.group(1))-4
- minor = string.ascii_lowercase.index(version_parts.group(2).lower())
- build_version = '10.' + str(major) + '.' + str(minor)
-
- if not isinstance(sdk_version, str):
- sdk_version = '10.10.0'
-
- #pick the higher version, always pick sdk over build if newer
- if StrictVersion(build_version) > StrictVersion(sdk_version):
- ctx.env.MACOS_SDK_VERSION = build_version
- else:
- ctx.env.MACOS_SDK_VERSION = sdk_version
-
- ctx.end_msg(sdk + ' (version found: ' + ctx.env.MACOS_SDK_VERSION + ')')
- else:
- ctx.end_msg(False)
-
-def __find_swift_compiler(ctx):
- ctx.start_msg('Checking for swift (Swift compiler)')
- swift = ''
-
- #look for set swift paths in passed environment variables
- if 'SWIFT' in ctx.environ:
- swift = ctx.environ['SWIFT']
-
- #find swift executable
- if not swift:
- swift = __run(['xcrun', '-find', 'swift'])
-
- if swift:
- ctx.end_msg(swift)
- ctx.env.SWIFT = swift
- __add_swift_flags(ctx)
- __find_swift_library(ctx)
- else:
- ctx.end_msg(False)
-
-def configure(ctx):
- if ctx.env.DEST_OS == "darwin":
- __find_macos_sdk(ctx)
- if ctx.options.enable_swift is not False:
- __find_swift_compiler(ctx)