Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linker error when building rust toolchain on x86_64 to target and run on i586 machines #92867

Closed
teknoman117 opened this issue Jan 13, 2022 · 1 comment
Labels
C-bug Category: This is a bug.

Comments

@teknoman117
Copy link

teknoman117 commented Jan 13, 2022

I'm attempting to compile the Rust toolchain to target and run on a really old computer (AMD K6-2+/500), but build it on my modern desktop (Threadripper 1950X). This is part of adding xorg to the Gentoo image I have going for it, and I need a Rust toolchain as spidermonkey uses Rust and is apparently a dependency of polkit these days, which is a dependency of pam, which is a dependency of elogind, and so on. The default Gentoo Rust ebuild doesn't seem to understand i586 and ends up building an i686 toolchain instead, meaning all the Rust programs are potentially build with SSE and SSE2 instructions. So here I am building from source manually so I can understand the whole process first, then hack up dev-lang/rust-bin to install my custom one.

I cloned rust from GitHub, checked out the 1.56.1 tag (I also tried 1.57.0), updated and init'd the submodules, and ran the setup script. Rust doesn't seem to be too happy about trying to compile 32-bit toolchains with a 64-bit rust compiler, so I set the build toolchain as i686 and the host and target to i586.

# set target and host to i586-unknown-linux-gnu, generates config.toml
./x.py setup --build i686-unknown-linux-gnu --host i586-unknown-linux-gnu --target i586-unknown-linux-gnu -j 32

# build toolchain
./x.py dist --build i686-unknown-linux-gnu --host i586-unknown-linux-gnu --target i586-unknown-linux-gnu -j 32

It runs for about 15 minutes before failing to link when building the stage1 compiler artifacts. The symbols it's complaining about suggest an unsatisfied dependency on zlib.

Building stage1 compiler artifacts (i686-unknown-linux-gnu -> i586-unknown-linux-gnu)
   Compiling rustc-main v0.0.0 (/home/nlewis/Sources/rust/compiler/rustc)
error: linking with `cc` failed: exit status: 1
  |
  = note: "cc" "-m32" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/rustc_main-8dca1282a3ea6fe5.rustc_main.049335a6-cgu.0.rcgu.o" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/rustc_main-8dca1282a3ea6fe5.rustc_main.049335a6-cgu.1.rcgu.o" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/rustc_main-8dca1282a3ea6fe5.rustc_main.049335a6-cgu.2.rcgu.o" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/rustc_main-8dca1282a3ea6fe5.rustc_main.049335a6-cgu.3.rcgu.o" "-Wl,--as-needed" "-L" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps" "-L" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/release/deps" "-L" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/build/psm-575ab1ac3c62167e/out" "-L" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/build/rustc_llvm-a25318d4dac0e88d/out" "-L" "/home/nlewis/Sources/rust/build/i586-unknown-linux-gnu/llvm/build/lib" "-L" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1/lib/rustlib/i586-unknown-linux-gnu/lib" "-L" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps" "-lrustc_driver-758e2c9545688f16" "-Wl,--start-group" "-L" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1/lib/rustlib/i586-unknown-linux-gnu/lib" "-lstd-13a451e692cd4b84" "-Wl,--end-group" "-Wl,-Bstatic" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1/lib/rustlib/i586-unknown-linux-gnu/lib/libcompiler_builtins-c6f3a48116e83ade.rlib" "-Wl,-Bdynamic" "-lstdc++" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1/lib/rustlib/i586-unknown-linux-gnu/lib" "-o" "/home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/rustc_main-8dca1282a3ea6fe5" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-Wl,-rpath,$ORIGIN/../lib"
  = note: /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/../../../../x86_64-pc-linux-gnu/bin/ld: /home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/librustc_driver-758e2c9545688f16.so: undefined reference to `uncompress'
          /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/../../../../x86_64-pc-linux-gnu/bin/ld: /home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/librustc_driver-758e2c9545688f16.so: undefined reference to `compress2'
          /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/../../../../x86_64-pc-linux-gnu/bin/ld: /home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/librustc_driver-758e2c9545688f16.so: undefined reference to `crc32'
          /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/../../../../x86_64-pc-linux-gnu/bin/ld: /home/nlewis/Sources/rust/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/librustc_driver-758e2c9545688f16.so: undefined reference to `compressBound'
          collect2: error: ld returned 1 exit status

  = help: some `extern` functions couldn't be found; some native libraries may need to be installed or have their path specified
  = note: use the `-l` flag to specify native libraries to link
  = note: use the `cargo:rustc-link-lib` directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-link-libkindname)

error: could not compile `rustc-main` due to previous error
Build completed unsuccessfully in 0:00:49

Does anyone know what I'm missing here?

@teknoman117 teknoman117 added the C-bug Category: This is a bug. label Jan 13, 2022
@teknoman117
Copy link
Author

I am closing this issue because it is an as of yet unknown problem resulting from my build environment. Compiling rust with these arguments worked perfectly fine from the i386 Ubuntu 20.04 docker container (i386/ubuntu:20.04) (it required the packages: build-essential, curl, git, ninja-build, cmake, python3, pkg-config, and libssl-dev iirc). You also have to set PKG_CONFIG_ALLOW_CROSS=1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug.
Projects
None yet
Development

No branches or pull requests

1 participant