@@ -148,3 +148,102 @@ index fba09416ddb..67b81daba12 100644
148
148
149
149
android_toolchain_path = self.ndk_toolchain_path(args)
150
150
151
+ diff --git a/swift/utils/build_swift/build_swift/driver_arguments.py b/swift/utils/build_swift/build_swift/driver_arguments.py
152
+ index 2b7d6d07799..e0d04d22825 100644
153
+ --- a/swift/utils/build_swift/build_swift/driver_arguments.py
154
+ +++ b/swift/utils/build_swift/build_swift/driver_arguments.py
155
+ @@ -677,6 +677,12 @@ def create_argument_parser():
156
+ "for each cross-compiled toolchain's destdir, useful when building "
157
+ "multiple toolchains and can be disabled if only cross-compiling one.")
158
+
159
+ + option('--cross-compile-build-swift-tools', toggle_true,
160
+ + default=True,
161
+ + help="Cross-compile the Swift compiler, other host tools from the "
162
+ + "compiler repository, and various macros for each listed "
163
+ + "--cross-compile-hosts platform.")
164
+ +
165
+ option('--stdlib-deployment-targets', store,
166
+ type=argparse.ShellSplitType(),
167
+ default=None,
168
+ diff --git a/swift/utils/build_swift/tests/expected_options.py b/swift/utils/build_swift/tests/expected_options.py
169
+ index dddb505174e..6052e1f3da6 100644
170
+ --- a/swift/utils/build_swift/tests/expected_options.py
171
+ +++ b/swift/utils/build_swift/tests/expected_options.py
172
+ @@ -156,6 +156,7 @@ EXPECTED_DEFAULTS = {
173
+ 'compiler_vendor': defaults.COMPILER_VENDOR,
174
+ 'coverage_db': None,
175
+ 'cross_compile_append_host_target_to_destdir': True,
176
+ + 'cross_compile_build_swift_tools': True,
177
+ 'cross_compile_deps_path': None,
178
+ 'cross_compile_hosts': [],
179
+ 'infer_cross_compile_hosts_on_darwin': False,
180
+ @@ -628,6 +629,7 @@ EXPECTED_OPTIONS = [
181
+ EnableOption('--build-swift-clang-overlays'),
182
+ EnableOption('--build-swift-remote-mirror'),
183
+ EnableOption('--cross-compile-append-host-target-to-destdir'),
184
+ + EnableOption('--cross-compile-build-swift-tools'),
185
+ EnableOption('--color-in-tests'),
186
+ EnableOption('--distcc'),
187
+ EnableOption('--sccache'),
188
+ diff --git a/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py b/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py
189
+ index a0289515fd0..355d72fe21f 100644
190
+ --- a/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py
191
+ +++ b/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py
192
+ @@ -119,6 +119,8 @@ class BuildScriptInvocation(object):
193
+ "--cmake-generator", args.cmake_generator,
194
+ "--cross-compile-append-host-target-to-destdir", str(
195
+ args.cross_compile_append_host_target_to_destdir).lower(),
196
+ + "--cross-compile-build-swift-tools", str(
197
+ + args.cross_compile_build_swift_tools).lower(),
198
+ "--build-jobs", str(args.build_jobs),
199
+ "--lit-jobs", str(args.lit_jobs),
200
+ "--common-cmake-options=%s" % ' '.join(
201
+ diff --git a/swift/utils/swift_build_support/swift_build_support/products/llvm.py b/swift/utils/swift_build_support/swift_build_support/products/llvm.py
202
+ index ffae1d66702..bc6e00e7ea3 100644
203
+ --- a/swift/utils/swift_build_support/swift_build_support/products/llvm.py
204
+ +++ b/swift/utils/swift_build_support/swift_build_support/products/llvm.py
205
+ @@ -249,7 +249,8 @@ class LLVM(cmake_product.CMakeProduct):
206
+ # space/time efficient than -g on that platform.
207
+ llvm_cmake_options.define('LLVM_USE_SPLIT_DWARF:BOOL', 'YES')
208
+
209
+ - if not self.args._build_llvm:
210
+ + if not self.args._build_llvm or (not self.args.cross_compile_build_swift_tools and self.is_cross_compile_target(host_target)):
211
+ + self.args._build_llvm = False
212
+ # Indicating we don't want to build LLVM at all should
213
+ # override everything.
214
+ build_targets = []
215
+ @@ -484,7 +484,7 @@ class LLVM(cmake_product.CMakeProduct):
216
+ Whether or not this product should be installed with the given
217
+ arguments.
218
+ """
219
+ - return self.args.install_llvm
220
+ + return self.args.install_llvm and (self.args.cross_compile_build_swift_tools or not self.is_cross_compile_target(host_target))
221
+
222
+ def install(self, host_target):
223
+ """
224
+ diff --git a/swift/utils/swift_build_support/swift_build_support/products/swift_testing_macros.py b/swift/utils/swift_build_support/swift_build_support/products/swift_testing_macros.py
225
+ index ddb3b553de7..7195d921da2 100644
226
+ --- a/swift/utils/swift_build_support/swift_build_support/products/swift_testing_macros.py
227
+ +++ b/swift/utils/swift_build_support/swift_build_support/products/swift_testing_macros.py
228
+ @@ -42,13 +42,19 @@ class SwiftTestingMacros(product.Product):
229
+ return True
230
+
231
+ def should_build(self, host_target):
232
+ - return True
233
+ + build_macros = not self.is_cross_compile_target(host_target) or self.args.cross_compile_build_swift_tools
234
+ + if not build_macros:
235
+ + print("Skipping building Testing Macros for %s, because the host tools are not being built", host_target)
236
+ + return build_macros
237
+
238
+ def should_test(self, host_target):
239
+ return False
240
+
241
+ def should_install(self, host_target):
242
+ - return self.args.install_swift_testing_macros
243
+ + install_macros = self.args.install_swift_testing_macros and (not self.is_cross_compile_target(host_target) or self.args.cross_compile_build_swift_tools)
244
+ + if self.args.install_swift_testing_macros and not install_macros:
245
+ + print("Skipping installing Testing Macros for %s, because the host tools are not being built", host_target)
246
+ + return install_macros
247
+
248
+ def _cmake_product(self, host_target):
249
+ build_root = os.path.dirname(self.build_dir)
0 commit comments