termux-packages/packages/swift/swift-driver.patch

117 lines
5.2 KiB
Diff

diff --git a/swift-driver/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift b/swift-driver/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
index 06a29d8..5cbfddd 100644
--- a/swift-driver/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
+++ b/swift-driver/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
@@ -14,6 +14,7 @@ import SwiftOptions
extension GenericUnixToolchain {
private func defaultLinker(for targetTriple: Triple) -> String? {
+ if targetTriple.environment == .android { return "lld" }
switch targetTriple.arch {
case .arm, .aarch64, .armeb, .thumb, .thumbeb:
// BFD linker has issues wrt relocation of the protocol conformance
@@ -133,8 +137,7 @@ extension GenericUnixToolchain {
isShared: hasRuntimeArgs
)
- if hasRuntimeArgs && targetTriple.environment != .android &&
- toolchainStdlibRpath {
+ if hasRuntimeArgs && toolchainStdlibRpath {
// FIXME: We probably shouldn't be adding an rpath here unless we know
// ahead of time the standard library won't be copied.
for path in runtimePaths {
diff --git a/swift-driver/Utilities/build-script-helper.py b/swift-driver/Utilities/build-script-helper.py
index e986475..83916c3 100755
--- a/swift-driver/Utilities/build-script-helper.py
+++ b/swift-driver/Utilities/build-script-helper.py
@@ -11,6 +11,7 @@ import shutil
import subprocess
import sys
import errno
+import re
if platform.system() == 'Darwin':
shared_lib_ext = '.dylib'
@@ -96,8 +97,13 @@ def get_swiftpm_options(args):
os.path.join(args.toolchain, 'lib', 'swift', 'Block'),
]
- if 'ANDROID_DATA' in os.environ:
+ if args.cross_compile_hosts:
+ swiftpm_args += [ '--destination', args.cross_compile_config ]
+
+ if 'ANDROID_DATA' in os.environ or (args.cross_compile_hosts and re.match(
+ 'android-', args.cross_compile_hosts[0])):
swiftpm_args += [
+ '-Xlinker', '-landroid-spawn',
'-Xlinker', '-rpath', '-Xlinker', '$ORIGIN/../lib/swift/android',
# SwiftPM will otherwise try to compile against GNU strerror_r on
# Android and fail.
@@ -177,8 +185,13 @@ def handle_invocation(args):
if args.sysroot:
env['SDKROOT'] = args.sysroot
+ env['SWIFT_EXEC'] = '%sc' % (swift_exec)
+
if args.action == 'build':
- build_using_cmake(args, toolchain_bin, args.build_path, targets)
+ if args.cross_compile_hosts and not re.match('-macosx', args.cross_compile_hosts[0]):
+ swiftpm('build', swift_exec, swiftpm_args, env)
+ else:
+ build_using_cmake(args, toolchain_bin, args.build_path, targets)
elif args.action == 'clean':
print('Cleaning ' + args.build_path)
@@ -188,7 +201,6 @@ def handle_invocation(args):
tool_path = os.path.join(toolchain_bin, tool)
if os.path.exists(tool_path):
env['SWIFT_DRIVER_' + tool.upper().replace('-','_') + '_EXEC'] = '%s' % (tool_path)
- env['SWIFT_EXEC'] = '%sc' % (swift_exec)
test_args = swiftpm_args
test_args += ['-Xswiftc', '-enable-testing']
if should_test_parallel():
@@ -205,16 +217,17 @@ def handle_invocation(args):
else:
bin_path = swiftpm_bin_path(swift_exec, swiftpm_args, env)
swiftpm('build', swift_exec, swiftpm_args, env)
- non_darwin_install(bin_path, args.toolchain, args.verbose)
+ non_darwin_install(args, bin_path)
else:
assert False, 'unknown action \'{}\''.format(args.action)
# Installation flow for non-darwin platforms, only copies over swift-driver and swift-help
# TODO: Unify CMake-based installation flow used on Darwin with this
-def non_darwin_install(swiftpm_bin_path, toolchain, verbose):
- toolchain_bin = os.path.join(toolchain, 'bin')
- for exe in executables_to_install:
- install_binary(exe, swiftpm_bin_path, toolchain_bin, verbose)
+def non_darwin_install(args, swiftpm_bin_path):
+ for prefix in args.install_prefixes:
+ prefix_bin = os.path.join(prefix, 'bin')
+ for exe in executables_to_install:
+ install_binary(exe, swiftpm_bin_path, prefix_bin, args.verbose)
def install(args, build_dir, targets):
# Construct and install universal swift-driver, swift-help executables
@@ -581,6 +594,10 @@ def main():
nargs='*',
help='List of cross compile hosts targets.',
default=[])
+ parser.add_argument(
+ '--cross-compile-config',
+ metavar='PATH',
+ help="A JSON SPM config file with Swift flags for cross-compilation")
parser.add_argument('--ninja-bin', metavar='PATH', help='ninja binary to use for testing')
parser.add_argument('--cmake-bin', metavar='PATH', help='cmake binary to use for building')
parser.add_argument('--build-path', metavar='PATH', default='.build', help='build in the given path')
@@ -617,9 +634,6 @@ def main():
else:
args.sysroot = None
- if args.cross_compile_hosts and not all('apple-macos' in target for target in args.cross_compile_hosts):
- error('Cross-compilation is currently only supported for the Darwin platform.')
-
if args.cross_compile_hosts and args.local_compiler_build:
error('Cross-compilation is currently not supported for the local compiler installation')