public inbox for rust-for-linux@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] docs: rust: quick-start: update Ubuntu instructions
       [not found] <20250402104759.1764282-1-igor.korotin.ref@yahoo.com>
@ 2025-04-02 10:47 ` Igor Korotin
  2025-04-02 11:26   ` Miguel Ojeda
  0 siblings, 1 reply; 6+ messages in thread
From: Igor Korotin @ 2025-04-02 10:47 UTC (permalink / raw)
  To: Miguel Ojeda
  Cc: Alex Gaynor, Benno Lossin, Boqun Feng, Gary Guo,
	Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, rust-for-linux, Igor Korotin

Ubuntu’s rust-1.80 and bindgen-0.65 packages don't set their tools
as defaults. They should be defined explicitly.

Signed-off-by: Igor Korotin <igor.korotin@yahoo.com>
---

Changes since v1:
 - rewrote commit message to be more concise
 - reworked instruction's steps not to make global changes
 - added overall build command for Ubuntu.
 - https://lore.kernel.org/all/20250331170118.1376899-1-igor.korotin@yahoo.com/
 
 Documentation/rust/quick-start.rst | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/Documentation/rust/quick-start.rst b/Documentation/rust/quick-start.rst
index 4aa50e5fcb8c..3651d726ede0 100644
--- a/Documentation/rust/quick-start.rst
+++ b/Documentation/rust/quick-start.rst
@@ -95,10 +95,25 @@ they should generally work out of the box, e.g.::
 
 	apt install rustc-1.80 rust-1.80-src bindgen-0.65 rustfmt-1.80 rust-1.80-clippy
 
+``PATH`` needs to be set when installing rust 1.80 with apt, e.g.::
+
+	PATH=/usr/lib/rust-1.80/bin:$PATH
+
+Deb package bindgen-0.65 does not set itself as a default, thus it should be set
+explicitly, e.g.::
+
+	BINDGEN=bindgen-0.65
+
 ``RUST_LIB_SRC`` needs to be set when using the versioned packages, e.g.::
 
 	RUST_LIB_SRC=/usr/src/rustc-$(rustc-1.80 --version | cut -d' ' -f2)/library
 
+The overall command should be the following::
+
+	make LLVM=1 PATH=/usr/lib/rust-1.80/bin:$PATH \
+		RUST_LIB_SRC=/usr/src/rustc-$(rustc-1.80 --version | cut -d' ' -f2)/library \
+		BINDGEN=bindgen-0.65 <target>
+
 In addition, ``bindgen-0.65`` is available in newer releases (24.04 LTS and
 24.10), but it may not be available in older ones (20.04 LTS and 22.04 LTS),
 thus ``bindgen`` may need to be built manually (please see below).
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] docs: rust: quick-start: update Ubuntu instructions
  2025-04-02 10:47 ` [PATCH v2] docs: rust: quick-start: update Ubuntu instructions Igor Korotin
@ 2025-04-02 11:26   ` Miguel Ojeda
  2025-04-02 11:49     ` Igor Korotin
  2025-04-02 13:52     ` Igor Korotin
  0 siblings, 2 replies; 6+ messages in thread
From: Miguel Ojeda @ 2025-04-02 11:26 UTC (permalink / raw)
  To: Igor Korotin
  Cc: Miguel Ojeda, Alex Gaynor, Benno Lossin, Boqun Feng, Gary Guo,
	Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, rust-for-linux

On Wed, Apr 2, 2025 at 12:48 PM Igor Korotin <igor.korotin@yahoo.com> wrote:
>
> +``PATH`` needs to be set when installing rust 1.80 with apt, e.g.::
> +
> +       PATH=/usr/lib/rust-1.80/bin:$PATH

Why does it need to be set? i.e. why not `RUSTC=...` for that one too?

In other words, why are we mixing the approaches? We can explain both,
but mixing them seems confusing.

> +Deb package bindgen-0.65 does not set itself as a default, thus it should be set
> +explicitly, e.g.::
> +
> +       BINDGEN=bindgen-0.65

I don't think this example adds much, since we already show it below.

> +       make LLVM=1 PATH=/usr/lib/rust-1.80/bin:$PATH \
> +               RUST_LIB_SRC=/usr/src/rustc-$(rustc-1.80 --version | cut -d' ' -f2)/library \

Note that `RUST_LIB_SRC` (and `PATH`) are not needed there, i.e. those
two can be set as environment variables.

Perhaps we could just add something like this to the existing paragraph:

    ``RUST_LIB_SRC`` needs to be set (possibly as an environment variable) ...

Also, weren't we going to mention `RUSTDOC`, `RUSTFMT` and `CLIPPY_DRIVER`?

