Packages
nerves_system_br
1.13.2
1.34.0
1.33.9
1.33.8
1.33.7
1.33.6
1.33.5
1.33.4
1.33.3
1.33.2
1.33.1
1.33.0
1.32.5
1.32.4
1.32.3
1.32.2
1.32.1
1.32.0
1.31.7
1.31.6
1.31.5
1.31.4
1.31.3
1.31.2
1.31.1
1.31.0
1.30.1
1.30.0
1.29.3
1.29.2
1.29.1
1.29.0
1.28.3
1.28.2
1.28.1
1.28.0
1.27.3
1.27.2
1.27.1
1.27.0
1.26.1
1.26.0
1.25.3
1.25.2
1.25.1
1.25.0
1.24.1
1.24.0
1.23.3
1.23.2
1.23.1
1.23.0
1.22.8
1.22.7
1.22.6
1.22.5
1.22.4
1.22.3
1.22.2
1.22.1
1.22.0
1.21.6
1.21.5
1.21.4
1.21.3
1.21.2
1.21.1
1.21.0
1.20.6
1.20.5
1.20.4
1.20.3
1.20.2
1.20.1
1.20.0
1.19.1
1.19.0
1.18.6
1.18.5
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.5
1.16.4
1.16.3
1.16.2
1.16.1
1.16.0
1.15.2
1.15.1
1.15.0
1.14.5
1.14.4
1.14.3
1.14.2
1.14.1
1.14.0
1.13.8
1.13.7
1.13.6
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.12.4
1.12.3
1.12.2
1.12.1
1.12.0
1.12.0-rc.0
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.3
1.10.2
1.10.1
1.10.0
1.9.5
1.9.4
1.9.3
1.9.2
1.9.1
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.1
1.8.0
1.7.3
1.7.2
1.7.1
1.7.0
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.2
1.2.1
1.2.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1-2017-11
0.16.0-2017-11
0.15.1
0.15.0
0.14.1
0.14.0
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
retired
0.13.3
0.13.2
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.2
0.4.1
Nerves System BR - Buildroot based build platform for Nerves Systems
Current section
Files
Jump to
Current section
Files
patches/buildroot/0009-erlang-support-OTP-20-23.patch
From c9ca4668b36c5bd7a2577faf24bbd812f838e34d Mon Sep 17 00:00:00 2001
From: Frank Hunleth <fhunleth@troodon-software.com>
Date: Tue, 11 Sep 2018 12:28:41 -0400
Subject: [PATCH] erlang: support OTP 20 - 23
This also adds the deterministic compile flag patch for OTP 21-23.
Signed-off-by: Frank Hunleth <fhunleth@troodon-software.com>
---
...truct-libatomic_ops-we-do-require-CA.patch | 70 ------------------
...ulator-reorder-inclued-headers-paths.patch | 46 ------------
...truct-libatomic_ops-we-do-require-CA.patch | 70 ++++++++++++++++++
...ulator-reorder-inclued-headers-paths.patch | 43 +++++++++++
...-with-LDLIBS-instead-of-LIBS-for-DED.patch | 42 +++++++++++
...truct-libatomic_ops-we-do-require-CA.patch | 70 ++++++++++++++++++
...ulator-reorder-inclued-headers-paths.patch | 46 ++++++++++++
...-with-LDLIBS-instead-of-LIBS-for-DED.patch | 42 +++++++++++
...4-erlang-enable-deterministic-builds.patch | 28 ++++++++
...truct-libatomic_ops-we-do-require-CA.patch | 71 +++++++++++++++++++
...ulator-reorder-inclued-headers-paths.patch | 49 +++++++++++++
...3-erlang-enable-deterministic-builds.patch | 28 ++++++++
...-update-df-call-to-work-with-Busybox.patch | 28 ++++++++
...truct-libatomic_ops-we-do-require-CA.patch | 71 +++++++++++++++++++
...ulator-reorder-inclued-headers-paths.patch | 49 +++++++++++++
...3-erlang-enable-deterministic-builds.patch | 28 ++++++++
...-update-df-call-to-work-with-Busybox.patch | 28 ++++++++
package/erlang/Config.in | 27 +++++++
package/erlang/erlang.hash | 8 ++-
package/erlang/erlang.mk | 29 +++++++-
20 files changed, 752 insertions(+), 121 deletions(-)
delete mode 100644 package/erlang/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
delete mode 100644 package/erlang/0002-erts-emulator-reorder-inclued-headers-paths.patch
create mode 100644 package/erlang/20.3.8.9/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
create mode 100644 package/erlang/20.3.8.9/0002-erts-emulator-reorder-inclued-headers-paths.patch
create mode 100644 package/erlang/20.3.8.9/0003-Link-with-LDLIBS-instead-of-LIBS-for-DED.patch
create mode 100644 package/erlang/21.3.8.4/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
create mode 100644 package/erlang/21.3.8.4/0002-erts-emulator-reorder-inclued-headers-paths.patch
create mode 100644 package/erlang/21.3.8.4/0003-Link-with-LDLIBS-instead-of-LIBS-for-DED.patch
create mode 100644 package/erlang/21.3.8.4/0004-erlang-enable-deterministic-builds.patch
create mode 100644 package/erlang/22.3.4.1/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
create mode 100644 package/erlang/22.3.4.1/0002-erts-emulator-reorder-inclued-headers-paths.patch
create mode 100644 package/erlang/22.3.4.1/0003-erlang-enable-deterministic-builds.patch
create mode 100644 package/erlang/22.3.4.1/0004-disksup-update-df-call-to-work-with-Busybox.patch
create mode 100644 package/erlang/23.1.1/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
create mode 100644 package/erlang/23.1.1/0002-erts-emulator-reorder-inclued-headers-paths.patch
create mode 100644 package/erlang/23.1.1/0003-erlang-enable-deterministic-builds.patch
create mode 100644 package/erlang/23.1.1/0004-disksup-update-df-call-to-work-with-Busybox.patch
diff --git a/package/erlang/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch b/package/erlang/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
deleted file mode 100644
index 8e401430fe..0000000000
--- a/package/erlang/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 439fa2eae78a8900bda120072335be19d626498c Mon Sep 17 00:00:00 2001
-From: "Yann E. MORIN" <yann.morin.1998@free.fr>
-Date: Sun, 28 Dec 2014 23:39:40 +0100
-Subject: [PATCH] erts/ethread: instruct libatomic_ops we do require CAS
-
-We do require compare-and-swap (CAS), so we must instruct libatomic_ops
-to provide it, even if the architecture does not have instructions for
-it.
-
-For example, on ARM, LDREX is required for fast CAS. But LDREX is only
-available on ARMv6, so by default libatomic_ops will not have CAS for
-anything below, like ARMv5. But ARMv5 is always UP, so using an
-emulated CAS (that is signal-asyn-safe) is still possible (albeit much
-slower).
-
-Tell libatomic_ops to provide CAS, even if the hardware is not capable
-of it, by using emulated CAS, as per libatomic_ops dosc:
- https://github.com/ivmai/libatomic_ops/blob/master/doc/README.txt#L28
-
- If this is included after defining AO_REQUIRE_CAS, then the package
- will make an attempt to emulate compare-and-swap in a way that (at
- least on Linux) should still be async-signal-safe.
-
-Thanks go to Thomas for all this insight! :-)
-Thanks go to Frank for reporting the issue! :-)
-
-Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
-Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-Cc: Frank Hunleth <fhunleth@troodon-software.com>
----
- erts/include/internal/libatomic_ops/ethread.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/erts/include/internal/libatomic_ops/ethread.h b/erts/include/internal/libatomic_ops/ethread.h
-index d65ee19..71d3598 100644
---- a/erts/include/internal/libatomic_ops/ethread.h
-+++ b/erts/include/internal/libatomic_ops/ethread.h
-@@ -35,6 +35,7 @@
-
- #define ETHR_NATIVE_IMPL__ "libatomic_ops"
-
-+#define AO_REQUIRE_CAS
- #include "atomic_ops.h"
- #include "ethr_membar.h"
- #include "ethr_atomic.h"
-diff --git a/erts/aclocal.m4 b/erts/aclocal.m4
-index d65ee19..71d3598 100644
---- a/erts/aclocal.m4
-+++ b/erts/aclocal.m4
-@@ -1414,7 +1414,8 @@
- fi;;
- esac
- ethr_have_libatomic_ops=no
-- AC_TRY_LINK([#include "atomic_ops.h"],
-+ AC_TRY_LINK([#define AO_REQUIRE_CAS
-+ #include "atomic_ops.h"],
- [
- volatile AO_t x;
- AO_t y;
-@@ -1455,6 +1455,7 @@
- AC_CHECK_SIZEOF(AO_t, ,
- [
- #include <stdio.h>
-+ #define AO_REQUIRE_CAS
- #include "atomic_ops.h"
- ])
- AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used])
---
-1.9.1
-
diff --git a/package/erlang/0002-erts-emulator-reorder-inclued-headers-paths.patch b/package/erlang/0002-erts-emulator-reorder-inclued-headers-paths.patch
deleted file mode 100644
index 7a6e469dff..0000000000
--- a/package/erlang/0002-erts-emulator-reorder-inclued-headers-paths.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 85a3e5b4f65e5284e59dcdd90e92ea7d50ef6907 Mon Sep 17 00:00:00 2001
-From: Romain Naour <romain.naour@openwide.fr>
-Date: Sun, 8 Feb 2015 17:23:13 +0100
-Subject: [PATCH] erts/emulator: reorder inclued headers paths
-
-If the Perl Compatible Regular Expressions is installed on the
-host and the path to the headers is added to the CFLAGS, the
-pcre.h from the host is used instead of the one provided by
-erlang.
-
-Erlang use an old version of this file which is incompatible
-with the upstream one.
-
-Move INCLUDES before CFLAGS to use pcre.h from erlang.
-
-http://autobuild.buildroot.net/results/cbd/cbd8b54eef535f19d7d400fd269af1b3571d6143/build-end.log
-
-Signed-off-by: Romain Naour <romain.naour@openwide.fr>
-[Bernd: rebased for erlang-21.0]
-Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
----
- erts/emulator/Makefile.in | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
-index 7145824..d079487 100644
---- a/erts/emulator/Makefile.in
-+++ b/erts/emulator/Makefile.in
-@@ -712,7 +712,7 @@
- # Usually the same as the default rule, but certain platforms (e.g. win32) mix
- # different compilers
- $(OBJDIR)/beam_emu.o: beam/beam_emu.c
-- $(V_EMU_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
-+ $(V_EMU_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
-
- $(OBJDIR)/beam_emu.S: beam/beam_emu.c
- $(V_EMU_CC) -S -fverbose-asm $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
-@@ -765,7 +765,7 @@
- # General targets
- #
- $(OBJDIR)/%.o: beam/%.c
-- $(V_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
-+ $(V_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
-
- $(OBJDIR)/%.o: $(TARGET)/%.c
- $(V_CC) $(CFLAGS) $(INCLUDES) -Idrivers/common -c $< -o $@
diff --git a/package/erlang/20.3.8.9/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch b/package/erlang/20.3.8.9/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
new file mode 100644
index 0000000000..8e401430fe
--- /dev/null
+++ b/package/erlang/20.3.8.9/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
@@ -0,0 +1,70 @@
+From 439fa2eae78a8900bda120072335be19d626498c Mon Sep 17 00:00:00 2001
+From: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Date: Sun, 28 Dec 2014 23:39:40 +0100
+Subject: [PATCH] erts/ethread: instruct libatomic_ops we do require CAS
+
+We do require compare-and-swap (CAS), so we must instruct libatomic_ops
+to provide it, even if the architecture does not have instructions for
+it.
+
+For example, on ARM, LDREX is required for fast CAS. But LDREX is only
+available on ARMv6, so by default libatomic_ops will not have CAS for
+anything below, like ARMv5. But ARMv5 is always UP, so using an
+emulated CAS (that is signal-asyn-safe) is still possible (albeit much
+slower).
+
+Tell libatomic_ops to provide CAS, even if the hardware is not capable
+of it, by using emulated CAS, as per libatomic_ops dosc:
+ https://github.com/ivmai/libatomic_ops/blob/master/doc/README.txt#L28
+
+ If this is included after defining AO_REQUIRE_CAS, then the package
+ will make an attempt to emulate compare-and-swap in a way that (at
+ least on Linux) should still be async-signal-safe.
+
+Thanks go to Thomas for all this insight! :-)
+Thanks go to Frank for reporting the issue! :-)
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Cc: Frank Hunleth <fhunleth@troodon-software.com>
+---
+ erts/include/internal/libatomic_ops/ethread.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/erts/include/internal/libatomic_ops/ethread.h b/erts/include/internal/libatomic_ops/ethread.h
+index d65ee19..71d3598 100644
+--- a/erts/include/internal/libatomic_ops/ethread.h
++++ b/erts/include/internal/libatomic_ops/ethread.h
+@@ -35,6 +35,7 @@
+
+ #define ETHR_NATIVE_IMPL__ "libatomic_ops"
+
++#define AO_REQUIRE_CAS
+ #include "atomic_ops.h"
+ #include "ethr_membar.h"
+ #include "ethr_atomic.h"
+diff --git a/erts/aclocal.m4 b/erts/aclocal.m4
+index d65ee19..71d3598 100644
+--- a/erts/aclocal.m4
++++ b/erts/aclocal.m4
+@@ -1414,7 +1414,8 @@
+ fi;;
+ esac
+ ethr_have_libatomic_ops=no
+- AC_TRY_LINK([#include "atomic_ops.h"],
++ AC_TRY_LINK([#define AO_REQUIRE_CAS
++ #include "atomic_ops.h"],
+ [
+ volatile AO_t x;
+ AO_t y;
+@@ -1455,6 +1455,7 @@
+ AC_CHECK_SIZEOF(AO_t, ,
+ [
+ #include <stdio.h>
++ #define AO_REQUIRE_CAS
+ #include "atomic_ops.h"
+ ])
+ AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used])
+--
+1.9.1
+
diff --git a/package/erlang/20.3.8.9/0002-erts-emulator-reorder-inclued-headers-paths.patch b/package/erlang/20.3.8.9/0002-erts-emulator-reorder-inclued-headers-paths.patch
new file mode 100644
index 0000000000..c17eefc2a1
--- /dev/null
+++ b/package/erlang/20.3.8.9/0002-erts-emulator-reorder-inclued-headers-paths.patch
@@ -0,0 +1,43 @@
+From 85a3e5b4f65e5284e59dcdd90e92ea7d50ef6907 Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@openwide.fr>
+Date: Sun, 8 Feb 2015 17:23:13 +0100
+Subject: [PATCH] erts/emulator: reorder inclued headers paths
+
+If the Perl Compatible Regular Expressions is installed on the
+host and the path to the headers is added to the CFLAGS, the
+pcre.h from the host is used instead of the one provided by
+erlang.
+
+Erlang use an old version of this file which is incompatible
+with the upstream one.
+
+Move INCLUDES before CFLAGS to use pcre.h from erlang.
+
+http://autobuild.buildroot.net/results/cbd/cbd8b54eef535f19d7d400fd269af1b3571d6143/build-end.log
+
+Signed-off-by: Romain Naour <romain.naour@openwide.fr>
+---
+ erts/emulator/Makefile.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
+index 7145824..d079487 100644
+--- a/erts/emulator/Makefile.in
++++ b/erts/emulator/Makefile.in
+@@ -678,11 +678,11 @@ else
+ # Usually the same as the default rule, but certain platforms (e.g. win32) mix
+ # different compilers
+ $(OBJDIR)/beam_emu.o: beam/beam_emu.c
+- $(V_EMU_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
++ $(V_EMU_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
+ endif
+
+ $(OBJDIR)/%.o: beam/%.c
+- $(V_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
++ $(V_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
+
+ $(OBJDIR)/%.o: $(TARGET)/%.c
+ $(V_CC) $(CFLAGS) $(INCLUDES) -Idrivers/common -c $< -o $@
+--
+1.9.3
+
diff --git a/package/erlang/20.3.8.9/0003-Link-with-LDLIBS-instead-of-LIBS-for-DED.patch b/package/erlang/20.3.8.9/0003-Link-with-LDLIBS-instead-of-LIBS-for-DED.patch
new file mode 100644
index 0000000000..ad0bb6b453
--- /dev/null
+++ b/package/erlang/20.3.8.9/0003-Link-with-LDLIBS-instead-of-LIBS-for-DED.patch
@@ -0,0 +1,42 @@
+From 011752ec7b31e3dde376270fc65c7ee70644f6e7 Mon Sep 17 00:00:00 2001
+From: Johan Oudinet <johan.oudinet@gmail.com>
+Date: Wed, 6 Dec 2017 15:01:17 +0100
+Subject: [PATCH] Link with LDLIBS instead of LIBS for DED
+
+Fix ERL-529 by avoiding to link with libz for no reason.
+
+Signed-off-by: Johan Oudinet <johan.oudinet@gmail.com>
+---
+ lib/asn1/c_src/Makefile | 2 +-
+ lib/runtime_tools/c_src/Makefile.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/asn1/c_src/Makefile b/lib/asn1/c_src/Makefile
+index 1f714df357..f7c6b8b9bc 100644
+--- a/lib/asn1/c_src/Makefile
++++ b/lib/asn1/c_src/Makefile
+@@ -126,7 +126,7 @@ $(NIF_LIB_FILE): $(NIF_STATIC_OBJ_FILES)
+ $(V_RANLIB) $@
+
+ $(NIF_SHARED_OBJ_FILE): $(NIF_OBJ_FILES)
+- $(V_LD) $(LDFLAGS) -o $(NIF_SHARED_OBJ_FILE) $(NIF_OBJ_FILES) $(CLIB_FLAGS) $(LIBS)
++ $(V_LD) $(LDFLAGS) -o $(NIF_SHARED_OBJ_FILE) $(NIF_OBJ_FILES) $(CLIB_FLAGS) $(LDLIBS)
+
+ # ----------------------------------------------------
+ # Release Target
+diff --git a/lib/runtime_tools/c_src/Makefile.in b/lib/runtime_tools/c_src/Makefile.in
+index 4530a83aee..4e13e0d789 100644
+--- a/lib/runtime_tools/c_src/Makefile.in
++++ b/lib/runtime_tools/c_src/Makefile.in
+@@ -95,7 +95,7 @@ $(OBJDIR)/%$(TYPEMARKER).o: %.c dyntrace_lttng.h
+ $(V_CC) -c -o $@ $(ALL_CFLAGS) $<
+
+ $(LIBDIR)/%$(TYPEMARKER).@DED_EXT@: $(OBJDIR)/%$(TYPEMARKER).o
+- $(V_LD) $(LDFLAGS) -o $@ $^ $(LIBS)
++ $(V_LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+
+ clean:
+ rm -f $(TRACE_LIBS)
+--
+2.14.1
+
diff --git a/package/erlang/21.3.8.4/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch b/package/erlang/21.3.8.4/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
new file mode 100644
index 0000000000..8e401430fe
--- /dev/null
+++ b/package/erlang/21.3.8.4/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
@@ -0,0 +1,70 @@
+From 439fa2eae78a8900bda120072335be19d626498c Mon Sep 17 00:00:00 2001
+From: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Date: Sun, 28 Dec 2014 23:39:40 +0100
+Subject: [PATCH] erts/ethread: instruct libatomic_ops we do require CAS
+
+We do require compare-and-swap (CAS), so we must instruct libatomic_ops
+to provide it, even if the architecture does not have instructions for
+it.
+
+For example, on ARM, LDREX is required for fast CAS. But LDREX is only
+available on ARMv6, so by default libatomic_ops will not have CAS for
+anything below, like ARMv5. But ARMv5 is always UP, so using an
+emulated CAS (that is signal-asyn-safe) is still possible (albeit much
+slower).
+
+Tell libatomic_ops to provide CAS, even if the hardware is not capable
+of it, by using emulated CAS, as per libatomic_ops dosc:
+ https://github.com/ivmai/libatomic_ops/blob/master/doc/README.txt#L28
+
+ If this is included after defining AO_REQUIRE_CAS, then the package
+ will make an attempt to emulate compare-and-swap in a way that (at
+ least on Linux) should still be async-signal-safe.
+
+Thanks go to Thomas for all this insight! :-)
+Thanks go to Frank for reporting the issue! :-)
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Cc: Frank Hunleth <fhunleth@troodon-software.com>
+---
+ erts/include/internal/libatomic_ops/ethread.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/erts/include/internal/libatomic_ops/ethread.h b/erts/include/internal/libatomic_ops/ethread.h
+index d65ee19..71d3598 100644
+--- a/erts/include/internal/libatomic_ops/ethread.h
++++ b/erts/include/internal/libatomic_ops/ethread.h
+@@ -35,6 +35,7 @@
+
+ #define ETHR_NATIVE_IMPL__ "libatomic_ops"
+
++#define AO_REQUIRE_CAS
+ #include "atomic_ops.h"
+ #include "ethr_membar.h"
+ #include "ethr_atomic.h"
+diff --git a/erts/aclocal.m4 b/erts/aclocal.m4
+index d65ee19..71d3598 100644
+--- a/erts/aclocal.m4
++++ b/erts/aclocal.m4
+@@ -1414,7 +1414,8 @@
+ fi;;
+ esac
+ ethr_have_libatomic_ops=no
+- AC_TRY_LINK([#include "atomic_ops.h"],
++ AC_TRY_LINK([#define AO_REQUIRE_CAS
++ #include "atomic_ops.h"],
+ [
+ volatile AO_t x;
+ AO_t y;
+@@ -1455,6 +1455,7 @@
+ AC_CHECK_SIZEOF(AO_t, ,
+ [
+ #include <stdio.h>
++ #define AO_REQUIRE_CAS
+ #include "atomic_ops.h"
+ ])
+ AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used])
+--
+1.9.1
+
diff --git a/package/erlang/21.3.8.4/0002-erts-emulator-reorder-inclued-headers-paths.patch b/package/erlang/21.3.8.4/0002-erts-emulator-reorder-inclued-headers-paths.patch
new file mode 100644
index 0000000000..7a6e469dff
--- /dev/null
+++ b/package/erlang/21.3.8.4/0002-erts-emulator-reorder-inclued-headers-paths.patch
@@ -0,0 +1,46 @@
+From 85a3e5b4f65e5284e59dcdd90e92ea7d50ef6907 Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@openwide.fr>
+Date: Sun, 8 Feb 2015 17:23:13 +0100
+Subject: [PATCH] erts/emulator: reorder inclued headers paths
+
+If the Perl Compatible Regular Expressions is installed on the
+host and the path to the headers is added to the CFLAGS, the
+pcre.h from the host is used instead of the one provided by
+erlang.
+
+Erlang use an old version of this file which is incompatible
+with the upstream one.
+
+Move INCLUDES before CFLAGS to use pcre.h from erlang.
+
+http://autobuild.buildroot.net/results/cbd/cbd8b54eef535f19d7d400fd269af1b3571d6143/build-end.log
+
+Signed-off-by: Romain Naour <romain.naour@openwide.fr>
+[Bernd: rebased for erlang-21.0]
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ erts/emulator/Makefile.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
+index 7145824..d079487 100644
+--- a/erts/emulator/Makefile.in
++++ b/erts/emulator/Makefile.in
+@@ -712,7 +712,7 @@
+ # Usually the same as the default rule, but certain platforms (e.g. win32) mix
+ # different compilers
+ $(OBJDIR)/beam_emu.o: beam/beam_emu.c
+- $(V_EMU_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
++ $(V_EMU_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
+
+ $(OBJDIR)/beam_emu.S: beam/beam_emu.c
+ $(V_EMU_CC) -S -fverbose-asm $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
+@@ -765,7 +765,7 @@
+ # General targets
+ #
+ $(OBJDIR)/%.o: beam/%.c
+- $(V_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
++ $(V_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
+
+ $(OBJDIR)/%.o: $(TARGET)/%.c
+ $(V_CC) $(CFLAGS) $(INCLUDES) -Idrivers/common -c $< -o $@
diff --git a/package/erlang/21.3.8.4/0003-Link-with-LDLIBS-instead-of-LIBS-for-DED.patch b/package/erlang/21.3.8.4/0003-Link-with-LDLIBS-instead-of-LIBS-for-DED.patch
new file mode 100644
index 0000000000..ad0bb6b453
--- /dev/null
+++ b/package/erlang/21.3.8.4/0003-Link-with-LDLIBS-instead-of-LIBS-for-DED.patch
@@ -0,0 +1,42 @@
+From 011752ec7b31e3dde376270fc65c7ee70644f6e7 Mon Sep 17 00:00:00 2001
+From: Johan Oudinet <johan.oudinet@gmail.com>
+Date: Wed, 6 Dec 2017 15:01:17 +0100
+Subject: [PATCH] Link with LDLIBS instead of LIBS for DED
+
+Fix ERL-529 by avoiding to link with libz for no reason.
+
+Signed-off-by: Johan Oudinet <johan.oudinet@gmail.com>
+---
+ lib/asn1/c_src/Makefile | 2 +-
+ lib/runtime_tools/c_src/Makefile.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/asn1/c_src/Makefile b/lib/asn1/c_src/Makefile
+index 1f714df357..f7c6b8b9bc 100644
+--- a/lib/asn1/c_src/Makefile
++++ b/lib/asn1/c_src/Makefile
+@@ -126,7 +126,7 @@ $(NIF_LIB_FILE): $(NIF_STATIC_OBJ_FILES)
+ $(V_RANLIB) $@
+
+ $(NIF_SHARED_OBJ_FILE): $(NIF_OBJ_FILES)
+- $(V_LD) $(LDFLAGS) -o $(NIF_SHARED_OBJ_FILE) $(NIF_OBJ_FILES) $(CLIB_FLAGS) $(LIBS)
++ $(V_LD) $(LDFLAGS) -o $(NIF_SHARED_OBJ_FILE) $(NIF_OBJ_FILES) $(CLIB_FLAGS) $(LDLIBS)
+
+ # ----------------------------------------------------
+ # Release Target
+diff --git a/lib/runtime_tools/c_src/Makefile.in b/lib/runtime_tools/c_src/Makefile.in
+index 4530a83aee..4e13e0d789 100644
+--- a/lib/runtime_tools/c_src/Makefile.in
++++ b/lib/runtime_tools/c_src/Makefile.in
+@@ -95,7 +95,7 @@ $(OBJDIR)/%$(TYPEMARKER).o: %.c dyntrace_lttng.h
+ $(V_CC) -c -o $@ $(ALL_CFLAGS) $<
+
+ $(LIBDIR)/%$(TYPEMARKER).@DED_EXT@: $(OBJDIR)/%$(TYPEMARKER).o
+- $(V_LD) $(LDFLAGS) -o $@ $^ $(LIBS)
++ $(V_LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+
+ clean:
+ rm -f $(TRACE_LIBS)
+--
+2.14.1
+
diff --git a/package/erlang/21.3.8.4/0004-erlang-enable-deterministic-builds.patch b/package/erlang/21.3.8.4/0004-erlang-enable-deterministic-builds.patch
new file mode 100644
index 0000000000..1a7e66eca5
--- /dev/null
+++ b/package/erlang/21.3.8.4/0004-erlang-enable-deterministic-builds.patch
@@ -0,0 +1,28 @@
+From 3e357a561042db278d77a6da04623af5e238cecc Mon Sep 17 00:00:00 2001
+From: Frank Hunleth <fhunleth@troodon-software.com>
+Date: Thu, 21 Mar 2019 20:49:54 -0400
+Subject: [PATCH] erlang: enable deterministic builds
+
+This adds the `+deterministic` compiler flag to the `erlc` calls to
+strip out absolute paths in compiled `.beam` files.
+
+Signed-off-by: Frank Hunleth <fhunleth@troodon-software.com>
+---
+ make/otp.mk.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/make/otp.mk.in b/make/otp.mk.in
+index fb573680c8..24acd87549 100644
+--- a/make/otp.mk.in
++++ b/make/otp.mk.in
+@@ -108,6 +108,7 @@ ifdef BOOTSTRAP
+ else
+ ERL_COMPILE_FLAGS += +debug_info
+ endif
++ERL_COMPILE_FLAGS += +deterministic
+ ERLC_WFLAGS = -W
+ ERLC = erlc $(ERLC_WFLAGS) $(ERLC_FLAGS)
+ ERL = erl -boot start_clean
+--
+2.17.1
+
diff --git a/package/erlang/22.3.4.1/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch b/package/erlang/22.3.4.1/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
new file mode 100644
index 0000000000..4d3dd75ce2
--- /dev/null
+++ b/package/erlang/22.3.4.1/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
@@ -0,0 +1,71 @@
+From 7040c252fb45e5423512094a1c9ca4a0a8fc77f0 Mon Sep 17 00:00:00 2001
+From: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Date: Sun, 28 Dec 2014 23:39:40 +0100
+Subject: [PATCH] erts/ethread: instruct libatomic_ops we do require CAS
+
+We do require compare-and-swap (CAS), so we must instruct libatomic_ops
+to provide it, even if the architecture does not have instructions for
+it.
+
+For example, on ARM, LDREX is required for fast CAS. But LDREX is only
+available on ARMv6, so by default libatomic_ops will not have CAS for
+anything below, like ARMv5. But ARMv5 is always UP, so using an
+emulated CAS (that is signal-asyn-safe) is still possible (albeit much
+slower).
+
+Tell libatomic_ops to provide CAS, even if the hardware is not capable
+of it, by using emulated CAS, as per libatomic_ops dosc:
+ https://github.com/ivmai/libatomic_ops/blob/master/doc/README.txt#L28
+
+ If this is included after defining AO_REQUIRE_CAS, then the package
+ will make an attempt to emulate compare-and-swap in a way that (at
+ least on Linux) should still be async-signal-safe.
+
+Thanks go to Thomas for all this insight! :-)
+Thanks go to Frank for reporting the issue! :-)
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Cc: Frank Hunleth <fhunleth@troodon-software.com>
+---
+ erts/aclocal.m4 | 4 +++-
+ erts/include/internal/libatomic_ops/ethread.h | 1 +
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/erts/aclocal.m4 b/erts/aclocal.m4
+index 0ca2755802..a1843dbc40 100644
+--- a/erts/aclocal.m4
++++ b/erts/aclocal.m4
+@@ -1978,7 +1978,8 @@ case "$THR_LIB_NAME" in
+ fi;;
+ esac
+ ethr_have_libatomic_ops=no
+- AC_TRY_LINK([#include "atomic_ops.h"],
++ AC_TRY_LINK([#define AO_REQUIRE_CAS
++ #include "atomic_ops.h"],
+ [
+ volatile AO_t x;
+ AO_t y;
+@@ -2019,6 +2020,7 @@ case "$THR_LIB_NAME" in
+ AC_CHECK_SIZEOF(AO_t, ,
+ [
+ #include <stdio.h>
++ #define AO_REQUIRE_CAS
+ #include "atomic_ops.h"
+ ])
+ AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used])
+diff --git a/erts/include/internal/libatomic_ops/ethread.h b/erts/include/internal/libatomic_ops/ethread.h
+index 4adc31ed2a..18cc22a8ad 100644
+--- a/erts/include/internal/libatomic_ops/ethread.h
++++ b/erts/include/internal/libatomic_ops/ethread.h
+@@ -36,6 +36,7 @@
+
+ #define ETHR_NATIVE_IMPL__ "libatomic_ops"
+
++#define AO_REQUIRE_CAS
+ #include "atomic_ops.h"
+ #include "ethr_membar.h"
+ #include "ethr_atomic.h"
+--
+2.17.1
+
diff --git a/package/erlang/22.3.4.1/0002-erts-emulator-reorder-inclued-headers-paths.patch b/package/erlang/22.3.4.1/0002-erts-emulator-reorder-inclued-headers-paths.patch
new file mode 100644
index 0000000000..7f2585870a
--- /dev/null
+++ b/package/erlang/22.3.4.1/0002-erts-emulator-reorder-inclued-headers-paths.patch
@@ -0,0 +1,49 @@
+From 2142338c7a82360087a21dc71cfdad777d43e6a8 Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@openwide.fr>
+Date: Sun, 8 Feb 2015 17:23:13 +0100
+Subject: [PATCH] erts/emulator: reorder inclued headers paths
+
+If the Perl Compatible Regular Expressions is installed on the
+host and the path to the headers is added to the CFLAGS, the
+pcre.h from the host is used instead of the one provided by
+erlang.
+
+Erlang use an old version of this file which is incompatible
+with the upstream one.
+
+Move INCLUDES before CFLAGS to use pcre.h from erlang.
+
+http://autobuild.buildroot.net/results/cbd/cbd8b54eef535f19d7d400fd269af1b3571d6143/build-end.log
+
+Signed-off-by: Romain Naour <romain.naour@openwide.fr>
+[Bernd: rebased for erlang-21.0]
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ erts/emulator/Makefile.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
+index a9f3bb8e89..e6eb231b37 100644
+--- a/erts/emulator/Makefile.in
++++ b/erts/emulator/Makefile.in
+@@ -725,7 +725,7 @@ endif
+ # Usually the same as the default rule, but certain platforms (e.g. win32) mix
+ # different compilers
+ $(OBJDIR)/beam_emu.o: beam/beam_emu.c
+- $(V_EMU_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
++ $(V_EMU_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
+
+ $(OBJDIR)/beam_emu.S: beam/beam_emu.c
+ $(V_EMU_CC) -S -fverbose-asm $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
+@@ -778,7 +778,7 @@ endif
+ # General targets
+ #
+ $(OBJDIR)/%.o: beam/%.c
+- $(V_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
++ $(V_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
+
+ $(OBJDIR)/%.o: $(TARGET)/%.c
+ $(V_CC) $(CFLAGS) $(INCLUDES) -Idrivers/common -c $< -o $@
+--
+2.17.1
+
diff --git a/package/erlang/22.3.4.1/0003-erlang-enable-deterministic-builds.patch b/package/erlang/22.3.4.1/0003-erlang-enable-deterministic-builds.patch
new file mode 100644
index 0000000000..043c6f48c6
--- /dev/null
+++ b/package/erlang/22.3.4.1/0003-erlang-enable-deterministic-builds.patch
@@ -0,0 +1,28 @@
+From fed869414aa22aeea1c6e971a0600df3d5d0077e Mon Sep 17 00:00:00 2001
+From: Frank Hunleth <fhunleth@troodon-software.com>
+Date: Thu, 21 Mar 2019 20:49:54 -0400
+Subject: [PATCH] erlang: enable deterministic builds
+
+This adds the `+deterministic` compiler flag to the `erlc` calls to
+strip out absolute paths in compiled `.beam` files.
+
+Signed-off-by: Frank Hunleth <fhunleth@troodon-software.com>
+---
+ make/otp.mk.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/make/otp.mk.in b/make/otp.mk.in
+index 63748c2f2b..c31cbfe971 100644
+--- a/make/otp.mk.in
++++ b/make/otp.mk.in
+@@ -114,6 +114,7 @@ ifeq ($(USE_ESOCK),yes)
+ ERL_COMPILE_FLAGS += -DUSE_ESOCK=true
+ endif
+
++ERL_COMPILE_FLAGS += +deterministic
+ ERLC_WFLAGS = -W
+ ERLC = erlc $(ERLC_WFLAGS) $(ERLC_FLAGS)
+ ERL = erl -boot start_clean
+--
+2.17.1
+
diff --git a/package/erlang/22.3.4.1/0004-disksup-update-df-call-to-work-with-Busybox.patch b/package/erlang/22.3.4.1/0004-disksup-update-df-call-to-work-with-Busybox.patch
new file mode 100644
index 0000000000..9f98c4ad82
--- /dev/null
+++ b/package/erlang/22.3.4.1/0004-disksup-update-df-call-to-work-with-Busybox.patch
@@ -0,0 +1,28 @@
+From 46b36f8b73b65b2697ec0fb499dd4af610e9ddd9 Mon Sep 17 00:00:00 2001
+From: Frank Hunleth <fhunleth@troodon-software.com>
+Date: Tue, 5 May 2020 21:19:01 -0400
+Subject: [PATCH] disksup: update df call to work with Busybox
+
+Busybox's df doesn't support `-x` and `-l` and this removes those
+options. Plus SquashFS filesystems are nice to view on Nerves so we
+don't want to exclude them anyway.
+---
+ lib/os_mon/src/disksup.erl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/os_mon/src/disksup.erl b/lib/os_mon/src/disksup.erl
+index 4253067c90..971c017e14 100644
+--- a/lib/os_mon/src/disksup.erl
++++ b/lib/os_mon/src/disksup.erl
+@@ -264,7 +264,7 @@ check_disk_space({unix, irix}, Port, Threshold) ->
+ Result = my_cmd("/usr/sbin/df -lk",Port),
+ check_disks_irix(skip_to_eol(Result), Threshold);
+ check_disk_space({unix, linux}, Port, Threshold) ->
+- Result = my_cmd("/bin/df -lk -x squashfs", Port),
++ Result = my_cmd("/bin/df -k", Port),
+ check_disks_solaris(skip_to_eol(Result), Threshold);
+ check_disk_space({unix, posix}, Port, Threshold) ->
+ Result = my_cmd("df -k -P", Port),
+--
+2.20.1
+
diff --git a/package/erlang/23.1.1/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch b/package/erlang/23.1.1/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
new file mode 100644
index 0000000000..4d3dd75ce2
--- /dev/null
+++ b/package/erlang/23.1.1/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch
@@ -0,0 +1,71 @@
+From 7040c252fb45e5423512094a1c9ca4a0a8fc77f0 Mon Sep 17 00:00:00 2001
+From: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Date: Sun, 28 Dec 2014 23:39:40 +0100
+Subject: [PATCH] erts/ethread: instruct libatomic_ops we do require CAS
+
+We do require compare-and-swap (CAS), so we must instruct libatomic_ops
+to provide it, even if the architecture does not have instructions for
+it.
+
+For example, on ARM, LDREX is required for fast CAS. But LDREX is only
+available on ARMv6, so by default libatomic_ops will not have CAS for
+anything below, like ARMv5. But ARMv5 is always UP, so using an
+emulated CAS (that is signal-asyn-safe) is still possible (albeit much
+slower).
+
+Tell libatomic_ops to provide CAS, even if the hardware is not capable
+of it, by using emulated CAS, as per libatomic_ops dosc:
+ https://github.com/ivmai/libatomic_ops/blob/master/doc/README.txt#L28
+
+ If this is included after defining AO_REQUIRE_CAS, then the package
+ will make an attempt to emulate compare-and-swap in a way that (at
+ least on Linux) should still be async-signal-safe.
+
+Thanks go to Thomas for all this insight! :-)
+Thanks go to Frank for reporting the issue! :-)
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Cc: Frank Hunleth <fhunleth@troodon-software.com>
+---
+ erts/aclocal.m4 | 4 +++-
+ erts/include/internal/libatomic_ops/ethread.h | 1 +
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/erts/aclocal.m4 b/erts/aclocal.m4
+index 0ca2755802..a1843dbc40 100644
+--- a/erts/aclocal.m4
++++ b/erts/aclocal.m4
+@@ -1978,7 +1978,8 @@ case "$THR_LIB_NAME" in
+ fi;;
+ esac
+ ethr_have_libatomic_ops=no
+- AC_TRY_LINK([#include "atomic_ops.h"],
++ AC_TRY_LINK([#define AO_REQUIRE_CAS
++ #include "atomic_ops.h"],
+ [
+ volatile AO_t x;
+ AO_t y;
+@@ -2019,6 +2020,7 @@ case "$THR_LIB_NAME" in
+ AC_CHECK_SIZEOF(AO_t, ,
+ [
+ #include <stdio.h>
++ #define AO_REQUIRE_CAS
+ #include "atomic_ops.h"
+ ])
+ AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used])
+diff --git a/erts/include/internal/libatomic_ops/ethread.h b/erts/include/internal/libatomic_ops/ethread.h
+index 4adc31ed2a..18cc22a8ad 100644
+--- a/erts/include/internal/libatomic_ops/ethread.h
++++ b/erts/include/internal/libatomic_ops/ethread.h
+@@ -36,6 +36,7 @@
+
+ #define ETHR_NATIVE_IMPL__ "libatomic_ops"
+
++#define AO_REQUIRE_CAS
+ #include "atomic_ops.h"
+ #include "ethr_membar.h"
+ #include "ethr_atomic.h"
+--
+2.17.1
+
diff --git a/package/erlang/23.1.1/0002-erts-emulator-reorder-inclued-headers-paths.patch b/package/erlang/23.1.1/0002-erts-emulator-reorder-inclued-headers-paths.patch
new file mode 100644
index 0000000000..7f2585870a
--- /dev/null
+++ b/package/erlang/23.1.1/0002-erts-emulator-reorder-inclued-headers-paths.patch
@@ -0,0 +1,49 @@
+From 2142338c7a82360087a21dc71cfdad777d43e6a8 Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@openwide.fr>
+Date: Sun, 8 Feb 2015 17:23:13 +0100
+Subject: [PATCH] erts/emulator: reorder inclued headers paths
+
+If the Perl Compatible Regular Expressions is installed on the
+host and the path to the headers is added to the CFLAGS, the
+pcre.h from the host is used instead of the one provided by
+erlang.
+
+Erlang use an old version of this file which is incompatible
+with the upstream one.
+
+Move INCLUDES before CFLAGS to use pcre.h from erlang.
+
+http://autobuild.buildroot.net/results/cbd/cbd8b54eef535f19d7d400fd269af1b3571d6143/build-end.log
+
+Signed-off-by: Romain Naour <romain.naour@openwide.fr>
+[Bernd: rebased for erlang-21.0]
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ erts/emulator/Makefile.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
+index a9f3bb8e89..e6eb231b37 100644
+--- a/erts/emulator/Makefile.in
++++ b/erts/emulator/Makefile.in
+@@ -725,7 +725,7 @@ endif
+ # Usually the same as the default rule, but certain platforms (e.g. win32) mix
+ # different compilers
+ $(OBJDIR)/beam_emu.o: beam/beam_emu.c
+- $(V_EMU_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
++ $(V_EMU_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
+
+ $(OBJDIR)/beam_emu.S: beam/beam_emu.c
+ $(V_EMU_CC) -S -fverbose-asm $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
+@@ -778,7 +778,7 @@ endif
+ # General targets
+ #
+ $(OBJDIR)/%.o: beam/%.c
+- $(V_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@
++ $(V_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@
+
+ $(OBJDIR)/%.o: $(TARGET)/%.c
+ $(V_CC) $(CFLAGS) $(INCLUDES) -Idrivers/common -c $< -o $@
+--
+2.17.1
+
diff --git a/package/erlang/23.1.1/0003-erlang-enable-deterministic-builds.patch b/package/erlang/23.1.1/0003-erlang-enable-deterministic-builds.patch
new file mode 100644
index 0000000000..043c6f48c6
--- /dev/null
+++ b/package/erlang/23.1.1/0003-erlang-enable-deterministic-builds.patch
@@ -0,0 +1,28 @@
+From fed869414aa22aeea1c6e971a0600df3d5d0077e Mon Sep 17 00:00:00 2001
+From: Frank Hunleth <fhunleth@troodon-software.com>
+Date: Thu, 21 Mar 2019 20:49:54 -0400
+Subject: [PATCH] erlang: enable deterministic builds
+
+This adds the `+deterministic` compiler flag to the `erlc` calls to
+strip out absolute paths in compiled `.beam` files.
+
+Signed-off-by: Frank Hunleth <fhunleth@troodon-software.com>
+---
+ make/otp.mk.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/make/otp.mk.in b/make/otp.mk.in
+index 63748c2f2b..c31cbfe971 100644
+--- a/make/otp.mk.in
++++ b/make/otp.mk.in
+@@ -114,6 +114,7 @@ ifeq ($(USE_ESOCK),yes)
+ ERL_COMPILE_FLAGS += -DUSE_ESOCK=true
+ endif
+
++ERL_COMPILE_FLAGS += +deterministic
+ ERLC_WFLAGS = -W
+ ERLC = erlc $(ERLC_WFLAGS) $(ERLC_FLAGS)
+ ERL = erl -boot start_clean
+--
+2.17.1
+
diff --git a/package/erlang/23.1.1/0004-disksup-update-df-call-to-work-with-Busybox.patch b/package/erlang/23.1.1/0004-disksup-update-df-call-to-work-with-Busybox.patch
new file mode 100644
index 0000000000..9f98c4ad82
--- /dev/null
+++ b/package/erlang/23.1.1/0004-disksup-update-df-call-to-work-with-Busybox.patch
@@ -0,0 +1,28 @@
+From 46b36f8b73b65b2697ec0fb499dd4af610e9ddd9 Mon Sep 17 00:00:00 2001
+From: Frank Hunleth <fhunleth@troodon-software.com>
+Date: Tue, 5 May 2020 21:19:01 -0400
+Subject: [PATCH] disksup: update df call to work with Busybox
+
+Busybox's df doesn't support `-x` and `-l` and this removes those
+options. Plus SquashFS filesystems are nice to view on Nerves so we
+don't want to exclude them anyway.
+---
+ lib/os_mon/src/disksup.erl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/os_mon/src/disksup.erl b/lib/os_mon/src/disksup.erl
+index 4253067c90..971c017e14 100644
+--- a/lib/os_mon/src/disksup.erl
++++ b/lib/os_mon/src/disksup.erl
+@@ -264,7 +264,7 @@ check_disk_space({unix, irix}, Port, Threshold) ->
+ Result = my_cmd("/usr/sbin/df -lk",Port),
+ check_disks_irix(skip_to_eol(Result), Threshold);
+ check_disk_space({unix, linux}, Port, Threshold) ->
+- Result = my_cmd("/bin/df -lk -x squashfs", Port),
++ Result = my_cmd("/bin/df -k", Port),
+ check_disks_solaris(skip_to_eol(Result), Threshold);
+ check_disk_space({unix, posix}, Port, Threshold) ->
+ Result = my_cmd("df -k -P", Port),
+--
+2.20.1
+
diff --git a/package/erlang/Config.in b/package/erlang/Config.in
index ab87eab6ff..17b97bed3d 100644
--- a/package/erlang/Config.in
+++ b/package/erlang/Config.in
@@ -36,6 +36,33 @@ config BR2_PACKAGE_ERLANG
if BR2_PACKAGE_ERLANG
+choice
+ bool "Erlang/OTP version"
+ default BR2_PACKAGE_ERLANG_23
+ help
+ Select the Erlang/OTP version
+
+config BR2_PACKAGE_ERLANG_20
+ bool "Erlang/OTP 20"
+ help
+ Use Erlang/OTP 20 (release may not include latest patches)
+
+config BR2_PACKAGE_ERLANG_21
+ bool "Erlang/OTP 21"
+ help
+ Use Erlang/OTP 21 (release may not include latest patches)
+
+config BR2_PACKAGE_ERLANG_22
+ bool "Erlang/OTP 22"
+ help
+ Use Erlang/OTP 22 (release may not include latest patches)
+
+config BR2_PACKAGE_ERLANG_23
+ bool "Erlang/OTP 23"
+ help
+ Use the latest Erlang/OTP 23 release
+endchoice
+
config BR2_PACKAGE_ERLANG_MEGACO
bool "install megaco application"
help
diff --git a/package/erlang/erlang.hash b/package/erlang/erlang.hash
index 3c2f039496..00ffe5ec9d 100644
--- a/package/erlang/erlang.hash
+++ b/package/erlang/erlang.hash
@@ -1,4 +1,6 @@
-# md5 from http://www.erlang.org/download/MD5, sha256 locally computed
-md5 b2b48dad6e69c1e882843edbf2abcfd3 otp_src_22.2.tar.gz
-sha256 89c2480cdac566065577c82704a48e10f89cf2e6ca5ab99e1cf80027784c678f otp_src_22.2.tar.gz
+# sha256 locally computed
+sha256 8094484d94bce21d76f3a6c6137098839e7bc121e170c08b472f980296684ac9 OTP-23.1.1.tar.gz
+sha256 12d628c2d0bdc0cf1f1ec56bd3c4da697510b25ab744d45872f63fefdd1a7680 OTP-22.3.4.1.tar.gz
+sha256 a5d558cb189e026cd45114ffa9bb52752945e7e450c6e7e396b2e626e5fffcc8 OTP-21.3.8.4.tar.gz
+sha256 897dd8b66c901bfbce09ed64e0245256aca9e6e9bdf78c36954b9b7117192519 OTP-20.3.8.9.tar.gz
sha256 809fa1ed21450f59827d1e9aec720bbc4b687434fa22283c6cb5dd82a47ab9c0 LICENSE.txt
diff --git a/package/erlang/erlang.mk b/package/erlang/erlang.mk
index 836edf9bce..0fef4e48c3 100644
--- a/package/erlang/erlang.mk
+++ b/package/erlang/erlang.mk
@@ -5,7 +5,20 @@
################################################################################
# See note below when updating Erlang
-ERLANG_VERSION = 22.2
+ifeq ($(BR2_PACKAGE_ERLANG_20),y)
+ERLANG_VERSION = 20.3.8.9
+else
+ifeq ($(BR2_PACKAGE_ERLANG_21),y)
+ERLANG_VERSION = 21.3.8.4
+else
+ifeq ($(BR2_PACKAGE_ERLANG_22),y)
+ERLANG_VERSION = 22.3.4.1
+else
+ERLANG_VERSION = 23.1.1
+endif
+endif
+endif
+
ERLANG_SITE = https://github.com/erlang/otp/archive
ERLANG_SOURCE = OTP-$(ERLANG_VERSION).tar.gz
@@ -31,7 +44,19 @@ HOST_ERLANG_PRE_CONFIGURE_HOOKS += ERLANG_RUN_AUTOCONF
# Whenever updating Erlang, this value should be updated as well, to the
# value of EI_VSN in the file lib/erl_interface/vsn.mk
-ERLANG_EI_VSN = 3.13.1
+ifeq ($(BR2_PACKAGE_ERLANG_20),y)
+ERLANG_EI_VSN = 3.10.2.1
+else
+ifeq ($(BR2_PACKAGE_ERLANG_21),y)
+ERLANG_EI_VSN = 3.11.3
+else
+ifeq ($(BR2_PACKAGE_ERLANG_21),y)
+ERLANG_EI_VSN = 3.13.2
+else
+ERLANG_EI_VSN = 4.0.1
+endif
+endif
+endif
# The configure checks for these functions fail incorrectly
ERLANG_CONF_ENV = ac_cv_func_isnan=yes ac_cv_func_isinf=yes \
--
2.25.1