Skip to content

Problem linking libunwind when compiling clippy #85751

Closed as not planned
Closed as not planned
@jfgoog

Description

@jfgoog

We are building the Rust compiler from nightly, from which we define a Bazel toolchain.

In addition to rustc, the toolchain includes other tools, such as clippy and rustfmt, which we build as well.

We require the binaries to be statically linked, so they are self-contained and do not depend on shared libraries.

In particular, we need to statically link the version of libunwind that gets built when compiling llvm.

So in config.toml we have

[rust]
llvm-libunwind = "in-tree"

[llvm]
static-libstdcpp = true
cflags = "-D_GLIBCXX_USE_CXX11_ABI=0 -stdlib=libc++ --rtlib=compiler-rt -unwindlib=libunwind -static-libstdc++ -static-libgcc -DUCHAR_TYPE=uint16_t -g0"
ldflags = "-L<staging_dir>/llvm/lib -lunwind -Bstatic -static-libstdc++ -static-libgcc  -g0"
ninja = true

Then, after compiling llvm, we hackishly force static linking by removing the .so: rm llvm/lib/libunwind.so*. This works around #29527

This works for rustc and rustfmt, but not clippy. It seems that clippy is not being told to use the in-tree version of libunwind, and so we get a linker error:

(using <BD> for brevity to indicate the common build directory path)

Building stage1 tool clippy-driver (x86_64-unknown-linux-gnu)
   Compiling ucd-trie v0.1.3
   Compiling pulldown-cmark v0.8.0
   Compiling rustc-semver v1.1.0
   Compiling if_chain v1.0.0
   Compiling rustc_tools_util v0.2.0 (/tmp/build-rustc-staging.g27EHWwDms/rustc-src/src/tools/clippy/rustc_tools_util)
   Compiling quine-mc_cluskey v0.2.4
   Compiling unicase v2.6.0
   Compiling itertools v0.9.0
   Compiling pest v2.1.3
   Compiling clippy v0.1.54 (/tmp/build-rustc-staging.g27EHWwDms/rustc-src/src/tools/clippy)
   Compiling clippy_utils v0.1.54 (/tmp/build-rustc-staging.g27EHWwDms/rustc-src/src/tools/clippy/clippy_utils)
   Compiling semver-parser v0.10.2
   Compiling semver v0.11.0
   Compiling cargo_metadata v0.12.0
   Compiling clippy_lints v0.1.54 (/tmp/build-rustc-staging.g27EHWwDms/rustc-src/src/tools/clippy/clippy_lints)
error: linking with `/usr/bin/clang++` failed: exit status: 1
  |
  = note: "/usr/bin/clang++" "-m64" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-Wl,--as-needed" "-L" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.0.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.1.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.10.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.11.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.12.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.13.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.14.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.15.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.2.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.3.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.4.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.5.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.6.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.7.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.8.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.9.rcgu.o" "-o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps" "-L" "<BD>/stage1-tools/release/deps" "-L" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libclippy_lints-2c94a74107bddb69.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libtoml-dd7456c55c44c90a.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libregex_syntax-4e074f16cdab16e6.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libcargo_metadata-572da3e0be85a7d1.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libserde_json-4b2f39e93e914c91.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libryu-fe03cf9014177fe1.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libitoa-254a369192b0e41b.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libpulldown_cmark-a3cb3d622d5299ec.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libmemchr-5fc53eaed5b93baf.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libunicase-08b754bdb3e79b40.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libbitflags-fa4146283c7dcf7f.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/liburl-e334d4999ae40e26.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libidna-4ccd292e8ff413b7.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libunicode_normalization-977261e1ba455667.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libtinyvec-5931f1f70217b006.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libunicode_bidi-306ecb356465bbde.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libform_urlencoded-c5adc592c24847fe.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libpercent_encoding-c42753e7ff933803.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libmatches-1ba42f8e6736589f.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libitertools-91c2c298f57ac430.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libeither-285099727ca0d3a5.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libquine_mc_cluskey-6ff02b0b5df613fb.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libsemver-cc320f53f6085e6e.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libsemver_parser-71420aeaef3a7d9b.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libpest-41b2d2072c136e80.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libucd_trie-848f9c70f929d69f.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libserde-bba5b8307b4c2e1f.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libclippy_utils-8af687cb6957b8f8.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/librustc_semver-f95ec72f9354327c.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libif_chain-14b305b09fe6df2e.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/librustc_tools_util-ddfcfb1da96998e3.rlib" "-L" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bdynamic" "-lrustc_driver-d0d9704efb4ebe56" "-Wl,--start-group" "-L" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-lstd-bc7a0745f1fbbd95" "-Wl,--end-group" "-Wl,-Bstatic" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-d845064f5e2f3da0.rlib" "-Wl,-Bdynamic" "-lrt" "-ldl" "-lpthread" "-lm" "-lunwind" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,-rpath,$ORIGIN/../lib"
  = note: /usr/bin/ld: cannot find -lunwind
          clang: error: linker command failed with exit code 1 (use -v to see invocation)


