Skip to content

"cannot produce dylib for rustc_driver v0.0.0 ... as the target riscv64gc-unknown-linux-musl does not support these crate types" #110511

Open
@catamorphism

Description

@catamorphism

I'm cross-compiling Rust for riscv64gc-unknown-linux-musl with the following config.toml:

profile = "codegen"
changelog-seen = 2

[build]
docs = false
compiler-docs = false
extended = true

[target.riscv64gc-unknown-linux-musl]
ar = "/home/scratch/riscv/bin/riscv64-unknown-linux-musl-ar"
linker = "/home/scratch/riscv/bin/riscv64-unknown-linux-musl-gcc"
cc = "/home/scratch/riscv/bin/riscv64-unknown-linux-musl-gcc"
cxx = "/home/scratch/riscv/bin/riscv64-unknown-linux-musl-g++"
musl-root = "/home/scratch/riscv/sysroot"

[llvm]
download-ci-llvm = false
link-shared = false

Executing:
RUSTFLAGS="-Clink-args=-lgcc" ./x.py build --host riscv64gc-unknown-linux-musl --target riscv64gc-unknown-linux-musl --verbose

the output is:

[snip]
Building compiler artifacts (stage1:x86_64-unknown-linux-gnu -> stage2:riscv64gc-unknown-linux-musl)
running: cd "/home/scratch/rust" && AR_riscv64gc_unknown_linux_musl="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-ar" CARGO_INCREMENTAL="1" CARGO_PROFILE_RELEASE_DEBUG="0" CARGO_PROFILE_RELEASE_DEBUG_ASSERTIONS="false" CARGO_PROFILE_RELEASE_OVERFLOW_CHECKS="false" CARGO_TARGET_DIR="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1-rustc" CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_MUSL_LINKER="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-gcc" CC_riscv64gc_unknown_linux_musl="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-gcc" CFG_COMPILER_HOST_TRIPLE="riscv64gc-unknown-linux-musl" CFG_DEFAULT_CODEGEN_BACKEND="llvm" CFG_LIBDIR_RELATIVE="lib" CFG_RELEASE="1.71.0-dev" CFG_RELEASE_CHANNEL="dev" CFG_VERSION="1.71.0-dev" CFLAGS_riscv64gc_unknown_linux_musl="-ffunction-sections -fdata-sections -fPIC -march=rv64gc -mabi=lp64d -mcmodel=medany -static" CXXFLAGS_riscv64gc_unknown_linux_musl="-ffunction-sections -fdata-sections -fPIC -march=rv64gc -mabi=lp64d -mcmodel=medany -static" CXX_riscv64gc_unknown_linux_musl="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-g++" LIBC_CHECK_CFG="1" LLVM_CONFIG="/home/scratch/rust/build/x86_64-unknown-linux-gnu/llvm/build/bin/llvm-config" LLVM_NDEBUG="1" LLVM_RUSTLLVM="1" RANLIB_riscv64gc_unknown_linux_musl="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-ar s" REAL_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" RUSTBUILD_NATIVE_DIR="/home/scratch/rust/build/riscv64gc-unknown-linux-musl/native" RUSTC="/home/scratch/rust/build/bootstrap/debug/rustc" RUSTC_BACKTRACE_ON_ICE="1" RUSTC_BOOTSTRAP="1" RUSTC_BREAK_ON_ICE="1" RUSTC_ERROR_METADATA_DST="/home/scratch/rust/build/tmp/extended-error-metadata" RUSTC_FORCE_UNSTABLE="1" RUSTC_INSTALL_BINDIR="bin" RUSTC_LIBDIR="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1/lib" RUSTC_LINT_FLAGS="-Wrust_2018_idioms -Wunused_lifetimes -Wsemicolon_in_expressions_from_macros -Dwarnings" RUSTC_REAL="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1/bin/rustc" RUSTC_SNAPSHOT="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1/bin/rustc" RUSTC_SNAPSHOT_LIBDIR="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1/lib" RUSTC_STAGE="1" RUSTC_SYSROOT="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1" RUSTC_TLS_MODEL_INITIAL_EXEC="1" RUSTC_VERBOSE="1" RUSTDOC="/home/scratch/rust/build/bootstrap/debug/rustdoc" RUSTDOCFLAGS="-Clink-args=-lgcc --cfg=windows_raw_dylib -Csymbol-mangling-version=v0 -Zunstable-options --check-cfg=values(bootstrap) --check-cfg=values(parallel_compiler) --check-cfg=values(no_btreemap_remove_entry) --check-cfg=values(crossbeam_loom) --check-cfg=values(span_locations) --check-cfg=values(rustix_use_libc) --check-cfg=values(emulate_second_only_system) --check-cfg=values(windows_raw_dylib) -Dwarnings -Wrustdoc::invalid_codeblock_attributes --crate-version 1.71.0-dev" RUSTDOC_REAL="/path/to/nowhere/rustdoc/not/required" RUSTFLAGS="-Clink-args=-lgcc --cfg=windows_raw_dylib -Csymbol-mangling-version=v0 -Zunstable-options --check-cfg=values(bootstrap) --check-cfg=values(parallel_compiler) --check-cfg=values(no_btreemap_remove_entry) --check-cfg=values(crossbeam_loom) --check-cfg=values(span_locations) --check-cfg=values(rustix_use_libc) --check-cfg=values(emulate_second_only_system) --check-cfg=values(windows_raw_dylib) -Zdual-proc-macros -Zmacro-backtrace -Clink-args=-Wl,-z,origin -Clink-args=-Wl,-rpath,$ORIGIN/../lib -Csplit-debuginfo=off -Zunstable-options -Wrustc::internal -Cprefer-dynamic -Cllvm-args=-import-instr-limit=10 -Clto=off" RUST_TEST_THREADS="32" WINAPI_NO_BUNDLED_LIBRARIES="1" __CARGO_DEFAULT_LIB_METADATA="dev" "/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "build" "--target" "riscv64gc-unknown-linux-musl" "--release" "-Zcheck-cfg=names,values,output,features" "-Zdual-proc-macros" "-Zbinary-dep-depinfo" "-j" "32" "-v" "--features" "llvm" "--manifest-path" "/home/scratch/rust/compiler/rustc/Cargo.toml" "--message-format" "json-render-diagnostics"
error: cannot produce dylib for `rustc_driver v0.0.0 (/home/scratch/rust/compiler/rustc_driver)` as the target `riscv64gc-unknown-linux-musl` does not support these crate types
command did not execute successfully: cd "/home/scratch/rust" && AR_riscv64gc_unknown_linux_musl="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-ar" CARGO_INCREMENTAL="1" CARGO_PROFILE_RELEASE_DEBUG="0" CARGO_PROFILE_RELEASE_DEBUG_ASSERTIONS="false" CARGO_PROFILE_RELEASE_OVERFLOW_CHECKS="false" CARGO_TARGET_DIR="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1-rustc" CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_MUSL_LINKER="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-gcc" CC_riscv64gc_unknown_linux_musl="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-gcc" CFG_COMPILER_HOST_TRIPLE="riscv64gc-unknown-linux-musl" CFG_DEFAULT_CODEGEN_BACKEND="llvm" CFG_LIBDIR_RELATIVE="lib" CFG_RELEASE="1.71.0-dev" CFG_RELEASE_CHANNEL="dev" CFG_VERSION="1.71.0-dev" CFLAGS_riscv64gc_unknown_linux_musl="-ffunction-sections -fdata-sections -fPIC -march=rv64gc -mabi=lp64d -mcmodel=medany -static" CXXFLAGS_riscv64gc_unknown_linux_musl="-ffunction-sections -fdata-sections -fPIC -march=rv64gc -mabi=lp64d -mcmodel=medany -static" CXX_riscv64gc_unknown_linux_musl="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-g++" LIBC_CHECK_CFG="1" LLVM_CONFIG="/home/scratch/rust/build/x86_64-unknown-linux-gnu/llvm/build/bin/llvm-config" LLVM_NDEBUG="1" LLVM_RUSTLLVM="1" RANLIB_riscv64gc_unknown_linux_musl="/home/scratch/riscv/bin/riscv64-unknown-linux-musl-ar s" REAL_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" RUSTBUILD_NATIVE_DIR="/home/scratch/rust/build/riscv64gc-unknown-linux-musl/native" RUSTC="/home/scratch/rust/build/bootstrap/debug/rustc" RUSTC_BACKTRACE_ON_ICE="1" RUSTC_BOOTSTRAP="1" RUSTC_BREAK_ON_ICE="1" RUSTC_ERROR_METADATA_DST="/home/scratch/rust/build/tmp/extended-error-metadata" RUSTC_FORCE_UNSTABLE="1" RUSTC_INSTALL_BINDIR="bin" RUSTC_LIBDIR="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1/lib" RUSTC_LINT_FLAGS="-Wrust_2018_idioms -Wunused_lifetimes -Wsemicolon_in_expressions_from_macros -Dwarnings" RUSTC_REAL="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1/bin/rustc" RUSTC_SNAPSHOT="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1/bin/rustc" RUSTC_SNAPSHOT_LIBDIR="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1/lib" RUSTC_STAGE="1" RUSTC_SYSROOT="/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage1" RUSTC_TLS_MODEL_INITIAL_EXEC="1" RUSTC_VERBOSE="1" RUSTDOC="/home/scratch/rust/build/bootstrap/debug/rustdoc" RUSTDOCFLAGS="-Clink-args=-lgcc --cfg=windows_raw_dylib -Csymbol-mangling-version=v0 -Zunstable-options --check-cfg=values(bootstrap) --check-cfg=values(parallel_compiler) --check-cfg=values(no_btreemap_remove_entry) --check-cfg=values(crossbeam_loom) --check-cfg=values(span_locations) --check-cfg=values(rustix_use_libc) --check-cfg=values(emulate_second_only_system) --check-cfg=values(windows_raw_dylib) -Dwarnings -Wrustdoc::invalid_codeblock_attributes --crate-version 1.71.0-dev" RUSTDOC_REAL="/path/to/nowhere/rustdoc/not/required" RUSTFLAGS="-Clink-args=-lgcc --cfg=windows_raw_dylib -Csymbol-mangling-version=v0 -Zunstable-options --check-cfg=values(bootstrap) --check-cfg=values(parallel_compiler) --check-cfg=values(no_btreemap_remove_entry) --check-cfg=values(crossbeam_loom) --check-cfg=values(span_locations) --check-cfg=values(rustix_use_libc) --check-cfg=values(emulate_second_only_system) --check-cfg=values(windows_raw_dylib) -Zdual-proc-macros -Zmacro-backtrace -Clink-args=-Wl,-z,origin -Clink-args=-Wl,-rpath,$ORIGIN/../lib -Csplit-debuginfo=off -Zunstable-options -Wrustc::internal -Cprefer-dynamic -Cllvm-args=-import-instr-limit=10 -Clto=off" RUST_TEST_THREADS="32" WINAPI_NO_BUNDLED_LIBRARIES="1" __CARGO_DEFAULT_LIB_METADATA="dev" "/home/scratch/rust/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "build" "--target" "riscv64gc-unknown-linux-musl" "--release" "-Zcheck-cfg=names,values,output,features" "-Zdual-proc-macros" "-Zbinary-dep-depinfo" "-j" "32" "-v" "--features" "llvm" "--manifest-path" "/home/scratch/rust/compiler/rustc/Cargo.toml" "--message-format" "json-render-diagnostics"
expected success, got: exit status: 101
Traceback (most recent call last):
  File "/home/scratch/rust/./x.py", line 29, in <module>
    bootstrap.main()
  File "/home/scratch/rust/src/bootstrap/bootstrap.py", line 951, in main
    bootstrap(args)
  File "/home/scratch/rust/src/bootstrap/bootstrap.py", line 926, in bootstrap
    run(args, env=env, verbose=build.verbose, is_bootstrap=True)
  File "/home/scratch/rust/src/bootstrap/bootstrap.py", line 167, in run
    raise RuntimeError(err)
RuntimeError: failed to run: /home/scratch/rust/build/bootstrap/debug/bootstrap build --host riscv64gc-unknown-linux-musl --target riscv64gc-unknown-linux-musl --verbose

If I edit the compiler/rustc_driver/Cargo.toml file as suggested here, it works.

I filed a separate bug, #110509, about the error message, but even aside from the diagnostics, this behavior seems wrong. My understanding of what the error means is "we can't build the extended Rust tool set, because that requires a dynamically linked rustc_driver crate, which can't be built for a target with a statically linked C runtime" (if my understanding is wrong, let me know.) That seems like a condition that should be detected at config time, not midway through the build. Moreover, if this really is an intrinsic limitation of compiling Rust for statically linked targets, it seems weird to me that the compiler/rustc_driver/Cargo.toml patch would fix it. On the other hand, if it's not an intrinsic limitation, then manually patching this file shouldn't be necessary and the preferred crate type for rustc_driver should be auto-detected based on the target and target options.

Hope this makes sense, but if further clarification is needed, let me know!

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-linkageArea: linking into static, shared libraries and binariesC-enhancementCategory: An issue proposing an enhancement or a PR with one.O-muslTarget: The musl libcT-bootstrapRelevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)T-cargoRelevant to the cargo team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions