diff --git a/sourcekit-lsp/Utilities/build-script-helper.py b/sourcekit-lsp/Utilities/build-script-helper.py --- a/sourcekit-lsp/Utilities/build-script-helper.py +++ b/sourcekit-lsp/Utilities/build-script-helper.py @@ -93,6 +93,10 @@ def handle_invocation(swift_exec, args): swiftpm_args = get_swiftpm_options(args) + if args.cross_compile_host and re.match('android-aarch64', args.cross_compile_host): + swiftpm_exec = os.path.join(os.path.realpath(os.getenv("SWIFT_BINDIR")), "swift") + else: + swiftpm_exec = swift_exec env = os.environ # Set the toolchain used in tests at runtime @@ -120,7 +124,7 @@ env['SWIFT_EXEC'] = '%sc' % (swift_exec) if args.action == 'build': - swiftpm('build', swift_exec, swiftpm_args, env) + swiftpm('build', swiftpm_exec, swiftpm_args, env) elif args.action == 'test': if not args.skip_long_tests: env['SOURCEKIT_LSP_ENABLE_LONG_TESTS'] = '1' @@ -135,9 +139,9 @@ test_args += ['--parallel'] swiftpm('test', swift_exec, test_args, env) elif args.action == 'install': - bin_path = swiftpm_bin_path(swift_exec, swiftpm_args, env) + bin_path = swiftpm_bin_path(swiftpm_exec, swiftpm_args, env) swiftpm_args += ['-Xswiftc', '-no-toolchain-stdlib-rpath'] - swiftpm('build', swift_exec, swiftpm_args, env) + swiftpm('build', swiftpm_exec, swiftpm_args, env) if not args.install_prefixes: args.install_prefixes = [args.toolchain] diff --git a/swift/utils/swift_build_support/swift_build_support/products/product.py b/swift/utils/swift_build_support/swift_build_support/products/product.py index 575fa374ad..3554577f92 100644 --- a/swift/utils/swift_build_support/swift_build_support/products/product.py +++ b/swift/utils/swift_build_support/swift_build_support/products/product.py @@ -202,7 +202,7 @@ class Product(object): if self.is_darwin_host(host_target): install_destdir = self.host_install_destdir(host_target) else: - install_destdir = os.path.join(install_destdir, self.args.host_target) + return os.path.join(os.path.dirname(self.build_dir), "swift-%s" % self.args.host_target) return targets.toolchain_path(install_destdir, self.args.install_prefix) diff --git a/swift-driver/Utilities/build-script-helper.py b/swift-driver/Utilities/build-script-helper.py --- a/swift-driver/Utilities/build-script-helper.py +++ b/swift-driver/Utilities/build-script-helper.py @@ -166,6 +167,10 @@ toolchain_bin = os.path.join(args.toolchain, 'bin') swift_exec = os.path.join(toolchain_bin, 'swift') swiftc_exec = os.path.join(toolchain_bin, 'swiftc') + if args.cross_compile_hosts and re.match('android-aarch64', args.cross_compile_hosts[0]): + swiftpm_exec = os.path.join(os.path.realpath(os.getenv("SWIFT_BINDIR")), "swift") + else: + swiftpm_exec = swift_exec # Platform-specific targets for which we must build swift-driver if args.cross_compile_hosts: @@ -190,7 +194,7 @@ if args.action == 'build': if args.cross_compile_hosts and not re.match('-macosx', args.cross_compile_hosts[0]): - swiftpm('build', swift_exec, swiftpm_args, env) + swiftpm('build', swiftpm_exec, swiftpm_args, env) else: build_using_cmake(args, toolchain_bin, args.build_path, targets) @@ -216,8 +220,8 @@ build_using_cmake(args, toolchain_bin, args.build_path, targets) install(args, args.build_path, targets) else: - bin_path = swiftpm_bin_path(swift_exec, swiftpm_args, env) - swiftpm('build', swift_exec, swiftpm_args, env) + bin_path = swiftpm_bin_path(swiftpm_exec, swiftpm_args, env) + swiftpm('build', swiftpm_exec, swiftpm_args, env) non_darwin_install(args, bin_path) else: assert False, 'unknown action \'{}\''.format(args.action) diff --git a/swiftpm/Utilities/bootstrap b/swiftpm/Utilities/bootstrap index 6ae084e9..379d1738 100755 --- a/swiftpm/Utilities/bootstrap +++ b/swiftpm/Utilities/bootstrap @@ -211,8 +211,9 @@ def parse_build_args(args): args.bootstrap_dir = os.path.join(args.target_dir, "bootstrap") args.conf = 'release' if args.release else 'debug' args.bin_dir = os.path.join(args.target_dir, args.conf) - args.bootstrap = not args.skip_cmake_bootstrap or \ - not os.path.exists(os.path.join(os.path.split(args.swiftc_path)[0], "swift-build")) + args.bootstrap = not args.skip_cmake_bootstrap or \ + (not (args.cross_compile_hosts and re.match('android-aarch64', args.cross_compile_hosts)) and \ + not os.path.exists(os.path.join(os.path.split(args.swiftc_path)[0], "swift-build"))) def parse_test_args(args): """Parses and cleans arguments necessary for the test action.""" @@ -622,7 +623,10 @@ def build_swiftpm_with_swiftpm(args, integrated_swift_driver): swiftpm_args.append(os.path.join(args.bootstrap_dir, "bin/swift-build")) else: note("Building SwiftPM (with a prebuilt swift-build)") - swiftpm_args.append(os.path.join(os.path.split(args.swiftc_path)[0], "swift-build")) + if args.cross_compile_hosts and re.match('android-aarch64', args.cross_compile_hosts): + swiftpm_args.append(os.path.join(os.path.realpath(os.getenv("SWIFT_BINDIR")), "swift-build")) + else: + swiftpm_args.append(os.path.join(os.path.split(args.swiftc_path)[0], "swift-build")) swiftpm_args.append("--disable-sandbox")