+# libunwind is only available for a certain subset of the
+# architectures (as visible in the list of architectures supported
+# with the glibc C library below).
+#
+# In addition to this, on some architectures libunwind requires the
+# *context() function from the C library, which are only available on
+# certain architectures in uClibc, and not available at all on
+# musl. But on some other architectures, libunwind works without using
+# the *context() functions, which allows it to be built with musl.
+config BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
+ bool
+ default y if BR2_TOOLCHAIN_USES_GLIBC && \
+ (BR2_arm || BR2_armeb || BR2_mips || BR2_mipsel || BR2_mips64 || \
+ BR2_mips64el || BR2_powerpc || BR2_sh || BR2_sh64 || BR2_i386 || BR2_x86_64)
+ default y if BR2_TOOLCHAIN_USES_UCLIBC && \
+ (BR2_arm || BR2_armeb || BR2_i386 || BR2_mips || BR2_mipsel || \
+ BR2_mips64 || BR2_mips64el || BR2_x86_64)
+ default y if BR2_TOOLCHAIN_USES_MUSL && \
+ (BR2_arm || BR2_armeb || BR2_i386 || BR2_x86_64)
+
config BR2_PACKAGE_LIBUNWIND
bool "libunwind"
depends on BR2_TOOLCHAIN_HAS_THREADS
- depends on (BR2_UCLIBC_VERSION_SNAPSHOT || BR2_TOOLCHAIN_USES_GLIBC) # {g,s}etcontext
- depends on BR2_arm || BR2_armeb || BR2_mips || BR2_mipsel || BR2_mips64 || \
- BR2_mips64el || BR2_powerpc || BR2_sh || BR2_sh64 || BR2_i386 || BR2_x86_64
+ depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
help
C API to determine the call-chain of a program.
http://www.nongnu.org/libunwind/index.html
-comment "libunwind needs a uclibc snapshot or (e)glibc toolchain w/ threads"
- depends on BR2_arm || BR2_armeb || BR2_mips || BR2_mipsel || BR2_mips64 || \
- BR2_mips64el || BR2_powerpc || BR2_sh || BR2_sh64 || BR2_i386 || BR2_x86_64
- depends on !BR2_TOOLCHAIN_HAS_THREADS || !(BR2_UCLIBC_VERSION_SNAPSHOT || BR2_TOOLCHAIN_USES_GLIBC)
+comment "libunwind needs a toolchain w/ threads"
+ depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
+ depends on !BR2_TOOLCHAIN_HAS_THREADS