Thanks for the patch!

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] docs: rust: quick-start: update Ubuntu instructions
  2025-04-02 11:26   ` Miguel Ojeda
@ 2025-04-02 11:49     ` Igor Korotin
  2025-04-02 16:06       ` Miguel Ojeda
  2025-04-02 13:52     ` Igor Korotin
  1 sibling, 1 reply; 6+ messages in thread
From: Igor Korotin @ 2025-04-02 11:49 UTC (permalink / raw)
  To: Miguel Ojeda
  Cc: Miguel Ojeda, Alex Gaynor, Benno Lossin, Boqun Feng, Gary Guo,
	Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, rust-for-linux



On 4/2/25 12:26, Miguel Ojeda wrote:
> On Wed, Apr 2, 2025 at 12:48 PM Igor Korotin <igor.korotin@yahoo.com> wrote:
>>
>> +``PATH`` needs to be set when installing rust 1.80 with apt, e.g.::
>> +
>> +       PATH=/usr/lib/rust-1.80/bin:$PATH
> 
> Why does it need to be set? i.e. why not `RUSTC=...` for that one too?
> 
> In other words, why are we mixing the approaches? We can explain both,
> but mixing them seems confusing.

I checked what happens with other tools(For example rustdoc) if I define 
only
`RUSTC=rustc-1.80`. Unsurprisingly `rustdoc` remains 1.75, which is 
installed from `rustc` package, which in its turn is dependency for the 
package `bindgen-0.65`. Though I see that this mix works fine, it seems 
a little bit weird when you have one tool of version 1.80 another 1.75, 
etc. Without a doubt one can define each tool explicitly using `RUSTC`, 
`RUSTDOC`, etc. On the other hand defining `PATH` to 
`/usr/lib/rust-1.80/bin/` automatically makes build to use rust-1.80 
tools.

>> +Deb package bindgen-0.65 does not set itself as a default, thus it should be set
>> +explicitly, e.g.::
>> +
>> +       BINDGEN=bindgen-0.65
> 
> I don't think this example adds much, since we already show it below.

This was intention to explain each additional environment part of the 
overall command.

>> +       make LLVM=1 PATH=/usr/lib/rust-1.80/bin:$PATH \
>> +               RUST_LIB_SRC=/usr/src/rustc-$(rustc-1.80 --version | cut -d' ' -f2)/library \
> 
> Note that `RUST_LIB_SRC` (and `PATH`) are not needed there, i.e. those
> two can be set as environment variables.
> 
> Perhaps we could just add something like this to the existing paragraph:
> 
>      ``RUST_LIB_SRC`` needs to be set (possibly as an environment variable) ...

By adding these as part of the overall build command, I was going by 
your earlier statement that you prefer setups that minimize global changes.

> 
> Also, weren't we going to mention `RUSTDOC`, `RUSTFMT` and `CLIPPY_DRIVER`?

This one was supposed to be covered by `PATH=/usr/lib/rust-1.80/bin:$PATH`

Thanks for the review

Best Regards
Igor



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] docs: rust: quick-start: update Ubuntu instructions
  2025-04-02 11:26   ` Miguel Ojeda
  2025-04-02 11:49     ` Igor Korotin
@ 2025-04-02 13:52     ` Igor Korotin
  2025-04-02 16:06       ` Miguel Ojeda
  1 sibling, 1 reply; 6+ messages in thread
From: Igor Korotin @ 2025-04-02 13:52 UTC (permalink / raw)
  To: Miguel Ojeda
  Cc: Miguel Ojeda, Alex Gaynor, Benno Lossin, Boqun Feng, Gary Guo,
	Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, rust-for-linux



On 4/2/25 12:26, Miguel Ojeda wrote:
> Also, weren't we going to mention `RUSTDOC`, `RUSTFMT` and `CLIPPY_DRIVER`?

While re-writing my changes I found out that while packages rustc, 
rustdoc and
rustfmt of version 1.80 in 22.04 and 24.04 at least create symbolic 
links to
their tools in /usr/bin/, rust-1.80-clippy does not do it. So the 
clippy-driver
is only accessible by its full path /usr/lib/rust-1.80/bin/clippy-driver.
I'm sure this quick-start.rst should be updated, because from my 
experience I know that it is painful for newcomer to configure Rust for 
kernel properly in Ubuntu 22.04/24.04. And to be honest, I see 
`PATH=/usr/lib/rust-1.80/bin:$PATH` the easiest solution. Rust packages 
in 22.04/24.04 are screwed. I checked 24.10/25.04 and these versions do 
not have such problems at all, it's just enough to use `apt rustc 
rustdoc rustfmt bindgen rust-clippy` to install rust 1.84 and bindgen 
0.71 and set `RUST_LIB_SRC` variable.

Best Regards
Igor


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] docs: rust: quick-start: update Ubuntu instructions
  2025-04-02 11:49     ` Igor Korotin
