diff mbox series

[PATCHv3] package/rustc: needs C++ compiler with musl based toolchain

Message ID 20220727083753.935654-1-romain.naour@smile.fr
State Accepted
Headers show
Series [PATCHv3] package/rustc: needs C++ compiler with musl based toolchain | expand

Commit Message

Romain Naour July 27, 2022, 8:37 a.m. UTC
While building host-rust with a musl based toolchain without C++ compiler,
the build fail since libunwind bundled in rust sources needs a C++ compiler.

cargo:warning=i686-buildroot-linux-musl-gcc.br_real: error: [...]/host-rust-1.62.0/src/llvm-project/libunwind/src/Unwind-EHABI.cpp: C++ compiler not installed on this system

Note: the issues can't be reproduced with a glibc based toolchain
without C++ probaly due to extra steps required to support musl libc.

We could add the C++ dependency direclty to host-rustc but it would
requires adding the C++ reverse dependencies to all rust packages.

Instread, we add the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
only when a musl toolchain is used. So we can still install a prebuilt
rust compiler but without the rust standard library (rust-std).

Usually we should not add toolchain dependencies in a _ARCH_SUPPORTS option but
BR2_PACKAGE_HOST_RUSTC_TARGET_TIER... options contains already some
BR2_TOOLCHAIN_USES_GLIBC or BR2_TOOLCHAIN_USES_MUSL.

Fixes:
http://autobuild.buildroot.org/results/636/636fb39c8f1b8c05e4ca451ac506cd63c7166d82

Signed-off-by: Romain Naour <romain.naour@smile.fr>
---
v3: add a global C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS (Yann)
    update comment to use "C++ cross compiler"
v2: move the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
    after James's review and discussion with Thomas and Arnout
---
 package/rustc/Config.in.host | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Nicolas TRAN July 28, 2022, 2:51 p.m. UTC | #1
Reviewed-by: Nicolas Tran <nicolas.tran@smile.fr <romain.naour@smile.fr>>

On Wed, Jul 27, 2022 at 10:38 AM Romain Naour <romain.naour@smile.fr> wrote:

> While building host-rust with a musl based toolchain without C++ compiler,
> the build fail since libunwind bundled in rust sources needs a C++
> compiler.
>
> cargo:warning=i686-buildroot-linux-musl-gcc.br_real: error:
> [...]/host-rust-1.62.0/src/llvm-project/libunwind/src/Unwind-EHABI.cpp: C++
> compiler not installed on this system
>
> Note: the issues can't be reproduced with a glibc based toolchain
> without C++ probaly due to extra steps required to support musl libc.
>
> We could add the C++ dependency direclty to host-rustc but it would
> requires adding the C++ reverse dependencies to all rust packages.
>
> Instread, we add the C++ dependency to
> BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
> only when a musl toolchain is used. So we can still install a prebuilt
> rust compiler but without the rust standard library (rust-std).
>
> Usually we should not add toolchain dependencies in a _ARCH_SUPPORTS
> option but
> BR2_PACKAGE_HOST_RUSTC_TARGET_TIER... options contains already some
> BR2_TOOLCHAIN_USES_GLIBC or BR2_TOOLCHAIN_USES_MUSL.
>
> Fixes:
>
> http://autobuild.buildroot.org/results/636/636fb39c8f1b8c05e4ca451ac506cd63c7166d82
>
> Signed-off-by: Romain Naour <romain.naour@smile.fr>
> ---
> v3: add a global C++ dependency to
> BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS (Yann)
>     update comment to use "C++ cross compiler"
> v2: move the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
>     after James's review and discussion with Thomas and Arnout
> ---
>  package/rustc/Config.in.host | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/package/rustc/Config.in.host b/package/rustc/Config.in.host
> index fec8726aee..822de68dbb 100644
> --- a/package/rustc/Config.in.host
> +++ b/package/rustc/Config.in.host
> @@ -110,11 +110,15 @@ config BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
>         default y if BR2_sparc64 && BR2_TOOLCHAIN_USES_GLIBC
>
>  # All target rust packages should depend on this option
> +# Note: With musl based toolchain, we need a C++ cross compiler to
> +# build host-rust some target libraries (libunwind) from llvm source
> +# code bundled in rust sources.
>  config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
>         bool
>         default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER1_PLATFORMS
>         default y if
> BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_HOST_TOOLS_PLATFORMS
>         default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
> +       depends on BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_MUSL
>         depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS
>
>  config BR2_PACKAGE_HOST_RUSTC_ARCH
> --
> 2.34.3
>
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
>
James Hilliard July 28, 2022, 9:07 p.m. UTC | #2
On Wed, Jul 27, 2022 at 2:38 AM Romain Naour <romain.naour@smile.fr> wrote:
>
> While building host-rust with a musl based toolchain without C++ compiler,
> the build fail since libunwind bundled in rust sources needs a C++ compiler.
>
> cargo:warning=i686-buildroot-linux-musl-gcc.br_real: error: [...]/host-rust-1.62.0/src/llvm-project/libunwind/src/Unwind-EHABI.cpp: C++ compiler not installed on this system

