rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
94.7k stars 12.2k forks source link

Rust does not build with `llvm-unwind` #126752

Open RossComputerGuy opened 1 week ago

RossComputerGuy commented 1 week ago

Related issue: https://github.com/NixOS/nixpkgs/issues/311930

Related PR: https://github.com/NixOS/nixpkgs/pull/320432

In Nixpkgs, rust is often used for things like mesa. We're looking to allow for building systems under LLVM and this is a blocker for mesa. Our problem is the llvm-libunwind option does not seem to work. We continue to get errors with linking with libgcc_s. We're building with these flags (outputted from a nix eval with JSON):

[
  "--sysconfdir=/1rz4g4znpzjwh1xymhjpm42vipw92pr73vdgl6xs1hycac8kf2n9/etc",
  "--release-channel=stable",
  "--set=build.rustc=/nix/store/rbsfq954vg4xxr5wz958ygpdi313wms2-aarch64-unknown-linux-gnu-rustc-wrapper-1.78.0/bin/rustc",
  "--set=build.cargo=/nix/store/kd2rzgd1yaqf0cgl61mqj54nqzg01chi-aarch64-unknown-linux-gnu-cargo-1.78.0/bin/cargo",
  "--tools=rustc,rustdoc,rust-analyzer-proc-macro-srv",
  "--enable-rpath",
  "--enable-vendor",
  "--build=aarch64-unknown-linux-gnu",
  "--host=aarch64-unknown-linux-gnu",
  "--target=aarch64-unknown-linux-gnu,wasm32-unknown-unknown,aarch64-unknown-linux-gnu",
  "--set=target.aarch64-unknown-linux-gnu.cc=/nix/store/a11996pij79myrp43myn4zycdlzh9jsw-gcc-wrapper-13.3.0/bin/cc",
  "--set=target.aarch64-unknown-linux-gnu.cc=/nix/store/pjq4j90az01m6hgf7fd3jiilnp7f0cb6-aarch64-unknown-linux-gnu-clang-wrapper-17.0.6/bin/aarch64-unknown-linux-gnu-clang",
  "--set=target.aarch64-unknown-linux-gnu.cc=/nix/store/pjq4j90az01m6hgf7fd3jiilnp7f0cb6-aarch64-unknown-linux-gnu-clang-wrapper-17.0.6/bin/aarch64-unknown-linux-gnu-clang",
  "--set=target.aarch64-unknown-linux-gnu.linker=/nix/store/a11996pij79myrp43myn4zycdlzh9jsw-gcc-wrapper-13.3.0/bin/cc",
  "--set=target.aarch64-unknown-linux-gnu.linker=/nix/store/pjq4j90az01m6hgf7fd3jiilnp7f0cb6-aarch64-unknown-linux-gnu-clang-wrapper-17.0.6/bin/aarch64-unknown-linux-gnu-clang",
  "--set=target.aarch64-unknown-linux-gnu.linker=/nix/store/pjq4j90az01m6hgf7fd3jiilnp7f0cb6-aarch64-unknown-linux-gnu-clang-wrapper-17.0.6/bin/aarch64-unknown-linux-gnu-clang",
  "--set=target.aarch64-unknown-linux-gnu.cxx=/nix/store/a11996pij79myrp43myn4zycdlzh9jsw-gcc-wrapper-13.3.0/bin/c++",
  "--set=target.aarch64-unknown-linux-gnu.cxx=/nix/store/pjq4j90az01m6hgf7fd3jiilnp7f0cb6-aarch64-unknown-linux-gnu-clang-wrapper-17.0.6/bin/aarch64-unknown-linux-gnu-clang++",
  "--set=target.aarch64-unknown-linux-gnu.cxx=/nix/store/pjq4j90az01m6hgf7fd3jiilnp7f0cb6-aarch64-unknown-linux-gnu-clang-wrapper-17.0.6/bin/aarch64-unknown-linux-gnu-clang++",
  "--set=target.aarch64-unknown-linux-gnu.crt-static=false",
  "--set=target.aarch64-unknown-linux-gnu.crt-static=false",
  "--set=target.aarch64-unknown-linux-gnu.crt-static=false",
  "--enable-llvm-link-shared",
  "--set=target.aarch64-unknown-linux-gnu.llvm-config=/nix/store/bzgbd6wr5x73nx41y4gilvvppmxjknjc-llvm-18.1.7-dev/bin/llvm-config",
  "--set=target.aarch64-unknown-linux-gnu.llvm-config=/nix/store/xxlgyd2nj8dr32jhkriixzjy1pag1j84-llvm-18.1.7-dev/bin/llvm-config",
  "--set=target.aarch64-unknown-linux-gnu.llvm-config=/nix/store/xxlgyd2nj8dr32jhkriixzjy1pag1j84-llvm-18.1.7-dev/bin/llvm-config",
  "--enable-profiler",
  "--llvm-libunwind=system"
]
12101111 commented 1 week ago