@ 2025-04-02 16:06       ` Miguel Ojeda
  0 siblings, 0 replies; 6+ messages in thread
From: Miguel Ojeda @ 2025-04-02 16:06 UTC (permalink / raw)
  To: Igor Korotin
  Cc: Miguel Ojeda, Alex Gaynor, Benno Lossin, Boqun Feng, Gary Guo,
	Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, rust-for-linux

On Wed, Apr 2, 2025 at 1:49 PM Igor Korotin <igor.korotin@yahoo.com> wrote:
>
> I checked what happens with other tools(For example rustdoc) if I define
> only
> `RUSTC=rustc-1.80`. Unsurprisingly `rustdoc` remains 1.75, which is
> installed from `rustc` package, which in its turn is dependency for the
> package `bindgen-0.65`. Though I see that this mix works fine, it seems
> a little bit weird when you have one tool of version 1.80 another 1.75,
> etc. Without a doubt one can define each tool explicitly using `RUSTC`,
> `RUSTDOC`, etc. On the other hand defining `PATH` to
> `/usr/lib/rust-1.80/bin/` automatically makes build to use rust-1.80
> tools.

Ah, I see -- what I meant is that it is not required to set `PATH`,
i.e. one can use the approach of setting each variable explicitly
instead (e.g. that is what I do). In fact, setting the variables is
the "most general" solution, since it allows any name for the
binaries.

That is also what I meant by "minimize global changes", i.e. instead
of touching something like `PATH` (especially if done as an env var),
we just touch those variables.

But, yeah, I understand that you are trying to simplify by setting
less variables, which is also good. That is why I mentioned that
perhaps it is best to just show the two examples, i.e. one with
`PATH`, and the other setting each variable. Then people can decide
what they prefer, and they have also the most general solution in case
something breaks with future packages etc.

But I don't want to force any particular approach -- whatever
you/others think it is easiest for newcomers is probably the best.

To be honest, I think Ubuntu's packages should not be used for normal
development at this point.

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] docs: rust: quick-start: update Ubuntu instructions
  2025-04-02 13:52     ` Igor Korotin
@ 2025-04-02 16:06       ` Miguel Ojeda
  0 siblings, 0 replies; 6+ messages in thread
From: Miguel Ojeda @ 2025-04-02 16:06 UTC (permalink / raw)
  To: Igor Korotin
  Cc: Miguel Ojeda, Alex Gaynor, Benno Lossin, Boqun Feng, Gary Guo,
	Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, rust-for-linux

On Wed, Apr 2, 2025 at 3:52 PM Igor Korotin <igor.korotin@yahoo.com> wrote:
>
> While re-writing my changes I found out that while packages rustc,
> rustdoc and
> rustfmt of version 1.80 in 22.04 and 24.04 at least create symbolic
> links to
> their tools in /usr/bin/, rust-1.80-clippy does not do it. So the
> clippy-driver
> is only accessible by its full path /usr/lib/rust-1.80/bin/clippy-driver.
> I'm sure this quick-start.rst should be updated, because from my
> experience I know that it is painful for newcomer to configure Rust for
> kernel properly in Ubuntu 22.04/24.04. And to be honest, I see
> `PATH=/usr/lib/rust-1.80/bin:$PATH` the easiest solution. Rust packages
> in 22.04/24.04 are screwed. I checked 24.10/25.04 and these versions do
> not have such problems at all, it's just enough to use `apt rustc
> rustdoc rustfmt bindgen rust-clippy` to install rust 1.84 and bindgen
> 0.71 and set `RUST_LIB_SRC` variable.

Yeah, it is a mess. I think `rustfmt` doesn't create it either in
24.04 at least -- at least I have that one as an absolute path when I
test it.

There are also other issues even with 24.10's packages, e.g. the main
`bindgen` package did not get backports for bugs -- see the bug
reports listed in:

    https://github.com/Rust-for-Linux/linux/issues/1127

I also mentioned to the maintainers a couple other bits, e.g. the
order of installation also matters:

    https://bugs.launchpad.net/ubuntu/+source/rustc-1.80/+bug/2090791/comments/3

I am happy to link more bug reports there and/or open new ones.

The whole situation is not great, and other distributions work just
fine, so I am tempted to add a paragraph at the top recommending to
use alternative ways of installing the toolchain for Ubuntu...

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-04-02 16:06 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20250402104759.1764282-1-igor.korotin.ref@yahoo.com>
2025-04-02 10:47 ` [PATCH v2] docs: rust: quick-start: update Ubuntu instructions Igor Korotin
2025-04-02 11:26   ` Miguel Ojeda
2025-04-02 11:49     ` Igor Korotin
2025-04-02 16:06       ` Miguel Ojeda
2025-04-02 13:52     ` Igor Korotin
2025-04-02 16:06       ` Miguel Ojeda

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox