From efdd4954d3711d454492d1c3058cca6ee8b0707d Mon Sep 17 00:00:00 2001 From: Eric Miotto <1094986+edymtt@users.noreply.github.com> Date: Thu, 21 Mar 2024 07:55:17 -0700 Subject: [PATCH] build-script: add flag to pass arguments to dsymutil This is currently needed to disable DWARF verification in some Apple internal configurations. Addresses rdar://125092216 --- utils/build-script-impl | 3 ++- utils/build_swift/build_swift/driver_arguments.py | 6 ++++++ utils/build_swift/tests/expected_options.py | 2 ++ .../build_script_invocation.py | 6 ++++++ utils/swift_build_support/tests/test_cmake.py | 3 --- .../BuildSystem/extra_dsymutil_args.test | 14 ++++++++++++++ .../BuildSystem/extra_dsymutil_args_empty.test | 15 +++++++++++++++ 7 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 validation-test/BuildSystem/extra_dsymutil_args.test create mode 100644 validation-test/BuildSystem/extra_dsymutil_args_empty.test diff --git a/utils/build-script-impl b/utils/build-script-impl index de2edb0a2e68b..f1f29ed5c2f50 100755 --- a/utils/build-script-impl +++ b/utils/build-script-impl @@ -75,6 +75,7 @@ KNOWN_SETTINGS=( use-gold-linker "" "Enable using the gold linker" workspace "${HOME}/src" "source directory containing llvm, clang, swift" dsymutil-jobs "1" "number of parallel invocations of dsymutil" + extra-dsymutil-args "" "additional arguments to pass to dsymutil" ## Build Tools host-cc "" "the path to CC, the 'clang' compiler for the host platform. **This argument is required**" @@ -3238,7 +3239,7 @@ for host in "${ALL_HOSTS[@]}"; do printJSONStartTimestamp dsymutil (cd "${host_symroot}" && find ./"${CURRENT_PREFIX}" -perm -0111 -type f -not -name "*.a" -not -name "*.py" -print | \ - xargs -t -n 1 -P ${DSYMUTIL_JOBS} ${dsymutil_path}) + xargs -t -n 1 -P ${DSYMUTIL_JOBS} ${dsymutil_path} ${EXTRA_DSYMUTIL_ARGS[@]}) printJSONEndTimestamp dsymutil # Strip executables, shared libraries and static libraries in diff --git a/utils/build_swift/build_swift/driver_arguments.py b/utils/build_swift/build_swift/driver_arguments.py index b37225151d054..a63d1301d0f84 100644 --- a/utils/build_swift/build_swift/driver_arguments.py +++ b/utils/build_swift/build_swift/driver_arguments.py @@ -556,6 +556,12 @@ def create_argument_parser(): help='the maximum number of parallel dsymutil jobs to use when ' 'extracting symbols. Tweak with caution, since dsymutil ' 'is memory intensive.') + option('--extra-dsymutil-args', append, + type=argparse.ShellSplitType(), + help='Pass through extra options to dsymutil when extracting ' + 'symbols, in the form of comma separated options ' + 'like "--verbose,--verify-dwarf=none". Can ' + 'be called multiple times to add multiple such options.') option('--disable-guaranteed-normal-arguments', store_true, help='Disable guaranteed normal arguments') diff --git a/utils/build_swift/tests/expected_options.py b/utils/build_swift/tests/expected_options.py index 6cd90041627bb..2863a467133c3 100644 --- a/utils/build_swift/tests/expected_options.py +++ b/utils/build_swift/tests/expected_options.py @@ -162,6 +162,7 @@ 'sccache': False, 'dry_run': False, 'dsymutil_jobs': defaults.DSYMUTIL_JOBS, + 'extra_dsymutil_args': [], 'enable_asan': False, 'enable_experimental_differentiable_programming': True, 'enable_experimental_concurrency': True, @@ -788,6 +789,7 @@ class BuildScriptImplOption(_BaseOption): IntOption('-j', dest='build_jobs'), IntOption('--lit-jobs', dest='lit_jobs'), IntOption('--dsymutil-jobs', dest='dsymutil_jobs'), + AppendOption('--extra-dsymutil-args', dest='extra_dsymutil_args'), AppendOption('--cross-compile-hosts'), SetTrueOption('--infer-cross-compile-hosts-on-darwin'), diff --git a/utils/swift_build_support/swift_build_support/build_script_invocation.py b/utils/swift_build_support/swift_build_support/build_script_invocation.py index b33b5a8db0d4f..dc86c97f7dc0c 100644 --- a/utils/swift_build_support/swift_build_support/build_script_invocation.py +++ b/utils/swift_build_support/swift_build_support/build_script_invocation.py @@ -514,6 +514,12 @@ def convert_to_impl_arguments(self): ' '.join(args.darwin_symroot_path_filters) ] + if args.extra_dsymutil_args: + impl_args += [ + "--extra-dsymutil-args=%s" % ' '.join( + shlex.quote(opt) for opt in args.extra_dsymutil_args) + ] + # Compute the set of host-specific variables, which we pass through to # the build script via environment variables. host_specific_variables = self.compute_host_specific_variables() diff --git a/utils/swift_build_support/tests/test_cmake.py b/utils/swift_build_support/tests/test_cmake.py index 981b0923521f9..aa6b766794635 100644 --- a/utils/swift_build_support/tests/test_cmake.py +++ b/utils/swift_build_support/tests/test_cmake.py @@ -68,9 +68,6 @@ def default_args(self): build_ninja=False) def which_ninja(self, args): - toolchain = host_toolchain() - if toolchain.ninja is not None: - return '/path/to/installed/ninja' # Maybe we'll build a ninja, maybe we wont. # Fake it anyway for the tests. return '/path/to/built/ninja' diff --git a/validation-test/BuildSystem/extra_dsymutil_args.test b/validation-test/BuildSystem/extra_dsymutil_args.test new file mode 100644 index 0000000000000..e8d7d8b420430 --- /dev/null +++ b/validation-test/BuildSystem/extra_dsymutil_args.test @@ -0,0 +1,14 @@ +# REQUIRES: standalone_build,OS=macosx + +# RUN: %empty-directory(%t) +# RUN: mkdir -p %t +# RUN: mkdir -p %t/destdir +# RUN: mkdir -p %t/symroot/macosx-%target-cpu +# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --enable-extract-symbol-dry-run-test=1 --host-target=macosx-%target-cpu --darwin-install-extract-symbols --extra-dsymutil-args="--verify-dwarf=none --verbose" --cmake %cmake --install-symroot=%t/symroot --install-destdir=%t/destdir --toolchain-prefix= 2>&1 | %FileCheck %s +# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --enable-extract-symbol-dry-run-test=1 --host-target=macosx-%target-cpu --darwin-install-extract-symbols --extra-dsymutil-args=--verify-dwarf=none,--verbose --cmake %cmake --install-symroot=%t/symroot --install-destdir=%t/destdir --toolchain-prefix= 2>&1 | %FileCheck %s +# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --enable-extract-symbol-dry-run-test=1 --host-target=macosx-%target-cpu --darwin-install-extract-symbols --extra-dsymutil-args="--verify-dwarf=none" --extra-dsymutil-args=--verbose --cmake %cmake --install-symroot=%t/symroot --install-destdir=%t/destdir --toolchain-prefix= 2>&1 | %FileCheck %s + +# CHECK: --- Extracting symbols --- +# CHECK: { "command": "dsymutil", "start": " +# CHECK: xargs -t -n 1 -P 1 {{.*}}dsymutil --verify-dwarf=none --verbose +# CHECK: { "command": "dsymutil", "end": " diff --git a/validation-test/BuildSystem/extra_dsymutil_args_empty.test b/validation-test/BuildSystem/extra_dsymutil_args_empty.test new file mode 100644 index 0000000000000..d888665e08769 --- /dev/null +++ b/validation-test/BuildSystem/extra_dsymutil_args_empty.test @@ -0,0 +1,15 @@ +# REQUIRES: standalone_build,OS=macosx + +# RUN: %empty-directory(%t) +# RUN: mkdir -p %t +# RUN: mkdir -p %t/destdir +# RUN: mkdir -p %t/symroot/macosx-%target-cpu +# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --enable-extract-symbol-dry-run-test=1 --host-target=macosx-%target-cpu --darwin-install-extract-symbols --extra-dsymutil-args="" --cmake %cmake --install-symroot=%t/symroot --install-destdir=%t/destdir --toolchain-prefix= 2>&1 | %FileCheck %s +# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --enable-extract-symbol-dry-run-test=1 --host-target=macosx-%target-cpu --darwin-install-extract-symbols --extra-dsymutil-args= --cmake %cmake --install-symroot=%t/symroot --install-destdir=%t/destdir --toolchain-prefix= 2>&1 | %FileCheck %s +# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --enable-extract-symbol-dry-run-test=1 --host-target=macosx-%target-cpu --darwin-install-extract-symbols --extra-dsymutil-args="" --extra-dsymutil-args="" --cmake %cmake --install-symroot=%t/symroot --install-destdir=%t/destdir --toolchain-prefix= 2>&1 | %FileCheck %s +# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --enable-extract-symbol-dry-run-test=1 --host-target=macosx-%target-cpu --darwin-install-extract-symbols --cmake %cmake --install-symroot=%t/symroot --install-destdir=%t/destdir --toolchain-prefix= 2>&1 | %FileCheck %s + +# CHECK: --- Extracting symbols --- +# CHECK: { "command": "dsymutil", "start": " +# CHECK: xargs -t -n 1 -P 1 {{.*}}dsymutil{{$}} +# CHECK: { "command": "dsymutil", "end": "