AFAIU rust should be able to use normal(ie non-llvm) libunwind which doesn't
require C++:
https://github.com/buildroot/buildroot/blob/master/package/libunwind/libunwind.mk

>
> Note: the issues can't be reproduced with a glibc based toolchain
> without C++ probaly due to extra steps required to support musl libc.
>
> We could add the C++ dependency direclty to host-rustc but it would
> requires adding the C++ reverse dependencies to all rust packages.
>
> Instread, we add the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
> only when a musl toolchain is used. So we can still install a prebuilt
> rust compiler but without the rust standard library (rust-std).
>
> Usually we should not add toolchain dependencies in a _ARCH_SUPPORTS option but
> BR2_PACKAGE_HOST_RUSTC_TARGET_TIER... options contains already some
> BR2_TOOLCHAIN_USES_GLIBC or BR2_TOOLCHAIN_USES_MUSL.
>
> Fixes:
> http://autobuild.buildroot.org/results/636/636fb39c8f1b8c05e4ca451ac506cd63c7166d82
>
> Signed-off-by: Romain Naour <romain.naour@smile.fr>
> ---
> v3: add a global C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS (Yann)
>     update comment to use "C++ cross compiler"
> v2: move the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
>     after James's review and discussion with Thomas and Arnout
> ---
>  package/rustc/Config.in.host | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/package/rustc/Config.in.host b/package/rustc/Config.in.host
> index fec8726aee..822de68dbb 100644
> --- a/package/rustc/Config.in.host
> +++ b/package/rustc/Config.in.host
> @@ -110,11 +110,15 @@ config BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
>         default y if BR2_sparc64 && BR2_TOOLCHAIN_USES_GLIBC
>
>  # All target rust packages should depend on this option
> +# Note: With musl based toolchain, we need a C++ cross compiler to
> +# build host-rust some target libraries (libunwind) from llvm source
> +# code bundled in rust sources.
>  config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
>         bool
>         default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER1_PLATFORMS
>         default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_HOST_TOOLS_PLATFORMS
>         default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
> +       depends on BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_MUSL
>         depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS
>
>  config BR2_PACKAGE_HOST_RUSTC_ARCH
> --
> 2.34.3
>
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
Yann E. MORIN Aug. 30, 2022, 7:16 p.m. UTC | #3
Romain, All,

On 2022-07-27 10:37 +0200, Romain Naour spake thusly:
> While building host-rust with a musl based toolchain without C++ compiler,
> the build fail since libunwind bundled in rust sources needs a C++ compiler.
> 
> cargo:warning=i686-buildroot-linux-musl-gcc.br_real: error: [...]/host-rust-1.62.0/src/llvm-project/libunwind/src/Unwind-EHABI.cpp: C++ compiler not installed on this system
> 
> Note: the issues can't be reproduced with a glibc based toolchain
> without C++ probaly due to extra steps required to support musl libc.
> 
> We could add the C++ dependency direclty to host-rustc but it would
> requires adding the C++ reverse dependencies to all rust packages.
> 
> Instread, we add the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
> only when a musl toolchain is used. So we can still install a prebuilt
> rust compiler but without the rust standard library (rust-std).
> 
> Usually we should not add toolchain dependencies in a _ARCH_SUPPORTS option but
> BR2_PACKAGE_HOST_RUSTC_TARGET_TIER... options contains already some
> BR2_TOOLCHAIN_USES_GLIBC or BR2_TOOLCHAIN_USES_MUSL.
> 
> Fixes:
> http://autobuild.buildroot.org/results/636/636fb39c8f1b8c05e4ca451ac506cd63c7166d82
> 
> Signed-off-by: Romain Naour <romain.naour@smile.fr>

By lack of a better alternative (like using a standalone libunwind as
James suggested): applied to master, thanks.

Regards,
Yann E. MORIN.

> ---
> v3: add a global C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS (Yann)
>     update comment to use "C++ cross compiler"
> v2: move the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
>     after James's review and discussion with Thomas and Arnout
> ---
>  package/rustc/Config.in.host | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/package/rustc/Config.in.host b/package/rustc/Config.in.host
> index fec8726aee..822de68dbb 100644
> --- a/package/rustc/Config.in.host
> +++ b/package/rustc/Config.in.host
> @@ -110,11 +110,15 @@ config BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
>  	default y if BR2_sparc64 && BR2_TOOLCHAIN_USES_GLIBC
>  
>  # All target rust packages should depend on this option
> +# Note: With musl based toolchain, we need a C++ cross compiler to
> +# build host-rust some target libraries (libunwind) from llvm source
> +# code bundled in rust sources.
>  config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
>  	bool
>  	default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER1_PLATFORMS
>  	default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_HOST_TOOLS_PLATFORMS
>  	default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
> +	depends on BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_MUSL
>  	depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS
>  
>  config BR2_PACKAGE_HOST_RUSTC_ARCH
> -- 
> 2.34.3
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
Yann E. MORIN Aug. 30, 2022, 7:20 p.m. UTC | #4
Nicolas, All,

