Skip to content

Placing llvm-tools installed via rustup onto the PATH #3397

Open

Description

@davidhewitt

Problem you are trying to solve

I have been working with the llvm-tools-preview component (in this case llvm-profdata).

These executables seem to be installed into an atypical bin directory inside the toolchain directory:

# location of llvm-profdata
~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-profdata

# location of rustc
~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/rustc

This means that for whatever combination of OS / target / toolchain I am running, I need to deduce the correct path to llvm-profdata myself. See for example https://github.com/pydantic/pydantic-core/blob/5c696e5ab32f323753f6c4da0000f4475225673c/.github/workflows/ci.yml#L471

Solution you'd like

It would be nice to have a supported way in rustup to run llvm-profdata for the target toolchain. Maybe rustup run could add this bin directory onto the PATH, so that e.g. rustup run stable llvm-profdata just works.

Notes

No response

Activity

  1. bradjc commented on Jul 21, 2023

    @bradjc

    This would be very helpful.

    As another example, here is our workaround:

    https://github.com/tock/tock/blob/f96c4ef49b25d696f2f54622bc604b32d0201cd2/boards/Makefile.common#L207

  2. rbtcollins commented on Aug 14, 2023

    @rbtcollins
    Contributor

    I don't think we would start mucking with PATH again. See #3178.

    If rustup which and rustup run, which exist to run arbitrary commands within a toolchain cannot find these binaries-in-odd-places, I think extending them to do so (safely, with root path escapes prevented etc) would be entirely reasonable.

    Another approach - and this seems best to me, would be to put these files in the bin directory in the toolchain.

  3. jedbrown commented on Jul 30, 2025

    @jedbrown

    It would be very useful if we could rustup which llvm-link or perhaps rustup which --component llvm-tools llvm-link. If you agree this would be useful, do you have a preference on the two syntaxes, or pointers to where you think it should be implemented?

    In our case, we want to use tools like llvm-link as part of a JIT/LTO handling IR, but it seems there is no programmatic way to obtain the paths.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions