# 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_ARM_CPU_HAS_ARM) || \
		 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_ARM_CPU_HAS_ARM) || \
		 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_ARM_CPU_HAS_ARM) || \
		 BR2_i386 || BR2_x86_64)

config BR2_PACKAGE_LIBUNWIND
	bool "libunwind"
	depends on BR2_TOOLCHAIN_HAS_THREADS
	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 toolchain w/ threads"
	depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_HAS_THREADS
