Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH v2 0/2] rust: add rust-analyzer support
@ 2026-10-06 11:12 Benhur Tessele
  2026-10-06 11:12 ` [PATCH v2 1/2] rust: package rust-analyzer for the SDK Benhur Tessele
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Benhur Tessele @ 2026-10-06 11:12 UTC (permalink / raw)
  To: openembedded-core
  Cc: Randy MacLeod, paul, mathieu.dubois-briand, Benhur Tessele

rust-analyzer is built as part of the Rust tools but was neither
installed nor packaged. This series packages it and wires it into the
Rust SDK next to clippy and rustfmt.

Patch 1 adds a rust-tools-analyzer package for nativesdk variant.
Beyond the frontend binary it also ships the proc-macro server and
depends on the standard library sources, both of which are required for
rust-analyzer to actually function.

Patch 2 adds it to the cross-canadian toolchain so that an SDK built with
SDK_FEATURES = "rust" provides rust-analyzer out of the box.

v2:
 - Patch 1: build and install rust-analyzer for nativesdk only; dropped
   the target (class-target) install and the target package.
 - Patch 2 unchanged.

Testing:
 - Built an SDK with SDK_FEATURES = "rust", installed it in a container,
   and confirmed rust-analyzer resolves the standard library and expands
   proc-macros end to end: diagnostics/analysis-stats on a crate using a
   derive macro succeed, with the proc-macro server started from
   <sysroot>/libexec.
 - Reproduced the reported beaglebone-alt failure with v1
   (MACHINE=beaglebone-yocto, DISTRO=poky-altcfg) and confirmed v2 builds
   cleanly, with rust-analyzer no longer compiled for the target.

Benhur Tessele (2):
  rust: package rust-analyzer for the SDK
  packagegroup-rust-cross-canadian: add rust-analyzer to the SDK

 .../packagegroups/packagegroup-rust-cross-canadian.bb |  1 +
 meta/recipes-devtools/rust/rust_1.98.1.bb             | 11 ++++++++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

-- 
2.43.0



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

* [PATCH v2 1/2] rust: package rust-analyzer for the SDK
  2026-10-06 11:12 [PATCH v2 0/2] rust: add rust-analyzer support Benhur Tessele
@ 2026-10-06 11:12 ` Benhur Tessele
  2026-11-09 14:15   ` Paul Barker
  2026-10-06 11:12 ` [PATCH v2 2/2] packagegroup-rust-cross-canadian: add rust-analyzer to " Benhur Tessele
  2026-11-11 15:44 ` [PATCH v3] rust: add rust-analyzer to the SDK behind a PACKAGECONFIG Benhur Tessele
  2 siblings, 1 reply; 5+ messages in thread
From: Benhur Tessele @ 2026-10-06 11:12 UTC (permalink / raw)
  To: openembedded-core
  Cc: Randy MacLeod, paul, mathieu.dubois-briand, Benhur Tessele

rust-analyzer is built alongside the other Rust tools (clippy, rustfmt)
but was not installed or packaged. Install it for the nativesdk variant
and add a rust-tools-analyzer package so it is available in the Rust SDK.

Two additional pieces are required for the tool to be usable:

 - The proc-macro server, rust-analyzer-proc-macro-srv, which
   rust-analyzer looks up under <sysroot>/libexec. Install it into
   ${libexecdir}; without it, analysis of any crate using a derive or
   attribute macro fails with "cannot find proc-macro server in sysroot".

 - The standard library sources, which rust-analyzer analyses from source
   rather than from the compiled rlibs. Add an RDEPENDS on ${PN}-src-lib
   so that core/std items resolve.

Both binaries link against librustc_driver from the main package, so the
package also RDEPENDS on ${PN}.

rust-analyzer is deliberately not built for the target: it adds build
time, is unlikely to be a use case on a target device, and fails to build
on NEON arm32 tunes (beaglebone-alt, qemuarm-alt) because it pulls its own
simd-adler32 that uses the unstable feature in 1.98
"stdarch_arm_neon_intrinsics".

Signed-off-by: Benhur Tessele <benhur.tessele@est.tech>
---
 meta/recipes-devtools/rust/rust_1.98.1.bb | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/meta/recipes-devtools/rust/rust_1.98.1.bb b/meta/recipes-devtools/rust/rust_1.98.1.bb
index 1f4ce5ebdb..f9d68ea986 100644
--- a/meta/recipes-devtools/rust/rust_1.98.1.bb
+++ b/meta/recipes-devtools/rust/rust_1.98.1.bb
@@ -262,17 +262,21 @@ do_test_compile () {
 ALLOW_EMPTY:${PN} = "1"
 
 PACKAGES =+ "${PN}-rustdoc ${PN}-tools-clippy ${PN}-tools-rustfmt ${PN}-src-lib"
+PACKAGES:prepend:class-nativesdk = "${PN}-tools-analyzer "
 FILES:${PN}-rustdoc = "${bindir}/rustdoc"
 FILES:${PN}-tools-clippy = "${bindir}/cargo-clippy ${bindir}/clippy-driver"
 FILES:${PN}-tools-rustfmt = "${bindir}/rustfmt"
+FILES:${PN}-tools-analyzer = "${bindir}/rust-analyzer ${libexecdir}/rust-analyzer-proc-macro-srv"
 FILES:${PN}-src-lib = "${libdir}/rustlib/src/rust"
 
 RDEPENDS:${PN}-rustdoc = "${PN}"
 RDEPENDS:${PN}-tools-clippy = "${PN}"
 RDEPENDS:${PN}-tools-rustfmt = "${PN}"
+RDEPENDS:${PN}-tools-analyzer = "${PN} ${PN}-src-lib"
 
 SUMMARY:${PN}-tools-clippy = "A collection of lints to catch common mistakes and improve your Rust code"
 SUMMARY:${PN}-tools-rustfmt = "A tool for formatting Rust code according to style guidelines"
+SUMMARY:${PN}-tools-analyzer = "A language server providing IDE features for Rust"
 
 do_install () {
     rust_do_install
@@ -294,14 +298,19 @@ rust_do_install:class-nativesdk() {
     rust_runx install
     rust_runx install clippy
     rust_runx install rustfmt
+    rust_runx install rust-analyzer
     unset PSEUDO_UNLOAD
 
     install -d ${D}${bindir}
-    for i in cargo-clippy clippy-driver rustfmt; do
+    for i in cargo-clippy clippy-driver rustfmt rust-analyzer; do
         cp rust-build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
         patchelf --set-rpath "\$ORIGIN/../lib" ${D}${bindir}/$i
     done
 
+    install -d ${D}${libexecdir}
+    cp rust-build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/rust-analyzer-proc-macro-srv ${D}${libexecdir}
+    patchelf --set-rpath "\$ORIGIN/../lib" ${D}${libexecdir}/rust-analyzer-proc-macro-srv
+
     chown root:root ${D}/ -R
     rm ${D}${libdir}/rustlib/uninstall.sh
     rm ${D}${libdir}/rustlib/install.log
-- 
2.43.0



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

* [PATCH v2 2/2] packagegroup-rust-cross-canadian: add rust-analyzer to the SDK
  2026-10-06 11:12 [PATCH v2 0/2] rust: add rust-analyzer support Benhur Tessele
  2026-10-06 11:12 ` [PATCH v2 1/2] rust: package rust-analyzer for the SDK Benhur Tessele
