All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/1] erlang: support builds when gcc __atomic_* exist
@ 2021-05-08 22:24 Frank Hunleth
  2021-07-28 21:35 ` Thomas Petazzoni
  0 siblings, 1 reply; 4+ messages in thread
From: Frank Hunleth @ 2021-05-08 22:24 UTC (permalink / raw)
  To: buildroot

While Erlang will use it's own atomic operations, it can also use gcc
__atomic_* builtins. This is now listed in Erlang's HOWTO/INSTALL.md.

This change was necessary on RISC-V, since Erlang didn't have a built-in
implementation, but it was able to use gcc's __atomic_* functions.

Signed-off-by: Frank Hunleth <fhunleth@troodon-software.com>
---
 package/erlang/Config.in | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/package/erlang/Config.in b/package/erlang/Config.in
index ab87eab6ff..b6b100f38b 100644
--- a/package/erlang/Config.in
+++ b/package/erlang/Config.in
@@ -6,9 +6,11 @@ config BR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS
 config BR2_PACKAGE_ERLANG_ARCH_SUPPORTS
 	bool
 	# see HOWTO/INSTALL.md for Erlang's supported platforms
-	# when using its native atomic ops implementation
+	# when using its native atomic ops implementation or gcc's
+	# __atomic_* builtins
 	default y if BR2_i386 || BR2_x86_64 || BR2_powerpc || \
-		BR2_sparc_v9 || BR2_arm || BR2_aarch64 || BR2_mipsel
+		BR2_sparc_v9 || BR2_arm || BR2_aarch64 || BR2_mipsel || \
+		BR2_TOOLCHAIN_HAS_ATOMIC
 	# erlang needs host-erlang
 	depends on BR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS
 
-- 
2.25.1

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

* Re: [Buildroot] [PATCH 1/1] erlang: support builds when gcc __atomic_* exist
  2021-05-08 22:24 [Buildroot] [PATCH 1/1] erlang: support builds when gcc __atomic_* exist Frank Hunleth
@ 2021-07-28 21:35 ` Thomas Petazzoni
  2021-08-02 12:46   ` Frank Hunleth
  0 siblings, 1 reply; 4+ messages in thread
From: Thomas Petazzoni @ 2021-07-28 21:35 UTC (permalink / raw)
  To: Frank Hunleth; +Cc: Will Newton, buildroot

On Sat,  8 May 2021 18:24:19 -0400
Frank Hunleth <fhunleth@troodon-software.com> wrote:

> While Erlang will use it's own atomic operations, it can also use gcc
> __atomic_* builtins. This is now listed in Erlang's HOWTO/INSTALL.md.
> 
> This change was necessary on RISC-V, since Erlang didn't have a built-in
> implementation, but it was able to use gcc's __atomic_* functions.
> 
> Signed-off-by: Frank Hunleth <fhunleth@troodon-software.com>
> ---
>  package/erlang/Config.in | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)

Thanks Frank for the patch. I have applied to master. However, I think
the patch may be incomplete. Indeed, on some CPU architectures, the
atomic intrinsics are implemented in a separate library provided by
gcc, called libatomic, and one need to link against it to use those
intrinsics.

Could you try to do a build of Erlang on SPARCv8 for example ?

I suppose it will fail, and if it does, could you add some logic in
erlang.mk to link against libatomic when BR2_TOOLCHAIN_HAS_LIBATOMIC=y
(of course assuming the Erlang build system doesn't do that by itself,
of course).

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot

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

* Re: [Buildroot] [PATCH 1/1] erlang: support builds when gcc __atomic_* exist
  2021-07-28 21:35 ` Thomas Petazzoni
@ 2021-08-02 12:46   ` Frank Hunleth
  2021-08-02 12:55     ` Thomas Petazzoni
  0 siblings, 1 reply; 4+ messages in thread
From: Frank Hunleth @ 2021-08-02 12:46 UTC (permalink / raw)
  To: Thomas Petazzoni; +Cc: Will Newton, buildroot

Hi Thomas,