On 2022-07-28 16:51 +0200, Nicolas TRAN spake thusly:
> Reviewed- by: Nicolas Tran < [1]nicolas.tran@smile.fr>

You sent an HTML mail, it got completely borked, and your revieed-by tag
was picked weirdly by patchwork:
    Reviewed-by: Nicolas Tran <nicolas.tran@smile.fr <romain.naour@smile.fr>>

I've fixed that when applying.

Regards,
Yann E. MORIN.

> On Wed, Jul 27, 2022 at 10:38 AM Romain Naour < [2]romain.naour@smile.fr> wrote:
> 
>   While building host-rust with a musl based toolchain without C++ compiler,
>   the build fail since libunwind bundled in rust sources needs a C++ compiler.
> 
>   cargo:warning=i686-buildroot-linux-musl-gcc.br_real: error:
>   [...]/host-rust-1.62.0/src/llvm-project/libunwind/src/Unwind-EHABI.cpp: C++ compiler not installed on this system
> 
>   Note: the issues can't be reproduced with a glibc based toolchain
>   without C++ probaly due to extra steps required to support musl libc.
> 
>   We could add the C++ dependency direclty to host-rustc but it would
>   requires adding the C++ reverse dependencies to all rust packages.
> 
>   Instread, we add the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
>   only when a musl toolchain is used. So we can still install a prebuilt
>   rust compiler but without the rust standard library (rust-std).
> 
>   Usually we should not add toolchain dependencies in a _ARCH_SUPPORTS option but
>   BR2_PACKAGE_HOST_RUSTC_TARGET_TIER... options contains already some
>   BR2_TOOLCHAIN_USES_GLIBC or BR2_TOOLCHAIN_USES_MUSL.
> 
>   Fixes:
>   [3]http://autobuild.buildroot.org/results/636/636fb39c8f1b8c05e4ca451ac506cd63c7166d82
> 
>   Signed-off-by: Romain Naour < [4]romain.naour@smile.fr>
>   ---
>   v3: add a global C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS (Yann)
>       update comment to use "C++ cross compiler"
>   v2: move the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
>       after James's review and discussion with Thomas and Arnout
>   ---
>    package/rustc/Config.in.host | 4 ++++
>    1 file changed, 4 insertions(+)
> 
>   diff --git a/package/rustc/Config.in.host b/package/rustc/Config.in.host
>   index fec8726aee..822de68dbb 100644
>   --- a/package/rustc/Config.in.host
>   +++ b/package/rustc/Config.in.host
>   @@ -110,11 +110,15 @@ config BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
>           default y if BR2_sparc64 && BR2_TOOLCHAIN_USES_GLIBC
> 
>    # All target rust packages should depend on this option
>   +# Note: With musl based toolchain, we need a C++ cross compiler to
>   +# build host-rust some target libraries (libunwind) from llvm source
>   +# code bundled in rust sources.
>    config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
>           bool
>           default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER1_PLATFORMS
>           default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_HOST_TOOLS_PLATFORMS
>           default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
>   +       depends on BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_MUSL
>           depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS
> 
>    config BR2_PACKAGE_HOST_RUSTC_ARCH
>   --
>   2.34.3
> 
>   _______________________________________________
>   buildroot mailing list
>   [5]buildroot@buildroot.org
>   [6]https://lists.buildroot.org/mailman/listinfo/buildroot
> 
> Links:
> 1. mailto:romain.naour@smile.fr
> 2. mailto:romain.naour@smile.fr
> 3. http://autobuild.buildroot.org/results/636/636fb39c8f1b8c05e4ca451ac506cd63c7166d82
> 4. mailto:romain.naour@smile.fr
> 5. mailto:buildroot@buildroot.org
> 6. https://lists.buildroot.org/mailman/listinfo/buildroot

> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
Yann E. MORIN Aug. 30, 2022, 7:22 p.m. UTC | #5
James, All,