It seems crate bootstrap failed to build on your envirenment. libgcc_s is still needed if the bootstrap compiler is not build with llvm-libunwind enabled. You can use this hack to build rustc without libgcc_s: https://github.com/gentoo/gentoo/blob/master/dev-lang/rust/rust-1.78.0.ebuild#L284

RossComputerGuy commented 1 week ago

Sweet, that got us closer.

rustc> error: linking with `/nix/store/pjq4j90az01m6hgf7fd3jiilnp7f0cb6-aarch64-unknown-linux-gnu-clang-wrapper-17.0.6/bin/aarch64-unknown-linux-gnu-clang` failed: exit status: 1
rustc>   |
rustc>   = note: LC_ALL="C" PATH="/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-sysroot/lib/rustlib/aarch64-unknown-linux-gnu/bin:/nix/store/5nv4aw62csx9zliikdcsffmds5h9787v-aarch64-unknown-linux-gnu-rustc-wrapper-1.78.0/bin:/nix/store/a11996pij79myrp43myn4zycdlzh9jsw-gcc-wrapper-13.3.0/bin:/nix/store/mcmyjzgqhfq6ycm0hz2482f454gd7ipc-gcc-13.3.0/bin:/nix/store/cv5w5wlyhfx1246dk4mdigj6x33w8jm2-glibc-2.39-52-bin/bin:/nix/store/84yg60swk80b04apprb1432kir41bvzj-coreutils-9.5/bin:/nix/store/cx2igw6n2pdfv62ksgk9vzxlk33rn6ak-binutils-wrapper-2.41/bin:/nix/store/y4fgprf79mjq30vc5wwz8pb15z2wpfl6-binutils-2.41/bin:/nix/store/c0x6ljv1blsrg8b26ga9afw2ijvb2kfw-pkg-config-wrapper-0.29.2/bin:/nix/store/ss6fxv2sc84ghnnmiik0i8p58z93n6pk-file-5.45/bin:/nix/store/q3x28mimkawkdjlvd78jxv3s0fk25vz8-python3-3.11.9/bin:/nix/store/dr2r1k4j95yphc49fcs2xsdqni2cxldn-cmake-3.29.3/bin:/nix/store/kgvi8kib1hknbc76539l9b1r7qaqrb30-which-2.21/bin:/nix/store/ir3q2pn7mgbazas1fgbhdhjaw35148ma-remove-references-to/bin:/nix/store/1lih6ddkqai10myl1yjjgfyfylkmypsh-aarch64-unknown-linux-gnu-pkg-config-wrapper-0.29.2/bin:/nix/store/ihvflbs8s0dwlw0rjgxavz91fz4cgwhx-xz-5.4.6-bin/bin:/nix/store/dwh9z3c0rar7vc8n0s00hnbbljgy6flb-patchelf-0.15.0/bin:/nix/store/pjq4j90az01m6hgf7fd3jiilnp7f0cb6-aarch64-unknown-linux-gnu-clang-wrapper-17.0.6/bin:/nix/store/xm3a2f53cwd8q6yvrfd020akvcbrwkvj-clang-17.0.6/bin:/nix/store/zv6a9hrfnrdx50irgp5xr2z3gi41qpx3-glibc-aarch64-unknown-linux-gnu-2.39-52-bin/bin:/nix/store/n6grbq4kal755za2cpmbkwxkgbj7kmpi-aarch64-unknown-linux-gnu-llvm-binutils-wrapper-17.0.6/bin:/nix/store/xy7ca4071hyimlyfcqp9rxia9k3s3rm2-llvm-binutils-17.0.6/bin:/nix/store/84yg60swk80b04apprb1432kir41bvzj-coreutils-9.5/bin:/nix/store/lxj7k5g73inw4h9jw7cw99jwig93fyqx-findutils-4.9.0/bin:/nix/store/fa6d8rg6lpk5g8g1rqcjrv9gm3gb8xn0-diffutils-3.10/bin:/nix/store/yxjfnwjn4azs2b5781ddnhmafmixpfic-gnused-4.9/bin:/nix/store/gy4xhd2wvf1m8v47k7iccjhg0x1d2898-gnugrep-3.11/bin:/nix/store/qnz36184dh0da9v0aagvasq709291wwi-gawk-5.2.2/bin:/nix/store/1cqyddnhggg6xcxni7k13pwlh3pygxyn-gnutar-1.35/bin:/nix/store/jd4i322cwm5b37b3rsgi4s08q34qjlll-gzip-1.13/bin:/nix/store/jmb4m219kv4v8n2hdmdjn23ih4f2vryf-bzip2-1.0.8-bin/bin:/nix/store/3w7ldfr5lrwmvfkhgmvgiq0dsb15f87a-gnumake-4.4.1/bin:/nix/store/gwqh47kdw6y1gv7mfwy0y00s692bs90f-bash-5.2p26/bin:/nix/store/cxkaib1mlvy4adahr01vp7j492x04n7h-patch-2.7.6/bin:/nix/store/ihvflbs8s0dwlw0rjgxavz91fz4cgwhx-xz-5.4.6-bin/bin:/nix/store/fdfc9dkg8njgvgpv8a39hawyicxc8kpa-file-5.45/bin:/nix/store/j5day0wxiigq5422npwaa5q37w08kfqm-rustc-wrapper-1.78.0/bin" VSLANG="1033" "/nix/store/pjq4j90az01m6hgf7fd3jiilnp7f0cb6-aarch64-unknown-linux-gnu-clang-wrapper-17.0.6/bin/aarch64-unknown-linux-gnu-clang" "/build/rustcebXKlH/symbols.o" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps/rustc_main-5161dd2ebf9e4720.rustc_main.6f2bdf970af4b1eb-cgu.0.rcgu.o" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps/rustc_main-5161dd2ebf9e4720.rustc_main.6f2bdf970af4b1eb-cgu.1.rcgu.o" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps/rustc_main-5161dd2ebf9e4720.rustc_main.6f2bdf970af4b1eb-cgu.2.rcgu.o" "-Wl,--as-needed" "-L" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps" "-L" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/release/deps" "-L" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/build/psm-ccb132b00ce7dc06/out" "-L" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/build/rustc_llvm-01ce6d150095af4d/out" "-L" "/nix/store/aj3ssh2d4x0jnzks4xax60v398kkpwj6-llvm-18.1.7-lib/lib" "-L" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-sysroot/lib/rustlib/aarch64-unknown-linux-gnu/lib" "-L" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps" "-Wl,-Bdynamic" "-lrustc_driver-a6b5571fae8e1338" "-L" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-sysroot/lib/rustlib/aarch64-unknown-linux-gnu/lib" "-lstd-c050d4df7a3d7ebf" "-Wl,-Bstatic" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-sysroot/lib/rustlib/aarch64-unknown-linux-gnu/lib/libcompiler_builtins-5041d26b5f0c46ec.rlib" "-Wl,-Bdynamic" "-lLLVM-18" "-lc++" "-ldl" "-lunwind" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-sysroot/lib/rustlib/aarch64-unknown-linux-gnu/lib" "-o" "/build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps/rustc_main-5161dd2ebf9e4720" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-nodefaultlibs" "-Wl,-z,origin" "-Wl,-rpath,$ORIGIN/../lib"
rustc>   = note: aarch64-unknown-linux-gnu-ld: error: undefined reference due to --no-allow-shlib-undefined: llvm::raw_fd_ostream::raw_fd_ostream(llvm::StringRef, std::__1::error_code&, llvm::sys::fs::CreationDisposition)
rustc>           >>> referenced by /build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps/librustc_driver-a6b5571fae8e1338.so
rustc>
rustc>           aarch64-unknown-linux-gnu-ld: error: undefined reference due to --no-allow-shlib-undefined: llvm::sys::getDefaultTargetTriple()
rustc>           >>> referenced by /build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps/librustc_driver-a6b5571fae8e1338.so
rustc>
rustc>           aarch64-unknown-linux-gnu-ld: error: undefined reference due to --no-allow-shlib-undefined: llvm::Triple::normalize(llvm::StringRef)
rustc>           >>> referenced by /build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps/librustc_driver-a6b5571fae8e1338.so
rustc>
rustc>           aarch64-unknown-linux-gnu-ld: error: undefined reference due to --no-allow-shlib-undefined: llvm::TargetRegistry::lookupTarget(llvm::StringRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>&)
rustc>           >>> referenced by /build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps/librustc_driver-a6b5571fae8e1338.so
rustc>
rustc>           aarch64-unknown-linux-gnu-ld: error: undefined reference due to --no-allow-shlib-undefined: llvm::raw_fd_ostream::raw_fd_ostream(llvm::StringRef, std::__1::error_code&, llvm::sys::fs::OpenFlags)
rustc>           >>> referenced by /build/rustc-1.78.0-src/build/aarch64-unknown-linux-gnu/stage0-rustc/aarch64-unknown-linux-gnu/release/deps/librustc_driver-a6b5571fae8e1338.so