@ 2026-10-06 11:12 ` Benhur Tessele
  2026-11-11 15:44 ` [PATCH v3] rust: add rust-analyzer to the SDK behind a PACKAGECONFIG Benhur Tessele
  2 siblings, 0 replies; 5+ messages in thread
From: Benhur Tessele @ 2026-10-06 11:12 UTC (permalink / raw)
  To: openembedded-core
  Cc: Randy MacLeod, paul, mathieu.dubois-briand, Benhur Tessele

The Rust cross-canadian toolchain already ships clippy and rustfmt as
host tools. Now that rust-analyzer is packaged, add
nativesdk-rust-tools-analyzer so an SDK built with SDK_FEATURES = "rust"
provides rust-analyzer as well.

The standard library sources it needs are pulled in automatically via the
package's RDEPENDS on nativesdk-rust-src-lib.

Signed-off-by: Benhur Tessele <benhur.tessele@est.tech>
---
 .../packagegroups/packagegroup-rust-cross-canadian.bb            | 1 +
 1 file changed, 1 insertion(+)

diff --git a/meta/recipes-core/packagegroups/packagegroup-rust-cross-canadian.bb b/meta/recipes-core/packagegroups/packagegroup-rust-cross-canadian.bb
index c73c8d3333..54b39189b4 100644
--- a/meta/recipes-core/packagegroups/packagegroup-rust-cross-canadian.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-rust-cross-canadian.bb
@@ -17,5 +17,6 @@ RDEPENDS:${PN} = " \
     nativesdk-cargo \
     nativesdk-rust-tools-clippy \
     nativesdk-rust-tools-rustfmt \
+    nativesdk-rust-tools-analyzer \
 "
 