On Wed, Jul 28, 2021 at 5:35 PM Thomas Petazzoni
<thomas.petazzoni@bootlin.com> wrote:
>
> On Sat,  8 May 2021 18:24:19 -0400
> Frank Hunleth <fhunleth@troodon-software.com> wrote:
>
> > While Erlang will use it's own atomic operations, it can also use gcc
> > __atomic_* builtins. This is now listed in Erlang's HOWTO/INSTALL.md.
> >
> > This change was necessary on RISC-V, since Erlang didn't have a built-in
> > implementation, but it was able to use gcc's __atomic_* functions.
> >
> > Signed-off-by: Frank Hunleth <fhunleth@troodon-software.com>
> > ---
> >  package/erlang/Config.in | 6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
>
> Thanks Frank for the patch. I have applied to master. However, I think
> the patch may be incomplete. Indeed, on some CPU architectures, the
> atomic intrinsics are implemented in a separate library provided by
> gcc, called libatomic, and one need to link against it to use those
> intrinsics.
>
> Could you try to do a build of Erlang on SPARCv8 for example ?
>
> I suppose it will fail, and if it does, could you add some logic in
> erlang.mk to link against libatomic when BR2_TOOLCHAIN_HAS_LIBATOMIC=y
> (of course assuming the Erlang build system doesn't do that by itself,
> of course).

As you expected, a SPARCv8 build fails. I updated erlang.mk to pass
linker flags to link to libatomic, but still received errors. The
errors were of type:

/tmp/cc1Mog0n.s:230: Error: Architecture mismatch on "cas [%g3],%g2,%g1".
/tmp/cc1Mog0n.s:230: (Requires v9|v9a|v9b|v9c|v9d|v9e|v9v|v9m|m8;
requested architecture is v8.)

I ran out of time this morning to track this down (sorry), but it's
sounding like Erlang is doing something that's not causing function
calls into libatomic.

Right now, I'm thinking that trying to be more generic about what
platforms Erlang supports may not be worth it. I.e., change this:

        default y if BR2_i386 || BR2_x86_64 || BR2_powerpc || \
                BR2_sparc_v9 || BR2_arm || BR2_aarch64 || BR2_mipsel || \
                BR2_TOOLCHAIN_HAS_ATOMIC

to

        default y if BR2_i386 || BR2_x86_64 || BR2_powerpc || \
                BR2_sparc_v9 || BR2_arm || BR2_aarch64 || BR2_mipsel || \
                BR2_RISCV_64

What do you think?

Thanks,
Frank

Thanks,
Frank
_______________________________________________
buildroot mailing list
buildroot@busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot

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

* Re: [Buildroot] [PATCH 1/1] erlang: support builds when gcc __atomic_* exist
  2021-08-02 12:46   ` Frank Hunleth
@ 2021-08-02 12:55     ` Thomas Petazzoni
  0 siblings, 0 replies; 4+ messages in thread
From: Thomas Petazzoni @ 2021-08-02 12:55 UTC (permalink / raw)
  To: Frank Hunleth; +Cc: Will Newton, buildroot

On Mon, 2 Aug 2021 08:46:37 -0400
Frank Hunleth <fhunleth@troodon-software.com> wrote:

> As you expected, a SPARCv8 build fails. I updated erlang.mk to pass
> linker flags to link to libatomic, but still received errors. The
> errors were of type:
> 
> /tmp/cc1Mog0n.s:230: Error: Architecture mismatch on "cas [%g3],%g2,%g1".
> /tmp/cc1Mog0n.s:230: (Requires v9|v9a|v9b|v9c|v9d|v9e|v9v|v9m|m8;
> requested architecture is v8.)
> 
> I ran out of time this morning to track this down (sorry), but it's
> sounding like Erlang is doing something that's not causing function
> calls into libatomic.
> 
> Right now, I'm thinking that trying to be more generic about what
> platforms Erlang supports may not be worth it. I.e., change this:
> 
>         default y if BR2_i386 || BR2_x86_64 || BR2_powerpc || \
>                 BR2_sparc_v9 || BR2_arm || BR2_aarch64 || BR2_mipsel || \
>                 BR2_TOOLCHAIN_HAS_ATOMIC
> 
> to
> 
>         default y if BR2_i386 || BR2_x86_64 || BR2_powerpc || \
>                 BR2_sparc_v9 || BR2_arm || BR2_aarch64 || BR2_mipsel || \
>                 BR2_RISCV_64
> 
> What do you think?

I'm fine with that. Note that it's also causing problems on other CPU
architectures:

  http://autobuild.buildroot.net/?reason=erlang%

You will however see that even on ARM64 there are some failures in
erlang-jiffy.

Best regards,

Thomas
-- 
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot

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

end of thread, other threads:[~2021-08-02 12:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-08 22:24 [Buildroot] [PATCH 1/1] erlang: support builds when gcc __atomic_* exist Frank Hunleth
2021-07-28 21:35 ` Thomas Petazzoni
2021-08-02 12:46   ` Frank Hunleth
2021-08-02 12:55     ` Thomas Petazzoni

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.