Bug 225994

Summary: lang/rust - update bootstrap to 1.23
Product: Ports & Packages Reporter: Don Lewis <truckman>
Component: Individual Port(s)Assignee: FreeBSD Rust Team <rust>
Status: Closed FIXED    
Severity: Affects Some People CC: dumbbell, tijl
Priority: --- Flags: dumbbell: maintainer-feedback+
Version: Latest   
Hardware: Any   
OS: Any   
Bug Depends on: 225582    
Bug Blocks: 225899    

Description Don Lewis freebsd_committer freebsd_triage 2018-02-17 21:31:50 UTC
There is a bug in the gmake jobserver implmentation that can cause it do deadlock when it is configured to use pselect(), which it is on FreeBSD.  The upstream fix is to make the jobserver pipe descriptor non-blocking.  Unfortunately the jobserver implementation in rust was not updated for compatibility until version 1.23.  With the patch to gmake to fix the deadlock problem, the rust bootstrap fails like this:

   Compiling rls-data v0.12.0
   Compiling syntax_pos v0.0.0 (file:///wrkdirs/usr/ports/lang/rust/work/rustc-1.23.0-src/src/libsyntax_pos)
error: failed to acquire jobserver token

Caused by:
  Resource temporarily unavailable (os error 35)
thread 'main' panicked at 'command did not execute successfully: "/wrkdirs/usr/ports/lang/rust/work/rustc-1.23.0-src/build/x86_64-unknown-freebsd/stage0/bi
n/cargo" "build" "--target" "x86_64-unknown-freebsd" "--release" "--frozen" "--features" " jemalloc llvm" "--manifest-path" "/wrkdirs/usr/ports/lang/rust/w
ork/rustc-1.23.0-src/src/rustc/Cargo.toml" "--message-format" "json"
expected success, got: exit code: 101', src/bootstrap/compile.rs:882:8
note: Run with `RUST_BACKTRACE=1` for a backtrace.
Traceback (most recent call last):
  File "/wrkdirs/usr/ports/lang/rust/work/rustc-1.23.0-src/x.py", line 20, in <module>
    bootstrap.main()
  File "/wrkdirs/usr/ports/lang/rust/work/rustc-1.23.0-src/src/bootstrap/bootstrap.py", line 758, in main
    bootstrap()
  File "/wrkdirs/usr/ports/lang/rust/work/rustc-1.23.0-src/src/bootstrap/bootstrap.py", line 749, in bootstrap
    run(args, env=env, verbose=build.verbose)
  File "/wrkdirs/usr/ports/lang/rust/work/rustc-1.23.0-src/src/bootstrap/bootstrap.py", line 148, in run
    raise RuntimeError(err)
RuntimeError: failed to run: /wrkdirs/usr/ports/lang/rust/work/rustc-1.23.0-src/build/bootstrap/debug/bootstrap build --verbose --config ./config.toml --jo
bs 8
*** Error code 1
Comment 1 Jean-Sébastien Pédron freebsd_committer freebsd_triage 2018-02-19 22:01:22 UTC
Hi!

I just update lang/rust to 1.24.0. It uses Rust 1.23.0 to bootstrap. Is it enough to fix the problem?

I don't know if it's related, but the upstream bootstraps for amd64 and i386 hang early in the compilation of Rust. This is the case for several versions. The current workaround is to create new bootstraps out of the existing FreeBSD packages. I don't know if it's the case for the aarch64 bootstrap because I cross-compile it on amd64 but I don't have a aarch64 poudriere host.
Comment 2 Don Lewis freebsd_committer freebsd_triage 2018-02-20 02:13:40 UTC
Yes, I was able to build the updated rust with the gmake jobserver bugfix patch.
Comment 3 Jean-Sébastien Pédron freebsd_committer freebsd_triage 2018-02-20 09:23:39 UTC
Great! Should we close this PR?

Thank you for reporting the issue!