-- 
2.43.0



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

* Re: [PATCH v2 1/2] rust: package rust-analyzer for the SDK
  2026-10-06 11:12 ` [PATCH v2 1/2] rust: package rust-analyzer for the SDK Benhur Tessele
@ 2026-11-09 14:15   ` Paul Barker
  0 siblings, 0 replies; 5+ messages in thread
From: Paul Barker @ 2026-11-09 14:15 UTC (permalink / raw)
  To: Benhur Tessele, openembedded-core
  Cc: Randy MacLeod, paul, mathieu.dubois-briand

On Tue Oct 6, 2026 at 12:12 PM BST, Benhur Tessele wrote:
> rust-analyzer is built alongside the other Rust tools (clippy, rustfmt)
> but was not installed or packaged. Install it for the nativesdk variant
> and add a rust-tools-analyzer package so it is available in the Rust SDK.
>
> Two additional pieces are required for the tool to be usable:
>
>  - The proc-macro server, rust-analyzer-proc-macro-srv, which
>    rust-analyzer looks up under <sysroot>/libexec. Install it into
>    ${libexecdir}; without it, analysis of any crate using a derive or
>    attribute macro fails with "cannot find proc-macro server in sysroot".
>
>  - The standard library sources, which rust-analyzer analyses from source
>    rather than from the compiled rlibs. Add an RDEPENDS on ${PN}-src-lib
>    so that core/std items resolve.
>
> Both binaries link against librustc_driver from the main package, so the
> package also RDEPENDS on ${PN}.
>
> rust-analyzer is deliberately not built for the target: it adds build
> time, is unlikely to be a use case on a target device, and fails to build
> on NEON arm32 tunes (beaglebone-alt, qemuarm-alt) because it pulls its own
> simd-adler32 that uses the unstable feature in 1.98
> "stdarch_arm_neon_intrinsics".
>
> Signed-off-by: Benhur Tessele <benhur.tessele@est.tech>
> ---
>  meta/recipes-devtools/rust/rust_1.98.1.bb | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/meta/recipes-devtools/rust/rust_1.98.1.bb b/meta/recipes-devtools/rust/rust_1.98.1.bb
> index 1f4ce5ebdb..f9d68ea986 100644
> --- a/meta/recipes-devtools/rust/rust_1.98.1.bb
> +++ b/meta/recipes-devtools/rust/rust_1.98.1.bb
> @@ -262,17 +262,21 @@ do_test_compile () {
>  ALLOW_EMPTY:${PN} = "1"
>  
>  PACKAGES =+ "${PN}-rustdoc ${PN}-tools-clippy ${PN}-tools-rustfmt ${PN}-src-lib"
> +PACKAGES:prepend:class-nativesdk = "${PN}-tools-analyzer "
>  FILES:${PN}-rustdoc = "${bindir}/rustdoc"
>  FILES:${PN}-tools-clippy = "${bindir}/cargo-clippy ${bindir}/clippy-driver"
>  FILES:${PN}-tools-rustfmt = "${bindir}/rustfmt"
> +FILES:${PN}-tools-analyzer = "${bindir}/rust-analyzer ${libexecdir}/rust-analyzer-proc-macro-srv"
>  FILES:${PN}-src-lib = "${libdir}/rustlib/src/rust"
>  
>  RDEPENDS:${PN}-rustdoc = "${PN}"
>  RDEPENDS:${PN}-tools-clippy = "${PN}"
>  RDEPENDS:${PN}-tools-rustfmt = "${PN}"
> +RDEPENDS:${PN}-tools-analyzer = "${PN} ${PN}-src-lib"
>  
>  SUMMARY:${PN}-tools-clippy = "A collection of lints to catch common mistakes and improve your Rust code"
>  SUMMARY:${PN}-tools-rustfmt = "A tool for formatting Rust code according to style guidelines"
> +SUMMARY:${PN}-tools-analyzer = "A language server providing IDE features for Rust"
>  
>  do_install () {
>      rust_do_install
> @@ -294,14 +298,19 @@ rust_do_install:class-nativesdk() {
>      rust_runx install
>      rust_runx install clippy
>      rust_runx install rustfmt
> +    rust_runx install rust-analyzer

Is it possible to use a PACKAGECONFIG to enable/disable this as
mentioned previously [1]?

[1]: https://lore.kernel.org/openembedded-core/279396b65a17a09d66e6f191bab1e1be7082d589.camel@pbarker.dev/

Best regards,

-- 
Paul Barker


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

* [PATCH v3] rust: add rust-analyzer to the SDK behind a PACKAGECONFIG
  2026-10-06 11:12 [PATCH v2 0/2] rust: add rust-analyzer support Benhur Tessele
  2026-10-06 11:12 ` [PATCH v2 1/2] rust: package rust-analyzer for the SDK Benhur Tessele
  2026-10-06 11:12 ` [PATCH v2 2/2] packagegroup-rust-cross-canadian: add rust-analyzer to " Benhur Tessele
@ 2026-11-11 15:44 ` Benhur Tessele
  2 siblings, 0 replies; 5+ messages in thread
From: Benhur Tessele @ 2026-11-11 15:44 UTC (permalink / raw)
  To: openembedded-core; +Cc: Randy MacLeod, Paul Barker, Benhur Tessele

Add a rust-analyzer PACKAGECONFIG option which, when enabled, installs
it for the nativesdk variant and packages it as rust-tools-analyzer. The
option is disabled by default.

Two additional pieces are required for the tool to be usable:

 - The proc-macro server, rust-analyzer-proc-macro-srv, which
   rust-analyzer looks up under <sysroot>/libexec. Install it into
   ${libexecdir}; without it, analysis of any crate using a derive or
   attribute macro fails with "cannot find proc-macro server in sysroot".

 - The standard library sources, which rust-analyzer analyses from source
   rather than from the compiled rlibs. Add an RDEPENDS on ${PN}-src-lib
   so that core/std items resolve.

Both binaries link against librustc_driver from the main package, so the
package also RDEPENDS on ${PN}.

rust-analyzer is only installed for nativesdk, as a language server is
used on the SDK host rather than on a target device.

To get it into an SDK:

  SDK_FEATURES:append = " rust"
  PACKAGECONFIG:append:pn-nativesdk-rust = " rust-analyzer"
  TOOLCHAIN_HOST_TASK:append = " nativesdk-rust-tools-analyzer"

Tested by building an SDK with the option enabled and confirming
rust-analyzer resolves the standard library and expands proc-macros, and
by building with the option disabled to confirm the default configuration
is unaffected.

AI-Generated: Kiro with Claude Opus 5
Signed-off-by: Benhur Tessele <benhur.tessele@est.tech>
---
changes in v3:
 - Put rust-analyzer behind a PACKAGECONFIG option, disabled by default,
   so the default configuration is unchanged.
 - Dropped the packagegroup-rust-cross-canadian patch: with the option
   disabled by default the package does not exist, so it cannot be an
   unconditional SDK dependency. Enabling is opt-in instead.

changes in v2:
 - Installed rust-analyzer for nativesdk only; dropped the target install.
---
 meta/recipes-devtools/rust/rust_1.99.1.bb | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/meta/recipes-devtools/rust/rust_1.99.1.bb b/meta/recipes-devtools/rust/rust_1.99.1.bb
index 7da662c453..d0943b1941 100644
--- a/meta/recipes-devtools/rust/rust_1.99.1.bb
+++ b/meta/recipes-devtools/rust/rust_1.99.1.bb
@@ -24,6 +24,8 @@ RDEPENDS:${PN}:append:class-target = " gcc g++ binutils"
 
 PACKAGECONFIG ??= "llvm-shared"
 PACKAGECONFIG[llvm-shared] = ",,,"
+# Only used by the nativesdk variant; rust-analyzer runs on the SDK host
+PACKAGECONFIG[rust-analyzer] = ",,,"
 
 S = "${RUSTSRC}"
 # Separate build directory from the shared source tree so that multiple
@@ -260,17 +262,21 @@ do_test_compile () {
 ALLOW_EMPTY:${PN} = "1"
 
 PACKAGES =+ "${PN}-rustdoc ${PN}-tools-clippy ${PN}-tools-rustfmt ${PN}-src-lib"
+PACKAGES:prepend:class-nativesdk = "${@bb.utils.contains('PACKAGECONFIG', 'rust-analyzer', '${PN}-tools-analyzer ', '', d)}"
 FILES:${PN}-rustdoc = "${bindir}/rustdoc"
 FILES:${PN}-tools-clippy = "${bindir}/cargo-clippy ${bindir}/clippy-driver"
 FILES:${PN}-tools-rustfmt = "${bindir}/rustfmt"
+FILES:${PN}-tools-analyzer = "${bindir}/rust-analyzer ${libexecdir}/rust-analyzer-proc-macro-srv"
 FILES:${PN}-src-lib = "${libdir}/rustlib/src/rust"
 
 RDEPENDS:${PN}-rustdoc = "${PN}"
 RDEPENDS:${PN}-tools-clippy = "${PN}"
 RDEPENDS:${PN}-tools-rustfmt = "${PN}"
+RDEPENDS:${PN}-tools-analyzer = "${PN} ${PN}-src-lib"
 
 SUMMARY:${PN}-tools-clippy = "A collection of lints to catch common mistakes and improve your Rust code"
 SUMMARY:${PN}-tools-rustfmt = "A tool for formatting Rust code according to style guidelines"
+SUMMARY:${PN}-tools-analyzer = "A language server providing IDE features for Rust"
 
 do_install () {
     rust_do_install
@@ -292,6 +298,10 @@ rust_do_install:class-nativesdk() {
     rust_runx install
     rust_runx install clippy
     rust_runx install rustfmt
+    if ${@bb.utils.contains('PACKAGECONFIG', 'rust-analyzer', 'true', 'false', d)}; then
+        rust_runx install rust-analyzer
+        rust_runx build rust-analyzer-proc-macro-srv
+    fi
     unset PSEUDO_UNLOAD
 
     install -d ${D}${bindir}
@@ -300,6 +310,14 @@ rust_do_install:class-nativesdk() {
         patchelf --set-rpath "\$ORIGIN/../lib" ${D}${bindir}/$i
     done
 
+    if ${@bb.utils.contains('PACKAGECONFIG', 'rust-analyzer', 'true', 'false', d)}; then
+        install -d ${D}${libexecdir}
+        cp rust-build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/rust-analyzer ${D}${bindir}
+        patchelf --set-rpath "\$ORIGIN/../lib" ${D}${bindir}/rust-analyzer
+        cp rust-build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/rust-analyzer-proc-macro-srv ${D}${libexecdir}
+        patchelf --set-rpath "\$ORIGIN/../lib" ${D}${libexecdir}/rust-analyzer-proc-macro-srv
+    fi
+
     chown root:root ${D}/ -R
     rm ${D}${libdir}/rustlib/uninstall.sh
     rm ${D}${libdir}/rustlib/install.log

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

end of thread, other threads:[~2026-11-11 15:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-06 11:12 [PATCH v2 0/2] rust: add rust-analyzer support Benhur Tessele
2026-10-06 11:12 ` [PATCH v2 1/2] rust: package rust-analyzer for the SDK Benhur Tessele
2026-11-09 14:15   ` Paul Barker
2026-10-06 11:12 ` [PATCH v2 2/2] packagegroup-rust-cross-canadian: add rust-analyzer to " Benhur Tessele
2026-11-11 15:44 ` [PATCH v3] rust: add rust-analyzer to the SDK behind a PACKAGECONFIG Benhur Tessele

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