From e313df88ce09fc99455e0837c37f9dbbd6ee2bc5 Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Fri, 11 Feb 2022 09:32:48 +0100 Subject: [PATCH] [build-script] Add option to build lld as part of LLVM --- utils/build-script-impl | 12 ++---------- utils/build_swift/build_swift/driver_arguments.py | 3 +++ utils/build_swift/tests/expected_options.py | 2 ++ .../swift_build_support/build_script_invocation.py | 14 ++++++++++++++ validation-test/BuildSystem/build_lld.test | 9 +++++++++ 5 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 validation-test/BuildSystem/build_lld.test diff --git a/utils/build-script-impl b/utils/build-script-impl index c582c002647..a7672d5ad40 100755 --- a/utils/build-script-impl +++ b/utils/build-script-impl @@ -1833,16 +1833,8 @@ for host in "${ALL_HOSTS[@]}"; do llvm_enable_projects+=("clang-tools-extra") fi - # On non-Darwin platforms, build lld so we can always have a - # linker that is compatible with the swift we are using to - # compile the stdlib. - # - # This makes it easier to build target stdlibs on systems that - # have old toolchains without more modern linker features. - if [[ "$(uname -s)" != "Darwin" ]] ; then - if [[ ! "${SKIP_BUILD_LLD}" ]]; then - llvm_enable_projects+=("lld") - fi + if [[ ! "${SKIP_BUILD_LLD}" ]]; then + llvm_enable_projects+=("lld") fi cmake_options+=( diff --git a/utils/build_swift/build_swift/driver_arguments.py b/utils/build_swift/build_swift/driver_arguments.py index 738042364c5..2caf55d14fe 100644 --- a/utils/build_swift/build_swift/driver_arguments.py +++ b/utils/build_swift/build_swift/driver_arguments.py @@ -721,6 +721,9 @@ def create_argument_parser(): option(['--build-libparser-only'], toggle_true('build_libparser_only'), help='build only libParser for SwiftSyntax') + option(['--build-lld'], toggle_true('build_lld'), + help='build lld as part of llvm') + option('--skip-build-clang-tools-extra', toggle_false('build_clang_tools_extra'), default=True, diff --git a/utils/build_swift/tests/expected_options.py b/utils/build_swift/tests/expected_options.py index 9984cf0c439..2939738f677 100644 --- a/utils/build_swift/tests/expected_options.py +++ b/utils/build_swift/tests/expected_options.py @@ -71,6 +71,7 @@ EXPECTED_DEFAULTS = { 'build_lldb': False, 'build_libcxx': False, 'build_ninja': False, + 'build_lld': False, 'build_osx': True, 'build_playgroundsupport': False, 'build_runtime_with_host_compiler': False, @@ -531,6 +532,7 @@ EXPECTED_OPTIONS = [ EnableOption('--android'), EnableOption('--build-external-benchmarks'), EnableOption('--build-ninja'), + EnableOption('--build-lld'), EnableOption('--build-runtime-with-host-compiler'), EnableOption('--build-swift-dynamic-sdk-overlay'), EnableOption('--build-swift-dynamic-stdlib'), 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 5343318ad80..5f4dd06ec2d 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 @@ -427,6 +427,20 @@ class BuildScriptInvocation(object): "--llvm-install-components=%s" % args.llvm_install_components ] + # On non-Darwin platforms, build lld so we can always have a + # linker that is compatible with the swift we are using to + # compile the stdlib. + # + # This makes it easier to build target stdlibs on systems that + # have old toolchains without more modern linker features. + # + # On Darwin, only build lld if explicitly requested using --build-lld. + should_build_lld = (platform.system() != 'Darwin' or args.build_lld) + if not should_build_lld: + impl_args += [ + "--skip-build-lld" + ] + if not args.clean_libdispatch: impl_args += [ "--skip-clean-libdispatch" diff --git a/validation-test/BuildSystem/build_lld.test b/validation-test/BuildSystem/build_lld.test new file mode 100644 index 00000000000..4df80311c6f --- /dev/null +++ b/validation-test/BuildSystem/build_lld.test @@ -0,0 +1,9 @@ +# RUN: %empty-directory(%t) +# RUN: mkdir -p %t +# RUN: SKIP_XCODE_VERSION_CHECK=1 SWIFT_BUILD_ROOT=%t %swift_src_root/utils/build-script --dry-run --build-lld 2>&1 | %FileCheck %s + +# REQUIRES: standalone_build + +# Check that lld is in LLVM_ENABLE_PROJECTS of the llvm-project/llvm build + +# CHECK: '-DLLVM_ENABLE_PROJECTS={{[^']*}}lld{{[^']*}}'{{.*}}llvm-project/llvm{{$}}