On 2022-07-28 15:07 -0600, James Hilliard spake thusly:
> On Wed, Jul 27, 2022 at 2:38 AM Romain Naour <romain.naour@smile.fr> wrote:
> > While building host-rust with a musl based toolchain without C++ compiler,
> > the build fail since libunwind bundled in rust sources needs a C++ compiler.
> >
> > cargo:warning=i686-buildroot-linux-musl-gcc.br_real: error: [...]/host-rust-1.62.0/src/llvm-project/libunwind/src/Unwind-EHABI.cpp: C++ compiler not installed on this system
> AFAIU rust should be able to use normal(ie non-llvm) libunwind which doesn't
> require C++:
> https://github.com/buildroot/buildroot/blob/master/package/libunwind/libunwind.mk

I've applied Romain's patch as a stop-gap measure, until someone comes
up with a better solution, like implementing your proposal of using an
unbundled libunwind.

Regards,
Yann E. MORIN.
James Hilliard Sept. 1, 2022, 6:33 p.m. UTC | #6
On Tue, Aug 30, 2022 at 1:22 PM Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>
> James, All,
>
> On 2022-07-28 15:07 -0600, James Hilliard spake thusly:
> > On Wed, Jul 27, 2022 at 2:38 AM Romain Naour <romain.naour@smile.fr> wrote:
> > > While building host-rust with a musl based toolchain without C++ compiler,
> > > the build fail since libunwind bundled in rust sources needs a C++ compiler.
> > >
> > > cargo:warning=i686-buildroot-linux-musl-gcc.br_real: error: [...]/host-rust-1.62.0/src/llvm-project/libunwind/src/Unwind-EHABI.cpp: C++ compiler not installed on this system
> > AFAIU rust should be able to use normal(ie non-llvm) libunwind which doesn't
> > require C++:
> > https://github.com/buildroot/buildroot/blob/master/package/libunwind/libunwind.mk
>
> I've applied Romain's patch as a stop-gap measure, until someone comes
> up with a better solution, like implementing your proposal of using an
> unbundled libunwind.

FYI I sent some preliminary patches improving unbundled libunwind target
arch support:
https://patchwork.ozlabs.org/project/buildroot/patch/20220811063502.1823571-1-james.hilliard1@gmail.com/
https://patchwork.ozlabs.org/project/buildroot/patch/20220811063502.1823571-2-james.hilliard1@gmail.com/

>
> Regards,
> Yann E. MORIN.
>
> --
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'
Peter Korsgaard Sept. 18, 2022, 6:48 a.m. UTC | #7
>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:

 > Romain, All,
 > On 2022-07-27 10:37 +0200, Romain Naour spake thusly:
 >> While building host-rust with a musl based toolchain without C++ compiler,
 >> the build fail since libunwind bundled in rust sources needs a C++ compiler.
 >> 
 >> cargo:warning=i686-buildroot-linux-musl-gcc.br_real: error:
 >> [...]/host-rust-1.62.0/src/llvm-project/libunwind/src/Unwind-EHABI.cpp:
 >> C++ compiler not installed on this system
 >> 
 >> Note: the issues can't be reproduced with a glibc based toolchain
 >> without C++ probaly due to extra steps required to support musl libc.
 >> 
 >> We could add the C++ dependency direclty to host-rustc but it would
 >> requires adding the C++ reverse dependencies to all rust packages.
 >> 
 >> Instread, we add the C++ dependency to BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
 >> only when a musl toolchain is used. So we can still install a prebuilt
 >> rust compiler but without the rust standard library (rust-std).
 >> 
 >> Usually we should not add toolchain dependencies in a _ARCH_SUPPORTS option but
 >> BR2_PACKAGE_HOST_RUSTC_TARGET_TIER... options contains already some
 >> BR2_TOOLCHAIN_USES_GLIBC or BR2_TOOLCHAIN_USES_MUSL.
 >> 
 >> Fixes:
 >> http://autobuild.buildroot.org/results/636/636fb39c8f1b8c05e4ca451ac506cd63c7166d82
 >> 
 >> Signed-off-by: Romain Naour <romain.naour@smile.fr>

 > By lack of a better alternative (like using a standalone libunwind as
 > James suggested): applied to master, thanks.

Committed to 2022.05.x and 2022.02.x, thanks.
diff mbox series

Patch

diff --git a/package/rustc/Config.in.host b/package/rustc/Config.in.host
index fec8726aee..822de68dbb 100644
--- a/package/rustc/Config.in.host
+++ b/package/rustc/Config.in.host
@@ -110,11 +110,15 @@  config BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
 	default y if BR2_sparc64 && BR2_TOOLCHAIN_USES_GLIBC
 
 # All target rust packages should depend on this option
+# Note: With musl based toolchain, we need a C++ cross compiler to
+# build host-rust some target libraries (libunwind) from llvm source
+# code bundled in rust sources.
 config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
 	bool
 	default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER1_PLATFORMS
 	default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_HOST_TOOLS_PLATFORMS
 	default y if BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_PLATFORMS
+	depends on BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_MUSL
 	depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS
 
 config BR2_PACKAGE_HOST_RUSTC_ARCH