error: aborting due to previous error

error: could not compile `clippy`

To learn more, run the command again with --verbose.
command did not execute successfully: "/tmp/build-rustc-staging.g27EHWwDms/rustc-beta-toolchain/bin/cargo" "build" "--target" "x86_64-unknown-linux-gnu" "-Zbinary-dep-depinfo" "-j" "12" "--release" "--frozen" "--manifest-path" "/tmp/build-rustc-staging.g27EHWwDms/rustc-src/src/tools/clippy/Cargo.toml" "--message-format" "json-render-diagnostics"
expected success, got: exit code: 101
Building stage1 tool cargo-clippy (x86_64-unknown-linux-gnu)
   Compiling clippy v0.1.54 (/tmp/build-rustc-staging.g27EHWwDms/rustc-src/src/tools/clippy)
error: linking with `/usr/bin/clang++` failed: exit status: 1
  |
  = note: "/usr/bin/clang++" "-m64" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-Wl,--as-needed" "-L" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.0.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.1.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.10.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.11.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.12.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.13.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.14.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.15.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.2.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.3.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.4.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.5.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.6.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.7.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.8.rcgu.o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5.clippy_driver.b4xue1do-cgu.9.rcgu.o" "-o" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/clippy_driver-2fc6d04ae4266cd5" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps" "-L" "<BD>/stage1-tools/release/deps" "-L" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libclippy_lints-2c94a74107bddb69.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libtoml-dd7456c55c44c90a.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libregex_syntax-4e074f16cdab16e6.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libcargo_metadata-572da3e0be85a7d1.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libserde_json-4b2f39e93e914c91.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libryu-fe03cf9014177fe1.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libitoa-254a369192b0e41b.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libpulldown_cmark-a3cb3d622d5299ec.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libmemchr-5fc53eaed5b93baf.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libunicase-08b754bdb3e79b40.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libbitflags-fa4146283c7dcf7f.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/liburl-e334d4999ae40e26.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libidna-4ccd292e8ff413b7.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libunicode_normalization-977261e1ba455667.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libtinyvec-5931f1f70217b006.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libunicode_bidi-306ecb356465bbde.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libform_urlencoded-c5adc592c24847fe.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libpercent_encoding-c42753e7ff933803.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libmatches-1ba42f8e6736589f.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libitertools-91c2c298f57ac430.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libeither-285099727ca0d3a5.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libquine_mc_cluskey-6ff02b0b5df613fb.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libsemver-cc320f53f6085e6e.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libsemver_parser-71420aeaef3a7d9b.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libpest-41b2d2072c136e80.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libucd_trie-848f9c70f929d69f.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libserde-bba5b8307b4c2e1f.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libclippy_utils-8af687cb6957b8f8.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/librustc_semver-f95ec72f9354327c.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/libif_chain-14b305b09fe6df2e.rlib" "<BD>/stage1-tools/x86_64-unknown-linux-gnu/release/deps/librustc_tools_util-ddfcfb1da96998e3.rlib" "-L" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bdynamic" "-lrustc_driver-d0d9704efb4ebe56" "-Wl,--start-group" "-L" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-lstd-bc7a0745f1fbbd95" "-Wl,--end-group" "-Wl,-Bstatic" "<BD>/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-d845064f5e2f3da0.rlib" "-Wl,-Bdynamic" "-lrt" "-ldl" "-lpthread" "-lm" "-lunwind" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,-rpath,$ORIGIN/../lib"
  = note: /usr/bin/ld: cannot find -lunwind
          clang: error: linker command failed with exit code 1 (use -v to see invocation)


error: aborting due to previous error

error: could not compile `clippy`

To learn more, run the command again with --verbose.
command did not execute successfully: "/tmp/build-rustc-staging.g27EHWwDms/rustc-beta-toolchain/bin/cargo" "build" "--target" "x86_64-unknown-linux-gnu" "-Zbinary-dep-depinfo" "-j" "12" "--release" "--frozen" "--manifest-path" "/tmp/build-rustc-staging.g27EHWwDms/rustc-src/src/tools/clippy/Cargo.toml" "--message-format" "json-render-diagnostics"
expected success, got: exit code: 101

Additional information:

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.T-bootstrapRelevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions