@@ -23,6 +23,56 @@ index 01390761c8c..d84c142397c 100644
23
23
24
24
// NOTE: 25185.byteSwapped = 0x62 'a', 0x61 'b'
25
25
// CHECK-LABEL: test_ascii_scalar_scalar2
26
+ diff --git a/swift/utils/build_swift/build_swift/driver_arguments.py b/swift/utils/build_swift/build_swift/driver_arguments.py
27
+ index 2b7d6d07799..e0d04d22825 100644
28
+ --- a/swift/utils/build_swift/build_swift/driver_arguments.py
29
+ +++ b/swift/utils/build_swift/build_swift/driver_arguments.py
30
+ @@ -677,6 +677,12 @@ def create_argument_parser():
31
+ "for each cross-compiled toolchain's destdir, useful when building "
32
+ "multiple toolchains and can be disabled if only cross-compiling one.")
33
+
34
+ + option('--cross-compile-build-swift-tools', toggle_true,
35
+ + default=True,
36
+ + help="Cross-compile the Swift compiler, other host tools from the "
37
+ + "compiler repository, and various macros for each listed "
38
+ + "--cross-compile-hosts platform.")
39
+ +
40
+ option('--stdlib-deployment-targets', store,
41
+ type=argparse.ShellSplitType(),
42
+ default=None,
43
+ diff --git a/swift/utils/build_swift/tests/expected_options.py b/swift/utils/build_swift/tests/expected_options.py
44
+ index f8d1a3526ed..b655d610923 100644
45
+ --- a/swift/utils/build_swift/tests/expected_options.py
46
+ +++ b/swift/utils/build_swift/tests/expected_options.py
47
+ @@ -155,6 +155,7 @@ EXPECTED_DEFAULTS = {
48
+ 'compiler_vendor': defaults.COMPILER_VENDOR,
49
+ 'coverage_db': None,
50
+ 'cross_compile_append_host_target_to_destdir': True,
51
+ + 'cross_compile_build_swift_tools': True,
52
+ 'cross_compile_deps_path': None,
53
+ 'cross_compile_hosts': [],
54
+ 'infer_cross_compile_hosts_on_darwin': False,
55
+ @@ -622,6 +623,7 @@ EXPECTED_OPTIONS = [
56
+ EnableOption('--build-swift-clang-overlays'),
57
+ EnableOption('--build-swift-remote-mirror'),
58
+ EnableOption('--cross-compile-append-host-target-to-destdir'),
59
+ + EnableOption('--cross-compile-build-swift-tools'),
60
+ EnableOption('--color-in-tests'),
61
+ EnableOption('--distcc'),
62
+ EnableOption('--sccache'),
63
+ 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
64
+ index a0289515fd0..355d72fe21f 100644
65
+ --- a/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py
66
+ +++ b/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py
67
+ @@ -119,6 +119,8 @@ class BuildScriptInvocation(object):
68
+ "--cmake-generator", args.cmake_generator,
69
+ "--cross-compile-append-host-target-to-destdir", str(
70
+ args.cross_compile_append_host_target_to_destdir).lower(),
71
+ + "--cross-compile-build-swift-tools", str(
72
+ + args.cross_compile_build_swift_tools).lower(),
73
+ "--build-jobs", str(args.build_jobs),
74
+ "--lit-jobs", str(args.lit_jobs),
75
+ "--common-cmake-options=%s" % ' '.join(
26
76
diff --git a/swift/utils/swift_build_support/swift_build_support/products/cmake_product.py b/swift/utils/swift_build_support/swift_build_support/products/cmake_product.py
27
77
index dc338334f28..f1a9f4d28bf 100644
28
78
--- a/swift/utils/swift_build_support/swift_build_support/products/cmake_product.py
@@ -36,6 +86,100 @@ index dc338334f28..f1a9f4d28bf 100644
36
86
assert self.toolchain.cmake is not None
37
87
cmake_build = []
38
88
_cmake = cmake.CMake(self.args, self.toolchain,
89
+ @@ -71,9 +71,7 @@ class CMakeProduct(product.Product):
90
+ env=env)
91
+
92
+ is_llvm = self.product_name() == "llvm"
93
+ - if (not is_llvm and not self.args.skip_build) or (
94
+ - is_llvm and self.args._build_llvm
95
+ - ):
96
+ + if (not is_llvm and not self.args.skip_build) or (is_llvm and build_llvm):
97
+ cmake_opts = [self.build_dir, "--config", build_type]
98
+
99
+ shell.call(
100
+ 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
101
+ index ffae1d66702..72e400c55be 100644
102
+ --- a/swift/utils/swift_build_support/swift_build_support/products/llvm.py
103
+ +++ b/swift/utils/swift_build_support/swift_build_support/products/llvm.py
104
+ @@ -249,10 +249,13 @@ class LLVM(cmake_product.CMakeProduct):
105
+ # space/time efficient than -g on that platform.
106
+ llvm_cmake_options.define('LLVM_USE_SPLIT_DWARF:BOOL', 'YES')
107
+
108
+ - if not self.args._build_llvm:
109
+ + build = True
110
+ + if not self.args._build_llvm or (not self.args.cross_compile_build_swift_tools
111
+ + and self.is_cross_compile_target(host_target)):
112
+ # Indicating we don't want to build LLVM at all should
113
+ # override everything.
114
+ build_targets = []
115
+ + build = False
116
+ elif self.args.skip_build or not self.args.build_llvm:
117
+ # We can't skip the build completely because the standalone
118
+ # build of Swift depends on these.
119
+ @@ -399,7 +402,8 @@ class LLVM(cmake_product.CMakeProduct):
120
+
121
+ self._handle_cxx_headers(host_target, platform)
122
+
123
+ - self.build_with_cmake(build_targets, self.args.llvm_build_variant, [])
124
+ + self.build_with_cmake(build_targets, self.args.llvm_build_variant, [],
125
+ + build_llvm=build)
126
+
127
+ # copy over the compiler-rt builtins for iOS/tvOS/watchOS to ensure
128
+ # that Swift's stdlib can use compiler-rt builtins when targeting
129
+ @@ -484,7 +488,9 @@ class LLVM(cmake_product.CMakeProduct):
130
+ Whether or not this product should be installed with the given
131
+ arguments.
132
+ """
133
+ - return self.args.install_llvm
134
+ + return self.args.install_llvm and (
135
+ + self.args.cross_compile_build_swift_tools or
136
+ + not self.is_cross_compile_target(host_target))
137
+
138
+ def install(self, host_target):
139
+ """
140
+ 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
141
+ index ddb3b553de7..d127424709c 100644
142
+ --- a/swift/utils/swift_build_support/swift_build_support/products/swift_testing_macros.py
143
+ +++ b/swift/utils/swift_build_support/swift_build_support/products/swift_testing_macros.py
144
+ @@ -42,13 +42,24 @@ class SwiftTestingMacros(product.Product):
145
+ return True
146
+
147
+ def should_build(self, host_target):
148
+ - return True
149
+ + build_macros = not self.is_cross_compile_target(host_target) or \
150
+ + self.args.cross_compile_build_swift_tools
151
+ + if not build_macros:
152
+ + print("Skipping building Testing Macros for %s, because the host tools "
153
+ + "are not being built" % host_target)
154
+ + return build_macros
155
+
156
+ def should_test(self, host_target):
157
+ return False
158
+
159
+ def should_install(self, host_target):
160
+ - return self.args.install_swift_testing_macros
161
+ + install_macros = self.args.install_swift_testing_macros and \
162
+ + (not self.is_cross_compile_target(host_target) or
163
+ + self.args.cross_compile_build_swift_tools)
164
+ + if self.args.install_swift_testing_macros and not install_macros:
165
+ + print("Skipping installing Testing Macros for %s, because the host tools "
166
+ + "are not being built" % host_target)
167
+ + return install_macros
168
+
169
+ def _cmake_product(self, host_target):
170
+ build_root = os.path.dirname(self.build_dir)
171
+ @@ -121,3 +132,11 @@ class SwiftTestingMacrosCMakeShim(cmake_product.CMakeProduct):
172
+ install_prefix = install_destdir + self.args.install_prefix
173
+
174
+ self.install_with_cmake(['install'], install_prefix)
175
+ +
176
+ + @classmethod
177
+ + def is_build_script_impl_product(cls):
178
+ + return False
179
+ +
180
+ + @classmethod
181
+ + def is_before_build_script_impl_product(cls):
182
+ + return False
39
183
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
40
184
index 47e7ab79905..6bd94c3cad8 100644
41
185
--- a/swift/utils/swift_build_support/swift_build_support/products/product.py
0 commit comments