Skip to content

Commit c3f8dac

Browse files
authored
[Build] allow to generate symbols for a subset of binaries (swiftlang#37120)
This would be needed to reduce overall build times in scenarios when generating symbols for all binaries is too expensive and/or not needed. At the same time, introduce tests around the logic that handles symbols. Addresses rdar://76865276
2 parents a2ce02a + 1e5f790 commit c3f8dac

File tree

8 files changed

+288
-22
lines changed

8 files changed

+288
-22
lines changed

utils/build-script

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,12 @@ class BuildScriptInvocation(object):
814814
' '.join(args.llvm_ninja_targets_for_cross_compile_hosts)
815815
]
816816

817+
if args.darwin_symroot_path_filters:
818+
impl_args += [
819+
"--darwin_symroot_path_filters=%s" %
820+
' '.join(args.darwin_symroot_path_filters)
821+
]
822+
817823
# Compute the set of host-specific variables, which we pass through to
818824
# the build script via environment variables.
819825
host_specific_variables = self.compute_host_specific_variables()

utils/build-script-impl

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ KNOWN_SETTINGS=(
103103
darwin-deployment-version-watchos "2.0" "minimum deployment target version for watchOS"
104104
darwin-install-extract-symbols "" "whether to extract symbols with dsymutil during installations"
105105
darwin-install-extract-symbols-use-just-built-dsymutil "1" "whether we should extract symbols using the just built dsymutil"
106+
darwin-symroot-path-filters "" "space-separated list of path patterns to consider for symbol generation"
106107
darwin-overlay-target "" "single overlay target to build, dependencies are computed later"
107108
darwin-sdk-deployment-targets "xctest-ios-8.0" "semicolon-separated list of triples like 'fookit-ios-9.0;barkit-watchos-9.0'"
108109
darwin-stdlib-install-name-dir "" "the directory of the install_name for standard library dylibs"
@@ -1015,11 +1016,19 @@ if [ -z "${CMAKE}" ] ; then
10151016
fi
10161017

10171018
function xcrun_find_tool() {
1018-
xcrun --sdk macosx --toolchain "${DARWIN_XCRUN_TOOLCHAIN}" --find "$@"
1019+
if [[ "${DRY_RUN}" ]]; then
1020+
echo echo "$@"
1021+
else
1022+
xcrun --sdk macosx --toolchain "${DARWIN_XCRUN_TOOLCHAIN}" --find "$@"
1023+
fi
10191024
}
10201025

10211026
function find_just_built_local_host_llvm_tool() {
1022-
find $(build_directory "${LOCAL_HOST}" llvm) -name "$1" -type f -print
1027+
if [[ "${DRY_RUN}" ]]; then
1028+
echo echo "$1"
1029+
else
1030+
find $(build_directory "${LOCAL_HOST}" llvm) -name "$1" -type f -print
1031+
fi
10231032
}
10241033

10251034
function not() {
@@ -3104,6 +3113,26 @@ function printJSONEndTimestamp() {
31043113
printJSONTimestamp ${command} "end"
31053114
}
31063115

3116+
function grep_that_allows_no_matches() {
3117+
# This will not cause the script to fail
3118+
# if no line in the input matches the pattern
3119+
grep "$@" || test $? = 1
3120+
}
3121+
3122+
function filter_paths() {
3123+
if [[ -n "$1" ]]; then
3124+
local -a filters
3125+
filters=($1)
3126+
local -a grep_arguments
3127+
for cfilter in "${filters[@]}"; do
3128+
grep_arguments+=('-e' "$cfilter")
3129+
done
3130+
grep_that_allows_no_matches "${grep_arguments[@]}"
3131+
else
3132+
cat
3133+
fi
3134+
}
3135+
31073136
for host in "${ALL_HOSTS[@]}"; do
31083137
# Check if we should perform this action.
31093138
if ! [[ $(should_execute_action "${host}-extractsymbols") ]]; then
@@ -3131,15 +3160,10 @@ for host in "${ALL_HOSTS[@]}"; do
31313160
# descibes
31323161
host_symroot="${INSTALL_SYMROOT}/${host}"
31333162

3134-
# FIXME: Since it's hard to trace output pipe call,
3135-
# For now, We don't support dry-run trace for this block
3136-
# Instead, just echo we do "darwin_intall_extract_symbols".
3137-
if [[ "${DRY_RUN}" ]]; then
3138-
call darwin_install_extract_symbols
3139-
printJSONStartTimestamp dsymutil
3140-
echo xargs -n 1 -P ${DSYMUTIL_JOBS} dsymutil
3141-
printJSONEndTimestamp dsymutil
3142-
else
3163+
# FIXME this if statement is a trick to have a more readable
3164+
# diff for the PR that made the following code
3165+
# amenable to dry run testing
3166+
if [ -n "${DRY_RUN}" -o -z "${DRY_RUN}" ]; then
31433167
set -x
31443168

31453169
CURRENT_INSTALL_DIR=${host_install_destdir}
@@ -3148,7 +3172,9 @@ for host in "${ALL_HOSTS[@]}"; do
31483172
# Copy executables and shared libraries from the `host_install_destdir` to
31493173
# INSTALL_SYMROOT and run dsymutil on them.
31503174
(cd "${CURRENT_INSTALL_DIR}" &&
3151-
find ./"${CURRENT_PREFIX}" -perm -0111 -type f -print | cpio --insecure -pdm "${host_symroot}")
3175+
find ./"${CURRENT_PREFIX}" -perm -0111 -type f -print | \
3176+
filter_paths "${DARWIN_SYMROOT_PATH_FILTERS}" | \
3177+
cpio --insecure -pdm -v "${host_symroot}")
31523178

31533179
dsymutil_path=
31543180
if [[ -n "${DARWIN_INSTALL_EXTRACT_SYMBOLS_USE_JUST_BUILT_DSYMUTIL}" ]]; then
@@ -3160,15 +3186,11 @@ for host in "${ALL_HOSTS[@]}"; do
31603186
# Run dsymutil on executables and shared libraries.
31613187
#
31623188
# Exclude shell scripts and static archives.
3163-
# Exclude swift-api-digester dSYM to reduce debug toolchain size.
31643189
# Tweak carefully the amount of parallelism -- dsymutil can be memory intensive and
31653190
# as such too many instance can exhaust the memory and slow down/panic the machine
31663191
printJSONStartTimestamp dsymutil
31673192
(cd "${host_symroot}" &&
3168-
find ./"${CURRENT_PREFIX}" -perm -0111 -type f -print | \
3169-
grep -v '.py$' | \
3170-
grep -v '.a$' | \
3171-
grep -v 'swift-api-digester' | \
3193+
find ./"${CURRENT_PREFIX}" -perm -0111 -type f -not -name "*.a" -not -name "*.py" -print | \
31723194
xargs -n 1 -P ${DSYMUTIL_JOBS} ${dsymutil_path})
31733195
printJSONEndTimestamp dsymutil
31743196

utils/build_swift/build_swift/driver_arguments.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,12 @@ def create_argument_parser():
693693
option('--symbols-package', store_path,
694694
help='if provided, an archive of the symbols directory will be '
695695
'generated at this path')
696+
option('--darwin-symroot-path-filters', append,
697+
type=argparse.ShellSplitType(),
698+
help='Space separated list of patterns used to match '
699+
'a subset of files to generate symbols for. '
700+
'Only supported on Darwin. Can be called multiple times '
701+
'to add multiple such options.')
696702

697703
# -------------------------------------------------------------------------
698704
in_group('Build variant')

utils/build_swift/tests/expected_options.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@
137137
defaults.DARWIN_DEPLOYMENT_VERSION_TVOS,
138138
'darwin_deployment_version_watchos':
139139
defaults.DARWIN_DEPLOYMENT_VERSION_WATCHOS,
140+
'darwin_symroot_path_filters': [],
140141
'darwin_xcrun_toolchain': None,
141142
'distcc': False,
142143
'sccache': False,
@@ -695,6 +696,7 @@ class BuildScriptImplOption(_BaseOption):
695696
AppendOption('--test-paths'),
696697
AppendOption('--llvm-ninja-targets'),
697698
AppendOption('--llvm-ninja-targets-for-cross-compile-hosts'),
699+
AppendOption('--darwin-symroot-path-filters'),
698700

699701
UnsupportedOption('--build-jobs'),
700702
UnsupportedOption('--common-cmake-options'),
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
# REQUIRES: standalone_build,OS=macosx
2+
13
# RUN: %empty-directory(%t)
24
# RUN: mkdir -p %t
3-
# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --darwin-install-extract-symbols --dsymutil-jobs 5 --cmake %cmake 2>&1 | %FileCheck %s
4-
5-
# REQUIRES: standalone_build,OS=macosx
5+
# RUN: mkdir -p %t/destdir
6+
# RUN: mkdir -p %t/symroot/macosx-%target-cpu
7+
# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --darwin-install-extract-symbols --dsymutil-jobs 5 --cmake %cmake --install-symroot=%t/symroot --install-destdir=%t/destdir --toolchain-prefix= 2>&1 | %FileCheck %s
68

79
# CHECK: --- Extracting symbols ---
810
# CHECK: { "command": "dsymutil", "start": "
9-
# CHECK-NEXT: xargs -n 1 -P 5 dsymutil
10-
# CHECK-NEXT: { "command": "dsymutil", "end": "
11+
# CHECK: xargs -n 1 -P 5 {{.*}}dsymutil
12+
# CHECK: { "command": "dsymutil", "end": "
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# REQUIRES: standalone_build
2+
# REQUIRES: OS=macosx
3+
4+
# RUN: %empty-directory(%t)
5+
# RUN: mkdir -p %t
6+
# RUN: split-file %s %t
7+
8+
# Even though we are running build-script with dry-run,
9+
# symbol extraction runs real commands against the file system.
10+
# Thus we generate a series of files
11+
# to exercise the filtering logic
12+
# RUN: mkdir -p %t/destdir/bin
13+
# RUN: mkdir -p %t/destdir/lib
14+
# RUN: %swiftc_driver %t/hello.swift -o %t/destdir/bin/swift-demangle
15+
# RUN: %swiftc_driver %t/hello.swift -o %t/destdir/bin/swift-def-to-yaml-converter
16+
# RUN: ln -s %t/destdir/swift-demangle %t/destdir/bin/swift-api-digester
17+
# RUN: cp %t/swift-util.py %t/destdir/bin
18+
# RUN: chmod a+x %t/destdir/bin/swift-util.py
19+
# RUN: %swiftc_driver %t/dylib.swift -emit-library -o %t/destdir/lib/libswiftDemangle.dylib
20+
# RUN: %swiftc_driver %t/dylib.swift -emit-library -o %t/destdir/lib/lib_InternalSwiftScan.dylib
21+
# RUN: %swiftc_driver %t/dylib.swift -emit-library -static -o %t/destdir/lib/libswiftASTSectionImporter.a
22+
# RUN: mkdir -p %t/symroot/macosx-%target-cpu
23+
24+
# test build-script-impl on its own
25+
# RUN: SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script-impl --dry-run --build-dir=%t/build --workspace=%swift_src_root/.. --cmake %cmake --only-execute macosx-%target-cpu-extractsymbols --host-cc /usr/bin/true --darwin-install-extract-symbols=1 --host-target=macosx-%target-cpu --install-symroot=%t/symroot --install-destdir=%t/destdir --build-jobs=1 --darwin-symroot-path-filters="/lib/ /swift-demangle" 2>&1 | tee %t/build-script-impl-output.txt
26+
# RUN: %FileCheck --input-file=%t/build-script-impl-output.txt %s
27+
# RUN: %FileCheck --input-file=%t/build-script-impl-output.txt --check-prefixes CHECK-SKIPPED %s
28+
29+
# ensure build-script pass the argument to build-script-impl
30+
# RUN: %empty-directory(%t/symroot)
31+
# RUN: mkdir -p %t/symroot/macosx-%target-cpu
32+
# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --cmake %cmake --darwin-install-extract-symbols=1 --install-destdir=%t/destdir --toolchain-prefix="" --install-symroot=%t/symroot --darwin-symroot-path-filters="/lib/ /swift-demangle" --jobs=1 2>&1 | tee %t/build-script-output.txt
33+
# RUN: %FileCheck --input-file=%t/build-script-output.txt %s
34+
# RUN: %FileCheck --input-file=%t/build-script-output.txt --check-prefixes CHECK-SKIPPED %s
35+
36+
# ensure we get all the values if we specify the flag multiple times
37+
# RUN: %empty-directory(%t/symroot)
38+
# RUN: mkdir -p %t/symroot/macosx-%target-cpu
39+
# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --cmake %cmake --darwin-install-extract-symbols=1 --install-destdir=%t/destdir --toolchain-prefix="" --install-symroot=%t/symroot --darwin-symroot-path-filters="/lib/" --darwin-symroot-path-filters="/swift-demangle" --jobs=1 2>&1 | tee %t/build-script-output.txt
40+
# RUN: %FileCheck --input-file=%t/build-script-output.txt %s
41+
# RUN: %FileCheck --input-file=%t/build-script-output.txt --check-prefixes CHECK-SKIPPED %s
42+
43+
44+
# CHECK: --- Extracting symbols ---
45+
46+
# Ensure we copy all the files in lib and the swift-demangle executable
47+
# CHECK-LABEL: cpio
48+
# CHECK-DAG: swift-demangle
49+
# CHECK-DAG: libswiftDemangle.dylib
50+
# CHECK-DAG: lib_InternalSwiftScan.dylib
51+
52+
# Ensure we generate symbols for the file in the symroot
53+
# CHECK-LABEL: "command": "dsymutil", "start"
54+
# CHECK-DAG: dsymutil {{.*}}swift-demangle
55+
# CHECK-DAG: dsymutil {{.*}}libswiftDemangle.dylib
56+
# CHECK-DAG: dsymutil {{.*}}lib_InternalSwiftScan.dylib
57+
58+
# Ensure we strip the files in the installation directory
59+
# (which are not subject to the filters)
60+
# CHECK-LABEL: xcrun_find_tool strip
61+
# CHECK-DAG: strip {{.*}}swift-demangle
62+
# CHECK-DAG: strip {{.*}}swift-def-to-yaml-converter
63+
# CHECK-DAG: strip {{.*}}libswiftDemangle.dylib
64+
# CHECK-DAG: strip {{.*}}lib_InternalSwiftScan.dylib
65+
# CHECK-DAG: strip {{.*}}libswiftASTSectionImporter.a
66+
# CHECK-DAG: strip {{.*}}swift-util.py
67+
68+
# Ensure we codesign dylibs
69+
# CHECK-LABEL: xcrun_find_tool codesign
70+
# CHECK-DAG: codesign {{.*}}libswiftDemangle.dylib
71+
# CHECK-DAG: codesign {{.*}}lib_InternalSwiftScan.dylib
72+
73+
74+
# CHECK-SKIPPED: --- Extracting symbols ---
75+
76+
# Ensure we don't copy files not included by the filters
77+
# CHECK-SKIPPED-LABEL: cpio
78+
# CHECK-SKIPPED-NOT: swift-util.py
79+
# CHECK-SKIPPED-NOT: swift-def-to-yaml-converter
80+
# CHECK-SKIPPED-NOT: libswiftASTSectionImporter.a
81+
# CHECK-SKIPPED-NOT: swift-api-digester
82+
83+
# Ensure we don't generate symbols for files we did not copy
84+
# CHECK-SKIPPED-LABEL: "command": "dsymutil", "start"
85+
# CHECK-SKIPPED-NOT: dsymutil {{.*}}swift-def-to-yaml-converter
86+
# CHECK-SKIPPED-NOT: dsymutil {{.*}}libswiftASTSectionImporter.a
87+
# CHECK-SKIPPED-NOT: dsymutil {{.*}}swift-util.py
88+
# CHECK-SKIPPED-NOT: dsymutil {{.*}}swift-api-digester
89+
90+
# Ensure we don't strip symlinks
91+
# CHECK-SKIPPED-LABEL: xcrun_find_tool strip
92+
# CHECK-SKIPPED-NOT: strip {{.*}}swift-api-digester
93+
94+
# Ensure we don't codesign executables, symlinks,
95+
# static archives and python scripts
96+
# CHECK-SKIPPED-LABEL: xcrun_find_tool codesign
97+
# CHECK-SKIPPED-NOT: codesign {{.*}}swift-demangle
98+
# CHECK-SKIPPED-NOT: codesign {{.*}}libswiftASTSectionImporter.a
99+
# CHECK-SKIPPED-NOT: codesign {{.*}}swift-util.py
100+
# CHECK-SKIPPED-NOT: codesign {{.*}}swift-api-digester
101+
# CHECK-SKIPPED-NOT: codesign {{.*}}swift-def-to-yaml-converter
102+
103+
#--- hello.swift
104+
print("hello")
105+
106+
#--- dylib.swift
107+
func greet(person: String) -> String {
108+
return "Hello \(person)"
109+
}
110+
#--- swift-util.py
111+
print("hello")
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# REQUIRES: standalone_build
2+
# REQUIRES: OS=macosx
3+
4+
# RUN: %empty-directory(%t)
5+
# RUN: mkdir -p %t
6+
# RUN: split-file %s %t
7+
8+
# Even though we are running build-script with dry-run,
9+
# symbol extraction runs real commands against the file system.
10+
# Thus we generate a series of files
11+
# to target each of the cases handled by the code
12+
# RUN: mkdir -p %t/destdir
13+
# RUN: %swiftc_driver %t/hello.swift -o %t/destdir/swift-demangle
14+
# RUN: ln -s %t/destdir/swift-demangle %t/destdir/swift-api-digester
15+
# RUN: cp %t/swift-util.py %t/destdir/
16+
# RUN: chmod a+x %t/destdir/swift-util.py
17+
# RUN: %swiftc_driver %t/dylib.swift -emit-library -o %t/destdir/libswiftDemangle.dylib
18+
# RUN: %swiftc_driver %t/dylib.swift -emit-library -static -o %t/destdir/libswiftASTSectionImporter.a
19+
# Targets marked with INSTALL_WITH_SHARED are executable (e.g. compatibility libraries)
20+
# RUN: cp %t/destdir/libswiftASTSectionImporter.a %t/destdir/libswiftCompatibility51.a
21+
# RUN: chmod a+x %t/destdir/libswiftCompatibility51.a
22+
# RUN: mkdir -p %t/symroot/macosx-%target-cpu
23+
24+
# RUN: SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script-impl --dry-run --build-dir=%t/build --workspace=%swift_src_root/.. --cmake %cmake --only-execute macosx-%target-cpu-extractsymbols --host-cc /usr/bin/true --darwin-install-extract-symbols=1 --host-target=macosx-%target-cpu --install-symroot=%t/symroot --install-destdir=%t/destdir --build-jobs=1 > %t/build-script-impl-output.txt 2>&1
25+
# RUN: %FileCheck --input-file=%t/build-script-impl-output.txt %s
26+
# RUN: %FileCheck --input-file=%t/build-script-impl-output.txt --check-prefixes CHECK-SKIPPED %s
27+
28+
# CHECK: --- Extracting symbols ---
29+
30+
# Ensure we copy executable regular files to the symroot
31+
# CHECK-LABEL: cpio
32+
# CHECK-DAG: swift-demangle
33+
# CHECK-DAG: swift-util.py
34+
# CHECK-DAG: libswiftDemangle.dylib
35+
# CHECK-DAG: libswiftCompatibility51.a
36+
37+
# Ensure we extract symbols only for executables and
38+
# and dylibs
39+
# CHECK-LABEL: command": "dsymutil", "start"
40+
# CHECK-DAG: dsymutil {{.*}}swift-demangle
41+
# CHECK-DAG: dsymutil {{.*}}libswiftDemangle.dylib
42+
43+
# Ensure we strip executables, shared libraries and static
44+
# libraries
45+
# CHECK-LABEL: xcrun_find_tool strip
46+
# CHECK-DAG: strip {{.*}}swift-demangle
47+
# CHECK-DAG: strip {{.*}}libswiftDemangle.dylib
48+
# CHECK-DAG: strip {{.*}}libswiftASTSectionImporter.a
49+
# CHECK-DAG: strip {{.*}}libswiftCompatibility51.a
50+
# CHECK-DAG: strip {{.*}}swift-util.py
51+
52+
# Ensure we codesign dylibds
53+
# CHECK-LABEL: xcrun_find_tool codesign
54+
# CHECK: codesign {{.*}}libswiftDemangle.dylib
55+
56+
# CHECK-SKIPPED: --- Extracting symbols ---
57+
58+
# Ensure symroot does not contain symlinks and static archives
59+
# that are not executable
60+
# CHECK-SKIPPED-LABEL: cpio
61+
# CHECK-SKIPPED-NOT: swift-api-digester
62+
# CHECK-SKIPPED-NOT: libswiftASTSectionImporter.a
63+
64+
# Ensure we don't extract symbols for static archives, symlinks
65+
# and Python scripts
66+
# CHECK-SKIPPED-LABEL: command": "dsymutil", "start"
67+
# CHECK-SKIPPED-NOT: dsymutil {{.*}}libswiftASTSectionImporter.a
68+
# CHECK-SKIPPED-NOT: dsymutil {{.*}}libswiftCompatibility51.a
69+
# CHECK-SKIPPED-NOT: dsymutil {{.*}}swift-util.py
70+
# CHECK-SKIPPED-NOT: dsymutil {{.*}}swift-api-digester
71+
72+
# Ensure we don't strip symlinks
73+
# CHECK-SKIPPED-LABEL: xcrun_find_tool strip
74+
# CHECK-SKIPPED-NOT: strip {{.*}}swift-api-digester
75+
76+
# Ensure we don't codesign executables, symlinks,
77+
# static archives and python scripts
78+
# CHECK-SKIPPED-LABEL: xcrun_find_tool codesign
79+
# CHECK-SKIPPED-NOT: codesign {{.*}}swift-demangle
80+
# CHECK-SKIPPED-NOT: codesign {{.*}}libswiftASTSectionImporter.a
81+
# CHECK-SKIPPED-NOT: codesign {{.*}}libswiftCompatibility51.a
82+
# CHECK-SKIPPED-NOT: codesign {{.*}}swift-util.py
83+
# CHECK-SKIPPED-NOT: codesign {{.*}}swift-api-digester
84+
85+
#--- hello.swift
86+
print("hello")
87+
88+
#--- dylib.swift
89+
func greet(person: String) -> String {
90+
return "Hello \(person)"
91+
}
92+
#--- swift-util.py
93+
print("hello")
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# REQUIRES: standalone_build
2+
# REQUIRES: OS=macosx
3+
4+
# As a result of incremental changes,
5+
# in dry-run mode the symbol extraction
6+
# still runs some real commands against the installation
7+
# and symbol directories (e.g. find and cpio)
8+
# This test explictly checks that such commands
9+
# do not cause build-script to fail when run
10+
# against empty directories (which is the typical
11+
# scenario in dry-run)
12+
# RUN: %empty-directory(%t)
13+
# RUN: mkdir -p %t
14+
# RUN: mkdir -p %t/destdir
15+
# RUN: mkdir -p %t/symroot/macosx-%target-cpu
16+
# RUN: SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script-impl --dry-run --build-dir=%t/build --workspace=%swift_src_root/.. --cmake %cmake --only-execute macosx-%target-cpu-extractsymbols --host-cc /usr/bin/true --darwin-install-extract-symbols=1 --host-target=macosx-%target-cpu --install-symroot=%t/symroot --install-destdir=%t/destdir --build-jobs=1 2>&1 | %FileCheck %s
17+
18+
# CHECK: --- Extracting symbols ---
19+
20+
# CHECK-NOT: {{^}}echo dsymutil
21+
22+
# CHECK-NOT: {{^[^\+].*}}strip
23+
24+
# CHECK-NOT: {{^[^\+].*}}codesign

0 commit comments

Comments
 (0)