Skip to content

Commit 7d85a1e

Browse files
committed
Move expanded upstreamed cross-compilation patch to apply it to 6.2 only
1 parent a756e7c commit 7d85a1e

File tree

3 files changed

+212
-161
lines changed

3 files changed

+212
-161
lines changed

swift-ci/sdks/android/patches/swift-android-devel.patch

Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,78 @@ index 01390761c8c..d84c142397c 100644
2323

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

181347
def cmake_options(self, args):
348+
diff --git a/swift/validation-test/BuildSystem/android_cross_compile.test b/swift/validation-test/BuildSystem/android_cross_compile.test
349+
index 8396568dce7..02c71aa308c 100644
350+
--- a/swift/validation-test/BuildSystem/android_cross_compile.test
351+
+++ b/swift/validation-test/BuildSystem/android_cross_compile.test
352+
@@ -1,11 +1,15 @@
353+
# REQUIRES: standalone_build
354+
-# UNSUPPORTED: OS=macosx
355+
-# UNSUPPORTED: OS=ios
356+
-# UNSUPPORTED: OS=tvos
357+
-# UNSUPPORTED: OS=watchos
358+
359+
# RUN: %empty-directory(%t)
360+
-# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --cmake %cmake --libdispatch --cross-compile-hosts=android-aarch64 --skip-local-build --android --android-ndk %t/ndk/ --android-arch aarch64 2>&1 | %FileCheck %s
361+
+# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --cmake %cmake --foundation --swift-testing --swift-testing-macros --install-foundation --install-swift-testing-macros --install-llvm --cross-compile-hosts=android-aarch64 --cross-compile-build-swift-tools=False --android --android-ndk %t/ndk/ --android-arch aarch64 2>&1 | %FileCheck %s
362+
363+
-# CHECK: -DCMAKE_Swift_FLAGS{{.*}}-target {{.*}}unknown-linux-android{{.*}} -sdk
364+
-# CHECK: -DCMAKE_SYSTEM_NAME=Android {{.*}} -DCMAKE_ANDROID_NDK
365+
+# CHECK: pushd {{.*}}/llvm-android-aarch64
366+
+# CHECK-NOT: cmake --build {{.*}}/llvm-android-aarch64 --config
367+
+# CHECK-NOT: cmake --build {{.*}}/llvm-android-aarch64 {{.*}} install-llvm
368+
+# CHECK: cmake {{.*}}-DSWIFT_INCLUDE_TOOLS:BOOL=FALSE{{.*}}/swift
369+
+# CHECK: Skipping building Foundation Macros for android-aarch64, because the host tools are not being built
370+
+# CHECK: Skipping installing Foundation Macros for android-aarch64, because the host tools are not being built
371+
+# CHECK: Skipping building Testing Macros for android-aarch64, because the host tools are not being built
372+
+# CHECK: Skipping installing Testing Macros for android-aarch64, because the host tools are not being built
373+
+# CHECK: cmake {{.*}}-DCMAKE_TOOLCHAIN_FILE:PATH={{.*}}swifttesting-android-aarch64/BuildScriptToolchain.cmake
374+
+# CHECK: -DCMAKE_Swift_FLAGS=-target aarch64-unknown-linux-android{{.*}} -sdk
375+
diff --git a/swift/validation-test/BuildSystem/cmark_crosscompile_using_toolchain_always.test b/swift/validation-test/BuildSystem/cmark_crosscompile_using_toolchain_always.test
376+
index 25dbee7709e..deea2cef7a1 100644
377+
--- a/swift/validation-test/BuildSystem/cmark_crosscompile_using_toolchain_always.test
378+
+++ b/swift/validation-test/BuildSystem/cmark_crosscompile_using_toolchain_always.test
379+
@@ -1,9 +1,13 @@
380+
# REQUIRES: standalone_build
381+
-# REQUIRES: OS=macosx
382+
383+
# RUN: %empty-directory(%t)
384+
# RUN: mkdir -p %t
385+
# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --install-all --cmake %cmake --skip-build-llvm --skip-build-swift 2>&1 | %FileCheck %s
386+
+# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --install-all --cmake %cmake --skip-build-llvm --skip-build-swift --cross-compile-hosts=android-aarch64 --skip-local-build --android --android-ndk %t/ndk/ 2>&1 | %FileCheck --check-prefix=ANDROID %s
387+
388+
# CHECK: DRY_RUN! Writing Toolchain file to path:{{.*}}BuildScriptToolchain.cmake
389+
# CHECK: cmake {{.*}}-DCMAKE_TOOLCHAIN_FILE:PATH={{.*}}BuildScriptToolchain.cmake {{.*}}cmark
390+
+
391+
+# ANDROID: DRY_RUN! Writing Toolchain file to path:{{.*}}cmark-android-aarch64/BuildScriptToolchain.cmake
392+
+# ANDROID: cmake {{.*}}-DCMAKE_TOOLCHAIN_FILE:PATH={{.*}}cmark-android-aarch64/BuildScriptToolchain.cmake
393+
+# ANDROID: -DCMAKE_Swift_FLAGS=-target aarch64-unknown-linux-android

swift-ci/sdks/android/patches/swift-android-trunk.patch

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,3 @@ index 3f36fc979cb..8713ae8fea8 100755
1010
"grep",
1111
"--extended-regexp",
1212
"--recursive",
13-
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
14-
index 6d0aae32835..3713086fec3 100644
15-
--- a/swift/utils/swift_build_support/swift_build_support/products/cmake_product.py
16-
+++ b/swift/utils/swift_build_support/swift_build_support/products/cmake_product.py
17-
@@ -25,7 +25,7 @@ class CMakeProduct(product.Product):
18-
19-
def build_with_cmake(self, build_targets, build_type, build_args,
20-
prefer_native_toolchain=False,
21-
- ignore_extra_cmake_options=False):
22-
+ ignore_extra_cmake_options=False, build_llvm=True):
23-
assert self.toolchain.cmake is not None
24-
cmake_build = []
25-
_cmake = cmake.CMake(self.args, self.toolchain,

0 commit comments

Comments
 (0)